From 178ed210d0af36a73b5bd44c1808286a09069381 Mon Sep 17 00:00:00 2001 From: tdealtry Date: Tue, 30 Apr 2024 16:00:23 +0000 Subject: [PATCH] deploy: 154d26445204cd8f3264aefbe6df5cf2866a2727 --- .nojekyll | 0 CONTRIBUTING_8md.html | 83 + CombineMaCh3Chains_8cpp.html | 616 ++ CombineMaCh3Chains_8cpp_source.html | 394 + CovarianceUtils_8cpp.html | 112 + CovarianceUtils_8cpp_source.html | 214 + CovarianceUtils_8h.html | 130 + CovarianceUtils_8h_source.html | 134 + DiagMCMC_8cpp.html | 205 + DiagMCMC_8cpp_source.html | 158 + FDMCStruct_8h.html | 97 + FDMCStruct_8h_source.html | 214 + FitterBase_8cpp.html | 93 + FitterBase_8cpp_source.html | 1069 +++ FitterBase_8h.html | 105 + FitterBase_8h_source.html | 232 + GetPenaltyTerm_8cpp.html | 674 ++ GetPenaltyTerm_8cpp_source.html | 508 ++ GetPostfitParamPlots_8cpp.html | 2088 +++++ GetPostfitParamPlots_8cpp_source.html | 1162 +++ LikelihoodFit_8cpp.html | 90 + LikelihoodFit_8cpp_source.html | 284 + LikelihoodFit_8h.html | 98 + LikelihoodFit_8h_source.html | 130 + MCMCProcessor_8cpp.html | 90 + MCMCProcessor_8cpp_source.html | 4841 +++++++++++ MCMCProcessor_8h.html | 205 + MCMCProcessor_8h_source.html | 680 ++ MaCh3Logger_8h.html | 266 + MaCh3Logger_8h_source.html | 120 + MinuitFit_8cpp.html | 90 + MinuitFit_8cpp_source.html | 308 + MinuitFit_8h.html | 101 + MinuitFit_8h_source.html | 123 + Monitor_8cpp.html | 119 + Monitor_8cpp_source.html | 340 + Monitor_8h.html | 131 + Monitor_8h_source.html | 144 + OscClass__CUDAProb3_8cpp.html | 90 + OscClass__CUDAProb3_8cpp_source.html | 2030 +++++ OscClass__CUDAProb3_8h.html | 136 + OscClass__CUDAProb3_8h_source.html | 492 ++ PSO_8cpp.html | 90 + PSO_8cpp_source.html | 724 ++ PSO_8h.html | 103 + PSO_8h_source.html | 345 + PlotLLH_8cpp.html | 1457 ++++ PlotLLH_8cpp_source.html | 862 ++ ProcessMCMC_8cpp.html | 1231 +++ ProcessMCMC_8cpp_source.html | 853 ++ README_8md.html | 83 + RHat_8cpp.html | 1612 ++++ RHat_8cpp_source.html | 1005 +++ ShiftFunctors_8h.html | 102 + ShiftFunctors_8h_source.html | 156 + SplineMonolith_8cpp.html | 90 + SplineMonolith_8cpp_source.html | 1990 +++++ SplineMonolith_8h.html | 151 + SplineMonolith_8h_source.html | 298 + Structs_8cpp.html | 779 ++ Structs_8cpp_source.html | 553 ++ Structs_8h.html | 1790 ++++ Structs_8h_source.html | 1514 ++++ ThrowParms_8cpp.html | 90 + ThrowParms_8cpp_source.html | 217 + ThrowParms_8h.html | 109 + ThrowParms_8h_source.html | 142 + YamlHelper_8cpp.html | 270 + YamlHelper_8cpp_source.html | 171 + YamlHelper_8h.html | 553 ++ YamlHelper_8h_source.html | 195 + annotated.html | 124 + bc_s.png | Bin 0 -> 676 bytes bc_sd.png | Bin 0 -> 635 bytes classBaseFuncPar-members.html | 95 + classBaseFuncPar.html | 317 + classBaseFuncPar.png | Bin 0 -> 706 bytes classEnergyScale-members.html | 98 + classEnergyScale.html | 242 + classEnergyScale.png | Bin 0 -> 481 bytes classFitterBase-members.html | 125 + classFitterBase.html | 2179 +++++ classFitterBase.png | Bin 0 -> 928 bytes classLikelihoodFit-members.html | 133 + classLikelihoodFit.html | 714 ++ classLikelihoodFit.png | Bin 0 -> 778 bytes classMCMCProcessor-members.html | 261 + classMCMCProcessor.html | 9427 +++++++++++++++++++++ classMaCh3__Modes-members.html | 90 + classMaCh3__Modes.html | 210 + classMinuitFit-members.html | 136 + classMinuitFit.html | 607 ++ classMinuitFit.png | Bin 0 -> 597 bytes classOscillator-members.html | 215 + classOscillator.html | 5618 ++++++++++++ classPSO-members.html | 170 + classPSO.html | 2041 +++++ classPSO.png | Bin 0 -> 564 bytes classSKEScale-members.html | 95 + classSKEScale.html | 161 + classSKEScale.png | Bin 0 -> 464 bytes classSMonolith-members.html | 146 + classSMonolith.html | 3499 ++++++++ classTF1__red-members.html | 101 + classTF1__red.html | 670 ++ classTSpline3__red-members.html | 102 + classTSpline3__red.html | 1063 +++ classTSpline3__red.png | Bin 0 -> 566 bytes classThrowParms-members.html | 98 + classThrowParms.html | 533 ++ classTruncated__Spline-members.html | 105 + classTruncated__Spline.html | 381 + classTruncated__Spline.png | Bin 0 -> 564 bytes classXSecStruct-members.html | 97 + classXSecStruct.html | 507 ++ classXsecNorms4-members.html | 97 + classXsecNorms4.html | 297 + classcovarianceBase-members.html | 238 + classcovarianceBase.html | 6098 +++++++++++++ classcovarianceBase.png | Bin 0 -> 701 bytes classcovarianceOsc-members.html | 261 + classcovarianceOsc.html | 1400 +++ classcovarianceOsc.png | Bin 0 -> 501 bytes classcovarianceXsec-members.html | 277 + classcovarianceXsec.html | 2135 +++++ classcovarianceXsec.png | Bin 0 -> 505 bytes classes.html | 122 + classinterfacePDFEbE-members.html | 90 + classinterfacePDFEbE.html | 247 + classinterfacePDFEbE.png | Bin 0 -> 577 bytes classmanager-members.html | 96 + classmanager.html | 491 ++ classmcmc-members.html | 139 + classmcmc.html | 1074 +++ classmcmc.png | Bin 0 -> 391 bytes classparticle-members.html | 103 + classparticle.html | 638 ++ classsamplePDFBase-members.html | 141 + classsamplePDFBase.html | 2114 +++++ classsamplePDFBase.png | Bin 0 -> 841 bytes classsamplePDFFDBase-members.html | 212 + classsamplePDFFDBase.html | 3955 +++++++++ classsamplePDFFDBase.png | Bin 0 -> 1334 bytes classsamplePDFInterface-members.html | 102 + classsamplePDFInterface.html | 592 ++ classsamplePDFInterface.png | Bin 0 -> 847 bytes classspline-members.html | 99 + classspline.html | 559 ++ classsplineBase-members.html | 91 + classsplineBase.html | 271 + classsplineBase.png | Bin 0 -> 509 bytes classsplineFDBase-members.html | 148 + classsplineFDBase.html | 2766 ++++++ classsplineInterface-members.html | 87 + classsplineInterface.html | 137 + classsplineInterface.png | Bin 0 -> 516 bytes classstretch-members.html | 129 + classstretch.html | 1576 ++++ classtune-members.html | 94 + classtune.html | 374 + closed.png | Bin 0 -> 132 bytes covarianceBase_8cpp.html | 90 + covarianceBase_8cpp_source.html | 2150 +++++ covarianceBase_8h.html | 125 + covarianceBase_8h_source.html | 670 ++ covarianceOsc_8cpp.html | 90 + covarianceOsc_8cpp_source.html | 409 + covarianceOsc_8h.html | 98 + covarianceOsc_8h_source.html | 163 + covarianceXsec_8cpp.html | 90 + covarianceXsec_8cpp_source.html | 1069 +++ covarianceXsec_8h.html | 103 + covarianceXsec_8h_source.html | 248 + dir_335e938d2c12c5a13717c0a8a9316e75.html | 105 + dir_8ab82b4d49d905c57b21b814a783a10f.html | 119 + dir_9d1483aea13a0d690c9337bf5d7dafcd.html | 125 + dir_a3857b76c57a33866f3a59ae3b67734b.html | 109 + dir_ad7582af392f69120f12d3a638849ade.html | 111 + dir_ddd8689fa3d60c0bca74cd8eb27076fe.html | 95 + dir_f4fde8e27670e448c9f2b9269bfa4d83.html | 105 + doc.svg | 12 + docd.svg | 12 + doxygen.css | 2045 +++++ doxygen.svg | 28 + dynsections.js | 199 + files.html | 160 + folderclosed.svg | 11 + folderclosedd.svg | 11 + folderopen.svg | 17 + folderopend.svg | 12 + functions.html | 115 + functions_a.html | 107 + functions_b.html | 97 + functions_c.html | 147 + functions_d.html | 108 + functions_e.html | 103 + functions_enum.html | 83 + functions_eval.html | 86 + functions_f.html | 152 + functions_func.html | 95 + functions_func_b.html | 89 + functions_func_c.html | 111 + functions_func_d.html | 95 + functions_func_e.html | 89 + functions_func_f.html | 107 + functions_func_g.html | 222 + functions_func_i.html | 103 + functions_func_l.html | 88 + functions_func_m.html | 106 + functions_func_n.html | 88 + functions_func_o.html | 85 + functions_func_p.html | 113 + functions_func_r.html | 125 + functions_func_s.html | 188 + functions_func_t.html | 101 + functions_func_u.html | 91 + functions_func_v.html | 87 + functions_func_w.html | 85 + functions_func_x.html | 85 + functions_func_~.html | 108 + functions_g.html | 232 + functions_h.html | 102 + functions_i.html | 119 + functions_k.html | 94 + functions_l.html | 100 + functions_m.html | 123 + functions_n.html | 154 + functions_o.html | 107 + functions_p.html | 164 + functions_r.html | 141 + functions_s.html | 239 + functions_t.html | 115 + functions_u.html | 107 + functions_v.html | 90 + functions_vars.html | 115 + functions_vars_a.html | 96 + functions_vars_b.html | 92 + functions_vars_c.html | 120 + functions_vars_d.html | 97 + functions_vars_e.html | 98 + functions_vars_f.html | 129 + functions_vars_g.html | 94 + functions_vars_h.html | 102 + functions_vars_i.html | 100 + functions_vars_k.html | 90 + functions_vars_l.html | 96 + functions_vars_m.html | 101 + functions_vars_n.html | 150 + functions_vars_o.html | 107 + functions_vars_p.html | 135 + functions_vars_r.html | 100 + functions_vars_s.html | 134 + functions_vars_t.html | 98 + functions_vars_u.html | 100 + functions_vars_v.html | 87 + functions_vars_w.html | 85 + functions_vars_x.html | 100 + functions_vars_y.html | 89 + functions_w.html | 86 + functions_x.html | 101 + functions_y.html | 89 + functions_~.html | 108 + globals.html | 96 + globals_b.html | 87 + globals_c.html | 105 + globals_d.html | 91 + globals_defs.html | 103 + globals_e.html | 91 + globals_enum.html | 89 + globals_eval.html | 142 + globals_f.html | 97 + globals_func.html | 221 + globals_g.html | 94 + globals_i.html | 88 + globals_k.html | 122 + globals_l.html | 85 + globals_m.html | 113 + globals_n.html | 99 + globals_o.html | 88 + globals_p.html | 110 + globals_r.html | 94 + globals_s.html | 103 + globals_t.html | 97 + globals_type.html | 83 + globals_u.html | 86 + globals_v.html | 89 + globals_vars.html | 234 + globals_x.html | 85 + globals_y.html | 86 + gpuMCMCProcessorUtils_8cu.html | 89 + gpuMCMCProcessorUtils_8cu_source.html | 371 + gpuSplineUtils_8cu.html | 89 + gpuSplineUtils_8cu_source.html | 1017 +++ hierarchy.html | 125 + index.html | 88 + interfacePDFEbE_8cpp.html | 90 + interfacePDFEbE_8cpp_source.html | 94 + interfacePDFEbE_8h.html | 98 + interfacePDFEbE_8h_source.html | 113 + jquery.js | 34 + kdeGpu2_8cu.html | 89 + kdeGpu2_8cu_source.html | 380 + kdeGpu_8cu.html | 89 + kdeGpu_8cu_source.html | 217 + mach3logo.png | Bin 0 -> 226358 bytes mainpage_8md.html | 83 + manager_8cpp.html | 91 + manager_8cpp_source.html | 230 + manager_8h.html | 109 + manager_8h_source.html | 154 + mcmc_8cpp.html | 90 + mcmc_8cpp_source.html | 479 ++ mcmc_8h.html | 98 + mcmc_8h_source.html | 152 + md__2github_2workspace_2CONTRIBUTING.html | 108 + md__2github_2workspace_2README.html | 227 + menu.js | 136 + menudata.js | 180 + minus.svg | 8 + minusd.svg | 8 + namespaceMaCh3Utils.html | 883 ++ namespacemembers.html | 96 + namespacemembers_func.html | 95 + namespacemembers_vars.html | 84 + namespaces.html | 88 + nav_f.png | Bin 0 -> 153 bytes nav_fd.png | Bin 0 -> 169 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes nav_hd.png | Bin 0 -> 114 bytes open.png | Bin 0 -> 123 bytes pages.html | 89 + plus.svg | 9 + plusd.svg | 9 + probGpu_8cu.html | 89 + probGpu_8cu_source.html | 1653 ++++ samplePDFBase_8cpp.html | 90 + samplePDFBase_8cpp_source.html | 667 ++ samplePDFBase_8h.html | 115 + samplePDFBase_8h_source.html | 269 + samplePDFFDBase_8cpp.html | 90 + samplePDFFDBase_8cpp_source.html | 1703 ++++ samplePDFFDBase_8h.html | 146 + samplePDFFDBase_8h_source.html | 459 + samplePDFInterface_8h.html | 107 + samplePDFInterface_8h_source.html | 156 + search/all_0.js | 4 + search/all_1.js | 46 + search/all_10.js | 115 + search/all_11.js | 72 + search/all_12.js | 195 + search/all_13.js | 55 + search/all_14.js | 29 + search/all_15.js | 14 + search/all_16.js | 6 + search/all_17.js | 22 + search/all_18.js | 12 + search/all_19.js | 27 + search/all_2.js | 32 + search/all_3.js | 20 + search/all_4.js | 102 + search/all_5.js | 38 + search/all_6.js | 30 + search/all_7.js | 92 + search/all_8.js | 167 + search/all_9.js | 25 + search/all_a.js | 44 + search/all_b.js | 54 + search/all_c.js | 23 + search/all_d.js | 91 + search/all_e.js | 81 + search/all_f.js | 28 + search/classes_0.js | 5 + search/classes_1.js | 7 + search/classes_2.js | 4 + search/classes_3.js | 6 + search/classes_4.js | 4 + search/classes_5.js | 4 + search/classes_6.js | 8 + search/classes_7.js | 4 + search/classes_8.js | 5 + search/classes_9.js | 13 + search/classes_a.js | 8 + search/classes_b.js | 5 + search/close.svg | 18 + search/defines_0.js | 15 + search/defines_1.js | 4 + search/defines_2.js | 10 + search/defines_3.js | 4 + search/enums_0.js | 4 + search/enums_1.js | 4 + search/enums_2.js | 5 + search/enums_3.js | 5 + search/enums_4.js | 5 + search/enumvalues_0.js | 6 + search/enumvalues_1.js | 44 + search/enumvalues_2.js | 6 + search/enumvalues_3.js | 6 + search/files_0.js | 13 + search/files_1.js | 4 + search/files_2.js | 6 + search/files_3.js | 7 + search/files_4.js | 5 + search/files_5.js | 5 + search/files_6.js | 5 + search/files_7.js | 15 + search/files_8.js | 5 + search/files_9.js | 8 + search/files_a.js | 5 + search/files_b.js | 21 + search/files_c.js | 7 + search/files_d.js | 5 + search/functions_0.js | 14 + search/functions_1.js | 8 + search/functions_10.js | 26 + search/functions_11.js | 11 + search/functions_12.js | 6 + search/functions_13.js | 4 + search/functions_14.js | 4 + search/functions_15.js | 4 + search/functions_16.js | 27 + search/functions_2.js | 45 + search/functions_3.js | 17 + search/functions_4.js | 9 + search/functions_5.js | 30 + search/functions_6.js | 152 + search/functions_7.js | 23 + search/functions_8.js | 5 + search/functions_9.js | 7 + search/functions_a.js | 37 + search/functions_b.js | 9 + search/functions_c.js | 5 + search/functions_d.js | 45 + search/functions_e.js | 48 + search/functions_f.js | 112 + search/mag.svg | 24 + search/mag_d.svg | 24 + search/mag_sel.svg | 31 + search/mag_seld.svg | 31 + search/namespaces_0.js | 4 + search/pages_0.js | 4 + search/pages_1.js | 5 + search/pages_2.js | 6 + search/pages_3.js | 5 + search/pages_4.js | 4 + search/pages_5.js | 4 + search/pages_6.js | 7 + search/pages_7.js | 4 + search/pages_8.js | 4 + search/pages_9.js | 4 + search/pages_a.js | 4 + search/pages_b.js | 4 + search/search.css | 291 + search/search.js | 840 ++ search/searchdata.js | 45 + search/typedefs_0.js | 4 + search/variables_0.js | 34 + search/variables_1.js | 15 + search/variables_10.js | 23 + search/variables_11.js | 61 + search/variables_12.js | 20 + search/variables_13.js | 19 + search/variables_14.js | 11 + search/variables_15.js | 4 + search/variables_16.js | 20 + search/variables_17.js | 9 + search/variables_2.js | 13 + search/variables_3.js | 41 + search/variables_4.js | 19 + search/variables_5.js | 21 + search/variables_6.js | 56 + search/variables_7.js | 13 + search/variables_8.js | 21 + search/variables_9.js | 21 + search/variables_a.js | 10 + search/variables_b.js | 16 + search/variables_c.js | 28 + search/variables_d.js | 75 + search/variables_e.js | 25 + search/variables_f.js | 63 + splineBase_8cpp.html | 91 + splineBase_8cpp_source.html | 117 + splineBase_8h.html | 99 + splineBase_8h_source.html | 124 + splineFDBase_8cpp.html | 90 + splineFDBase_8cpp_source.html | 1213 +++ splineFDBase_8h.html | 122 + splineFDBase_8h_source.html | 292 + splineInterface_8h.html | 101 + splineInterface_8h_source.html | 113 + spline_8h.html | 120 + spline_8h_source.html | 191 + splitbar.png | Bin 0 -> 314 bytes splitbard.png | Bin 0 -> 282 bytes stretch_8cpp.html | 90 + stretch_8cpp_source.html | 454 + stretch_8h.html | 108 + stretch_8h_source.html | 233 + structBox-members.html | 88 + structBox.html | 135 + structCorner-members.html | 88 + structCorner.html | 135 + structFastSplineInfo-members.html | 90 + structFastSplineInfo.html | 171 + structfdmc__base-members.html | 129 + structfdmc__base.html | 873 ++ sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_ad.png | Bin 0 -> 135 bytes tab_b.png | Bin 0 -> 169 bytes tab_bd.png | Bin 0 -> 173 bytes tab_h.png | Bin 0 -> 177 bytes tab_hd.png | Bin 0 -> 180 bytes tab_s.png | Bin 0 -> 184 bytes tab_sd.png | Bin 0 -> 188 bytes tabs.css | 1 + tune_8cpp.html | 90 + tune_8cpp_source.html | 158 + tune_8h.html | 103 + tune_8h_source.html | 132 + 521 files changed, 136008 insertions(+) create mode 100644 .nojekyll create mode 100644 CONTRIBUTING_8md.html create mode 100644 CombineMaCh3Chains_8cpp.html create mode 100644 CombineMaCh3Chains_8cpp_source.html create mode 100644 CovarianceUtils_8cpp.html create mode 100644 CovarianceUtils_8cpp_source.html create mode 100644 CovarianceUtils_8h.html create mode 100644 CovarianceUtils_8h_source.html create mode 100644 DiagMCMC_8cpp.html create mode 100644 DiagMCMC_8cpp_source.html create mode 100644 FDMCStruct_8h.html create mode 100644 FDMCStruct_8h_source.html create mode 100644 FitterBase_8cpp.html create mode 100644 FitterBase_8cpp_source.html create mode 100644 FitterBase_8h.html create mode 100644 FitterBase_8h_source.html create mode 100644 GetPenaltyTerm_8cpp.html create mode 100644 GetPenaltyTerm_8cpp_source.html create mode 100644 GetPostfitParamPlots_8cpp.html create mode 100644 GetPostfitParamPlots_8cpp_source.html create mode 100644 LikelihoodFit_8cpp.html create mode 100644 LikelihoodFit_8cpp_source.html create mode 100644 LikelihoodFit_8h.html create mode 100644 LikelihoodFit_8h_source.html create mode 100644 MCMCProcessor_8cpp.html create mode 100644 MCMCProcessor_8cpp_source.html create mode 100644 MCMCProcessor_8h.html create mode 100644 MCMCProcessor_8h_source.html create mode 100644 MaCh3Logger_8h.html create mode 100644 MaCh3Logger_8h_source.html create mode 100644 MinuitFit_8cpp.html create mode 100644 MinuitFit_8cpp_source.html create mode 100644 MinuitFit_8h.html create mode 100644 MinuitFit_8h_source.html create mode 100644 Monitor_8cpp.html create mode 100644 Monitor_8cpp_source.html create mode 100644 Monitor_8h.html create mode 100644 Monitor_8h_source.html create mode 100644 OscClass__CUDAProb3_8cpp.html create mode 100644 OscClass__CUDAProb3_8cpp_source.html create mode 100644 OscClass__CUDAProb3_8h.html create mode 100644 OscClass__CUDAProb3_8h_source.html create mode 100644 PSO_8cpp.html create mode 100644 PSO_8cpp_source.html create mode 100644 PSO_8h.html create mode 100644 PSO_8h_source.html create mode 100644 PlotLLH_8cpp.html create mode 100644 PlotLLH_8cpp_source.html create mode 100644 ProcessMCMC_8cpp.html create mode 100644 ProcessMCMC_8cpp_source.html create mode 100644 README_8md.html create mode 100644 RHat_8cpp.html create mode 100644 RHat_8cpp_source.html create mode 100644 ShiftFunctors_8h.html create mode 100644 ShiftFunctors_8h_source.html create mode 100644 SplineMonolith_8cpp.html create mode 100644 SplineMonolith_8cpp_source.html create mode 100644 SplineMonolith_8h.html create mode 100644 SplineMonolith_8h_source.html create mode 100644 Structs_8cpp.html create mode 100644 Structs_8cpp_source.html create mode 100644 Structs_8h.html create mode 100644 Structs_8h_source.html create mode 100644 ThrowParms_8cpp.html create mode 100644 ThrowParms_8cpp_source.html create mode 100644 ThrowParms_8h.html create mode 100644 ThrowParms_8h_source.html create mode 100644 YamlHelper_8cpp.html create mode 100644 YamlHelper_8cpp_source.html create mode 100644 YamlHelper_8h.html create mode 100644 YamlHelper_8h_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bc_sd.png create mode 100644 classBaseFuncPar-members.html create mode 100644 classBaseFuncPar.html create mode 100644 classBaseFuncPar.png create mode 100644 classEnergyScale-members.html create mode 100644 classEnergyScale.html create mode 100644 classEnergyScale.png create mode 100644 classFitterBase-members.html create mode 100644 classFitterBase.html create mode 100644 classFitterBase.png create mode 100644 classLikelihoodFit-members.html create mode 100644 classLikelihoodFit.html create mode 100644 classLikelihoodFit.png create mode 100644 classMCMCProcessor-members.html create mode 100644 classMCMCProcessor.html create mode 100644 classMaCh3__Modes-members.html create mode 100644 classMaCh3__Modes.html create mode 100644 classMinuitFit-members.html create mode 100644 classMinuitFit.html create mode 100644 classMinuitFit.png create mode 100644 classOscillator-members.html create mode 100644 classOscillator.html create mode 100644 classPSO-members.html create mode 100644 classPSO.html create mode 100644 classPSO.png create mode 100644 classSKEScale-members.html create mode 100644 classSKEScale.html create mode 100644 classSKEScale.png create mode 100644 classSMonolith-members.html create mode 100644 classSMonolith.html create mode 100644 classTF1__red-members.html create mode 100644 classTF1__red.html create mode 100644 classTSpline3__red-members.html create mode 100644 classTSpline3__red.html create mode 100644 classTSpline3__red.png create mode 100644 classThrowParms-members.html create mode 100644 classThrowParms.html create mode 100644 classTruncated__Spline-members.html create mode 100644 classTruncated__Spline.html create mode 100644 classTruncated__Spline.png create mode 100644 classXSecStruct-members.html create mode 100644 classXSecStruct.html create mode 100644 classXsecNorms4-members.html create mode 100644 classXsecNorms4.html create mode 100644 classcovarianceBase-members.html create mode 100644 classcovarianceBase.html create mode 100644 classcovarianceBase.png create mode 100644 classcovarianceOsc-members.html create mode 100644 classcovarianceOsc.html create mode 100644 classcovarianceOsc.png create mode 100644 classcovarianceXsec-members.html create mode 100644 classcovarianceXsec.html create mode 100644 classcovarianceXsec.png create mode 100644 classes.html create mode 100644 classinterfacePDFEbE-members.html create mode 100644 classinterfacePDFEbE.html create mode 100644 classinterfacePDFEbE.png create mode 100644 classmanager-members.html create mode 100644 classmanager.html create mode 100644 classmcmc-members.html create mode 100644 classmcmc.html create mode 100644 classmcmc.png create mode 100644 classparticle-members.html create mode 100644 classparticle.html create mode 100644 classsamplePDFBase-members.html create mode 100644 classsamplePDFBase.html create mode 100644 classsamplePDFBase.png create mode 100644 classsamplePDFFDBase-members.html create mode 100644 classsamplePDFFDBase.html create mode 100644 classsamplePDFFDBase.png create mode 100644 classsamplePDFInterface-members.html create mode 100644 classsamplePDFInterface.html create mode 100644 classsamplePDFInterface.png create mode 100644 classspline-members.html create mode 100644 classspline.html create mode 100644 classsplineBase-members.html create mode 100644 classsplineBase.html create mode 100644 classsplineBase.png create mode 100644 classsplineFDBase-members.html create mode 100644 classsplineFDBase.html create mode 100644 classsplineInterface-members.html create mode 100644 classsplineInterface.html create mode 100644 classsplineInterface.png create mode 100644 classstretch-members.html create mode 100644 classstretch.html create mode 100644 classtune-members.html create mode 100644 classtune.html create mode 100644 closed.png create mode 100644 covarianceBase_8cpp.html create mode 100644 covarianceBase_8cpp_source.html create mode 100644 covarianceBase_8h.html create mode 100644 covarianceBase_8h_source.html create mode 100644 covarianceOsc_8cpp.html create mode 100644 covarianceOsc_8cpp_source.html create mode 100644 covarianceOsc_8h.html create mode 100644 covarianceOsc_8h_source.html create mode 100644 covarianceXsec_8cpp.html create mode 100644 covarianceXsec_8cpp_source.html create mode 100644 covarianceXsec_8h.html create mode 100644 covarianceXsec_8h_source.html create mode 100644 dir_335e938d2c12c5a13717c0a8a9316e75.html create mode 100644 dir_8ab82b4d49d905c57b21b814a783a10f.html create mode 100644 dir_9d1483aea13a0d690c9337bf5d7dafcd.html create mode 100644 dir_a3857b76c57a33866f3a59ae3b67734b.html create mode 100644 dir_ad7582af392f69120f12d3a638849ade.html create mode 100644 dir_ddd8689fa3d60c0bca74cd8eb27076fe.html create mode 100644 dir_f4fde8e27670e448c9f2b9269bfa4d83.html create mode 100644 doc.svg create mode 100644 docd.svg create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 folderclosed.svg create mode 100644 folderclosedd.svg create mode 100644 folderopen.svg create mode 100644 folderopend.svg create mode 100644 functions.html create mode 100644 functions_a.html create mode 100644 functions_b.html create mode 100644 functions_c.html create mode 100644 functions_d.html create mode 100644 functions_e.html create mode 100644 functions_enum.html create mode 100644 functions_eval.html create mode 100644 functions_f.html create mode 100644 functions_func.html create mode 100644 functions_func_b.html create mode 100644 functions_func_c.html create mode 100644 functions_func_d.html create mode 100644 functions_func_e.html create mode 100644 functions_func_f.html create mode 100644 functions_func_g.html create mode 100644 functions_func_i.html create mode 100644 functions_func_l.html create mode 100644 functions_func_m.html create mode 100644 functions_func_n.html create mode 100644 functions_func_o.html create mode 100644 functions_func_p.html create mode 100644 functions_func_r.html create mode 100644 functions_func_s.html create mode 100644 functions_func_t.html create mode 100644 functions_func_u.html create mode 100644 functions_func_v.html create mode 100644 functions_func_w.html create mode 100644 functions_func_x.html create mode 100644 functions_func_~.html create mode 100644 functions_g.html create mode 100644 functions_h.html create mode 100644 functions_i.html create mode 100644 functions_k.html create mode 100644 functions_l.html create mode 100644 functions_m.html create mode 100644 functions_n.html create mode 100644 functions_o.html create mode 100644 functions_p.html create mode 100644 functions_r.html create mode 100644 functions_s.html create mode 100644 functions_t.html create mode 100644 functions_u.html create mode 100644 functions_v.html create mode 100644 functions_vars.html create mode 100644 functions_vars_a.html create mode 100644 functions_vars_b.html create mode 100644 functions_vars_c.html create mode 100644 functions_vars_d.html create mode 100644 functions_vars_e.html create mode 100644 functions_vars_f.html create mode 100644 functions_vars_g.html create mode 100644 functions_vars_h.html create mode 100644 functions_vars_i.html create mode 100644 functions_vars_k.html create mode 100644 functions_vars_l.html create mode 100644 functions_vars_m.html create mode 100644 functions_vars_n.html create mode 100644 functions_vars_o.html create mode 100644 functions_vars_p.html create mode 100644 functions_vars_r.html create mode 100644 functions_vars_s.html create mode 100644 functions_vars_t.html create mode 100644 functions_vars_u.html create mode 100644 functions_vars_v.html create mode 100644 functions_vars_w.html create mode 100644 functions_vars_x.html create mode 100644 functions_vars_y.html create mode 100644 functions_w.html create mode 100644 functions_x.html create mode 100644 functions_y.html create mode 100644 functions_~.html create mode 100644 globals.html create mode 100644 globals_b.html create mode 100644 globals_c.html create mode 100644 globals_d.html create mode 100644 globals_defs.html create mode 100644 globals_e.html create mode 100644 globals_enum.html create mode 100644 globals_eval.html create mode 100644 globals_f.html create mode 100644 globals_func.html create mode 100644 globals_g.html create mode 100644 globals_i.html create mode 100644 globals_k.html create mode 100644 globals_l.html create mode 100644 globals_m.html create mode 100644 globals_n.html create mode 100644 globals_o.html create mode 100644 globals_p.html create mode 100644 globals_r.html create mode 100644 globals_s.html create mode 100644 globals_t.html create mode 100644 globals_type.html create mode 100644 globals_u.html create mode 100644 globals_v.html create mode 100644 globals_vars.html create mode 100644 globals_x.html create mode 100644 globals_y.html create mode 100644 gpuMCMCProcessorUtils_8cu.html create mode 100644 gpuMCMCProcessorUtils_8cu_source.html create mode 100644 gpuSplineUtils_8cu.html create mode 100644 gpuSplineUtils_8cu_source.html create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 interfacePDFEbE_8cpp.html create mode 100644 interfacePDFEbE_8cpp_source.html create mode 100644 interfacePDFEbE_8h.html create mode 100644 interfacePDFEbE_8h_source.html create mode 100644 jquery.js create mode 100644 kdeGpu2_8cu.html create mode 100644 kdeGpu2_8cu_source.html create mode 100644 kdeGpu_8cu.html create mode 100644 kdeGpu_8cu_source.html create mode 100644 mach3logo.png create mode 100644 mainpage_8md.html create mode 100644 manager_8cpp.html create mode 100644 manager_8cpp_source.html create mode 100644 manager_8h.html create mode 100644 manager_8h_source.html create mode 100644 mcmc_8cpp.html create mode 100644 mcmc_8cpp_source.html create mode 100644 mcmc_8h.html create mode 100644 mcmc_8h_source.html create mode 100644 md__2github_2workspace_2CONTRIBUTING.html create mode 100644 md__2github_2workspace_2README.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 minus.svg create mode 100644 minusd.svg create mode 100644 namespaceMaCh3Utils.html create mode 100644 namespacemembers.html create mode 100644 namespacemembers_func.html create mode 100644 namespacemembers_vars.html create mode 100644 namespaces.html create mode 100644 nav_f.png create mode 100644 nav_fd.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 nav_hd.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 plus.svg create mode 100644 plusd.svg create mode 100644 probGpu_8cu.html create mode 100644 probGpu_8cu_source.html create mode 100644 samplePDFBase_8cpp.html create mode 100644 samplePDFBase_8cpp_source.html create mode 100644 samplePDFBase_8h.html create mode 100644 samplePDFBase_8h_source.html create mode 100644 samplePDFFDBase_8cpp.html create mode 100644 samplePDFFDBase_8cpp_source.html create mode 100644 samplePDFFDBase_8h.html create mode 100644 samplePDFFDBase_8h_source.html create mode 100644 samplePDFInterface_8h.html create mode 100644 samplePDFInterface_8h_source.html create mode 100644 search/all_0.js create mode 100644 search/all_1.js create mode 100644 search/all_10.js create mode 100644 search/all_11.js create mode 100644 search/all_12.js create mode 100644 search/all_13.js create mode 100644 search/all_14.js create mode 100644 search/all_15.js create mode 100644 search/all_16.js create mode 100644 search/all_17.js create mode 100644 search/all_18.js create mode 100644 search/all_19.js create mode 100644 search/all_2.js create mode 100644 search/all_3.js create mode 100644 search/all_4.js create mode 100644 search/all_5.js create mode 100644 search/all_6.js create mode 100644 search/all_7.js create mode 100644 search/all_8.js create mode 100644 search/all_9.js create mode 100644 search/all_a.js create mode 100644 search/all_b.js create mode 100644 search/all_c.js create mode 100644 search/all_d.js create mode 100644 search/all_e.js create mode 100644 search/all_f.js create mode 100644 search/classes_0.js create mode 100644 search/classes_1.js create mode 100644 search/classes_2.js create mode 100644 search/classes_3.js create mode 100644 search/classes_4.js create mode 100644 search/classes_5.js create mode 100644 search/classes_6.js create mode 100644 search/classes_7.js create mode 100644 search/classes_8.js create mode 100644 search/classes_9.js create mode 100644 search/classes_a.js create mode 100644 search/classes_b.js create mode 100644 search/close.svg create mode 100644 search/defines_0.js create mode 100644 search/defines_1.js create mode 100644 search/defines_2.js create mode 100644 search/defines_3.js create mode 100644 search/enums_0.js create mode 100644 search/enums_1.js create mode 100644 search/enums_2.js create mode 100644 search/enums_3.js create mode 100644 search/enums_4.js create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.js create mode 100644 search/enumvalues_2.js create mode 100644 search/enumvalues_3.js create mode 100644 search/files_0.js create mode 100644 search/files_1.js create mode 100644 search/files_2.js create mode 100644 search/files_3.js create mode 100644 search/files_4.js create mode 100644 search/files_5.js create mode 100644 search/files_6.js create mode 100644 search/files_7.js create mode 100644 search/files_8.js create mode 100644 search/files_9.js create mode 100644 search/files_a.js create mode 100644 search/files_b.js create mode 100644 search/files_c.js create mode 100644 search/files_d.js create mode 100644 search/functions_0.js create mode 100644 search/functions_1.js create mode 100644 search/functions_10.js create mode 100644 search/functions_11.js create mode 100644 search/functions_12.js create mode 100644 search/functions_13.js create mode 100644 search/functions_14.js create mode 100644 search/functions_15.js create mode 100644 search/functions_16.js create mode 100644 search/functions_2.js create mode 100644 search/functions_3.js create mode 100644 search/functions_4.js create mode 100644 search/functions_5.js create mode 100644 search/functions_6.js create mode 100644 search/functions_7.js create mode 100644 search/functions_8.js create mode 100644 search/functions_9.js create mode 100644 search/functions_a.js create mode 100644 search/functions_b.js create mode 100644 search/functions_c.js create mode 100644 search/functions_d.js create mode 100644 search/functions_e.js create mode 100644 search/functions_f.js create mode 100644 search/mag.svg create mode 100644 search/mag_d.svg create mode 100644 search/mag_sel.svg create mode 100644 search/mag_seld.svg create mode 100644 search/namespaces_0.js create mode 100644 search/pages_0.js create mode 100644 search/pages_1.js create mode 100644 search/pages_2.js create mode 100644 search/pages_3.js create mode 100644 search/pages_4.js create mode 100644 search/pages_5.js create mode 100644 search/pages_6.js create mode 100644 search/pages_7.js create mode 100644 search/pages_8.js create mode 100644 search/pages_9.js create mode 100644 search/pages_a.js create mode 100644 search/pages_b.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/searchdata.js create mode 100644 search/typedefs_0.js create mode 100644 search/variables_0.js create mode 100644 search/variables_1.js create mode 100644 search/variables_10.js create mode 100644 search/variables_11.js create mode 100644 search/variables_12.js create mode 100644 search/variables_13.js create mode 100644 search/variables_14.js create mode 100644 search/variables_15.js create mode 100644 search/variables_16.js create mode 100644 search/variables_17.js create mode 100644 search/variables_2.js create mode 100644 search/variables_3.js create mode 100644 search/variables_4.js create mode 100644 search/variables_5.js create mode 100644 search/variables_6.js create mode 100644 search/variables_7.js create mode 100644 search/variables_8.js create mode 100644 search/variables_9.js create mode 100644 search/variables_a.js create mode 100644 search/variables_b.js create mode 100644 search/variables_c.js create mode 100644 search/variables_d.js create mode 100644 search/variables_e.js create mode 100644 search/variables_f.js create mode 100644 splineBase_8cpp.html create mode 100644 splineBase_8cpp_source.html create mode 100644 splineBase_8h.html create mode 100644 splineBase_8h_source.html create mode 100644 splineFDBase_8cpp.html create mode 100644 splineFDBase_8cpp_source.html create mode 100644 splineFDBase_8h.html create mode 100644 splineFDBase_8h_source.html create mode 100644 splineInterface_8h.html create mode 100644 splineInterface_8h_source.html create mode 100644 spline_8h.html create mode 100644 spline_8h_source.html create mode 100644 splitbar.png create mode 100644 splitbard.png create mode 100644 stretch_8cpp.html create mode 100644 stretch_8cpp_source.html create mode 100644 stretch_8h.html create mode 100644 stretch_8h_source.html create mode 100644 structBox-members.html create mode 100644 structBox.html create mode 100644 structCorner-members.html create mode 100644 structCorner.html create mode 100644 structFastSplineInfo-members.html create mode 100644 structFastSplineInfo.html create mode 100644 structfdmc__base-members.html create mode 100644 structfdmc__base.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_ad.png create mode 100644 tab_b.png create mode 100644 tab_bd.png create mode 100644 tab_h.png create mode 100644 tab_hd.png create mode 100644 tab_s.png create mode 100644 tab_sd.png create mode 100644 tabs.css create mode 100644 tune_8cpp.html create mode 100644 tune_8cpp_source.html create mode 100644 tune_8h.html create mode 100644 tune_8h_source.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/CONTRIBUTING_8md.html b/CONTRIBUTING_8md.html new file mode 100644 index 00000000..77a3bd18 --- /dev/null +++ b/CONTRIBUTING_8md.html @@ -0,0 +1,83 @@ + + + + + + + +MaCh3: /github/workspace/CONTRIBUTING.md File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
/github/workspace/CONTRIBUTING.md File Reference
+
+
+
+ + + + diff --git a/CombineMaCh3Chains_8cpp.html b/CombineMaCh3Chains_8cpp.html new file mode 100644 index 00000000..331704b6 --- /dev/null +++ b/CombineMaCh3Chains_8cpp.html @@ -0,0 +1,616 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/CombineMaCh3Chains.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
CombineMaCh3Chains.cpp File Reference
+
+
+
#include "TList.h"
+#include "TFile.h"
+#include "TMacro.h"
+#include "TTree.h"
+#include "TMD5.h"
+#include "TFileMerger.h"
+#include "TKey.h"
+#include "TROOT.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + +

+Functions

bool checkSoftwareVersions (TFile *file, TFile *prevFile, std::string ConfigName)
 EM: Will compare the version header contained in the two provided files and shout if they don't match.
 
void CopyDir (TDirectory *source)
 
void CombineChain ()
 
void usage ()
 
void ParseArg (int argc, char *argv[])
 
int main (int argc, char *argv[])
 
+ + + + + + + + + +

+Variables

std::string OutFileName = ""
 
int targetCompression = 1
 
std::vector< std::stringinpFileList
 
bool forceOverwrite = false
 
+

Function Documentation

+ +

◆ checkSoftwareVersions()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool checkSoftwareVersions (TFilefile,
TFileprevFile,
std::string ConfigName 
)
+
+ +

EM: Will compare the version header contained in the two provided files and shout if they don't match.

+ +

Definition at line 18 of file CombineMaCh3Chains.cpp.

+
19{
+
20 bool weirdFile = false;
+
21
+
22 TMacro *versionHeader = (TMacro*)file->Get(ConfigName.c_str());
+ +
24
+
25 // EM: compare the digest of the version header file in this file, with the previous one
+ +
27 MACH3LOG_WARN("files don't contain an embedded version header, indicating they were made before this feature was added");
+
28 MACH3LOG_WARN(" I can still combine them but I can't guarantee they were made with matching software versions");
+
29 MACH3LOG_WARN(" This is ok but you'll just have to be extra careful and make sure you check this yourself!");
+
30 }
+
31 else if((versionHeader != NULL) && (prevVersionHeader == NULL)){
+
32 MACH3LOG_ERROR("looks like file {} has a version header file but previous ones do not", file->GetName());
+
33 MACH3LOG_ERROR("This is odd and suggests this file was made with an MaCh3 version");
+
34 MACH3LOG_ERROR("from after this feature was added, whereas other files were made with an older MaCh3");
+
35 weirdFile = true;
+
36 }
+
37 else if((versionHeader == NULL) && (prevVersionHeader != NULL)){
+
38 MACH3LOG_ERROR("looks like file {} doesn't have a version header file but previous ones do", file->GetName());
+
39 MACH3LOG_ERROR("This is odd and suggests this file was made with an MaCh3 version");
+
40 MACH3LOG_ERROR("from before this feature was added, whereas other files were made with newer MaCh3");
+
41 weirdFile = true;
+
42 }
+
43 else{
+
44 MACH3LOG_DEBUG(" Prev header digest: {} :: current: {}", (prevVersionHeader->Checksum())->AsString(), (versionHeader->Checksum())->AsString());
+
45
+
46 if(std::strcmp((versionHeader->Checksum())->AsString(), (prevVersionHeader->Checksum())->AsString()) != 0){
+
47 MACH3LOG_ERROR("Looks like the version header for file {} is different to the previous ones", file->GetName());
+
48 MACH3LOG_ERROR("This strongly suggests that this file was made with different software versions than the previous ones");
+
49 weirdFile = true;
+
50 }
+
51 }
+
52 return weirdFile;
+
53}
+
#define MACH3LOG_DEBUG
Definition MaCh3Logger.h:8
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ CombineChain()

+ +
+
+ + + + + + + +
void CombineChain ()
+
+ +

Definition at line 91 of file CombineMaCh3Chains.cpp.

+
92{
+ +
94
+
95 // EM: If we ever add new trees to the chain files they will need to be added here too
+
96 fileMerger->AddObjectNames("posteriors");
+
97 fileMerger->AddObjectNames("Settings");
+
98
+
99 MACH3LOG_INFO("These objects will be merged: {}", fileMerger->GetObjectNames());
+
100
+
101 std::string outFileOption;
+
102 if(forceOverwrite) outFileOption = "RECREATE";
+
103 else outFileOption = "CREATE";
+
104
+
105 // EM: Attempt to open the output file
+
106 bool openedFile = fileMerger->OutputFile(OutFileName.c_str(), outFileOption.c_str(), targetCompression);
+
107 if (!openedFile){
+
108 MACH3LOG_ERROR("Failed to create output file.");
+
109 throw;
+
110 }
+
111
+
112 TFile *prevFile = nullptr;
+
113
+
114 // EM: loop through all the files in the provided list, compare the embedded version and config files
+
115 // If they match, we add the file to the list of files to be merged.
+
116 // If not, we throw an error and provide a (hopefully) helpful message telling the user why the files couldn't be merged.
+
117 for(uint fileId = 0; fileId < inpFileList.size(); fileId++)
+
118 {
+
119 std::string fileName = inpFileList[fileId];
+
120 TFile *file = new TFile(fileName.c_str());
+
121
+
122 if(file->Get<TTree>("posteriors")->GetEntries() == 0){
+
123 MACH3LOG_WARN("Hmmm, file {} Doesn't seem to have any entries", fileName.c_str());
+
124 MACH3LOG_WARN("That's weird but I guess there's no rule that says a file can't be empty");
+
125 MACH3LOG_WARN("I'll skip it but maybe double check that this doesn't indicate some deeper problem");
+
126 continue;
+
127 }
+
128
+
129 // EM: need to set this in the initial case
+
130 if(prevFile == nullptr) {
+
131 prevFile = file;
+
132 }
+
133
+
134 MACH3LOG_DEBUG("############ File {} #############", fileId);
+
135
+
136 bool weirdFile = false;
+
137
+
138
+
139 if(checkSoftwareVersions(file, prevFile, "MaCh3Engine/version_header"))
+
140 weirdFile = true;
+
141
+
142 if(checkSoftwareVersions(file, prevFile, "MaCh3_Config"))
+
143 weirdFile = true;
+
144
+
145 if(weirdFile){
+
146 MACH3LOG_ERROR("");
+
147 MACH3LOG_ERROR("=====================================================================================");
+
148 MACH3LOG_ERROR("This is not a great idea and could lead to weird outputs and cause some big headaches");
+
149 MACH3LOG_ERROR("further down the road. But if you reeeeally wanna do it and you know what you're");
+
150 MACH3LOG_ERROR("doing you can come here and remove the 'throw'");
+
151 MACH3LOG_ERROR("{}:{}", __FILE__, __LINE__ + 2);
+
152 MACH3LOG_ERROR("=====================================================================================");
+
153 throw;
+
154 }
+
155 // EM: file seems good, we'll add the trees to the lists
+
156 fileMerger->AddFile(file);
+
157
+
158 // EM: set these for the next iteration
+
159 prevFile = file;
+
160 }
+
161
+
162 TFile *outputFile = fileMerger->GetOutputFile();
+
163 outputFile->cd();
+
164
+
165 // EM: write out the version and config files to the combined file
+
166 TMacro *MaCh3_Config = (TMacro*)prevFile->Get("MaCh3_Config");
+
167
+
168 if(MaCh3_Config != NULL) MaCh3_Config->Write();
+
169 delete MaCh3_Config;
+
170
+
171 // EM: now let's combine all the trees and write to the output file
+
172 bool mergeSuccess = fileMerger->PartialMerge(TFileMerger::kRegular | TFileMerger::kAll | TFileMerger::kOnlyListed);
+
173 if(mergeSuccess){
+
174 MACH3LOG_INFO("Files merged successfully");
+
175 }
+
176 else{
+
177 MACH3LOG_ERROR("Failed to merge files");
+
178 }
+
179 delete fileMerger;
+
180
+
181 //KS: Sadly we need to open file to save TDirectories to not have weird copy of several obejcts there...
+
182 outputFile = new TFile(OutFileName.c_str(), "UPDATE");
+
183
+
184 // Get the source directory
+
185 TDirectory *MaCh3EngineDir = (TDirectory*)prevFile->Get("MaCh3Engine");
+
186 TDirectory *CovarianceFolderDir = (TDirectory*)prevFile->Get("CovarianceFolder");
+
187
+
188 outputFile->cd();
+ + +
191
+
192 delete prevFile;
+
193
+
194 MACH3LOG_INFO("Done!");
+
195}
+
std::string OutFileName
+
void CopyDir(TDirectory *source)
+
bool checkSoftwareVersions(TFile *file, TFile *prevFile, std::string ConfigName)
EM: Will compare the version header contained in the two provided files and shout if they don't match...
+
bool forceOverwrite
+
int targetCompression
+
std::vector< std::string > inpFileList
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
+
+
+ +

◆ CopyDir()

+ +
+
+ + + + + + + + +
void CopyDir (TDirectorysource)
+
+ +

Definition at line 55 of file CombineMaCh3Chains.cpp.

+
55 {
+
56 //copy all objects and subdirs of directory source as a subdir of the current directory
+
57 source->ls();
+ +
59 TDirectory *adir = (TDirectory*)savdir->Get(source->GetName());
+
60 adir->cd();
+
61 //loop on all entries of this directory
+
62 TKey *key;
+
63 TIter nextkey(source->GetListOfKeys());
+
64 while ((key = (TKey*)nextkey())) {
+
65 const char *classname = key->GetClassName();
+
66 TClass *cl = gROOT->GetClass(classname);
+
67 if (!cl) continue;
+
68 if (cl->InheritsFrom("TDirectory")) {
+
69 source->cd(key->GetName());
+ +
71 adir->cd();
+ +
73 adir->cd();
+
74 } else if (cl->InheritsFrom("TTree")) {
+
75 TTree *T = (TTree*)source->Get(key->GetName());
+
76 adir->cd();
+
77 TTree *newT = T->CloneTree();
+
78 newT->Write();
+
79 } else {
+
80 source->cd();
+
81 TObject *obj = key->ReadObj();
+
82 adir->cd();
+
83 obj->Write();
+
84 delete obj;
+
85 }
+
86 }
+
87 adir->SaveSelf(kTRUE);
+
88 savdir->cd();
+
89}
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 269 of file CombineMaCh3Chains.cpp.

+
270{
+ + +
273 CombineChain();
+
274 return 1;
+
275}
+
void ParseArg(int argc, char *argv[])
+
void CombineChain()
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
+
+
+ +

◆ ParseArg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ParseArg (int argc,
charargv[] 
)
+
+ +

Definition at line 208 of file CombineMaCh3Chains.cpp.

+
208 {
+
209 if(argc < 2){
+
210 MACH3LOG_ERROR("Too few arguments!!");
+
211 MACH3LOG_ERROR("USAGE:");
+
212 usage();
+
213 throw;
+
214 }
+
215
+
216 int c;
+
217 for(;;) {
+
218 c = getopt(argc, argv, "o:c:hf");
+
219 if (c == -1){ // loop over the remaining arguments
+
220 while (optind < argc){
+
221 // any non option input is assumed to be a root file
+
222 std::string fName = std::string(argv[optind]);
+
223 MACH3LOG_DEBUG("adding {} to file list", fName.c_str());
+
224 inpFileList.push_back(fName);
+
225 optind ++;
+
226 }
+
227 break;
+
228 }
+
229 else{
+
230 switch (c) {
+
231 case 'o': {
+ +
233 break;
+
234 }
+
235 case 'f': {
+
236 forceOverwrite = true;
+
237 break;
+
238 }
+
239 case 'c': {
+ +
241 break;
+
242 }
+
243 case 'h': {
+
244 usage();
+
245 exit(0);
+
246 }
+
247 default: {
+
248 MACH3LOG_ERROR("Un recognised option");
+
249 usage();
+
250 exit(1);
+
251 }
+
252 }
+
253 }
+
254 }
+
255
+
256 if(OutFileName == ""){
+
257 MACH3LOG_INFO("Using first file in list as output: ", inpFileList[0].c_str());
+ +
259 inpFileList.erase(inpFileList.begin());
+
260 }
+
261
+
262 if(forceOverwrite){
+
263 MACH3LOG_INFO("Will overwrite {} if it exists already", OutFileName.c_str());
+
264 }
+
265
+
266 MACH3LOG_INFO("Combining a total of {} files into {}", inpFileList.size(), OutFileName.c_str());
+
267}
+
void usage()
+
+
+
+ +

◆ usage()

+ +
+
+ + + + + + + +
void usage ()
+
+ +

Definition at line 197 of file CombineMaCh3Chains.cpp.

+
197 {
+
198 std::cout << "Combine MaCh3 Chains files, very similar to hadd, but will compare embedded version info in the files to avoid accidentally combining files made with different software versions. Also avoids having a hige dump of separate version files in the output that happens with hadd." << std::endl;
+
199 std::cout << "Cmd line syntax should be:" << std::endl;
+
200 std::cout << "combineND280Splines [-h] [-c [0-9]] [-f] [-o <output file>] input1.root [input2.root, input3.root ...] " << std::endl << std::endl;
+
201 std::cout << "inputX.root : names of individual spline files to combine, can specify any number, need at least one" << std::endl;
+
202 std::cout << "output file : name of combined spline file. optional: if not specified, the app will just use the first input file as the output, the same as hadd'" << std::endl;
+
203 std::cout << "-c : target compression level for the combined file, default is 1, in line with hadd" << std::endl;
+
204 std::cout << "-f : force overwtite the output file if it exists already" << std::endl;
+
205 std::cout << "-h : print this message and exit" << std::endl;
+
206}
+
+
+
+

Variable Documentation

+ +

◆ forceOverwrite

+ +
+
+ + + + +
bool forceOverwrite = false
+
+ +

Definition at line 15 of file CombineMaCh3Chains.cpp.

+ +
+
+ +

◆ inpFileList

+ +
+
+ + + + +
std::vector<std::string> inpFileList
+
+ +

Definition at line 14 of file CombineMaCh3Chains.cpp.

+ +
+
+ +

◆ OutFileName

+ +
+
+ + + + +
std::string OutFileName = ""
+
+ +

Definition at line 12 of file CombineMaCh3Chains.cpp.

+ +
+
+ +

◆ targetCompression

+ +
+
+ + + + +
int targetCompression = 1
+
+ +

Definition at line 13 of file CombineMaCh3Chains.cpp.

+ +
+
+
+ + + + diff --git a/CombineMaCh3Chains_8cpp_source.html b/CombineMaCh3Chains_8cpp_source.html new file mode 100644 index 00000000..3d9ad6ae --- /dev/null +++ b/CombineMaCh3Chains_8cpp_source.html @@ -0,0 +1,394 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/CombineMaCh3Chains.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CombineMaCh3Chains.cpp
+
+
+Go to the documentation of this file.
1#include "TList.h"
+
2#include "TFile.h"
+
3#include "TMacro.h"
+
4#include "TTree.h"
+
5#include "TMD5.h"
+
6#include "TFileMerger.h"
+
7#include "TKey.h"
+
8#include "TROOT.h"
+
9
+
10#include "manager/manager.h"
+
11
+
12std::string OutFileName = "";
+ +
14std::vector<std::string> inpFileList;
+
15bool forceOverwrite = false;
+
16
+
+
18bool checkSoftwareVersions(TFile *file, TFile *prevFile, std::string ConfigName)
+
19{
+
20 bool weirdFile = false;
+
21
+
22 TMacro *versionHeader = (TMacro*)file->Get(ConfigName.c_str());
+
23 TMacro *prevVersionHeader = (TMacro*)prevFile->Get(ConfigName.c_str());
+
24
+
25 // EM: compare the digest of the version header file in this file, with the previous one
+
26 if((versionHeader == NULL) && (prevVersionHeader == NULL)){
+
27 MACH3LOG_WARN("files don't contain an embedded version header, indicating they were made before this feature was added");
+
28 MACH3LOG_WARN(" I can still combine them but I can't guarantee they were made with matching software versions");
+
29 MACH3LOG_WARN(" This is ok but you'll just have to be extra careful and make sure you check this yourself!");
+
30 }
+
31 else if((versionHeader != NULL) && (prevVersionHeader == NULL)){
+
32 MACH3LOG_ERROR("looks like file {} has a version header file but previous ones do not", file->GetName());
+
33 MACH3LOG_ERROR("This is odd and suggests this file was made with an MaCh3 version");
+
34 MACH3LOG_ERROR("from after this feature was added, whereas other files were made with an older MaCh3");
+
35 weirdFile = true;
+
36 }
+
37 else if((versionHeader == NULL) && (prevVersionHeader != NULL)){
+
38 MACH3LOG_ERROR("looks like file {} doesn't have a version header file but previous ones do", file->GetName());
+
39 MACH3LOG_ERROR("This is odd and suggests this file was made with an MaCh3 version");
+
40 MACH3LOG_ERROR("from before this feature was added, whereas other files were made with newer MaCh3");
+
41 weirdFile = true;
+
42 }
+
43 else{
+
44 MACH3LOG_DEBUG(" Prev header digest: {} :: current: {}", (prevVersionHeader->Checksum())->AsString(), (versionHeader->Checksum())->AsString());
+
45
+
46 if(std::strcmp((versionHeader->Checksum())->AsString(), (prevVersionHeader->Checksum())->AsString()) != 0){
+
47 MACH3LOG_ERROR("Looks like the version header for file {} is different to the previous ones", file->GetName());
+
48 MACH3LOG_ERROR("This strongly suggests that this file was made with different software versions than the previous ones");
+
49 weirdFile = true;
+
50 }
+
51 }
+
52 return weirdFile;
+
53}
+
+
54
+
+
55void CopyDir(TDirectory *source) {
+
56 //copy all objects and subdirs of directory source as a subdir of the current directory
+
57 source->ls();
+
58 TDirectory *savdir = gDirectory;
+
59 TDirectory *adir = (TDirectory*)savdir->Get(source->GetName());
+
60 adir->cd();
+
61 //loop on all entries of this directory
+
62 TKey *key;
+
63 TIter nextkey(source->GetListOfKeys());
+
64 while ((key = (TKey*)nextkey())) {
+
65 const char *classname = key->GetClassName();
+
66 TClass *cl = gROOT->GetClass(classname);
+
67 if (!cl) continue;
+
68 if (cl->InheritsFrom("TDirectory")) {
+
69 source->cd(key->GetName());
+
70 TDirectory *subdir = gDirectory;
+
71 adir->cd();
+
72 CopyDir(subdir);
+
73 adir->cd();
+
74 } else if (cl->InheritsFrom("TTree")) {
+
75 TTree *T = (TTree*)source->Get(key->GetName());
+
76 adir->cd();
+
77 TTree *newT = T->CloneTree();
+
78 newT->Write();
+
79 } else {
+
80 source->cd();
+
81 TObject *obj = key->ReadObj();
+
82 adir->cd();
+
83 obj->Write();
+
84 delete obj;
+
85 }
+
86 }
+
87 adir->SaveSelf(kTRUE);
+
88 savdir->cd();
+
89}
+
+
90
+
+ +
92{
+
93 TFileMerger *fileMerger = new TFileMerger();
+
94
+
95 // EM: If we ever add new trees to the chain files they will need to be added here too
+
96 fileMerger->AddObjectNames("posteriors");
+
97 fileMerger->AddObjectNames("Settings");
+
98
+
99 MACH3LOG_INFO("These objects will be merged: {}", fileMerger->GetObjectNames());
+
100
+
101 std::string outFileOption;
+
102 if(forceOverwrite) outFileOption = "RECREATE";
+
103 else outFileOption = "CREATE";
+
104
+
105 // EM: Attempt to open the output file
+
106 bool openedFile = fileMerger->OutputFile(OutFileName.c_str(), outFileOption.c_str(), targetCompression);
+
107 if (!openedFile){
+
108 MACH3LOG_ERROR("Failed to create output file.");
+
109 throw;
+
110 }
+
111
+
112 TFile *prevFile = nullptr;
+
113
+
114 // EM: loop through all the files in the provided list, compare the embedded version and config files
+
115 // If they match, we add the file to the list of files to be merged.
+
116 // If not, we throw an error and provide a (hopefully) helpful message telling the user why the files couldn't be merged.
+
117 for(uint fileId = 0; fileId < inpFileList.size(); fileId++)
+
118 {
+
119 std::string fileName = inpFileList[fileId];
+
120 TFile *file = new TFile(fileName.c_str());
+
121
+
122 if(file->Get<TTree>("posteriors")->GetEntries() == 0){
+
123 MACH3LOG_WARN("Hmmm, file {} Doesn't seem to have any entries", fileName.c_str());
+
124 MACH3LOG_WARN("That's weird but I guess there's no rule that says a file can't be empty");
+
125 MACH3LOG_WARN("I'll skip it but maybe double check that this doesn't indicate some deeper problem");
+
126 continue;
+
127 }
+
128
+
129 // EM: need to set this in the initial case
+
130 if(prevFile == nullptr) {
+
131 prevFile = file;
+
132 }
+
133
+
134 MACH3LOG_DEBUG("############ File {} #############", fileId);
+
135
+
136 bool weirdFile = false;
+
137
+
138
+
139 if(checkSoftwareVersions(file, prevFile, "MaCh3Engine/version_header"))
+
140 weirdFile = true;
+
141
+
142 if(checkSoftwareVersions(file, prevFile, "MaCh3_Config"))
+
143 weirdFile = true;
+
144
+
145 if(weirdFile){
+
146 MACH3LOG_ERROR("");
+
147 MACH3LOG_ERROR("=====================================================================================");
+
148 MACH3LOG_ERROR("This is not a great idea and could lead to weird outputs and cause some big headaches");
+
149 MACH3LOG_ERROR("further down the road. But if you reeeeally wanna do it and you know what you're");
+
150 MACH3LOG_ERROR("doing you can come here and remove the 'throw'");
+
151 MACH3LOG_ERROR("{}:{}", __FILE__, __LINE__ + 2);
+
152 MACH3LOG_ERROR("=====================================================================================");
+
153 throw;
+
154 }
+
155 // EM: file seems good, we'll add the trees to the lists
+
156 fileMerger->AddFile(file);
+
157
+
158 // EM: set these for the next iteration
+
159 prevFile = file;
+
160 }
+
161
+
162 TFile *outputFile = fileMerger->GetOutputFile();
+
163 outputFile->cd();
+
164
+
165 // EM: write out the version and config files to the combined file
+
166 TMacro *MaCh3_Config = (TMacro*)prevFile->Get("MaCh3_Config");
+
167
+
168 if(MaCh3_Config != NULL) MaCh3_Config->Write();
+
169 delete MaCh3_Config;
+
170
+
171 // EM: now let's combine all the trees and write to the output file
+
172 bool mergeSuccess = fileMerger->PartialMerge(TFileMerger::kRegular | TFileMerger::kAll | TFileMerger::kOnlyListed);
+
173 if(mergeSuccess){
+
174 MACH3LOG_INFO("Files merged successfully");
+
175 }
+
176 else{
+
177 MACH3LOG_ERROR("Failed to merge files");
+
178 }
+
179 delete fileMerger;
+
180
+
181 //KS: Sadly we need to open file to save TDirectories to not have weird copy of several obejcts there...
+
182 outputFile = new TFile(OutFileName.c_str(), "UPDATE");
+
183
+
184 // Get the source directory
+
185 TDirectory *MaCh3EngineDir = (TDirectory*)prevFile->Get("MaCh3Engine");
+
186 TDirectory *CovarianceFolderDir = (TDirectory*)prevFile->Get("CovarianceFolder");
+
187
+
188 outputFile->cd();
+
189 CopyDir(MaCh3EngineDir);
+
190 CopyDir(CovarianceFolderDir);
+
191
+
192 delete prevFile;
+
193
+
194 MACH3LOG_INFO("Done!");
+
195}
+
+
196
+
+
197void usage(){
+
198 std::cout << "Combine MaCh3 Chains files, very similar to hadd, but will compare embedded version info in the files to avoid accidentally combining files made with different software versions. Also avoids having a hige dump of separate version files in the output that happens with hadd." << std::endl;
+
199 std::cout << "Cmd line syntax should be:" << std::endl;
+
200 std::cout << "combineND280Splines [-h] [-c [0-9]] [-f] [-o <output file>] input1.root [input2.root, input3.root ...] " << std::endl << std::endl;
+
201 std::cout << "inputX.root : names of individual spline files to combine, can specify any number, need at least one" << std::endl;
+
202 std::cout << "output file : name of combined spline file. optional: if not specified, the app will just use the first input file as the output, the same as hadd'" << std::endl;
+
203 std::cout << "-c : target compression level for the combined file, default is 1, in line with hadd" << std::endl;
+
204 std::cout << "-f : force overwtite the output file if it exists already" << std::endl;
+
205 std::cout << "-h : print this message and exit" << std::endl;
+
206}
+
+
207
+
+
208void ParseArg(int argc, char *argv[]){
+
209 if(argc < 2){
+
210 MACH3LOG_ERROR("Too few arguments!!");
+
211 MACH3LOG_ERROR("USAGE:");
+
212 usage();
+
213 throw;
+
214 }
+
215
+
216 int c;
+
217 for(;;) {
+
218 c = getopt(argc, argv, "o:c:hf");
+
219 if (c == -1){ // loop over the remaining arguments
+
220 while (optind < argc){
+
221 // any non option input is assumed to be a root file
+
222 std::string fName = std::string(argv[optind]);
+
223 MACH3LOG_DEBUG("adding {} to file list", fName.c_str());
+
224 inpFileList.push_back(fName);
+
225 optind ++;
+
226 }
+
227 break;
+
228 }
+
229 else{
+
230 switch (c) {
+
231 case 'o': {
+
232 OutFileName = optarg;
+
233 break;
+
234 }
+
235 case 'f': {
+
236 forceOverwrite = true;
+
237 break;
+
238 }
+
239 case 'c': {
+
240 targetCompression = atoi(optarg);
+
241 break;
+
242 }
+
243 case 'h': {
+
244 usage();
+
245 exit(0);
+
246 }
+
247 default: {
+
248 MACH3LOG_ERROR("Un recognised option");
+
249 usage();
+
250 exit(1);
+
251 }
+
252 }
+
253 }
+
254 }
+
255
+
256 if(OutFileName == ""){
+
257 MACH3LOG_INFO("Using first file in list as output: ", inpFileList[0].c_str());
+ +
259 inpFileList.erase(inpFileList.begin());
+
260 }
+
261
+
262 if(forceOverwrite){
+
263 MACH3LOG_INFO("Will overwrite {} if it exists already", OutFileName.c_str());
+
264 }
+
265
+
266 MACH3LOG_INFO("Combining a total of {} files into {}", inpFileList.size(), OutFileName.c_str());
+
267}
+
+
268
+
+
269int main(int argc, char *argv[])
+
270{
+ +
272 ParseArg(argc, argv);
+
273 CombineChain();
+
274 return 1;
+
275}
+
+
std::string OutFileName
+
int main(int argc, char *argv[])
+
void CopyDir(TDirectory *source)
+
bool checkSoftwareVersions(TFile *file, TFile *prevFile, std::string ConfigName)
EM: Will compare the version header contained in the two provided files and shout if they don't match...
+
void usage()
+
bool forceOverwrite
+
void ParseArg(int argc, char *argv[])
+
int targetCompression
+
std::vector< std::string > inpFileList
+
void CombineChain()
+
#define MACH3LOG_DEBUG
Definition MaCh3Logger.h:8
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+ +
+ + + + diff --git a/CovarianceUtils_8cpp.html b/CovarianceUtils_8cpp.html new file mode 100644 index 00000000..ff3b973b --- /dev/null +++ b/CovarianceUtils_8cpp.html @@ -0,0 +1,112 @@ + + + + + + + +MaCh3: /github/workspace/covariance/CovarianceUtils.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
CovarianceUtils.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + +

+Functions

int MaCh3Utils::GetNThreads ()
 
TH2DMaCh3Utils::TMatrixIntoTH2D (const TMatrix &Matrix, std::string title)
 
TMatrixD MaCh3Utils::MatrixMult (TMatrixD A, TMatrixD B)
 
double ** MaCh3Utils::MatrixMult (double **A, double **B, int n)
 
doubleMaCh3Utils::MatrixMult (double *A, double *B, int n)
 
+
+ + + + diff --git a/CovarianceUtils_8cpp_source.html b/CovarianceUtils_8cpp_source.html new file mode 100644 index 00000000..f85c9100 --- /dev/null +++ b/CovarianceUtils_8cpp_source.html @@ -0,0 +1,214 @@ + + + + + + + +MaCh3: /github/workspace/covariance/CovarianceUtils.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CovarianceUtils.cpp
+
+
+Go to the documentation of this file.
+
2
+
3namespace MaCh3Utils
+
4{
+
+ +
6 {
+
7 #ifdef MULTITHREAD
+
8 int nThreads = omp_get_max_threads();
+
9 #else
+
10 int nThreads = 1;
+
11 #endif
+
12
+
13 return nThreads;
+
14 }
+
+
15
+
16
+
17
+
18 //KS: Convert TMatrix to TH2D, mostly useful for making fancy plots
+
+
19 TH2D* TMatrixIntoTH2D(const TMatrix &Matrix, std::string title)
+
20 {
+
21 TH2D* hMatrix = new TH2D(title.c_str(), title.c_str(), Matrix.GetNrows(), 0.0, Matrix.GetNrows(), Matrix.GetNcols(), 0.0, Matrix.GetNcols());
+
22 for(int i = 0; i < Matrix.GetNrows(); i++)
+
23 {
+
24 for(int j = 0; j < Matrix.GetNcols(); j++)
+
25 {
+
26 //KS: +1 becasue there is offset in histogram relative to TMatrix
+
27 hMatrix->SetBinContent(i+1,j+1, (Matrix)(i,j));
+
28 }
+
29 }
+
30
+
31 return hMatrix;
+
32 }
+
+
33
+
34 //CW: Multi-threaded matrix multiplication
+
+
35 TMatrixD MatrixMult(TMatrixD A, TMatrixD B) {
+
36 double *C_mon = MatrixMult(A.GetMatrixArray(), B.GetMatrixArray(), A.GetNcols());
+
37 TMatrixD C;
+
38 C.Use(A.GetNcols(), A.GetNrows(), C_mon);
+
39 return C;
+
40 }
+
+
41
+
+
42 double** MatrixMult(double **A, double **B, int n) {
+
43 // First make into monolithic array
+
44 double *A_mon = new double[n*n];
+
45 double *B_mon = new double[n*n];
+
46
+
47 #ifdef MULTITHREAD
+
48 #pragma omp parallel for
+
49 #endif
+
50 for (int i = 0; i < n; ++i) {
+
51 for (int j = 0; j < n; ++j) {
+
52 A_mon[i*n+j] = A[i][j];
+
53 B_mon[i*n+j] = B[i][j];
+
54 }
+
55 }
+
56 //CW: Now call the monolithic calculator
+
57 double *C_mon = MatrixMult(A_mon, B_mon, n);
+
58 delete A_mon;
+
59 delete B_mon;
+
60
+
61 // Return the double pointer
+
62 double **C = new double*[n];
+
63 #ifdef MULTITHREAD
+
64 #pragma omp parallel for
+
65 #endif
+
66 for (int i = 0; i < n; ++i) {
+
67 C[i] = new double[n];
+
68 for (int j = 0; j < n; ++j) {
+
69 C[i][j] = C_mon[i*n+j];
+
70 }
+
71 }
+
72 delete C_mon;
+
73
+
74 return C;
+
75 }
+
+
76
+
+
77 double* MatrixMult(double *A, double *B, int n) {
+
78 //CW: First transpose to increse cache hits
+
79 double *BT = new double[n*n];
+
80 #ifdef MULTITHREAD
+
81 #pragma omp parallel for
+
82 #endif
+
83 for (int i = 0; i < n; i++) {
+
84 for (int j = 0; j < n; j++) {
+
85 BT[j*n+i] = B[i*n+j];
+
86 }
+
87 }
+
88
+
89 // Now multiply
+
90 double *C = new double[n*n];
+
91 #ifdef MULTITHREAD
+
92 #pragma omp parallel for
+
93 #endif
+
94 for (int i = 0; i < n; i++) {
+
95 for (int j = 0; j < n; j++) {
+
96 double sum = 0;
+
97 for (int k = 0; k < n; k++) {
+
98 sum += A[i*n+k]*BT[j*n+k];
+
99 }
+
100 C[i*n+j] = sum;
+
101 }
+
102 }
+
103 delete BT;
+
104
+
105 return C;
+
106 }
+
+
107}
+ + + +
TH2D * TMatrixIntoTH2D(const TMatrix &Matrix, std::string title)
+
TMatrixD MatrixMult(TMatrixD A, TMatrixD B)
+
+ + + + diff --git a/CovarianceUtils_8h.html b/CovarianceUtils_8h.html new file mode 100644 index 00000000..f0e49179 --- /dev/null +++ b/CovarianceUtils_8h.html @@ -0,0 +1,130 @@ + + + + + + + +MaCh3: /github/workspace/covariance/CovarianceUtils.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
CovarianceUtils.h File Reference
+
+
+
#include "TMatrixT.h"
+#include "TMatrixDSym.h"
+#include "TVectorT.h"
+#include "TVectorD.h"
+#include "TCanvas.h"
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TTree.h"
+#include "TFile.h"
+#include "TAxis.h"
+#include "TRandom3.h"
+#include "TMath.h"
+#include "math.h"
+#include "TDecompChol.h"
+#include "TStopwatch.h"
+#include "TMatrix.h"
+#include "TMatrixDSymEigen.h"
+#include "TMatrixDEigen.h"
+#include "TDecompSVD.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + +

+Functions

TH2DMaCh3Utils::TMatrixIntoTH2D (const TMatrix &Matrix, std::string title)
 
int MaCh3Utils::GetNThreads ()
 
doubleMaCh3Utils::MatrixMult (double *A, double *B, int n)
 
double ** MaCh3Utils::MatrixMult (double **A, double **B, int n)
 
TMatrixD MaCh3Utils::MatrixMult (TMatrixD A, TMatrixD B)
 
+
+ + + + diff --git a/CovarianceUtils_8h_source.html b/CovarianceUtils_8h_source.html new file mode 100644 index 00000000..7594689c --- /dev/null +++ b/CovarianceUtils_8h_source.html @@ -0,0 +1,134 @@ + + + + + + + +MaCh3: /github/workspace/covariance/CovarianceUtils.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CovarianceUtils.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// ROOT includes
+
4#include "TMatrixT.h"
+
5#include "TMatrixDSym.h"
+
6#include "TVectorT.h"
+
7#include "TVectorD.h"
+
8#include "TCanvas.h"
+
9#include "TH1D.h"
+
10#include "TH2D.h"
+
11#include "TTree.h"
+
12#include "TFile.h"
+
13#include "TAxis.h"
+
14#include "TRandom3.h"
+
15#include "TMath.h"
+
16#include "math.h"
+
17#include "TDecompChol.h"
+
18#include "TStopwatch.h"
+
19#include "TMatrix.h"
+
20#include "TMatrixDSymEigen.h"
+
21#include "TMatrixDEigen.h"
+
22#include "TDecompSVD.h"
+
23
+
24
+
25#ifdef MULTITHREAD
+
26#include "omp.h"
+
27#endif
+
28
+
29namespace MaCh3Utils
+
30{
+
31 TH2D* TMatrixIntoTH2D(const TMatrix &Matrix, std::string title);
+
32
+
33 int GetNThreads();
+
34 double* MatrixMult(double*, double*, int);
+
35 double** MatrixMult(double**, double**, int);
+
36 TMatrixD MatrixMult(TMatrixD, TMatrixD);
+
37
+
38}
+ + +
TH2D * TMatrixIntoTH2D(const TMatrix &Matrix, std::string title)
+
TMatrixD MatrixMult(TMatrixD A, TMatrixD B)
+
+ + + + diff --git a/DiagMCMC_8cpp.html b/DiagMCMC_8cpp.html new file mode 100644 index 00000000..9125cac1 --- /dev/null +++ b/DiagMCMC_8cpp.html @@ -0,0 +1,205 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/DiagMCMC.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
DiagMCMC.cpp File Reference
+
+
+
#include "mcmc/MCMCProcessor.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Functions

void DiagMCMC (std::string inputFile, std::string config)
 
int main (int argc, char *argv[])
 
+

Function Documentation

+ +

◆ DiagMCMC()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void DiagMCMC (std::string inputFile,
std::string config 
)
+
+ +

Definition at line 25 of file DiagMCMC.cpp.

+
26{
+
27 std::cout << "File for study: " << inputFile << std::endl;
+
28
+
29 YAML::Node Settings = YAML::LoadFile(config);
+
30
+
31 // Make the processor
+
32 MCMCProcessor* Processor = new MCMCProcessor(inputFile, false);
+
33
+
34 Processor->SetOutputSuffix("_MCMC_Diag");
+
35 //KS:Turn off plotting detector and some other setting
+
36 Processor->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["DiagMCMC"]["ExcludedTypes"], {""}));
+
37 Processor->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["DiagMCMC"]["ExcludedNames"], {""}));
+
38 Processor->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["DiagMCMC"]["PlotRelativeToPrior"], false));
+
39 //KS: Use 20 batches for batched means
+
40 Processor->SetnBatches(GetFromManager<int>(Settings["DiagMCMC"]["nBatches"], 20));
+
41 Processor->SetnLags(GetFromManager<int>(Settings["DiagMCMC"]["nLags"], 25000));
+
42
+
43 Processor->Initialise();
+
44
+
45 //KS: finally call main method
+
46 Processor->DiagMCMC();
+
47
+
48 delete Processor;
+
49}
+
YAML::Node config
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 8 of file DiagMCMC.cpp.

+
8 {
+
9
+
10 if (argc != 3)
+
11 {
+
12 std::cerr << "How to use: DiagMCMC MCMC_Output.root config" << std::endl;
+
13 exit(-1);
+
14 }
+
15
+
16 std::cout << "Producing single fit output" << std::endl;
+
17 std::string filename = argv[1];
+
18 std::string config = argv[2];
+ +
20
+
21 return 0;
+
22}
+
void DiagMCMC(std::string inputFile, std::string config)
Definition DiagMCMC.cpp:25
+
+
+
+
+ + + + diff --git a/DiagMCMC_8cpp_source.html b/DiagMCMC_8cpp_source.html new file mode 100644 index 00000000..c8768eea --- /dev/null +++ b/DiagMCMC_8cpp_source.html @@ -0,0 +1,158 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/DiagMCMC.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DiagMCMC.cpp
+
+
+Go to the documentation of this file.
+
2
+
3#include "manager/manager.h"
+
4
+
5
+
6void DiagMCMC(std::string inputFile, std::string config);
+
7
+
+
8int main(int argc, char *argv[]) {
+
9
+
10 if (argc != 3)
+
11 {
+
12 std::cerr << "How to use: DiagMCMC MCMC_Output.root config" << std::endl;
+
13 exit(-1);
+
14 }
+
15
+
16 std::cout << "Producing single fit output" << std::endl;
+
17 std::string filename = argv[1];
+
18 std::string config = argv[2];
+
19 DiagMCMC(filename, config);
+
20
+
21 return 0;
+
22}
+
+
23
+
24
+
+
25void DiagMCMC(std::string inputFile, std::string config)
+
26{
+
27 std::cout << "File for study: " << inputFile << std::endl;
+
28
+
29 YAML::Node Settings = YAML::LoadFile(config);
+
30
+
31 // Make the processor
+
32 MCMCProcessor* Processor = new MCMCProcessor(inputFile, false);
+
33
+
34 Processor->SetOutputSuffix("_MCMC_Diag");
+
35 //KS:Turn off plotting detector and some other setting
+
36 Processor->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["DiagMCMC"]["ExcludedTypes"], {""}));
+
37 Processor->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["DiagMCMC"]["ExcludedNames"], {""}));
+
38 Processor->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["DiagMCMC"]["PlotRelativeToPrior"], false));
+
39 //KS: Use 20 batches for batched means
+
40 Processor->SetnBatches(GetFromManager<int>(Settings["DiagMCMC"]["nBatches"], 20));
+
41 Processor->SetnLags(GetFromManager<int>(Settings["DiagMCMC"]["nLags"], 25000));
+
42
+
43 Processor->Initialise();
+
44
+
45 //KS: finally call main method
+
46 Processor->DiagMCMC();
+
47
+
48 delete Processor;
+
49}
+
+
50
+
51
+
int main(int argc, char *argv[])
Definition DiagMCMC.cpp:8
+
void DiagMCMC(std::string inputFile, std::string config)
Definition DiagMCMC.cpp:25
+
YAML::Node config
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
void SetExcludedNames(std::vector< std::string > Name)
+
void SetOutputSuffix(const std::string Suffix)
+
void SetExcludedTypes(std::vector< std::string > Name)
+
void SetPlotRelativeToPrior(const bool PlotOrNot)
+ +
+ + + + diff --git a/FDMCStruct_8h.html b/FDMCStruct_8h.html new file mode 100644 index 00000000..44148add --- /dev/null +++ b/FDMCStruct_8h.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/FDMCStruct.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
FDMCStruct.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Classes

struct  fdmc_base
 
+
+ + + + diff --git a/FDMCStruct_8h_source.html b/FDMCStruct_8h_source.html new file mode 100644 index 00000000..ebe04257 --- /dev/null +++ b/FDMCStruct_8h_source.html @@ -0,0 +1,214 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/FDMCStruct.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FDMCStruct.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3
+
4//constructors are same for all three so put in here
+
+
5struct fdmc_base {
+
6 int nutype; // 2 = numu/signue | -2 = numub | 1 = nue | -1 = nueb
+ +
8 int nupdg;
+ +
10 bool signal; // true if signue
+
11 int nEvents; // how many MC events are there
+
12 std::string flavourName;
+
13 int *isbound;
+
14 int **Target; // target the interaction was on
+
15
+ +
17
+
18 //THe x_var and y_vars that you're binning in
+
19 double** x_var;
+
20 double** y_var;
+
21 double **rw_etru;
+
22
+
23 // xsec bins
+
24 std::list< int > *xsec_norms_bins;
+
25
+
26 //DB Speedup bits
+
27 double Unity;
+
28
+ +
30 const double*** xsec_norm_pointers;
+
31
+ +
33 const double*** xsec_spline_pointers;
+
34
+
35 const double** skdet_pointer;
+
36 const double* EScale_pointer;
+
37
+ + +
40 double* total_w;
+
41
+
42 int* XBin;
+
43 int* YBin;
+
44 int* NomXBin;
+
45 int* NomYBin;
+
46
+
47 bool *isNC;
+
48
+
49 // histo pdf bins
+
50 double *rw_lower_xbinedge; // lower to check if Eb has moved the erec bin
+
51 double *rw_lower_lower_xbinedge; // lower to check if Eb has moved the erec bin
+
52 double *rw_upper_xbinedge; // upper to check if Eb has moved the erec bin
+
53 double *rw_upper_upper_xbinedge; // upper to check if Eb has moved the erec bin
+
54
+
55 int **mode;
+
56
+
57 // DB Atmospheric Parameters
+
58 const double **osc_w_pointer;
+
59 double *rw_truecz;
+
60
+
61 double *osc_w; // oscillation weight
+
62 double *flux_w; // not the same as beam systematics weight!
+
63 double *xsec_w;
+
64
+ +
66
+
67#if defined (USE_PROB3)
+
68 BargerPropagator *Oscillator; // Prob3++
+
69#else
+
70 cudaprob3::Propagator<double> *Oscillator; // CUDAProb3
+
71 cudaprob3::ProbType ProbType;
+
72 cudaprob3::NeutrinoType NeutrinoType;
+
73#endif
+
74};
+
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
std::string flavourName
Definition FDMCStruct.h:12
+
int * ntotal_weight_pointers
Definition FDMCStruct.h:38
+
const double ** skdet_pointer
Definition FDMCStruct.h:35
+
double Unity
Definition FDMCStruct.h:27
+
const double *** xsec_spline_pointers
Definition FDMCStruct.h:33
+
cudaprob3::ProbType ProbType
Definition FDMCStruct.h:71
+
int nupdgUnosc
Definition FDMCStruct.h:9
+
double * osc_w
Definition FDMCStruct.h:61
+
const double * EScale_pointer
Definition FDMCStruct.h:36
+
double * xsec_w
Definition FDMCStruct.h:63
+
double * flux_w
Definition FDMCStruct.h:62
+
bool * isNC
Definition FDMCStruct.h:47
+
double *** total_weight_pointers
Definition FDMCStruct.h:39
+
double * total_w
Definition FDMCStruct.h:40
+
double * rw_truecz
Definition FDMCStruct.h:59
+
int nutype
Definition FDMCStruct.h:6
+
double ** x_var
Definition FDMCStruct.h:19
+
cudaprob3::NeutrinoType NeutrinoType
Definition FDMCStruct.h:72
+
const double *** xsec_norm_pointers
Definition FDMCStruct.h:30
+
int * nxsec_spline_pointers
Definition FDMCStruct.h:32
+
std::list< int > * xsec_norms_bins
Definition FDMCStruct.h:24
+
int ** mode
Definition FDMCStruct.h:55
+
int oscnutype
Definition FDMCStruct.h:7
+
int * XBin
Definition FDMCStruct.h:42
+
double * rw_upper_upper_xbinedge
Definition FDMCStruct.h:53
+
cudaprob3::Propagator< double > * Oscillator
Definition FDMCStruct.h:70
+
double ** rw_etru
Definition FDMCStruct.h:21
+
double * rw_lower_lower_xbinedge
Definition FDMCStruct.h:51
+
int * YBin
Definition FDMCStruct.h:43
+
const double ** osc_w_pointer
Definition FDMCStruct.h:58
+
int nEvents
Definition FDMCStruct.h:11
+
int * NomYBin
Definition FDMCStruct.h:45
+
int SampleDetID
Definition FDMCStruct.h:16
+
double * rw_lower_xbinedge
Definition FDMCStruct.h:50
+
double ** y_var
Definition FDMCStruct.h:20
+
int * isbound
Definition FDMCStruct.h:13
+
int nupdg
Definition FDMCStruct.h:8
+
int * nxsec_norm_pointers
Definition FDMCStruct.h:29
+
int * NomXBin
Definition FDMCStruct.h:44
+
bool signal
Definition FDMCStruct.h:10
+
double * rw_upper_xbinedge
Definition FDMCStruct.h:52
+
splineFDBase * splineFile
Definition FDMCStruct.h:65
+
int ** Target
Definition FDMCStruct.h:14
+
+ + + + diff --git a/FitterBase_8cpp.html b/FitterBase_8cpp.html new file mode 100644 index 00000000..a7ae0a8f --- /dev/null +++ b/FitterBase_8cpp.html @@ -0,0 +1,93 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/FitterBase.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FitterBase.cpp File Reference
+
+
+
#include "FitterBase.h"
+#include "TRandom.h"
+#include "TStopwatch.h"
+#include "TTree.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/FitterBase_8cpp_source.html b/FitterBase_8cpp_source.html new file mode 100644 index 00000000..0c462bc9 --- /dev/null +++ b/FitterBase_8cpp_source.html @@ -0,0 +1,1069 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/FitterBase.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FitterBase.cpp
+
+
+Go to the documentation of this file.
1#include "FitterBase.h"
+
2
+
3#include "TRandom.h"
+
4#include "TStopwatch.h"
+
5#include "TTree.h"
+
6
+
7// *************************
+
8// Initialise the manager and make it an object of FitterBase class
+
9// Now we can dump manager settings to the output file
+
+ +
11// *************************
+
12
+
13 random = new TRandom3(fitMan->raw()["General"]["Seed"].as<int>());
+
14
+
15 // Counter of the accepted # of steps
+
16 accCount = 0;
+
17 step = 0;
+
18
+
19 clock = new TStopwatch;
+ +
21 #ifdef DEBUG
+
22 // Fit summary and debug info
+
23 debug = fitMan->raw()["General"]["Debug"].as<bool>();
+
24 #endif
+
25
+
26 std::string outfile = fitMan->raw()["General"]["OutputFile"].as<std::string>();
+
27
+
28 // Save output every auto_save steps
+
29 //you don't want this too often https://root.cern/root/html606/TTree_8cxx_source.html#l01229
+
30 auto_save = fitMan->raw()["General"]["MCMC"]["AutoSave"].as<int>();
+
31 // Do we want to save the nominal parameters to output
+
32 save_nominal = true;
+
33
+
34 // Set the output file
+
35 outputFile = new TFile(outfile.c_str(), "RECREATE");
+
36 outputFile->cd();
+
37 // Set output tree
+
38 outTree = new TTree("posteriors", "Posterior_Distributions");
+
39 // Auto-save every 200MB, the bigger the better https://root.cern/root/html606/TTree_8cxx_source.html#l01229
+
40 outTree->SetAutoSave(-200E6);
+
41
+
42 FileSaved = false;
+
43 SettingsSaved = false;
+
44 OutputPrepared = false;
+
45
+
46 //Create TDirectory
+
47 CovFolder = outputFile->mkdir("CovarianceFolder");
+
48 outputFile->cd();
+
49
+
50 #ifdef DEBUG
+
51 // Prepare the output log file
+
52 if (debug) debugFile.open((outfile+".log").c_str());
+
53 #endif
+
54
+
55 // Clear the samples and systematics
+
56 samples.clear();
+
57 systematics.clear();
+
58 osc = nullptr;
+
59
+
60 sample_llh = nullptr;
+
61 syst_llh = nullptr;
+
62
+
63 fTestLikelihood = false;
+
64 //ETA - No guarantee that "Fitter" field exists so check this first before
+
65 //checking ["Fitter"]["FitTestLikelihood"]
+
66 if(fitMan->raw()["General"]["Fitter"])
+
67 {
+
68 if(fitMan->raw()["General"]["Fitter"]["FitTestLikelihood"]){
+
69 fTestLikelihood = fitMan->raw()["General"]["Fitter"]["FitTestLikelihood"].as<bool>();
+
70 }
+
71 }
+
72}
+
+
73
+
74// *************************
+
75// Destructor: close the logger and output file
+
+ +
77// *************************
+
78 SaveOutput();
+
79 if(random != nullptr) delete random;
+
80 if(sample_llh != nullptr) delete[] sample_llh;
+
81 if(syst_llh != nullptr) delete[] syst_llh;
+
82 if(outputFile != nullptr) delete outputFile;
+
83 delete clock;
+
84 delete stepClock;
+
85 MACH3LOG_INFO("Closing MaCh3 Fitter Engine");
+
86}
+
+
87
+
88
+
89// *******************
+
90// Prepare the output tree
+
+ +
92// *******************
+
93
+
94 if(SettingsSaved) return;
+
95
+
96 outputFile->cd();
+
97
+
98 TDirectory* MaCh3Version = outputFile->mkdir("MaCh3Engine");
+
99 MaCh3Version->cd();
+
100
+
101 if (std::getenv("MaCh3_ROOT") == NULL) {
+
102 MACH3LOG_ERROR("Need MaCh3_ROOT environment variable");
+
103 MACH3LOG_ERROR("Please remember about source bin/setup.MaCh3.sh");
+
104 throw;
+
105 }
+
106
+
107 if (std::getenv("MACH3") == NULL) {
+
108 MACH3LOG_ERROR("Need MACH3 environment variable");
+
109 throw;
+
110 }
+
111
+
112 std::string header_path = std::string(std::getenv("MACH3"));
+
113 header_path += "/version.h";
+
114 FILE* file = fopen(header_path.c_str(), "r");
+
115 //KS: It is better to use experiment specific header file. If given experiment didn't provide it we gonna use one given by Core MaCh3.
+
116 if (!file)
+
117 {
+
118 header_path = std::string(std::getenv("MaCh3_ROOT"));
+
119 header_path += "/version.h";
+
120 }
+
121 else
+
122 {
+
123 fclose(file);
+
124 }
+
125
+
126 // EM: embed the cmake generated version.h file
+
127 TMacro versionHeader("version_header", "version_header");
+
128 versionHeader.ReadFile(header_path.c_str());
+
129 versionHeader.Write();
+
130
+ +
132 Engine.Write(GetName().c_str());
+
133
+
134 MaCh3Version->Write();
+
135 delete MaCh3Version;
+
136
+
137 outputFile->cd();
+
138
+ +
140
+
141 MACH3LOG_WARN("\033[0;31mCurrent Total RAM usage is {:.2f} GB\033[0m", MaCh3Utils::getValue("VmRSS") / 1048576.0);
+
142 MACH3LOG_WARN("\033[0;31mOut of Total available RAM {:.2f} GB\033[0m", MaCh3Utils::getValue("MemTotal") / 1048576.0);
+
143
+
144 MACH3LOG_INFO("#####Current Setup#####");
+
145 MACH3LOG_INFO("Number of covariances: {}", systematics.size());
+
146 for(unsigned int i = 0; i < systematics.size(); i++)
+
147 MACH3LOG_INFO("{}: Cov name: {}",i, systematics[i]->getName());
+
148 MACH3LOG_INFO("Number of SamplePDFs: {}", samples.size());
+
149 for(unsigned int i = 0; i < samples.size(); i++)
+
150 MACH3LOG_INFO("{}: SamplePDF name: {}",i , samples[i]->GetName());
+
151
+
152 SettingsSaved = true;
+
153}
+
+
154
+
155// *******************
+
156// Prepare the output tree
+
+ +
158// *******************
+
159
+
160 if(OutputPrepared) return;
+
161 //MS: Check if we are fitting the test likelihood, rather than T2K likelihood, and only setup T2K output if not
+
162 if(!fTestLikelihood)
+
163 {
+
164 // Check that we have added samples
+
165 if (!samples.size()) {
+
166 MACH3LOG_CRITICAL("No samples Found! If this is what you want find me here");
+ +
168 throw;
+
169 }
+
170
+
171 // Prepare the output trees
+
172 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it) {
+
173 (*it)->setBranches(*outTree);
+
174 }
+
175
+
176 if (osc) {
+ +
178 outTree->Branch("LogL_osc", &osc_llh, "LogL_osc/D");
+
179 }
+
180
+
181 outTree->Branch("LogL", &logLCurr, "LogL/D");
+
182 outTree->Branch("accProb", &accProb, "accProb/D");
+
183 outTree->Branch("step", &step, "step/I");
+
184 outTree->Branch("stepTime", &stepTime, "stepTime/D");
+
185
+
186 // Store individual likelihood components
+
187 // Using double means double as large output file!
+
188 sample_llh = new double[samples.size()];
+
189 syst_llh = new double[systematics.size()];
+
190
+
191 for (size_t i = 0; i < samples.size(); ++i) {
+
192 std::stringstream oss, oss2;
+
193 oss << "LogL_sample_" << i;
+
194 oss2 << oss.str() << "/D";
+
195 outTree->Branch(oss.str().c_str(), &sample_llh[i], oss2.str().c_str());
+
196
+
197 // For adding sample dependent branches to the posteriors tree
+
198 samples[i]->setMCMCBranches(outTree);
+
199 }
+
200
+
201 for (size_t i = 0; i < systematics.size(); ++i) {
+
202 std::stringstream oss, oss2;
+
203 oss << "LogL_systematic_" << systematics[i]->getName();
+
204 oss2 << oss.str() << "/D";
+
205 outTree->Branch(oss.str().c_str(), &syst_llh[i], oss2.str().c_str());
+
206 }
+
207 }
+
208 else
+
209 {
+
210 outTree->Branch("LogL", &logLCurr, "LogL/D");
+
211 outTree->Branch("accProb", &accProb, "accProb/D");
+
212 outTree->Branch("step", &step, "step/I");
+
213 outTree->Branch("stepTime", &stepTime, "stepTime/D");
+
214 }
+
215
+
216 MACH3LOG_INFO("-------------------- Starting MCMC --------------------");
+
217 #ifdef DEBUG
+
218 if (debug) {
+ +
220 debugFile << "----- Starting MCMC -----" << std::endl;
+
221 }
+
222 #endif
+
223 // Time the progress
+
224 clock->Start();
+
225
+
226 OutputPrepared = true;
+
227}
+
+
228
+
229// *******************
+
+ +
231// *******************
+
232
+
233 if(FileSaved) return;
+
234 //Stop Clock
+
235 clock->Stop();
+
236
+
237 outputFile->cd();
+
238 outTree->Write();
+
239
+
240 MACH3LOG_INFO("{} steps took {:.2f} seconds to complete. ({:.2f}s / step).", step, clock->RealTime(), clock->RealTime() / step);
+
241 MACH3LOG_INFO("{} steps were accepted.", accCount);
+
242 #ifdef DEBUG
+
243 if (debug)
+
244 {
+
245 debugFile << "\n\n" << step << " steps took " << clock->RealTime() << " seconds to complete. (" << clock->RealTime() / step << "s / step).\n" << accCount<< " steps were accepted." << std::endl;
+
246 debugFile.close();
+
247 }
+
248 #endif
+
249
+
250 outputFile->Close();
+
251 FileSaved = true;
+
252}
+
+
253
+
254// *************************
+
255// Add samplePDF object to the Markov Chain
+
+ +
257// *************************
+
258 MACH3LOG_INFO("Adding {} object ", sample->GetName());
+
259 samples.push_back(sample);
+
260
+
261 return;
+
262}
+
+
263
+
264// *************************
+
265// Add flux systematics, cross-section systematics, ND systematics to the chain
+
+ +
267// *************************
+
268
+
269 MACH3LOG_INFO("Adding systematic object {}", cov->getName());
+
270 systematics.push_back(cov);
+
271
+
272 CovFolder->cd();
+
273 double *n_vec = new double[cov->getSize()];
+
274 for (int i = 0; i < cov->getSize(); ++i)
+
275 n_vec[i] = cov->getParInit(i);
+
276
+
277 TVectorT<double> t_vec(cov->getSize(), n_vec);
+
278 t_vec.Write((std::string(cov->getName()) + "_prior").c_str());
+
279 delete[] n_vec;
+
280
+
281 cov->getCovMatrix()->Write(cov->getName());
+
282
+
283 TH2D* CorrMatrix = cov->GetCorrelationMatrix();
+
284 CorrMatrix->Write((cov->getName() + std::string("_Corr")).c_str());
+
285 delete CorrMatrix;
+
286
+
287 outputFile->cd();
+
288
+
289 return;
+
290}
+
+
291
+
292// *************************
+
293// Add an oscillation handler
+
294// Similar to systematic really, but handles the oscillation weights
+
+ +
296// *************************
+
297
+
298 osc = oscf;
+
299
+
300 if (save_nominal) {
+
301 CovFolder->cd();
+
302 std::vector<double> vec = oscf->getNominalArray();
+
303 size_t n = vec.size();
+
304 double *n_vec = new double[n];
+
305 for (size_t i = 0; i < n; ++i) {
+
306 n_vec[i] = vec[i];
+
307 }
+ +
309 TString nameof = TString(oscf->getName());
+
310 nameof = nameof.Append("_nom");
+
311 t_vec.Write(nameof);
+
312 delete[] n_vec;
+
313 outputFile->cd();
+
314 }
+
315
+
316 return;
+
317}
+
+
318
+
319// *************************
+
320// When using separate oscillations for neutrino and anti-neutrino
+
+ +
322// *************************
+
323
+
324 osc = oscf;
+
325 osc2 = oscf2;
+
326
+
327 if (save_nominal) {
+
328 CovFolder->cd();
+
329 std::vector<double> vec = oscf->getNominalArray();
+
330 size_t n = vec.size();
+
331 double *n_vec = new double[n];
+
332 for (size_t i = 0; i < n; ++i) {
+
333 n_vec[i] = vec[i];
+
334 }
+ +
336 TString nameof = TString(oscf->getName());
+
337 nameof = nameof.Append("_nom");
+
338 t_vec.Write(nameof);
+
339
+
340 std::vector<double> vec2 = oscf2->getNominalArray();
+
341 size_t n2 = vec2.size();
+
342 double *n_vec2 = new double[n];
+
343 for (size_t i = 0; i < n; ++i) {
+
344 n_vec2[i] = vec2[i];
+
345 }
+ +
347 TString nameof2 = TString(oscf2->getName());
+
348 nameof2 = nameof2.Append("_2_nom");
+
349 t_vec2.Write(nameof2);
+
350 delete[] n_vec;
+
351 delete[] n_vec2;
+
352
+
353 outputFile->cd();
+
354 }
+
355
+
356 return;
+
357}
+
+
358
+
359// *************************
+
360// Run LLH scan
+
+ +
362// *************************
+
363
+
364 // Save the settings into the output file
+
365 SaveSettings();
+
366
+
367 MACH3LOG_INFO("Starting LLH Scan");
+
368 int TotalNSamples = 0;
+
369 for(unsigned int i = 0; i < samples.size(); i++ )
+
370 {
+
371 TotalNSamples += samples[i]->GetNsamples();
+
372 }
+
373
+
374 //KS: Turn it on if you want LLH scan for each ND sample separately, which increase time significantly but can be useful for validating new samples or dials.
+
375 bool PlotAllNDsamplesLLH = false;
+
376 if(fitMan->raw()["General"]["LLHScanBySample"])
+
377 PlotAllNDsamplesLLH = fitMan->raw()["General"]["LLHScanBySample"].as<bool>();
+
378
+
379 std::vector<std::string> SkipVector;
+
380 if(fitMan->raw()["General"]["LLHScanSkipVector"])
+
381 {
+
382 SkipVector = fitMan->raw()["General"]["LLHScanSkipVector"].as<std::vector<std::string>>();
+
383 MACH3LOG_INFO("Found skip vector with {} entries", SkipVector.size());
+
384 }
+
385
+
386 // Now finally get onto the LLH scan stuff
+
387 // Very similar code to MCMC but never start MCMC; just scan over the parameter space
+
388
+
389 std::vector<TDirectory *> Cov_LLH(systematics.size());
+
390 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
391 {
+
392 std::string NameTemp = systematics[ivc]->getName();
+
393 NameTemp = NameTemp.substr(0, NameTemp.find("_cov")) + "_LLH";
+
394 Cov_LLH[ivc] = outputFile->mkdir(NameTemp.c_str());
+
395 }
+
396
+
397 std::vector<TDirectory *> SampleClass_LLH(samples.size());
+
398 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
399 {
+
400 std::string NameTemp = samples[ivs]->GetName();
+
401 SampleClass_LLH[ivs] = outputFile->mkdir(NameTemp.c_str());
+
402 }
+
403
+
404 TDirectory *Sample_LLH = outputFile->mkdir("Sample_LLH");
+
405 TDirectory *Total_LLH = outputFile->mkdir("Total_LLH");
+
406
+
407 TDirectory **SampleSplit_LLH = nullptr;
+ +
409 {
+ +
411 int iterator = 0;
+
412 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
413 {
+
414 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
415 {
+
416 SampleSplit_LLH[iterator] = outputFile->mkdir((samples[ivs]->GetSampleName(is)+ "_LLH").c_str());
+
417 iterator++;
+
418 }
+
419 }
+
420 }
+
421 // Number of points we do for each LLH scan
+
422 const int n_points = GetFromManager<int>(fitMan->raw()["General"]["LLHScanPoints"], 100);
+
423
+
424 // We print 5 reweights
+
425 const int countwidth = double(n_points)/double(5);
+
426
+
427 bool isxsec = false;
+
428 // Loop over the covariance classes
+
429 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
430 {
+
431 if (std::string((*it)->getName()) == "xsec_cov")
+
432 {
+
433 isxsec = true;
+
434 } else {
+
435 isxsec = false;
+
436 }
+
437
+
438 // Scan over all the parameters
+
439 // Get the number of parameters
+
440 int npars = (*it)->getSize();
+
441 bool IsPCA = (*it)->IsPCA();
+
442 if (IsPCA) npars = (*it)->getNpars();
+
443 for (int i = 0; i < npars; ++i)
+
444 {
+
445 // Get the parameter name
+
446 std::string name = (*it)->GetParName(i);
+
447 if (IsPCA) name += "_PCA";
+
448 // For xsec we can get the actual name, hurray for being informative
+
449 if (isxsec) name = (*it)->GetParFancyName(i);
+
450 bool skip = false;
+
451 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
452 {
+
453 if(name.substr(0, SkipVector[is].length()) == SkipVector[is])
+
454 {
+
455 skip = true;
+
456 break;
+
457 }
+
458 }
+
459 if(skip) continue;
+
460
+
461 // Get the parameter priors and bounds
+
462 double prior = (*it)->getParInit(i);
+
463 if (IsPCA) prior = (*it)->getParCurr_PCA(i);
+
464
+
465 // Get the covariance matrix and do the +/- nSigma
+
466 double nSigma = 1;
+
467 if (IsPCA) nSigma = 0.5;
+
468 // Set lower and upper bounds relative the prior
+
469 double lower = prior - nSigma*(*it)->getDiagonalError(i);
+
470 double upper = prior + nSigma*(*it)->getDiagonalError(i);
+
471 // If PCA, transform these parameter values to the PCA basis
+
472 if (IsPCA) {
+
473 lower = prior - nSigma*sqrt(((*it)->getEigenValues())(i));
+
474 upper = prior + nSigma*sqrt(((*it)->getEigenValues())(i));
+
475
+
476 std::cout << "eval " << i << " = " << (*it)->getEigenValues()(i) << std::endl;
+
477 std::cout << "prior " << i << " = " << prior << std::endl;
+
478 std::cout << "lower " << i << " = " << lower << std::endl;
+
479 std::cout << "upper " << i << " = " << upper << std::endl;
+
480 std::cout << "nSigma " << nSigma << std::endl;
+
481 }
+
482
+
483 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
484 if (lower < (*it)->GetLowerBound(i)) {
+
485 lower = (*it)->GetLowerBound(i);
+
486 }
+
487 if (upper > (*it)->GetUpperBound(i)) {
+
488 upper = (*it)->GetUpperBound(i);
+
489 }
+
490 MACH3LOG_INFO("Scanning {} with {} steps, from {:.2f} - {:.2f}, prior = {:.2f}", name, n_points, lower, upper, prior);
+
491
+
492 // Make the TH1D
+
493 TH1D *hScan = new TH1D((name+"_full").c_str(), (name+"_full").c_str(), n_points, lower, upper);
+
494 hScan->SetTitle(std::string(std::string("2LLH_full, ") + name + ";" + name + "; -2(ln L_{sample} + ln L_{xsec+flux} + ln L_{det})").c_str());
+
495
+
496 TH1D *hScanSam = new TH1D((name+"_sam").c_str(), (name+"_sam").c_str(), n_points, lower, upper);
+
497 hScanSam->SetTitle(std::string(std::string("2LLH_sam, ") + name + ";" + name + "; -2(ln L_{sample})").c_str());
+
498
+
499
+
500 TH1D **hScanSample = new TH1D*[samples.size()];
+
501 double *nSamLLH = new double[samples.size()];
+
502 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
503 {
+
504 std::string NameTemp = samples[ivs]->GetName();
+
505 hScanSample[ivs] = new TH1D((name+"_"+NameTemp).c_str(), (name+"_" + NameTemp).c_str(), n_points, lower, upper);
+
506 hScanSample[ivs]->SetTitle(std::string(std::string("2LLH_" + NameTemp + ", ") + name + ";" + name + "; -2(ln L_{" + NameTemp +"})").c_str());
+
507 nSamLLH[ivs] = 0.;
+
508 }
+
509
+
510 TH1D **hScanCov = new TH1D*[systematics.size()];
+
511 double *nCovLLH = new double[systematics.size()];
+
512 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
513 {
+
514 std::string NameTemp = systematics[ivc]->getName();
+
515 NameTemp = NameTemp.substr(0, NameTemp.find("_cov"));
+
516
+
517 hScanCov[ivc] = new TH1D((name+"_"+NameTemp).c_str(), (name+"_" + NameTemp).c_str(), n_points, lower, upper);
+
518 hScanCov[ivc]->SetTitle(std::string(std::string("2LLH_" + NameTemp + ", ") + name + ";" + name + "; -2(ln L_{" + NameTemp +"})").c_str());
+
519 nCovLLH[ivc] = 0.;
+
520 }
+
521
+
522 TH1D **hScanSamSplit = nullptr;
+
523 double *sampleSplitllh = nullptr;
+ +
525 {
+
526 int iterator = 0;
+
527 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
528 {
+ +
530 sampleSplitllh = new double[TotalNSamples];
+
531 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
532 {
+
533 hScanSamSplit[iterator] = new TH1D( (name+samples[ivs]->GetSampleName(is)).c_str(), (name+samples[ivs]->GetSampleName(is)).c_str(), n_points, lower, upper );
+
534 hScanSamSplit[iterator]->SetTitle(std::string(std::string("2LLH_sam, ") + name + ";" + name + "; -2(ln L_{sample})").c_str());
+
535 iterator++;
+
536 }
+
537 }
+
538 }
+
539
+
540 // Scan over the parameter space
+
541 for (int j = 0; j < n_points; j++)
+
542 {
+
543 if (j % countwidth == 0)
+ +
545
+
546 // For PCA we have to do it differently
+
547 if (IsPCA) {
+
548 (*it)->setParProp_PCA(i, hScan->GetBinCenter(j+1));
+
549 } else {
+
550 // Set the parameter
+
551 (*it)->setParProp(i, hScan->GetBinCenter(j+1));
+
552 }
+
553
+
554 // Reweight the MC
+
555 double *fake = 0;
+
556 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
557 {
+
558 samples[ivs]->reweight(fake);
+
559 }
+
560 //Total LLH
+
561 double totalllh = 0;
+
562
+
563 // Get the -log L likelihoods
+
564 double samplellh = 0;
+
565
+
566 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
567 {
+
568 nSamLLH[ivs] = samples[ivs]->GetLikelihood();
+ +
570 }
+
571
+
572 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
573 {
+
574 nCovLLH[ivc] = systematics[ivc]->GetLikelihood();
+
575 totalllh += nCovLLH[ivc];
+
576 }
+
577
+ +
579
+ +
581 {
+
582 int iterator = 0;
+
583 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
584 {
+
585 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
586 {
+
587 sampleSplitllh[iterator] = samples[ivs]->getSampleLikelihood(is);
+
588 iterator++;
+
589 }
+
590 }
+
591 }
+
592
+
593 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
594 {
+
595 hScanSample[ivs]->SetBinContent(j+1, 2*nSamLLH[ivs]);
+
596 }
+
597 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
598 {
+
599 hScanCov[ivc]->SetBinContent(j+1, 2*nCovLLH[ivc]);
+
600 }
+
601
+
602 hScanSam->SetBinContent(j+1, 2*samplellh);
+
603 hScan->SetBinContent(j+1, 2*totalllh);
+
604
+ +
606 {
+
607 int iterator = 0;
+
608 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
609 {
+
610 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
611 {
+
612 hScanSamSplit[is]->SetBinContent(j+1, 2*sampleSplitllh[is]);
+
613 iterator++;
+
614 }
+
615 }
+
616 }
+
617 }
+
618 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
619 {
+
620 Cov_LLH[ivc]->cd();
+
621 hScanCov[ivc]->Write();
+
622 delete hScanCov[ivc];
+
623 }
+
624
+
625 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
626 {
+
627 SampleClass_LLH[ivs]->cd();
+
628 hScanSample[ivs]->Write();
+
629 delete hScanSample[ivs];
+
630 }
+
631
+
632 Sample_LLH->cd();
+
633 hScanSam->Write();
+
634 Total_LLH->cd();
+
635 hScan->Write();
+
636
+
637 delete[] hScanCov;
+
638 delete[] nCovLLH;
+
639 delete[] hScanSample;
+
640 delete[] nSamLLH;
+
641 delete hScanSam;
+
642 delete hScan;
+
643
+
644 hScanCov = nullptr;
+
645 nCovLLH = nullptr;
+
646 hScanSample = nullptr;
+
647 nSamLLH = nullptr;
+
648 hScanSam = nullptr;
+
649 hScan = nullptr;
+
650
+ +
652 {
+
653 int iterator = 0;
+
654 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
655 {
+
656 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
657 {
+ +
659 hScanSamSplit[iterator]->Write();
+
660 delete hScanSamSplit[iterator];
+
661 iterator++;
+
662 }
+
663 }
+
664 delete[] hScanSamSplit;
+
665 }
+
666
+
667 // Reset the parameters to their prior central values
+
668 if (IsPCA) {
+
669 (*it)->setParProp_PCA(i, prior);
+
670 } else {
+
671 (*it)->setParProp(i, prior);
+
672 }
+
673 }//end loop over systematics
+
674 }//end loop covariance classes
+
675
+
676 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
677 {
+
678 Cov_LLH[ivc]->Write();
+
679 delete Cov_LLH[ivc];
+
680 }
+
681
+
682 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
683 {
+
684 SampleClass_LLH[ivs]->Write();
+
685 delete SampleClass_LLH[ivs];
+
686 }
+
687
+
688 Sample_LLH->Write();
+
689 delete Sample_LLH;
+
690
+
691 Total_LLH->Write();
+
692 delete Total_LLH;
+
693
+ +
695 {
+
696 int iterator = 0;
+
697 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
698 {
+
699 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
700 {
+
701 SampleSplit_LLH[iterator]->Write();
+ +
703 iterator++;
+
704 }
+
705 }
+
706 }
+
707}
+
+
708
+
709
+
710// *************************
+
711// Run 2D LLH scan
+
+ +
713// *************************
+
714
+
715 // Save the settings into the output file
+
716 SaveSettings();
+
717
+
718 TDirectory *Sample_2DLLH = outputFile->mkdir("Sample_2DLLH");
+
719 std::vector<std::string> SkipVector;
+
720 if(fitMan->raw()["General"]["LLHScanSkipVector"])
+
721 {
+
722 SkipVector = fitMan->raw()["General"]["LLHScanSkipVector"].as<std::vector<std::string>>();
+
723 MACH3LOG_INFO("Found skip vector with {} entries", SkipVector.size());
+
724 }
+
725
+
726 // Number of points we do for each LLH scan
+
727 const int n_points = 20;
+
728 // We print 5 reweights
+
729 const int countwidth = double(n_points)/double(5);
+
730
+
731 bool isxsec = false;
+
732 // Loop over the covariance classes
+
733 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
734 {
+
735 if (std::string((*it)->getName()) == "xsec_cov")
+
736 {
+
737 isxsec = true;
+
738 } else {
+
739 isxsec = false;
+
740 }
+
741 // Scan over all the parameters
+
742 // Get the number of parameters
+
743 int npars = (*it)->getSize();
+
744 bool IsPCA = (*it)->IsPCA();
+
745 if (IsPCA) npars = (*it)->getNpars();
+
746
+
747 for (int i = 0; i < npars; ++i)
+
748 {
+
749
+
750 std::string name_x = (*it)->GetParName(i);
+
751 if (IsPCA) name_x += "_PCA";
+
752 // For xsec we can get the actual name, hurray for being informative
+
753 if (isxsec) name_x = (*it)->GetParFancyName(i);
+
754
+
755 // Get the parameter priors and bounds
+
756 double prior_x = (*it)->getParInit(i);
+
757 if (IsPCA) prior_x = (*it)->getParCurr_PCA(i);
+
758
+
759 // Get the covariance matrix and do the +/- nSigma
+
760 double nSigma = 1;
+
761 if (IsPCA) nSigma = 0.5;
+
762 // Set lower and upper bounds relative the prior
+
763 double lower_x = prior_x - nSigma*(*it)->getDiagonalError(i);
+
764 double upper_x = prior_x + nSigma*(*it)->getDiagonalError(i);
+
765 // If PCA, transform these parameter values to the PCA basis
+
766 if (IsPCA) {
+
767 lower_x = prior_x - nSigma*sqrt(((*it)->getEigenValues())(i));
+
768 upper_x = prior_x + nSigma*sqrt(((*it)->getEigenValues())(i));
+
769
+
770 std::cout << "eval " << i << " = " << (*it)->getEigenValues()(i) << std::endl;
+
771 std::cout << "prior " << i << " = " << prior_x << std::endl;
+
772 std::cout << "lower " << i << " = " << lower_x << std::endl;
+
773 std::cout << "upper " << i << " = " << upper_x << std::endl;
+
774 std::cout << "nSigma " << nSigma << std::endl;
+
775 }
+
776
+
777 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
778 if (lower_x < (*it)->GetLowerBound(i)) {
+
779 lower_x = (*it)->GetLowerBound(i);
+
780 }
+
781 if (upper_x > (*it)->GetUpperBound(i)) {
+
782 upper_x = (*it)->GetUpperBound(i);
+
783 }
+
784
+
785 bool skip = false;
+
786 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
787 {
+
788 if(name_x.substr(0, SkipVector[is].length()) == SkipVector[is])
+
789 {
+
790 skip = true;
+
791 break;
+
792 }
+
793 }
+
794 if(skip) continue;
+
795
+
796 for (int j = 0; j < i; ++j)
+
797 {
+
798 std::string name_y = (*it)->GetParName(j);
+
799 if (IsPCA) name_y += "_PCA";
+
800 // For xsec we can get the actual name, hurray for being informative
+
801 if (isxsec) name_y = (*it)->GetParFancyName(j);
+
802
+
803 bool skip = false;
+
804 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
805 {
+
806 if(name_y.substr(0, SkipVector[is].length()) == SkipVector[is])
+
807 {
+
808 skip = true;
+
809 break;
+
810 }
+
811 }
+
812 if(skip) continue;
+
813
+
814 // Get the parameter priors and bounds
+
815 double prior_y = (*it)->getParInit(j);
+
816 if (IsPCA) prior_y = (*it)->getParCurr_PCA(j);
+
817
+
818 // Set lower and upper bounds relative the prior
+
819 double lower_y = prior_y - nSigma*(*it)->getDiagonalError(j);
+
820 double upper_y = prior_y + nSigma*(*it)->getDiagonalError(j);
+
821 // If PCA, transform these parameter values to the PCA basis
+
822 if (IsPCA) {
+
823 lower_y = prior_y - nSigma*sqrt(((*it)->getEigenValues())(j));
+
824 upper_y = prior_y + nSigma*sqrt(((*it)->getEigenValues())(j));
+
825
+
826 std::cout << "eval " << j << " = " << (*it)->getEigenValues()(j) << std::endl;
+
827 std::cout << "prior " << j << " = " << prior_y << std::endl;
+
828 std::cout << "lower " << j << " = " << lower_y << std::endl;
+
829 std::cout << "upper " << j << " = " << upper_y << std::endl;
+
830 std::cout << "nSigma " << nSigma << std::endl;
+
831 }
+
832
+
833 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
834 if (lower_y < (*it)->GetLowerBound(j)) {
+
835 lower_y = (*it)->GetLowerBound(j);
+
836 }
+
837 if (upper_y > (*it)->GetUpperBound(j)) {
+
838 upper_y = (*it)->GetUpperBound(j);
+
839 }
+
840 MACH3LOG_INFO("Scanning X {} with {} steps, from {} - {}, prior = {}", name_x, n_points, lower_x, upper_x, prior_x);
+
841 MACH3LOG_INFO("Scanning Y {} with {} steps, from {} - {}, prior = {}", name_y, n_points, lower_y, upper_y, prior_y);
+
842
+
843 TH2D *hScanSam = new TH2D((name_x + "_" + name_y + "_sam").c_str(), (name_x + "_" + name_y + "_sam").c_str(), n_points, lower_x, upper_x, n_points, lower_y, upper_y);
+
844 hScanSam->GetXaxis()->SetTitle(name_x.c_str());
+
845 hScanSam->GetYaxis()->SetTitle(name_y.c_str());
+
846 hScanSam->GetZaxis()->SetTitle("2LLH_sam");
+
847
+
848 // Scan over the parameter space
+
849 for (int x = 0; x < n_points; x++)
+
850 {
+
851 if (x % countwidth == 0)
+ +
853
+
854 for (int y = 0; y < n_points; y++)
+
855 {
+
856 // For PCA we have to do it differently
+
857 if (IsPCA) {
+
858 (*it)->setParProp_PCA(i, hScanSam->GetXaxis()->GetBinCenter(x+1));
+
859 (*it)->setParProp_PCA(j, hScanSam->GetYaxis()->GetBinCenter(y+1));
+
860 } else {
+
861 // Set the parameter
+
862 (*it)->setParProp(i, hScanSam->GetXaxis()->GetBinCenter(x+1));
+
863 (*it)->setParProp(j, hScanSam->GetYaxis()->GetBinCenter(y+1));
+
864 }
+
865
+
866 // Reweight the MC
+
867 double *fake = 0;
+
868 for(unsigned int ivs = 0; ivs < samples.size(); ivs++) {
+
869 samples[ivs]->reweight(fake);
+
870 }
+
871
+
872 // Get the -log L likelihoods
+
873 double samplellh = 0;
+
874 for(unsigned int ivs = 0; ivs < samples.size(); ivs++) {
+
875 samplellh += samples[ivs]->GetLikelihood();
+
876 }
+
877 hScanSam->SetBinContent(x+1, y+1, 2*samplellh);
+
878 }// end loop over y points
+
879 } // end loop over x points
+
880
+
881 Sample_2DLLH->cd();
+
882 hScanSam->Write();
+
883
+
884 delete hScanSam;
+
885 hScanSam = nullptr;
+
886
+
887 // Reset the parameters to their prior central values
+
888 if (IsPCA) {
+
889 (*it)->setParProp_PCA(i, prior_x);
+
890 (*it)->setParProp_PCA(j, prior_y);
+
891 } else {
+
892 (*it)->setParProp(i, prior_x);
+
893 (*it)->setParProp(j, prior_y);
+
894 }
+
895 } //end loop over systematics y
+
896 }//end loop over systematics X
+
897 }//end loop covariance classes
+
898
+
899 Sample_2DLLH->Write();
+
900 delete Sample_2DLLH;
+
901
+
902}
+
+ +
#define MACH3LOG_CRITICAL
Definition MaCh3Logger.h:12
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
#define __int__
Definition Structs.h:14
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
void RunLLHScan()
Perform a 1D likelihood scan.
+
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
void addSystObj(covarianceBase *cov)
This function adds a Covariance object to the analysis framework. The Covariance object will be utili...
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
covarianceOsc * osc2
handles oscillation parameters
Definition FitterBase.h:98
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
FitterBase(manager *const fitMan)
Constructor.
+
virtual std::string GetName() const
Get name of class.
Definition FitterBase.h:55
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
bool OutputPrepared
Checks if output prepared not repeat some operations.
Definition FitterBase.h:129
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
unsigned int step
current state
Definition FitterBase.h:71
+
void PrepareOutput()
Prepare the output file.
+
bool SettingsSaved
Checks if setting saved not repeat some operations.
Definition FitterBase.h:127
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
bool FileSaved
Checks if file saved not repeat some operations.
Definition FitterBase.h:125
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
TDirectory * CovFolder
Output cov folder.
Definition FitterBase.h:113
+
TStopwatch * clock
tells global time how long fit took
Definition FitterBase.h:101
+
void addOscHandler(covarianceOsc *oscf)
Adds an oscillation handler for covariance objects.
+
void Run2DLLHScan()
Perform a 2D likelihood scan.
+
void addSamplePDF(samplePDFBase *sample)
This function adds a sample PDF object to the analysis framework. The sample PDF object will be utili...
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
double osc_llh
Definition FitterBase.h:83
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
bool fTestLikelihood
Necessary for some fitting algorithms like PSO.
Definition FitterBase.h:120
+
virtual ~FitterBase()
Destructor.
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
bool save_nominal
save nominal matrix info or not
Definition FitterBase.h:122
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+ +
void setBranches(TTree &tree)
+
virtual std::vector< double > getNominalArray()
+ + +
void SaveSettings(TFile *const OutputFile)
Add manager useful information's to TFile, in most cases to Fitter.
Definition manager.cpp:56
+
YAML::Node const & raw()
Return config.
Definition manager.h:37
+ +
int getValue(std::string Type)
Definition Monitor.cpp:158
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
+ + + + diff --git a/FitterBase_8h.html b/FitterBase_8h.html new file mode 100644 index 00000000..ad23deb6 --- /dev/null +++ b/FitterBase_8h.html @@ -0,0 +1,105 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/FitterBase.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
FitterBase.h File Reference
+
+
+
#include <iostream>
+#include <fstream>
+#include <sstream>
+#include "samplePDF/samplePDFBase.h"
+#include "covariance/covarianceBase.h"
+#include "covariance/covarianceOsc.h"
+#include "manager/manager.h"
+#include "mcmc/MCMCProcessor.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  FitterBase
 
+
+ + + + diff --git a/FitterBase_8h_source.html b/FitterBase_8h_source.html new file mode 100644 index 00000000..c12b541e --- /dev/null +++ b/FitterBase_8h_source.html @@ -0,0 +1,232 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/FitterBase.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FitterBase.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <iostream>
+
4#include <fstream>
+
5#include <sstream>
+
6
+ + + +
10
+
11#include "manager/manager.h"
+
12#include "mcmc/MCMCProcessor.h"
+
13
+
14//KS: Joy of forward declaration https://gieseanw.wordpress.com/2018/02/25/the-joys-of-forward-declarations-results-from-the-real-world/
+
15class TRandom3;
+
16class TStopwatch;
+
17class TTree;
+
18
+
+ +
20
+
21 public:
+
23 FitterBase(manager * const fitMan);
+
25 virtual ~FitterBase();
+
26
+ +
30
+ +
34
+ +
38
+ +
43
+
45 virtual void runMCMC() = 0;
+
46
+
48 void RunLLHScan();
+
49
+
52 void Run2DLLHScan();
+
53
+
55 virtual inline std::string GetName()const {return "FitterBase";};
+
56protected:
+
57
+
59 void PrepareOutput();
+
60
+
62 void SaveOutput();
+
63
+
65 void SaveSettings();
+
66
+ +
69
+
71 unsigned int step;
+
73 double logLCurr;
+
75 double logLProp;
+
77 double accProb;
+ +
80
+
83 double osc_llh;
+
85 double *sample_llh;
+
87 double *syst_llh;
+
88
+
90 std::vector<samplePDFBase*> samples;
+
91
+
93 std::vector<covarianceBase*> systematics;
+
94
+ + +
99
+ + +
105 double stepTime;
+
106
+ +
109
+ + + + +
118
+ + +
123
+ + + +
130
+
131 #ifdef DEBUG
+
133 bool debug;
+
135 std::ofstream debugFile;
+
136 #endif
+
137};
+
+
138
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
void RunLLHScan()
Perform a 1D likelihood scan.
+
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
double logLProp
proposed likelihood
Definition FitterBase.h:75
+
virtual void runMCMC()=0
The specific fitting algorithm implemented in this function depends on the derived class....
+
void addSystObj(covarianceBase *cov)
This function adds a Covariance object to the analysis framework. The Covariance object will be utili...
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
covarianceOsc * osc2
handles oscillation parameters
Definition FitterBase.h:98
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
virtual std::string GetName() const
Get name of class.
Definition FitterBase.h:55
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
bool OutputPrepared
Checks if output prepared not repeat some operations.
Definition FitterBase.h:129
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
unsigned int step
current state
Definition FitterBase.h:71
+
void PrepareOutput()
Prepare the output file.
+
bool SettingsSaved
Checks if setting saved not repeat some operations.
Definition FitterBase.h:127
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
bool FileSaved
Checks if file saved not repeat some operations.
Definition FitterBase.h:125
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
TDirectory * CovFolder
Output cov folder.
Definition FitterBase.h:113
+
TStopwatch * clock
tells global time how long fit took
Definition FitterBase.h:101
+
void addOscHandler(covarianceOsc *oscf)
Adds an oscillation handler for covariance objects.
+
void Run2DLLHScan()
Perform a 2D likelihood scan.
+
void addSamplePDF(samplePDFBase *sample)
This function adds a sample PDF object to the analysis framework. The sample PDF object will be utili...
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
double osc_llh
Definition FitterBase.h:83
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
bool fTestLikelihood
Necessary for some fitting algorithms like PSO.
Definition FitterBase.h:120
+
virtual ~FitterBase()
Destructor.
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
bool save_nominal
save nominal matrix info or not
Definition FitterBase.h:122
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+ + + + + + + + +
+ + + + diff --git a/GetPenaltyTerm_8cpp.html b/GetPenaltyTerm_8cpp.html new file mode 100644 index 00000000..ea0245ef --- /dev/null +++ b/GetPenaltyTerm_8cpp.html @@ -0,0 +1,674 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/GetPenaltyTerm.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
GetPenaltyTerm.cpp File Reference
+
+
+
#include <iostream>
+#include <sstream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include "TFile.h"
+#include "TBranch.h"
+#include "TCanvas.h"
+#include "TLine.h"
+#include "TLegend.h"
+#include "TString.h"
+#include "TStyle.h"
+#include "TMatrixT.h"
+#include "TMatrixDSym.h"
+#include "TVectorD.h"
+#include "TObject.h"
+#include "TChain.h"
+#include "TH1.h"
+#include "TColor.h"
+#include "TObjString.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + +

+Functions

void GetPenaltyTerm (std::string inputFile, std::string configFile)
 
void ReadXSecFile (std::string inputFile)
 
int main (int argc, char *argv[])
 
+ + + + + + + + + + + + + +

+Variables

std::vector< intnominal
 
std::vector< boolisFlat
 
std::vector< TStringBranchNames
 
std::vector< std::stringParamNames
 
int size
 
double ** invCovMatrix
 
+

Function Documentation

+ +

◆ GetPenaltyTerm()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void GetPenaltyTerm (std::string inputFile,
std::string configFile 
)
+
+ +

Definition at line 62 of file GetPenaltyTerm.cpp.

+
63{
+
64 TCanvas* canvas = new TCanvas("canvas", "canvas", 0, 0, 1024, 1024);
+
65 canvas->SetGrid();
+
66 canvas->SetTickx();
+
67 canvas->SetTicky();
+
68 canvas->SetBottomMargin(0.1);
+
69 canvas->SetTopMargin(0.02);
+
70 canvas->SetRightMargin(0.08);
+
71 canvas->SetLeftMargin(0.15);
+
72
+
73 gStyle->SetOptTitle(0);
+
74 gStyle->SetOptStat(0);
+
75 gStyle->SetPalette(51);
+
76
+
77 ReadXSecFile(inputFile);
+
78
+
79 // Open the Chain
+
80 TChain* Chain = new TChain("posteriors","");
+
81 Chain->Add(inputFile.c_str());
+
82
+
83 // Get the list of branches
+
84 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
85
+
86 // Get the number of branches
+
87 int nBranches = brlis->GetEntries();
+
88 int RelevantBranches = 0;
+
89 for (int i = 0; i < nBranches; i++)
+
90 {
+
91 // Get the TBranch and its name
+
92 TBranch* br = (TBranch*)brlis->At(i);
+
93 TString bname = br->GetName();
+
94
+
95 // If we're on beam systematics
+
96 if(bname.BeginsWith("xsec_"))
+
97 {
+
98 BranchNames.push_back(bname);
+ +
100 }
+
101 }
+
102
+
103 // Set all the branches to off
+
104 Chain->SetBranchStatus("*", false);
+
105
+
106 double* fParProp = new double[RelevantBranches];
+
107 // Turn on the branches which we want for parameters
+
108 for (int i = 0; i < RelevantBranches; ++i)
+
109 {
+
110 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
111 Chain->SetBranchAddress(BranchNames[i].Data(), &fParProp[i]);
+
112 }
+
113
+
114 YAML::Node Settings = YAML::LoadFile(configFile.c_str());
+
115
+
116 std::vector<std::string> SetsNames;
+
117 std::vector<std::vector<std::string>> RemoveNames;
+
118 std::vector<bool> Exclude;
+
119 std::vector<std::string> FancyTittle;
+
120
+
121 std::vector<std::vector<bool>> isRelevantParam;
+
122 std::vector<std::string> node = Settings["GetPenaltyTerm"]["PenaltySets"].as<std::vector<std::string>>();
+
123 for (unsigned int i = 0; i < node.size(); i++)
+
124 {
+
125 std::string ParName = node[i];
+
126 SetsNames.push_back(ParName);
+
127
+
128 const auto& Set = Settings["GetPenaltyTerm"][ParName];
+
129
+
130 RemoveNames.push_back(Set[0].as<std::vector<std::string>>());
+
131 Exclude.push_back(Set[1].as<bool>());
+
132 FancyTittle.push_back(Set[2].as<std::string>());
+
133 }
+
134
+
135 const int NSets = SetsNames.size();
+
136
+
137 isRelevantParam.resize(NSets);
+
138 //Loop over sets in the config
+
139 for(int i = 0; i < NSets; i++)
+
140 {
+
141 isRelevantParam[i].resize(size);
+
142 int counter = 0;
+
143 //Loop over paramters in the Covariance object
+
144 for (int j = 0; j < size; j++)
+
145 {
+
146 isRelevantParam[i][j] = false;
+
147
+
148 //KS: Here we loop over all names and if parameters wasn't matched then we set it is relevant. For xsec it is easier to do it liek this
+
149 if(Exclude[i])
+
150 {
+
151 bool found = false;
+
152 for (unsigned int k = 0; k < RemoveNames[i].size(); k++)
+
153 {
+
154 if (ParamNames[j].rfind(RemoveNames[i][k], 0) == 0)
+
155 {
+
156 found = true;
+
157 }
+
158 }
+
159 if(!found)
+
160 {
+
161 isRelevantParam[i][j] = true;
+
162 counter++;
+
163 }
+
164 }
+
165 //KS: Here is much simpler, if parameter matched then it is relevant
+
166 else
+
167 {
+
168 for (unsigned int k = 0; k < RemoveNames[i].size(); k++)
+
169 {
+
170 if (ParamNames[j].rfind(RemoveNames[i][k], 0) == 0)
+
171 {
+
172 isRelevantParam[i][j] = true;
+
173 counter++;
+
174 break;
+
175 }
+
176 }
+
177 }
+
178 }
+
179 std::cout<<" Found "<<counter<<" params for set "<<SetsNames[i]<<std::endl;
+
180 }
+
181
+
182 int AllEvents = Chain->GetEntries();
+
183 TH1D **hLogL = new TH1D *[NSets];
+
184 for(int i = 0; i < NSets; i++)
+
185 {
+
186 std::string NameTemp = "LogL_" + SetsNames[i];
+
187 hLogL[i] = new TH1D(NameTemp.c_str(), NameTemp.c_str(), AllEvents, 0 , AllEvents);
+
188 hLogL[i]->SetLineColor(kBlue);
+
189 }
+
190 double* logL = new double[NSets]();
+
191 for(int i = 0; i < AllEvents; i++)
+
192 {
+
193 if(i%10000 == 0) std::cout<<i<<std::endl;
+
194
+
195 Chain->GetEntry(i);
+
196
+
197 for(int k = 0; k < NSets; ++k) logL[k] = 0.;
+
198#ifdef MULTITHREAD
+
199 // The per-thread array
+
200 double *logL_private = nullptr;
+
201
+
202 // Declare the omp parallel region
+
203 // The parallel region needs to stretch beyond the for loop!
+
204 #pragma omp parallel private(logL_private)
+
205 {
+
206 logL_private = new double[NSets]();
+
207 for(int k = 0; k < NSets; ++k) logL_private[k] = 0.;
+
208
+
209 #pragma omp for
+
210 for (int i = 0; i < size; i++)
+
211 {
+
212 for (int j = 0; j <= i; ++j)
+
213 {
+
214 //check if flat prior
+
215 if (!isFlat[i] && !isFlat[j])
+
216 {
+
217 for(int k = 0; k < NSets; ++k)
+
218 {
+
219 //Check if parameter is relevant for this set
+ +
221 {
+
222 //KS: Since matrix is symmetric we can calcaute non diagonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
223 int scale = 1;
+
224 if(i != j) scale = 2;
+ +
226 }
+
227 }
+
228 }
+
229 }
+
230 }
+
231 // Now we can write the individual arrays from each thread to the main array
+
232 for(int k = 0; k < NSets; ++k)
+
233 {
+
234 #pragma omp atomic
+
235 logL[k] += logL_private[k];
+
236 }
+
237 //Delete private arrayss
+
238 delete[] logL_private;
+
239 }//End omp range
+
240
+
241#else
+
242 for (int i = 0; i < size; i++)
+
243 {
+
244 for (int j = 0; j <= i; ++j)
+
245 {
+
246 //check if flat prior
+
247 if (!isFlat[i] && !isFlat[j])
+
248 {
+
249 for(int k = 0; k < NSets; ++k)
+
250 {
+
251 //Check if parameter is relevant for this set
+ +
253 {
+
254 //KS: Since matrix is symetric we can calcaute non daigonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
255 int scale = 1;
+
256 if(i != j) scale = 2;
+
257 logL[k] += scale * 0.5*(fParProp[i] - nominal[i])*(fParProp[j] - nominal[j])*invCovMatrix[i][j];
+
258 }
+
259 }
+
260 }
+
261 }
+
262 }
+
263#endif
+
264 for(int k = 0; k < NSets; ++k)
+
265 {
+
266 hLogL[k]->SetBinContent(i, logL[k]);
+
267 }
+
268 }//End loop over steps
+
269
+
270 delete[] logL;
+
271 // Directory for posteriors
+
272 std::string OutputName = inputFile + "_PenaltyTerm" +".root";
+
273 TFile* OutputFile = new TFile(OutputName.c_str(), "recreate");
+
274 TDirectory *PenaltyTermDir = OutputFile->mkdir("PenaltyTerm");
+
275
+
276 canvas->Print(Form("%s_PenaltyTerm.pdf[",inputFile.c_str()), "pdf");
+
277 for(int i = 0; i < NSets; i++)
+
278 {
+
279 double Maximum = hLogL[i]->GetMaximum();
+
280 hLogL[i]->GetYaxis()->SetRangeUser(0., Maximum*1.2);
+
281 hLogL[i]->SetTitle(FancyTittle[i].c_str());
+
282 hLogL[i]->GetXaxis()->SetTitle("Step");
+
283 hLogL[i]->GetYaxis()->SetTitle(FancyTittle[i].c_str());
+
284 hLogL[i]->GetYaxis()->SetTitleOffset(1.4);
+
285
+
286 hLogL[i]->Draw("");
+
287
+
288 PenaltyTermDir->cd();
+
289 hLogL[i]->Write();
+
290
+
291 canvas->Print(Form("%s_PenaltyTerm.pdf",inputFile.c_str()), "pdf");
+
292 delete hLogL[i];
+
293 }
+
294 canvas->Print(Form("%s_PenaltyTerm.pdf]",inputFile.c_str()), "pdf");
+
295 delete[] hLogL;
+
296 delete[] fParProp;
+
297 delete Chain;
+
298 delete canvas;
+
299
+
300 for (int i = 0; i < size; i++)
+
301 {
+
302 delete[] invCovMatrix[i];
+
303 }
+
304 delete[] invCovMatrix;
+
305}
+
std::vector< int > nominal
+
double ** invCovMatrix
+
int size
+
std::vector< std::string > ParamNames
+
std::vector< TString > BranchNames
+
void ReadXSecFile(std::string inputFile)
+
std::vector< bool > isFlat
+
TChain * Chain
Definition RHat.cpp:38
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 45 of file GetPenaltyTerm.cpp.

+
46{
+ +
48 if (argc != 3 )
+
49 {
+
50 std::cerr<< " Something went wrong " << std::endl;
+
51 std::cerr << "./GetPenaltyTerm root_file_to_analyse.root " << std::endl;
+
52 exit(-1);
+
53 }
+
54 std::string filename = argv[1];
+
55 std::string config = argv[2];
+ +
57
+
58 return 0;
+
59}
+
void GetPenaltyTerm(std::string inputFile, std::string configFile)
+
YAML::Node config
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
+
+
+ +

◆ ReadXSecFile()

+ +
+
+ + + + + + + + +
void ReadXSecFile (std::string inputFile)
+
+ +

Definition at line 307 of file GetPenaltyTerm.cpp.

+
308{
+
309 // Now read the MCMC file
+
310 TFile *TempFile = new TFile(inputFile.c_str(), "open");
+
311
+
312 // Get the matrix
+
313 TMatrixDSym *XSecMatrix = (TMatrixDSym*)(TempFile->Get("CovarianceFolder/xsec_cov"));
+
314
+
315 // Get the settings for the MCMC
+
316 TMacro *Config = (TMacro*)(TempFile->Get("MaCh3_Config"));
+
317 if (Config == nullptr) {
+
318 MACH3LOG_ERROR("Didn't find MaCh3_Config tree in MCMC file! {}", inputFile);
+
319 TempFile->ls();
+
320 throw;
+
321 }
+
322
+
323 YAML::Node Settings = TMacroToYAML(*Config);
+
324
+
325 //CW: Get the xsec Covariance matrix
+
326 std::vector<std::string> XsecCovPos = GetFromManager<std::vector<std::string>>(Settings["General"]["Systematics"]["XsecCovFile"], {"none"});
+
327 if(XsecCovPos.back() == "none")
+
328 {
+
329 MACH3LOG_WARN("Couldn't find XsecCov branch in output");
+
330 std::cout<<Settings<<std::endl;
+
331 throw;
+
332 }
+
333
+
334 //KS:Most inputs are in ${MACH3}/inputs/blarb.root
+
335 if (std::getenv("MACH3") != nullptr) {
+
336 MACH3LOG_INFO("Found MACH3 environment variable: {}", std::getenv("MACH3"));
+
337 for(unsigned int i = 0; i < XsecCovPos.size(); i++)
+
338 XsecCovPos[i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
339 }
+
340
+
341 YAML::Node XSecFile;
+
342 XSecFile["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
343 for(unsigned int i = 0; i < XsecCovPos.size(); i++)
+
344 {
+
345 YAML::Node YAMLDocTemp = YAML::LoadFile(XsecCovPos[i]);
+
346 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
347 XSecFile["Systematics"].push_back(item);
+
348 }
+
349 }
+
350
+
351
+
352 size = XSecMatrix->GetNrows();
+
353
+
354 auto systematics = XSecFile["Systematics"];
+
355 int i = 0;
+
356 for (auto it = systematics.begin(); it != systematics.end(); ++it, ++i)
+
357 {
+
358 auto const &param = *it;
+
359
+
360 ParamNames.push_back(param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
361 nominal.push_back( param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>() );
+
362
+
363 bool flat = false;
+
364 if (param["Systematic"]["FlatPrior"]) { flat = param["Systematic"]["FlatPrior"].as<bool>(); }
+
365 isFlat.push_back( flat );
+
366 }
+
367
+
368 XSecMatrix->Invert();
+
369 //KS: Let's use double as it is faster than TMatrix
+
370 invCovMatrix = new double*[size];
+
371 for (int i = 0; i < size; i++)
+
372 {
+
373 invCovMatrix[i] = new double[size];
+
374 for (int j = 0; j < size; ++j)
+
375 {
+
376 invCovMatrix[i][j] = -999;
+
377 }
+
378 }
+
379#ifdef MULTITHREAD
+
380#pragma omp parallel for
+
381#endif
+
382 for (int i = 0; i < size; i++)
+
383 {
+
384 for (int j = 0; j < size; ++j)
+
385 {
+
386 invCovMatrix[i][j] = (*XSecMatrix)(i,j);
+
387 }
+
388 }
+
389
+
390 TempFile->Close();
+
391 delete TempFile;
+
392}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
+
+
+

Variable Documentation

+ +

◆ BranchNames

+ +
+
+ + + + +
std::vector<TString> BranchNames
+
+ +

Definition at line 39 of file GetPenaltyTerm.cpp.

+ +
+
+ +

◆ invCovMatrix

+ +
+
+ + + + +
double** invCovMatrix
+
+ +

Definition at line 43 of file GetPenaltyTerm.cpp.

+ +
+
+ +

◆ isFlat

+ +
+
+ + + + +
std::vector<bool> isFlat
+
+ +

Definition at line 38 of file GetPenaltyTerm.cpp.

+ +
+
+ +

◆ nominal

+ +
+
+ + + + +
std::vector<int> nominal
+
+ +

Definition at line 37 of file GetPenaltyTerm.cpp.

+ +
+
+ +

◆ ParamNames

+ +
+
+ + + + +
std::vector<std::string> ParamNames
+
+ +

Definition at line 40 of file GetPenaltyTerm.cpp.

+ +
+
+ +

◆ size

+ +
+
+ + + + +
int size
+
+ +

Definition at line 41 of file GetPenaltyTerm.cpp.

+ +
+
+
+ + + + diff --git a/GetPenaltyTerm_8cpp_source.html b/GetPenaltyTerm_8cpp_source.html new file mode 100644 index 00000000..62f295a2 --- /dev/null +++ b/GetPenaltyTerm_8cpp_source.html @@ -0,0 +1,508 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/GetPenaltyTerm.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GetPenaltyTerm.cpp
+
+
+Go to the documentation of this file.
1// C++ includes
+
2#include <iostream>
+
3#include <sstream>
+
4#include <iomanip>
+
5#include <vector>
+
6#include <algorithm>
+
7
+
8// ROOT includes
+
9#include "TFile.h"
+
10#include "TBranch.h"
+
11#include "TCanvas.h"
+
12#include "TLine.h"
+
13#include "TLegend.h"
+
14#include "TString.h"
+
15#include "TStyle.h"
+
16#include "TMatrixT.h"
+
17#include "TMatrixDSym.h"
+
18#include "TVectorD.h"
+
19#include "TObject.h"
+
20#include "TChain.h"
+
21#include "TH1.h"
+
22#include "TColor.h"
+
23#include "TObjString.h"
+
24
+
25#ifdef MULTITHREAD
+
26#include "omp.h"
+
27#endif
+
28
+
29#include "manager/manager.h"
+
30
+
31//KS: Simple script to get whatever penalty term you like, since flux and xsec are on systematic we cannot just directly take it from the chain
+
32//g++ `root-config --cflags` -std=c++11 -g -o GetPenaltyTerm GetPenaltyTerm.cpp -I`root-config --incdir` `root-config --glibs --libs`
+
33
+
34void GetPenaltyTerm(std::string inputFile, std::string configFile);
+
35void ReadXSecFile(std::string inputFile);
+
36
+
37std::vector <int> nominal;
+
38std::vector <bool> isFlat;
+
39std::vector<TString> BranchNames;
+
40std::vector<std::string> ParamNames;
+
41int size;
+
42
+
43double** invCovMatrix;
+
44
+
+
45int main(int argc, char *argv[])
+
46{
+ +
48 if (argc != 3 )
+
49 {
+
50 std::cerr<< " Something went wrong " << std::endl;
+
51 std::cerr << "./GetPenaltyTerm root_file_to_analyse.root " << std::endl;
+
52 exit(-1);
+
53 }
+
54 std::string filename = argv[1];
+
55 std::string config = argv[2];
+ +
57
+
58 return 0;
+
59}
+
+
60
+
61//KS: This should really be moved to MCMC Processor
+
+
62void GetPenaltyTerm(std::string inputFile, std::string configFile)
+
63{
+
64 TCanvas* canvas = new TCanvas("canvas", "canvas", 0, 0, 1024, 1024);
+
65 canvas->SetGrid();
+
66 canvas->SetTickx();
+
67 canvas->SetTicky();
+
68 canvas->SetBottomMargin(0.1);
+
69 canvas->SetTopMargin(0.02);
+
70 canvas->SetRightMargin(0.08);
+
71 canvas->SetLeftMargin(0.15);
+
72
+
73 gStyle->SetOptTitle(0);
+
74 gStyle->SetOptStat(0);
+
75 gStyle->SetPalette(51);
+
76
+
77 ReadXSecFile(inputFile);
+
78
+
79 // Open the Chain
+
80 TChain* Chain = new TChain("posteriors","");
+
81 Chain->Add(inputFile.c_str());
+
82
+
83 // Get the list of branches
+
84 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
85
+
86 // Get the number of branches
+
87 int nBranches = brlis->GetEntries();
+
88 int RelevantBranches = 0;
+
89 for (int i = 0; i < nBranches; i++)
+
90 {
+
91 // Get the TBranch and its name
+
92 TBranch* br = (TBranch*)brlis->At(i);
+
93 TString bname = br->GetName();
+
94
+
95 // If we're on beam systematics
+
96 if(bname.BeginsWith("xsec_"))
+
97 {
+
98 BranchNames.push_back(bname);
+ +
100 }
+
101 }
+
102
+
103 // Set all the branches to off
+
104 Chain->SetBranchStatus("*", false);
+
105
+
106 double* fParProp = new double[RelevantBranches];
+
107 // Turn on the branches which we want for parameters
+
108 for (int i = 0; i < RelevantBranches; ++i)
+
109 {
+
110 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
111 Chain->SetBranchAddress(BranchNames[i].Data(), &fParProp[i]);
+
112 }
+
113
+
114 YAML::Node Settings = YAML::LoadFile(configFile.c_str());
+
115
+
116 std::vector<std::string> SetsNames;
+
117 std::vector<std::vector<std::string>> RemoveNames;
+
118 std::vector<bool> Exclude;
+
119 std::vector<std::string> FancyTittle;
+
120
+
121 std::vector<std::vector<bool>> isRelevantParam;
+
122 std::vector<std::string> node = Settings["GetPenaltyTerm"]["PenaltySets"].as<std::vector<std::string>>();
+
123 for (unsigned int i = 0; i < node.size(); i++)
+
124 {
+
125 std::string ParName = node[i];
+
126 SetsNames.push_back(ParName);
+
127
+
128 const auto& Set = Settings["GetPenaltyTerm"][ParName];
+
129
+
130 RemoveNames.push_back(Set[0].as<std::vector<std::string>>());
+
131 Exclude.push_back(Set[1].as<bool>());
+
132 FancyTittle.push_back(Set[2].as<std::string>());
+
133 }
+
134
+
135 const int NSets = SetsNames.size();
+
136
+
137 isRelevantParam.resize(NSets);
+
138 //Loop over sets in the config
+
139 for(int i = 0; i < NSets; i++)
+
140 {
+
141 isRelevantParam[i].resize(size);
+
142 int counter = 0;
+
143 //Loop over paramters in the Covariance object
+
144 for (int j = 0; j < size; j++)
+
145 {
+
146 isRelevantParam[i][j] = false;
+
147
+
148 //KS: Here we loop over all names and if parameters wasn't matched then we set it is relevant. For xsec it is easier to do it liek this
+
149 if(Exclude[i])
+
150 {
+
151 bool found = false;
+
152 for (unsigned int k = 0; k < RemoveNames[i].size(); k++)
+
153 {
+
154 if (ParamNames[j].rfind(RemoveNames[i][k], 0) == 0)
+
155 {
+
156 found = true;
+
157 }
+
158 }
+
159 if(!found)
+
160 {
+
161 isRelevantParam[i][j] = true;
+
162 counter++;
+
163 }
+
164 }
+
165 //KS: Here is much simpler, if parameter matched then it is relevant
+
166 else
+
167 {
+
168 for (unsigned int k = 0; k < RemoveNames[i].size(); k++)
+
169 {
+
170 if (ParamNames[j].rfind(RemoveNames[i][k], 0) == 0)
+
171 {
+
172 isRelevantParam[i][j] = true;
+
173 counter++;
+
174 break;
+
175 }
+
176 }
+
177 }
+
178 }
+
179 std::cout<<" Found "<<counter<<" params for set "<<SetsNames[i]<<std::endl;
+
180 }
+
181
+
182 int AllEvents = Chain->GetEntries();
+
183 TH1D **hLogL = new TH1D *[NSets];
+
184 for(int i = 0; i < NSets; i++)
+
185 {
+
186 std::string NameTemp = "LogL_" + SetsNames[i];
+
187 hLogL[i] = new TH1D(NameTemp.c_str(), NameTemp.c_str(), AllEvents, 0 , AllEvents);
+
188 hLogL[i]->SetLineColor(kBlue);
+
189 }
+
190 double* logL = new double[NSets]();
+
191 for(int i = 0; i < AllEvents; i++)
+
192 {
+
193 if(i%10000 == 0) std::cout<<i<<std::endl;
+
194
+
195 Chain->GetEntry(i);
+
196
+
197 for(int k = 0; k < NSets; ++k) logL[k] = 0.;
+
198#ifdef MULTITHREAD
+
199 // The per-thread array
+
200 double *logL_private = nullptr;
+
201
+
202 // Declare the omp parallel region
+
203 // The parallel region needs to stretch beyond the for loop!
+
204 #pragma omp parallel private(logL_private)
+
205 {
+
206 logL_private = new double[NSets]();
+
207 for(int k = 0; k < NSets; ++k) logL_private[k] = 0.;
+
208
+
209 #pragma omp for
+
210 for (int i = 0; i < size; i++)
+
211 {
+
212 for (int j = 0; j <= i; ++j)
+
213 {
+
214 //check if flat prior
+
215 if (!isFlat[i] && !isFlat[j])
+
216 {
+
217 for(int k = 0; k < NSets; ++k)
+
218 {
+
219 //Check if parameter is relevant for this set
+ +
221 {
+
222 //KS: Since matrix is symmetric we can calcaute non diagonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
223 int scale = 1;
+
224 if(i != j) scale = 2;
+ +
226 }
+
227 }
+
228 }
+
229 }
+
230 }
+
231 // Now we can write the individual arrays from each thread to the main array
+
232 for(int k = 0; k < NSets; ++k)
+
233 {
+
234 #pragma omp atomic
+
235 logL[k] += logL_private[k];
+
236 }
+
237 //Delete private arrayss
+
238 delete[] logL_private;
+
239 }//End omp range
+
240
+
241#else
+
242 for (int i = 0; i < size; i++)
+
243 {
+
244 for (int j = 0; j <= i; ++j)
+
245 {
+
246 //check if flat prior
+
247 if (!isFlat[i] && !isFlat[j])
+
248 {
+
249 for(int k = 0; k < NSets; ++k)
+
250 {
+
251 //Check if parameter is relevant for this set
+ +
253 {
+
254 //KS: Since matrix is symetric we can calcaute non daigonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
255 int scale = 1;
+
256 if(i != j) scale = 2;
+
257 logL[k] += scale * 0.5*(fParProp[i] - nominal[i])*(fParProp[j] - nominal[j])*invCovMatrix[i][j];
+
258 }
+
259 }
+
260 }
+
261 }
+
262 }
+
263#endif
+
264 for(int k = 0; k < NSets; ++k)
+
265 {
+
266 hLogL[k]->SetBinContent(i, logL[k]);
+
267 }
+
268 }//End loop over steps
+
269
+
270 delete[] logL;
+
271 // Directory for posteriors
+
272 std::string OutputName = inputFile + "_PenaltyTerm" +".root";
+
273 TFile* OutputFile = new TFile(OutputName.c_str(), "recreate");
+
274 TDirectory *PenaltyTermDir = OutputFile->mkdir("PenaltyTerm");
+
275
+
276 canvas->Print(Form("%s_PenaltyTerm.pdf[",inputFile.c_str()), "pdf");
+
277 for(int i = 0; i < NSets; i++)
+
278 {
+
279 double Maximum = hLogL[i]->GetMaximum();
+
280 hLogL[i]->GetYaxis()->SetRangeUser(0., Maximum*1.2);
+
281 hLogL[i]->SetTitle(FancyTittle[i].c_str());
+
282 hLogL[i]->GetXaxis()->SetTitle("Step");
+
283 hLogL[i]->GetYaxis()->SetTitle(FancyTittle[i].c_str());
+
284 hLogL[i]->GetYaxis()->SetTitleOffset(1.4);
+
285
+
286 hLogL[i]->Draw("");
+
287
+
288 PenaltyTermDir->cd();
+
289 hLogL[i]->Write();
+
290
+
291 canvas->Print(Form("%s_PenaltyTerm.pdf",inputFile.c_str()), "pdf");
+
292 delete hLogL[i];
+
293 }
+
294 canvas->Print(Form("%s_PenaltyTerm.pdf]",inputFile.c_str()), "pdf");
+
295 delete[] hLogL;
+
296 delete[] fParProp;
+
297 delete Chain;
+
298 delete canvas;
+
299
+
300 for (int i = 0; i < size; i++)
+
301 {
+
302 delete[] invCovMatrix[i];
+
303 }
+
304 delete[] invCovMatrix;
+
305}
+
+
306
+
+
307void ReadXSecFile(std::string inputFile)
+
308{
+
309 // Now read the MCMC file
+
310 TFile *TempFile = new TFile(inputFile.c_str(), "open");
+
311
+
312 // Get the matrix
+
313 TMatrixDSym *XSecMatrix = (TMatrixDSym*)(TempFile->Get("CovarianceFolder/xsec_cov"));
+
314
+
315 // Get the settings for the MCMC
+
316 TMacro *Config = (TMacro*)(TempFile->Get("MaCh3_Config"));
+
317 if (Config == nullptr) {
+
318 MACH3LOG_ERROR("Didn't find MaCh3_Config tree in MCMC file! {}", inputFile);
+
319 TempFile->ls();
+
320 throw;
+
321 }
+
322
+
323 YAML::Node Settings = TMacroToYAML(*Config);
+
324
+
325 //CW: Get the xsec Covariance matrix
+
326 std::vector<std::string> XsecCovPos = GetFromManager<std::vector<std::string>>(Settings["General"]["Systematics"]["XsecCovFile"], {"none"});
+
327 if(XsecCovPos.back() == "none")
+
328 {
+
329 MACH3LOG_WARN("Couldn't find XsecCov branch in output");
+
330 std::cout<<Settings<<std::endl;
+
331 throw;
+
332 }
+
333
+
334 //KS:Most inputs are in ${MACH3}/inputs/blarb.root
+
335 if (std::getenv("MACH3") != nullptr) {
+
336 MACH3LOG_INFO("Found MACH3 environment variable: {}", std::getenv("MACH3"));
+
337 for(unsigned int i = 0; i < XsecCovPos.size(); i++)
+
338 XsecCovPos[i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
339 }
+
340
+
341 YAML::Node XSecFile;
+
342 XSecFile["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
343 for(unsigned int i = 0; i < XsecCovPos.size(); i++)
+
344 {
+
345 YAML::Node YAMLDocTemp = YAML::LoadFile(XsecCovPos[i]);
+
346 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
347 XSecFile["Systematics"].push_back(item);
+
348 }
+
349 }
+
350
+
351
+
352 size = XSecMatrix->GetNrows();
+
353
+
354 auto systematics = XSecFile["Systematics"];
+
355 int i = 0;
+
356 for (auto it = systematics.begin(); it != systematics.end(); ++it, ++i)
+
357 {
+
358 auto const &param = *it;
+
359
+
360 ParamNames.push_back(param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
361 nominal.push_back( param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>() );
+
362
+
363 bool flat = false;
+
364 if (param["Systematic"]["FlatPrior"]) { flat = param["Systematic"]["FlatPrior"].as<bool>(); }
+
365 isFlat.push_back( flat );
+
366 }
+
367
+
368 XSecMatrix->Invert();
+
369 //KS: Let's use double as it is faster than TMatrix
+
370 invCovMatrix = new double*[size];
+
371 for (int i = 0; i < size; i++)
+
372 {
+
373 invCovMatrix[i] = new double[size];
+
374 for (int j = 0; j < size; ++j)
+
375 {
+
376 invCovMatrix[i][j] = -999;
+
377 }
+
378 }
+
379#ifdef MULTITHREAD
+
380#pragma omp parallel for
+
381#endif
+
382 for (int i = 0; i < size; i++)
+
383 {
+
384 for (int j = 0; j < size; ++j)
+
385 {
+
386 invCovMatrix[i][j] = (*XSecMatrix)(i,j);
+
387 }
+
388 }
+
389
+
390 TempFile->Close();
+
391 delete TempFile;
+
392}
+
+
int main(int argc, char *argv[])
+
std::vector< int > nominal
+
double ** invCovMatrix
+
int size
+
std::vector< std::string > ParamNames
+
std::vector< TString > BranchNames
+
void GetPenaltyTerm(std::string inputFile, std::string configFile)
+
void ReadXSecFile(std::string inputFile)
+
std::vector< bool > isFlat
+
YAML::Node config
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
TChain * Chain
Definition RHat.cpp:38
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+ + + + diff --git a/GetPostfitParamPlots_8cpp.html b/GetPostfitParamPlots_8cpp.html new file mode 100644 index 00000000..3a2cd980 --- /dev/null +++ b/GetPostfitParamPlots_8cpp.html @@ -0,0 +1,2088 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/GetPostfitParamPlots.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
GetPostfitParamPlots.cpp File Reference
+
+
+
#include <iostream>
+#include <sstream>
+#include <iomanip>
+#include <algorithm>
+#include "TROOT.h"
+#include "TGaxis.h"
+#include "TString.h"
+#include "TStyle.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TF1.h"
+#include "TLegend.h"
+#include "TPad.h"
+#include "TCanvas.h"
+#include "TTree.h"
+#include "TFile.h"
+#include "TVectorD.h"
+#include "TGraphAsymmErrors.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

TH1DgetOtherFileHist (TFile *otherFile, TH1D *refHist)
 
void copyParToBlockHist (int localBin, std::string paramName, TH1D *blockHist, TH1D *fullHist, bool setLabels=true)
 
void setTH1Style (TH1 *hist, std::string styleName)
 
TH1DmakeRatio (TH1D *PrefitCopy, TH1D *PostfitCopy, bool setAxes)
 
void DrawPlots (TCanvas *canv, TH1D *PrefitCopy, std::vector< TH1D * >PostfitVec, TPad *mainPad, TPad *ratioPad)
 
std::string FancyTitles (std::string origName)
 
void PrettifyTitles (TH1D *Hist)
 
void PrettifyTitles (TH2D *Hist)
 
void ReadSettings (TFile *File1)
 
void MakeXsecPlots ()
 
void MakeFluxPlots ()
 
void MakeNDDetPlots ()
 
void MakeFDDetPlots ()
 
void MakeOscPlots ()
 
void GetPostfitParamPlots ()
 
TGraphAsymmErrorsMakeTGraphAsymmErrors (TFile *File)
 
void GetViolinPlots (std::string FileName1="", std::string FileName2="")
 
int main (int argc, char *argv[])
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

YAML::Node config
 
std::vector< std::stringFileNames
 
std::vector< std::stringFileLabel = {"Postfit", "Second File", "Third File"}
 
std::vector< TH1D * > PostfitHistVec
 
TH1DPrefit
 
TH2DViolinPre
 
TH2DViolin
 
TH2DViolin2
 
int CrossSectionParameters
 
int FluxParameters
 
int XsecStartingPos
 
int NDParameters
 
int NDParametersStartingPos
 
int FDParameters
 
int FDParametersStartingPos
 
int OscParameters
 
int OscParametersStartingPos
 
std::vector< intNDSamplesBins
 
std::vector< std::stringNDSamplesNames
 
int nBins
 
TCanvascanv
 
std::string SaveName
 
TPadp1
 
TPadp2
 
TPadp3
 
TPadp4
 
Color_t PlotColor [] = {kRed, kBlack, kBlue, kGreen}
 
std::string plotType
 
+

Function Documentation

+ +

◆ copyParToBlockHist()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void copyParToBlockHist (int localBin,
std::string paramName,
TH1DblockHist,
TH1DfullHist,
bool setLabels = true 
)
+
+ +

Definition at line 82 of file GetPostfitParamPlots.cpp.

+
82 {
+
83 // EM: copy parameter from the large TH1 to another hist, finding it in the larger one by name
+
84 int globalBin = 0;
+
85 bool Found = false;
+
86 for (; globalBin <= fullHist->GetNbinsX(); globalBin++) {
+
87 if(std::string(fullHist->GetXaxis()->GetBinLabel(globalBin)) == paramName)
+
88 {
+
89 Found = true;
+
90 break;
+
91 }
+
92 }
+
93
+
94 if(!Found){
+
95 std::cerr << "ERROR: Could not find parameter " << paramName << ", given as part of the group " << blockHist->GetTitle() << std::endl;
+
96 throw;
+
97 }
+
98
+
99 // Set the values in the sub-histograms
+
100 blockHist->SetBinContent(localBin +1, fullHist->GetBinContent(globalBin));
+
101 blockHist->SetBinError(localBin +1, fullHist->GetBinError(globalBin));
+
102
+
103 if(setLabels){
+
104 blockHist->GetXaxis()->SetBinLabel(localBin +1, paramName.c_str());
+
105 blockHist->GetXaxis()->LabelsOption("v");
+
106 }
+
107}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ DrawPlots()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void DrawPlots (TCanvascanv,
TH1DPrefitCopy,
std::vector< TH1D * > PostfitVec,
TPadmainPad,
TPadratioPad 
)
+
+inline
+
+ +

Definition at line 189 of file GetPostfitParamPlots.cpp.

+
189 {
+
190 // EM: Draw!
+
191 canv->cd();
+
192 mainPad->Draw();
+
193 mainPad->cd();
+
194 PrefitCopy->GetYaxis()->SetTitle("Parameter Value");
+
195
+
196 PrefitCopy->GetYaxis()->SetLabelSize(0.);
+
197 PrefitCopy->GetYaxis()->SetTitleSize(0.05);
+
198 PrefitCopy->GetYaxis()->SetTitleOffset(1.3);
+
199 PrefitCopy->Draw("e2");
+
200
+
201 for(int fileId=0; fileId < (int)PostfitVec.size(); fileId++){
+ +
203
+
204 postFitHist->SetMarkerColor(PlotColor[fileId+1]);
+
205 postFitHist->SetLineColor(PlotColor[fileId+1]);
+
206 postFitHist->SetMarkerStyle(7);
+
207 postFitHist->SetLineStyle(1+fileId);
+
208 postFitHist->SetLineWidth(2);
+
209
+
210 postFitHist->Draw("e1, same");
+
211 }
+
212
+
213 canv->Update();
+
214 TGaxis *axis = new TGaxis(PrefitCopy->GetXaxis()->GetBinLowEdge(PrefitCopy->GetXaxis()->GetFirst()), gPad->GetUymin()+0.01,
+
215 PrefitCopy->GetXaxis()->GetBinLowEdge(PrefitCopy->GetXaxis()->GetFirst()), gPad->GetUymax(),
+
216 gPad->GetUymin()+0.01, gPad->GetUymax(), 510, "");
+
217 axis->SetLabelFont(43);
+
218 axis->SetLabelSize(25);
+
219 axis->Draw();
+
220
+
221 canv->cd();
+
222 ratioPad->Draw();
+
223 ratioPad->cd();
+
224
+
225 std::vector<TH1D*> ratioHists;
+
226
+
227 // save pointers to these so we can delete them once we are done
+
228 ratioHists.push_back(makeRatio(PrefitCopy, PostfitVec[0], true));
+
229
+
230 ratioHists[0]->Draw("p");
+
231 for(int postFitIdx = 1; postFitIdx < (int)PostfitVec.size(); postFitIdx++){
+ +
233
+
234 ratioHists[postFitIdx]->SetMarkerColor(TColor::GetColorPalette(postFitIdx));
+
235 ratioHists[postFitIdx]->SetLineColor(TColor::GetColorPalette(postFitIdx));
+
236 ratioHists[postFitIdx]->SetMarkerStyle(7);
+
237 ratioHists[postFitIdx]->SetLineStyle(1+postFitIdx);
+
238 ratioHists[postFitIdx]->SetLineWidth(2);
+
239
+
240 ratioHists[postFitIdx]->Draw("p same");
+
241 }
+
242
+
243 // draw lines across the plot at +-1 and 0
+ + + +
247
+
248 line.SetLineColor(kRed);
+
249 line.SetLineStyle(kDashed);
+
250 line.SetLineWidth(2);
+
251 line2.SetLineColor(kRed);
+
252 line2.SetLineStyle(kDashed);
+
253 line2.SetLineWidth(2);
+
254 line3.SetLineColor(kRed);
+
255 line3.SetLineStyle(kDashed);
+
256 line3.SetLineWidth(2);
+
257
+
258 line.Draw("same");
+
259 line2.Draw("same");
+
260 line3.Draw("same");
+
261
+
262 canv->Print((SaveName).c_str());
+
263
+
264 ratioHists.clear();
+
265 delete axis;
+
266}
+
std::string SaveName
+
TH1D * makeRatio(TH1D *PrefitCopy, TH1D *PostfitCopy, bool setAxes)
+
Color_t PlotColor[]
+
TCanvas * canv
+
+
+
+ +

◆ FancyTitles()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string FancyTitles (std::string origName)
+
+inline
+
+ +

Definition at line 269 of file GetPostfitParamPlots.cpp.

+
269 {
+
270 std::string prettyName = origName;
+
271
+
272 auto const &PrettyNames = config["GetPostfitParamPlots"]["PrettyNames"];
+
273
+ +
275 prettyName = PrettyNames[origName].as<std::string>();
+
276 }
+
277
+
278 return prettyName;
+
279}
+
YAML::Node config
+
+
+
+ +

◆ getOtherFileHist()

+ +
+
+ + + + + + + + + + + + + + + + + + +
TH1D * getOtherFileHist (TFileotherFile,
TH1DrefHist 
)
+
+ +

Definition at line 72 of file GetPostfitParamPlots.cpp.

+
72 {
+
73 // EM: get the post fit errors from a comparison file and put them in a TH1D of the same format as the MaCh3 one
+
74 TH1D *retHist = (TH1D *)refHist->Clone();
+
75 retHist->Reset();
+
76
+
77 retHist = (TH1D *)(otherFile->Get( ("param_xsec_"+plotType).c_str() ))->Clone();
+
78
+
79 return retHist;
+
80}
+
std::string plotType
+
+
+
+ +

◆ GetPostfitParamPlots()

+ +
+
+ + + + + + + +
void GetPostfitParamPlots ()
+
+ +

Definition at line 555 of file GetPostfitParamPlots.cpp.

+
556{
+
557 std::cout<<"Input Files: "<<std::endl;
+
558 for(unsigned int i = 0; i < FileNames.size(); i++)
+
559 {
+
560 SaveName += FileNames[i] + "_";
+
561 std::cout<< " " << FileNames[i] << std::endl;
+
562 }
+
563 SaveName += "_PostfitParamPlots.pdf";
+
564
+
565 //KS: By default we take HPD values, but by changing "plotType" you can use for example Gauss
+
566 plotType = "HPD";
+
567 //plotType = "gaus";
+
568
+
569 std::cout<<"Plotting "<<plotType<<std::endl;
+
570
+
571 // open the files
+
572 std::vector <TFile*> fileVec;
+
573 for(unsigned int i = 0; i < FileNames.size(); i++)
+
574 {
+
575 TFile *file = new TFile(FileNames[i].c_str());
+
576 fileVec.push_back(file);
+
577 }
+
578
+ +
580
+
581 canv = new TCanvas("canv", "canv", 1024, 1024);
+
582 //gStyle->SetPalette(51);
+
583 gStyle->SetOptStat(0); //Set 0 to disable statystic box
+
584 canv->SetLeftMargin(0.12);
+
585 canv->SetBottomMargin(0.12);
+
586 canv->SetTopMargin(0.08);
+
587 canv->SetRightMargin(0.04);
+
588
+
589 canv->Print((SaveName+"[").c_str());
+
590
+
591 // these for non named params where we dont need as much space
+
592 p1 = new TPad("p1", "p1", 0.0, 0.3, 1.0, 1.0);
+
593 p2 = new TPad("p2", "p2", 0.0, 0.0, 1.0, 0.3);
+
594 p1->SetLeftMargin(canv->GetLeftMargin());
+
595 p1->SetRightMargin(canv->GetRightMargin());
+
596 p1->SetTopMargin(canv->GetTopMargin());
+
597 p1->SetBottomMargin(0);
+
598 p1->SetGrid();
+
599 p2->SetLeftMargin(canv->GetLeftMargin());
+
600 p2->SetRightMargin(canv->GetRightMargin());
+
601 p2->SetTopMargin(0);
+
602 p2->SetBottomMargin(0.25);
+
603 p2->SetGrid();
+
604
+
605 // these for named parameters where we need a nice big gap at the botto to fit the names
+
606 p3 = new TPad("p3", "p3", 0.0, 0.4, 1.0, 1.0);
+
607 p4 = new TPad("p4", "p4", 0.0, 0.0, 1.0, 0.4);
+
608 p3->SetLeftMargin(canv->GetLeftMargin());
+
609 p3->SetRightMargin(canv->GetRightMargin());
+
610 p3->SetTopMargin(canv->GetTopMargin());
+
611 p3->SetBottomMargin(0);
+
612 p3->SetGrid();
+
613 p4->SetLeftMargin(canv->GetLeftMargin());
+
614 p4->SetRightMargin(canv->GetRightMargin());
+
615 p4->SetTopMargin(0);
+
616 p4->SetBottomMargin(0.62);
+
617 p4->SetGrid();
+
618
+
619 Prefit = (TH1D*)fileVec[0]->Get("param_xsec_prefit");
+
620
+
621 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId ++)
+
622 {
+ +
624 Hist->SetMarkerColor(PlotColor[fileId+1]);
+
625 Hist->SetLineColor(PlotColor[fileId+1]);
+
626 Hist->SetMarkerStyle(7);
+
627 Hist->SetLineStyle(1+fileId);
+
628
+
629 PostfitHistVec.push_back(Hist);
+
630 }
+
631
+
632 nBins = Prefit->GetXaxis()->GetNbins();
+
633
+
634 Prefit->SetFillColor(PlotColor[0]);
+
635 Prefit->SetFillStyle(3003);
+
636 Prefit->SetMarkerStyle(7);
+
637 Prefit->SetMarkerColor(PlotColor[0]);
+
638 Prefit->SetLineColor(PlotColor[0]);
+
639 Prefit->SetLineStyle(kSolid);
+
640
+
641 // Make a Legend page
+
642 TLegend *leg = new TLegend(0.0, 0.0, 1.0, 1.0);
+
643 if (Prefit != NULL) leg->AddEntry(Prefit, "Prior", "lpf");
+
644 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
645 leg->AddEntry(PostfitHistVec[fileId], FileLabel[fileId].c_str(), "lpf");
+
646 }
+
647 canv->cd();
+
648 canv->Clear();
+
649 leg->Draw();
+
650 canv->Print((SaveName).c_str());
+
651 delete leg;
+
652
+ +
654
+ +
656
+
657 //KS: By default we don't run ProcessMCMC with PlotDet as this take some time, in case we did let's make fancy plots
+ +
659
+
660 //KS: Same as above but for FD parameters,
+ +
662
+
663 if(OscParameters > 0) MakeOscPlots();
+
664
+
665 canv->Print((SaveName+"]").c_str());
+
666
+
667 delete canv;
+
668 delete Prefit;
+
669 for(TFile *file: fileVec) file->Close();
+
670 fileVec.clear();
+
671}
+
int FDParameters
+
TH1D * Prefit
+
TH1D * getOtherFileHist(TFile *otherFile, TH1D *refHist)
+
void MakeNDDetPlots()
+
int OscParameters
+
TPad * p3
+
std::vector< std::string > FileNames
+
void MakeFluxPlots()
+
void MakeOscPlots()
+
TPad * p4
+
void ReadSettings(TFile *File1)
+
int NDParameters
+
std::vector< TH1D * > PostfitHistVec
+ +
std::vector< std::string > FileLabel
+
TPad * p1
+
void MakeXsecPlots()
+
TPad * p2
+
void MakeFDDetPlots()
+
+
+
+ +

◆ GetViolinPlots()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void GetViolinPlots (std::string FileName1 = "",
std::string FileName2 = "" 
)
+
+ +

Definition at line 718 of file GetPostfitParamPlots.cpp.

+
719{
+
720 //KS: Should be in some config... either way it control whether you plot symetric or assymetric error bars
+
721 bool PlotAssym = true;
+
722
+
723 std::cout<<" Making Violin Plot"<<std::endl;
+
724 if (!FileName1.empty()) std::cout << "File 1 " << FileName1<< std::endl;
+
725 if (!FileName2.empty()) std::cout << "File 2 " << FileName2<< std::endl;
+
726
+ +
728 SaveName = SaveName.substr(0, SaveName.find(".root"));
+
729 if(FileName2 != "") SaveName += FileName2;
+
730 if(FileName2 != "") SaveName = SaveName.substr(0, SaveName.find(".root"));
+
731 SaveName += "_Violin";
+
732 if(PlotAssym) SaveName += "_Assym";
+
733
+
734 TFile *File1 = new TFile(FileName1.c_str());
+
735 TFile *File2 = NULL;
+
736 if(FileName2 != "") File2 = new TFile(FileName2.c_str());
+
737
+
738 canv = new TCanvas("canv", "canv", 1024, 1024);
+
739 canv->SetGrid();
+
740 gStyle->SetOptStat(0);
+
741 //KS: Remove errors on X axis as they are confusing in violin type of plot
+
742 if(!PlotAssym) gStyle->SetErrorX(0.0001);
+
743 canv->SetTickx();
+
744 canv->SetTicky();
+
745 canv->SetBottomMargin(0.25);
+
746 canv->SetTopMargin(0.08);
+
747 canv->SetRightMargin(0.03);
+
748 canv->SetLeftMargin(0.10);
+
749 canv->Print((SaveName+".pdf[").c_str());
+
750 canv->SetGrid();
+
751
+
752 Violin = NULL;
+
753 ViolinPre = (TH2D*)File1->Get( "param_violin_prior" );
+
754 Violin = (TH2D*)File1->Get( "param_violin" );
+
755 if(Violin == NULL)
+
756 {
+
757 std::cout<<"Couldn't find violin plot, make sure method from MCMCProcessor is being called"<<std::endl;
+
758 return;
+
759 }
+
760
+
761 ViolinPre->SetFillColor(kRed);
+
762 ViolinPre->SetFillColorAlpha(kRed, 0.35);
+
763 ViolinPre->SetMarkerColor(kRed);
+
764 ViolinPre->SetMarkerStyle(20);
+
765 ViolinPre->SetMarkerSize(0.5);
+
766
+
767 ViolinPre->GetYaxis()->SetTitleOffset(1.3);
+
768 ViolinPre->GetYaxis()->SetTitle("Parameter Value");
+
769 ViolinPre->GetXaxis()->LabelsOption("v");
+
770
+
771 Violin->SetFillColor(kBlue);
+
772 Violin->SetFillColorAlpha(kBlue, 0.35);
+
773 Violin->SetMarkerColor(kBlue);
+
774 Violin->SetMarkerStyle(20);
+
775 Violin->SetMarkerSize(0.5);
+
776
+
777 TH1D* Postfit = (TH1D*)File1->Get( ("param_xsec_"+plotType).c_str() );
+
778 Postfit->SetMarkerColor(kRed);
+
779 Postfit->SetLineColor(kRed);
+
780 Postfit->SetMarkerStyle(7);
+
781
+ +
783 PostGraph->SetMarkerColor(kBlack);
+
784 PostGraph->SetLineColor(kBlack);
+
785 PostGraph->SetMarkerStyle(7);
+
786 PostGraph->SetLineWidth(2);
+
787 PostGraph->SetLineStyle(kSolid);
+
788 if(File2 != NULL)
+
789 {
+
790 Violin2 = (TH2D*)File2->Get( "param_violin" );
+
791 Violin2->SetMarkerColor(kGreen);
+
792 Violin2->SetLineColor(kGreen);
+
793 Violin2->SetFillColor(kGreen);
+
794 Violin2->SetFillColorAlpha(kGreen, 0.35);
+
795 }
+
796
+
797 // Make a Legend page
+
798 TLegend *leg = new TLegend(0.0, 0.0, 1.0, 1.0);
+
799 if (ViolinPre != NULL) leg->AddEntry(ViolinPre, "Prior", "lpf");
+
800 if (Violin != NULL) leg->AddEntry(Violin, "Posterior", "lpf");
+
801 if (Violin2 != NULL) leg->AddEntry(Violin2, "Second Violin", "lpf");
+
802 if(PlotAssym) leg->AddEntry(PostGraph, "HPD Assym", "lp");
+
803 else leg->AddEntry(Postfit, "HPD", "lpf");
+
804
+
805 canv->cd();
+
806 canv->Clear();
+
807 leg->Draw();
+
808 canv->Print((SaveName+".pdf").c_str());
+
809 delete leg;
+
810
+
811 // Do some fancy replacements
+ +
813 //WARNING this is super hardcoded keep this in mind, ranges are diffefernt from one defined for postfit param
+
814 const int XsecPlots = 8;
+ +
816 std::string titles[XsecPlots-1] = {"CCQE", "Pauli Blocking and Optical Potential", "2p2h", "SPP", "FSI", "CC DIS, CC Multi #pi, CC coh., NC, #nu_{e}", "CCQE Binding Energy"};
+
817
+
818 for (int i = 1; i < XsecPlots; ++i)
+
819 {
+
820 canv->cd();
+
821 ViolinPre->SetTitle(titles[i-1].c_str());
+
822 ViolinPre->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
823 ViolinPre->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
824
+
825 Violin->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
826 Violin->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
827 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
828
+
829 std::string name = ViolinPre->GetTitle();
+
830 if (name.find("SPP") != std::string::npos)
+
831 {
+
832 ViolinPre->GetYaxis()->SetRangeUser(-5., 25.); //For RES Eb we need huge range
+
833 Violin->GetYaxis()->SetRangeUser(-5., 25.);
+
834 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-5., 25.);
+
835 }
+
836 else if (name.find("CCQE Binding Energy") != std::string::npos)
+
837 {
+
838 ViolinPre->GetYaxis()->SetRangeUser(-10., 16.); //For Eb we need bigger range
+
839 Violin->GetYaxis()->SetRangeUser(-10., 16.); //For Eb we need bigger range
+
840 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-10., 16.);
+
841 }
+
842 else if (name.find("FSI") != std::string::npos)
+
843 {
+
844 ViolinPre->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
845 Violin->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
846 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
847 }
+
848 else if (name.find("CCQE") != std::string::npos)
+
849 {
+
850 ViolinPre->GetYaxis()->SetRangeUser(-2., 3.);
+
851 Violin->GetYaxis()->SetRangeUser(-2., 3.);
+
852 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-2., 3.);
+
853 }
+
854 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
855 ViolinPre->Draw("VIOLIN");
+
856 Violin->Draw("VIOLIN SAME");
+
857 if(File2 != NULL)
+
858 {
+
859 Violin2->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
860 Violin2->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
861 Violin2->Draw("VIOLIN SAME");
+
862 }
+
863 if (Postfit != NULL) {
+
864 Postfit->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
865 if(!PlotAssym) Postfit->Draw("SAME");
+
866 }
+
867 if (PostGraph != NULL) {
+
868 PostGraph->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
869 if(PlotAssym) PostGraph->Draw("P SAME");
+
870 }
+
871
+
872 canv->Print((SaveName+".pdf").c_str());
+
873 }
+
874
+
875 //KS: Now flux
+
876 if(FluxParameters > 0)
+
877 {
+
878 canv->SetBottomMargin(0.1);
+
879 gStyle->SetOptTitle(0);
+
880 const int FluxInterval = 25;
+ +
882 {
+
883 ViolinPre->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
884 Violin->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
885 Postfit->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
886 PostGraph->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
887
+
888 ViolinPre->GetYaxis()->SetRangeUser(0.7, 1.3);
+
889 Violin->GetYaxis()->SetRangeUser(0.7, 1.3);
+
890 Postfit->GetYaxis()->SetRangeUser(0.7, 1.3);
+
891 PostGraph->GetYaxis()->SetRangeUser(0.7, 1.3);
+
892
+
893 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
894 ViolinPre->Draw("VIOLIN");
+
895 Violin->Draw("VIOLIN SAME");
+
896 if(File2 != NULL)
+
897 {
+
898 Violin2->GetYaxis()->SetRangeUser(0.7, 1.3);
+
899 Violin2->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
900 Violin2->Draw("VIOLIN SAME");
+
901 }
+
902 if(PlotAssym) PostGraph->Draw("P SAME");
+
903 else Postfit->Draw("SAME");
+
904 canv->Print((SaveName+".pdf").c_str());
+
905 }
+
906 }
+
907 //KS all other parmeters just in case
+
908 ViolinPre->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
909 Violin->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
910 Postfit->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
911 PostGraph->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
912
+
913 ViolinPre->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
914 Violin->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
915 Postfit->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
916 PostGraph->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
917
+
918 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
919 ViolinPre->Draw("VIOLIN");
+
920 Violin->Draw("VIOLIN SAME");
+
921 if(File2 != NULL)
+
922 {
+
923 Violin2->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
924 Violin2->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
925 Violin2->Draw("VIOLIN SAME");
+
926 }
+
927 if(PlotAssym) PostGraph->Draw("P SAME");
+
928 else Postfit->Draw("SAME");
+
929 canv->Print((SaveName+".pdf").c_str());
+
930
+
931 canv->Print((SaveName+".pdf]").c_str());
+
932 delete canv;
+
933 delete ViolinPre;
+
934 delete Violin;
+
935 if(Violin2 != NULL) delete Violin2;
+
936 delete Postfit;
+
937 delete PostGraph;
+
938 File1->Close();
+
939 delete File1;
+
940 if(File2 != NULL)
+
941 {
+
942 File2->Close();
+
943 delete File2;
+
944 }
+
945}
+
int XsecStartingPos
+
TH2D * ViolinPre
+
int CrossSectionParameters
+
TH2D * Violin
+
TH2D * Violin2
+
void PrettifyTitles(TH1D *Hist)
+
int FluxParameters
+
TGraphAsymmErrors * MakeTGraphAsymmErrors(TFile *File)
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 947 of file GetPostfitParamPlots.cpp.

+
948{
+ +
950
+
951 if (argc != 3 && argc != 4 && argc != 5)
+
952 {
+
953 std::cerr << "How to use: "<< argv[0] << "Config.yaml MCMC_Processor_Output.root" << std::endl;
+
954 std::cerr << "You can add up to 3 different files" << std::endl;
+
955 exit(-1);
+
956 }
+
957
+
958 config = YAML::LoadFile(std::string(argv[1]));
+
959 if (argc == 3)
+
960 {
+
961 FileNames.push_back(argv[2]);
+
962
+ + +
965 }
+
966 else if (argc == 4)
+
967 {
+
968 FileNames.push_back(std::string(argv[2]));
+
969 FileNames.push_back(std::string(argv[3]));
+
970
+ +
972 GetViolinPlots(std::string(argv[2]), std::string(argv[3]));
+
973 }
+
974 else if (argc == 5)
+
975 {
+
976 FileNames.push_back(argv[2]);
+
977 FileNames.push_back(argv[3]);
+
978 FileNames.push_back(argv[4]);
+
979
+ +
981 //KS: Violin plot currently not supported by three file version although it should be super easy to adapt
+
982 }
+
983
+
984 return 0;
+
985}
+
void GetViolinPlots(std::string FileName1="", std::string FileName2="")
+
void GetPostfitParamPlots()
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
+
+
+ +

◆ MakeFDDetPlots()

+ +
+
+ + + + + + + +
void MakeFDDetPlots ()
+
+ +

Definition at line 507 of file GetPostfitParamPlots.cpp.

+
508{
+
509 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
510
+ +
512 int Start = FDbinCounter;
+
513 //KS: WARNING This is hardcoded
+
514 double FDSamplesBins[7] = {12,18,30,36,44,57,58};
+
515 std::string FDSamplesNames[7] = {"FHC 1Re", "FHC 1R#mu", "RHC 1Re","RHC 1R#mu","FHC 1Re 1 d.e.","FHC MR#mu 1 or 2 d.e.", "Momentum Scale"};
+
516 for (unsigned int i = 0; i < 7; ++i)
+
517 {
+ +
519
+
520 canv->cd();
+
521 Prefit->SetTitle(FDSamplesNames[i].c_str());
+
522 Prefit->GetXaxis()->SetRangeUser(Start, FDbinCounter);
+
523 //KS: We don't' need name for every FD param
+
524 for(int j = 0; j < FDSamplesBins[i]; ++j)
+
525 {
+
526 //bool ProductOfTen = false;
+
527 //if(j % 10) ProductOfTen = true;
+
528 //if(j != 0 && ProductOfTen) Prefit->GetXaxis()->SetBinLabel(Start+j+1, " ");
+
529 }
+
530 Prefit->GetYaxis()->SetRangeUser(0.5, 1.5);
+
531 Prefit->Draw("e2");
+
532
+ +
534
+ +
536 canv->Update();
+
537 }
+
538}
+
void DrawPlots(TCanvas *canv, TH1D *PrefitCopy, std::vector< TH1D * >PostfitVec, TPad *mainPad, TPad *ratioPad)
+
int FDParametersStartingPos
+
+
+
+ +

◆ MakeFluxPlots()

+ +
+
+ + + + + + + +
void MakeFluxPlots ()
+
+ +

Definition at line 382 of file GetPostfitParamPlots.cpp.

+
383{
+
384 p1->SetLogx(true);
+
385 p2->SetLogx(true);
+
386
+
387 // get the names of the blocks of parameters to group together
+
388 std::vector<std::string> const fluxBlockNames = config["GetPostfitParamPlots"]["FluxGroups"].as<std::vector<std::string>>();
+
389
+
390 auto const fluxBinningTable = config["GetPostfitParamPlots"]["FluxBinning"];
+
391
+
392 const int FluxPlots = (int)fluxBlockNames.size();
+
393
+
394 for (int i = 0; i < FluxPlots; i++)
+
395 {
+
396 std::string fluxBlockName = fluxBlockNames[i];
+
397
+
398 // Access the block details
+
399 YAML::Node paramBlock = config["GetPostfitParamPlots"][fluxBlockName];
+
400
+
401 std::string blockTitle = paramBlock[0].as<std::string>();
+
402 std::vector<double> blockLimits = paramBlock[1].as<std::vector<double>>();
+
403 std::string blockBinningName = paramBlock[2].as<std::string>();
+
404 std::vector<int> blockContents = paramBlock[3].as<std::vector<int>>();
+
405
+
406 // EM: get the binning for this block of flux params
+
407 YAML::Node binningTable = config["YourBinningTableNode"]; // Assuming you have a separate node for binning
+
408 std::vector<double> binning = fluxBinningTable[blockBinningName].as<std::vector<double>>();
+
409
+
410 // now make an array cus root hates vectors
+
411 int nBinEdges = (int)binning.size();
+
412 std::vector<double> binArray(nBinEdges);
+
413 for(int edge = 0; edge < nBinEdges; edge ++) binArray[edge] = binning[edge];
+
414
+
415 // get num of params in the block
+
416 int nParams = blockContents[1] - blockContents[0] +1;
+
417 // check for sanity
+
418 if(nParams <= 0 || blockContents.size() > 2){
+
419 std::cerr << "ERROR: Invalid flux parameter block endpoints specified for " << fluxBlockName << std::endl;
+
420 std::cerr << " Should have the form [<low index>, <up index>]" << std::endl;
+
421 throw;
+
422 }
+
423 if(nParams != (int)binning.size() -1){
+
424 std::cerr << "ERROR: Binning provided for flux param block " << fluxBlockName << " Does not match the number of parameters specified for the block" << std::endl;
+
425 std::cerr << " Provided " << nParams << " flux parameters, but " << binning.size() -1 << " bins" << std::endl;
+
426 throw;
+
427 }
+
428
+
429 TH1D *blockHist_prefit = new TH1D(fluxBlockName.c_str(), blockTitle.c_str(), nBinEdges - 1, binArray.data());
+
430 blockHist_prefit->GetYaxis()->SetTitle("Parameter Variation");
+
431 blockHist_prefit->GetXaxis()->SetTitle("E_{#nu} (GeV)");
+
432 blockHist_prefit->GetXaxis()->SetTitleOffset(blockHist_prefit->GetXaxis()->GetTitleOffset()*1.2);
+
433 setTH1Style(blockHist_prefit, "redHatchedError");
+
434 // set the errors for the prefit block hist
+ + +
437 std::string paramName = "b_" + std::to_string(fluxParId);
+ +
439 }
+
440
+
441 // now set for the postfit blocks for all files
+
442 std::vector <TH1D *> blockHist_postfit_Vec;
+
443 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
444 TH1D *blockHist_postfit = new TH1D(fluxBlockName.c_str(), blockTitle.c_str(), nBinEdges - 1, binArray.data());
+
445
+ + +
448 std::string paramName = "b_" + std::to_string(fluxParId);
+
449
+ +
451 }
+
452
+ +
454 }
+
455
+
456 // set the y axis limits we got from config
+
457 blockHist_prefit->GetYaxis()->SetRangeUser(blockLimits[0], blockLimits[1]);
+
458
+ +
460 blockHist_postfit_Vec.clear();
+
461 }
+
462
+
463 canv->cd();
+
464 canv->SetLogx(false);
+
465 canv->SetBottomMargin(canv->GetBottomMargin()*1.7);
+
466}
+
void copyParToBlockHist(int localBin, std::string paramName, TH1D *blockHist, TH1D *fullHist, bool setLabels=true)
+
void setTH1Style(TH1 *hist, std::string styleName)
+
+
+
+ +

◆ MakeNDDetPlots()

+ +
+
+ + + + + + + +
void MakeNDDetPlots ()
+
+ +

Definition at line 468 of file GetPostfitParamPlots.cpp.

+
469{
+
470 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
471
+ +
473 int Start = NDbinCounter;
+
474 for (unsigned int i = 0; i < NDSamplesNames.size(); ++i)
+
475 {
+ +
477
+
478 std::string temp = NDSamplesNames[i].c_str();
+
479 while (temp.find("_") != std::string::npos) {
+
480 temp.replace(temp.find("_"), 1, std::string(" "));
+
481 }
+
482 Prefit->SetTitle(temp.c_str());
+
483 Prefit->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
484
+
485 // set the x range for the postfits
+
486 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
487 PostfitHistVec[fileId]->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
488 }
+
489
+
490 //KS: We dont' need name for every nd param
+
491 for(int j = 0; j < NDSamplesBins[i]; ++j)
+
492 {
+
493 bool ProductOfTen = false;
+
494 if(j % 10) ProductOfTen = true;
+
495 if(j != 0 && ProductOfTen) Prefit->GetXaxis()->SetBinLabel(Start+j+1, " ");
+
496 }
+
497
+
498 Prefit->GetYaxis()->SetRangeUser(0.5, 1.5);
+
499
+ +
501
+ +
503 canv->Update();
+
504 }
+
505}
+
std::vector< int > NDSamplesBins
+
int NDParametersStartingPos
+
std::vector< std::string > NDSamplesNames
+
+
+
+ +

◆ MakeOscPlots()

+ +
+
+ + + + + + + +
void MakeOscPlots ()
+
+ +

Definition at line 540 of file GetPostfitParamPlots.cpp.

+
541{
+
542 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
543
+
544 canv->cd();
+
545 Prefit->SetTitle("Oscilation Parameters");
+ +
547
+
548 Prefit->GetYaxis()->SetRangeUser(-3, +3);
+
549 Prefit->Draw("e2");
+
550
+ +
552}
+
int OscParametersStartingPos
+
+
+
+ +

◆ makeRatio()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
TH1D * makeRatio (TH1DPrefitCopy,
TH1DPostfitCopy,
bool setAxes 
)
+
+inline
+
+ +

Definition at line 121 of file GetPostfitParamPlots.cpp.

+
121 {
+
122 // EM: set up the ratio hist
+
123 TH1D *Ratio = (TH1D*)PrefitCopy->Clone();
+
124 Ratio->GetYaxis()->SetTitle("(x_{Post}-#mu_{Prior})/#sigma_{Prior}");
+
125 Ratio->SetMinimum(-3.7);
+
126 Ratio->SetMaximum(3.7);
+
127
+
128 for (int j = 0; j < Ratio->GetXaxis()->GetNbins(); ++j)
+
129 {
+
130 if ( PrefitCopy->GetBinError(j+1) > 1.e-5 )
+
131 {
+
132 Ratio->SetBinContent(j+1, (PostfitCopy->GetBinContent(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1));
+
133
+
134 double up = (PostfitCopy->GetBinContent(j+1)+PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1);
+
135 double down = (PostfitCopy->GetBinContent(j+1)-PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1);
+
136
+
137 double maximum = up-Ratio->GetBinContent(j+1);
+
138 double minimum = Ratio->GetBinContent(j+1)-down;
+
139
+
140 Ratio->SetBinError(j+1, std::max(maximum, minimum));
+
141 }
+
142 //KS: Most likely flat prior
+
143 else {
+
144 Ratio->SetBinContent(j+1, (PostfitCopy->GetBinContent(j+1)-PrefitCopy->GetBinContent(j+1)));
+
145
+
146 double up = (PostfitCopy->GetBinContent(j+1)+PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1));
+
147 double down = (PostfitCopy->GetBinContent(j+1)-PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1));
+
148
+
149 double maximum = up-Ratio->GetBinContent(j+1);
+
150 double minimum = Ratio->GetBinContent(j+1)-down;
+
151
+
152 Ratio->SetBinError(j+1, std::max(maximum, minimum));
+
153 }
+
154 } //end loop over parameters
+
155
+
156 if(setAxes){
+
157 Ratio->SetFillStyle(0);
+
158 Ratio->SetFillColor(0);
+
159
+
160 Ratio->SetLineColor(PostfitCopy->GetLineColor());
+
161 if (Ratio->GetLineColor() == 0) Ratio->SetLineColor(kBlack);
+
162 Ratio->SetMarkerColor(PostfitCopy->GetMarkerColor());
+
163
+
164 Ratio->SetLineWidth(2);
+
165 Ratio->SetTitle("");
+
166
+
167 Ratio->SetMarkerSize(2);
+
168 Ratio->SetMarkerStyle(20);
+
169
+
170 Ratio->GetYaxis()->SetTitleSize(25);
+
171 Ratio->GetYaxis()->SetTitleFont(43);
+
172 Ratio->GetYaxis()->SetTitleOffset(2.0);
+
173 Ratio->GetYaxis()->SetLabelFont(43);
+
174 Ratio->GetYaxis()->SetLabelSize(25);
+
175 Ratio->GetYaxis()->CenterTitle();
+
176 Ratio->GetYaxis()->SetNdivisions(5,2,0);
+
177
+
178 Ratio->GetXaxis()->SetTitleSize(25);
+
179 Ratio->GetXaxis()->SetTitleFont(43);
+
180 Ratio->GetXaxis()->SetTitleOffset(4.0);
+
181 Ratio->GetXaxis()->SetLabelOffset(0.025);
+
182 Ratio->GetXaxis()->SetLabelFont(43);
+
183 Ratio->GetXaxis()->SetLabelSize(25);
+
184 }
+
185
+
186 return Ratio;
+
187}
+
+
+
+ +

◆ MakeTGraphAsymmErrors()

+ +
+
+ + + + + +
+ + + + + + + + +
TGraphAsymmErrors * MakeTGraphAsymmErrors (TFileFile)
+
+inline
+
+ +

Definition at line 674 of file GetPostfitParamPlots.cpp.

+
675{
+
676 double* x = new double[nBins];
+
677 double* y = new double[nBins];
+
678 double* exl = new double[nBins];
+
679 double* eyl = new double[nBins];
+
680 double* exh = new double[nBins];
+
681 double* eyh = new double[nBins];
+
682
+
683 TH1D* PostHist = (TH1D*)File->Get( ("param_xsec_"+plotType).c_str() )->Clone();
+
684
+
685 TVectorD* Errors_HPD_Positive = (TVectorD*)File->Get( "Errors_HPD_Positive" )->Clone();
+
686 TVectorD* Errors_HPD_Negative = (TVectorD*)File->Get( "Errors_HPD_Negative" )->Clone();
+
687
+
688 //KS: I am tempted to multithred this...
+
689 for(int i = 0; i < nBins; ++i)
+
690 {
+
691 //KS: We are extrcting value from three object each having different numbering scheme, I have checked carefully so this is correct please don't cahnge all these +1 +0.5 etc. it just work...
+
692 x[i] = i + 0.5;
+
693 y[i] = PostHist->GetBinContent(i+1);
+
694
+
695 //KS: We don't want x axis errors as they are confusing in Violin plot
+
696 exh[i] = 0.00001;
+
697 exl[i] = 0.00001;
+
698 eyh[i] = (*Errors_HPD_Positive)(i);
+
699 eyl[i] = (*Errors_HPD_Negative)(i);
+
700 }
+ +
702 PostGraph->SetTitle("");
+
703
+
704 delete PostHist;
+
705 delete Errors_HPD_Positive;
+
706 delete Errors_HPD_Negative;
+
707 delete[] x;
+
708 delete[] y;
+
709 delete[] exl;
+
710 delete[] eyl;
+
711 delete[] exh;
+
712 delete[] eyh;
+
713
+
714 return PostGraph;
+
715}
+
+
+
+ +

◆ MakeXsecPlots()

+ +
+
+ + + + + + + +
void MakeXsecPlots ()
+
+ +

Definition at line 326 of file GetPostfitParamPlots.cpp.

+
327{
+
328 // EM: get the names of the blocks of parameters to group together
+
329 std::vector<std::string> const blockNames = config["GetPostfitParamPlots"]["paramGroups"].as<std::vector<std::string>>();
+
330 const int XsecPlots = (int)blockNames.size();
+
331
+
332 for (int i = 0; i < XsecPlots; i++)
+
333 {
+
334 // EM: get the configuration for this parameter
+
335 std::string blockName = blockNames[i];
+
336 YAML::Node paramBlock = config["GetPostfitParamPlots"][blockName];
+
337
+
338 std::string blockTitle = paramBlock[0].as<std::string>();
+
339 std::vector<double> blockLimits = paramBlock[1].as<std::vector<double>>();
+
340 std::vector<std::string> blockContents = paramBlock[2].as<std::vector<std::string>>();
+
341
+
342 // EM: get num of params in the block
+
343 int nParams = (int)blockContents.size();
+
344
+
345 // EM: set some plot things
+
346 TH1D *blockHist_prefit = new TH1D(blockName.c_str(), blockTitle.c_str(), nParams, 0.0, (double)nParams);
+
347 blockHist_prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
348 setTH1Style(blockHist_prefit, "redHatchedError");
+
349
+
350 // EM: set the errors for the prefit block hist
+
351 for(int localBin=0; localBin < nParams; localBin ++){
+
352 // the "local" bin is the params index within the group of parameters
+
353 std::string paramName = blockContents[localBin];
+ +
355 }
+
356
+
357 // EM: now set for the postfit blocks for all files
+
358 std::vector <TH1D *> blockHist_postfit_Vec;
+
359 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
360 TH1D *blockHist_postfit = new TH1D((blockName + FileNames[fileId]).c_str(), blockTitle.c_str(), nParams, 0.0, (double)nParams);
+
361
+
362 // EM: loop through all the parameters in this block and set the contents in the blocks TH1
+
363 for(int localBin=0; localBin < nParams; localBin ++){
+
364 // the "local" bin is the params index within the group of parameters
+
365 std::string paramName = blockContents[localBin];
+ +
367 }
+ +
369 }
+
370
+
371 // set the y axis limits we got from config
+
372 blockHist_prefit->GetYaxis()->SetRangeUser(blockLimits[0], blockLimits[1]);
+
373
+
374 // Do some fancy replacements
+ +
376
+ +
378 blockHist_postfit_Vec.clear();
+
379 }
+
380}
+
+
+
+ +

◆ PrettifyTitles() [1/2]

+ +
+
+ + + + + + + + +
void PrettifyTitles (TH1DHist)
+
+ +

Definition at line 282 of file GetPostfitParamPlots.cpp.

+
282 {
+
283 for (int i = 0; i < Hist->GetXaxis()->GetNbins(); ++i)
+
284 {
+
285 std::string title = Hist->GetXaxis()->GetBinLabel(i+1);
+ +
287 Hist->GetXaxis()->SetBinLabel(i+1, title.c_str());
+
288 }
+
289}
+
std::string FancyTitles(std::string origName)
+
+
+
+ +

◆ PrettifyTitles() [2/2]

+ +
+
+ + + + + + + + +
void PrettifyTitles (TH2DHist)
+
+ +

Definition at line 291 of file GetPostfitParamPlots.cpp.

+
291 {
+
292 for (int i = 0; i < Hist->GetXaxis()->GetNbins(); ++i)
+
293 {
+
294 std::string title = Hist->GetXaxis()->GetBinLabel(i+1);
+
295
+ +
297 Hist->GetXaxis()->SetBinLabel(i+1, title.c_str());
+
298 }
+
299}
+
+
+
+ +

◆ ReadSettings()

+ +
+
+ + + + + + + + +
void ReadSettings (TFileFile1)
+
+ +

Definition at line 301 of file GetPostfitParamPlots.cpp.

+
302{
+
303 TTree *Settings = (TTree*)(File1->Get("Settings"));
+
304
+
305 Settings->SetBranchAddress("CrossSectionParameters", &CrossSectionParameters);
+
306 Settings->SetBranchAddress("FluxParameters", &FluxParameters);
+
307 Settings->SetBranchAddress("CrossSectionParametersStartingPos", &XsecStartingPos);
+
308 Settings->SetBranchAddress("NDParameters", &NDParameters);
+
309 Settings->SetBranchAddress("NDParametersStartingPos", &NDParametersStartingPos);
+
310 Settings->SetBranchAddress("FDParameters", &FDParameters);
+
311 Settings->SetBranchAddress("FDParametersStartingPos", &FDParametersStartingPos);
+
312 Settings->SetBranchAddress("OscParameters", &OscParameters);
+
313 Settings->SetBranchAddress("OscParametersStartingPos", &OscParametersStartingPos);
+
314
+
315 std::vector< int > *NDSamples_Bins =0;
+
316 std::vector< std::string > *NDSamples_Names = 0;
+
317 Settings->SetBranchAddress("NDSamplesNames", &NDSamples_Names);
+
318 Settings->SetBranchAddress("NDSamplesBins", &NDSamples_Bins);
+
319
+
320 Settings->GetEntry(0);
+
321
+ + +
324}
+
+
+
+ +

◆ setTH1Style()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void setTH1Style (TH1hist,
std::string styleName 
)
+
+ +

Definition at line 109 of file GetPostfitParamPlots.cpp.

+
109 {
+
110 (void) styleName;
+
111
+
112 hist->SetMarkerColor(632);
+
113 hist->SetMarkerStyle(7);
+
114 hist->SetFillColor(632);
+
115 hist->SetFillStyle(3003);
+
116 hist->SetLineColor(632);
+
117 hist->SetLineStyle(0);
+
118
+
119}
+
+
+
+

Variable Documentation

+ +

◆ canv

+ +
+
+ + + + +
TCanvas* canv
+
+ +

Definition at line 58 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ config

+ +
+
+ + + + +
YAML::Node config
+
+ +

Definition at line 30 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ CrossSectionParameters

+ +
+
+ + + + +
int CrossSectionParameters
+
+ +

Definition at line 42 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ FDParameters

+ +
+
+ + + + +
int FDParameters
+
+ +

Definition at line 49 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ FDParametersStartingPos

+ +
+
+ + + + +
int FDParametersStartingPos
+
+ +

Definition at line 50 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ FileLabel

+ +
+
+ + + + +
std::vector<std::string> FileLabel = {"Postfit", "Second File", "Third File"}
+
+ +

Definition at line 33 of file GetPostfitParamPlots.cpp.

+
33{"Postfit", "Second File", "Third File"};
+
+
+
+ +

◆ FileNames

+ +
+
+ + + + +
std::vector<std::string> FileNames
+
+ +

Definition at line 32 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ FluxParameters

+ +
+
+ + + + +
int FluxParameters
+
+ +

Definition at line 43 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ nBins

+ +
+
+ + + + +
int nBins
+
+ +

Definition at line 57 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ NDParameters

+ +
+
+ + + + +
int NDParameters
+
+ +

Definition at line 46 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ NDParametersStartingPos

+ +
+
+ + + + +
int NDParametersStartingPos
+
+ +

Definition at line 47 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ NDSamplesBins

+ +
+
+ + + + +
std::vector< int > NDSamplesBins
+
+ +

Definition at line 55 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ NDSamplesNames

+ +
+
+ + + + +
std::vector< std::string > NDSamplesNames
+
+ +

Definition at line 56 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ OscParameters

+ +
+
+ + + + +
int OscParameters
+
+ +

Definition at line 52 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ OscParametersStartingPos

+ +
+
+ + + + +
int OscParametersStartingPos
+
+ +

Definition at line 53 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ p1

+ +
+
+ + + + +
TPad* p1
+
+ +

Definition at line 61 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ p2

+ +
+
+ + + + +
TPad* p2
+
+ +

Definition at line 62 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ p3

+ +
+
+ + + + +
TPad* p3
+
+ +

Definition at line 64 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ p4

+ +
+
+ + + + +
TPad* p4
+
+ +

Definition at line 65 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ PlotColor

+ +
+
+ + + + +
Color_t PlotColor[] = {kRed, kBlack, kBlue, kGreen}
+
+ +

Definition at line 68 of file GetPostfitParamPlots.cpp.

+
+
+
+
+ +

◆ plotType

+ +
+
+ + + + +
std::string plotType
+
+ +

Definition at line 69 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ PostfitHistVec

+ +
+
+ + + + +
std::vector<TH1D *> PostfitHistVec
+
+ +

Definition at line 34 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ Prefit

+ +
+
+ + + + +
TH1D* Prefit
+
+ +

Definition at line 36 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ SaveName

+ +
+
+ + + + +
std::string SaveName
+
+ +

Definition at line 60 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ Violin

+ +
+
+ + + + +
TH2D* Violin
+
+ +

Definition at line 39 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ Violin2

+ +
+
+ + + + +
TH2D* Violin2
+
+ +

Definition at line 40 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ ViolinPre

+ +
+
+ + + + +
TH2D* ViolinPre
+
+ +

Definition at line 38 of file GetPostfitParamPlots.cpp.

+ +
+
+ +

◆ XsecStartingPos

+ +
+
+ + + + +
int XsecStartingPos
+
+ +

Definition at line 44 of file GetPostfitParamPlots.cpp.

+ +
+
+
+ + + + diff --git a/GetPostfitParamPlots_8cpp_source.html b/GetPostfitParamPlots_8cpp_source.html new file mode 100644 index 00000000..667b930b --- /dev/null +++ b/GetPostfitParamPlots_8cpp_source.html @@ -0,0 +1,1162 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/GetPostfitParamPlots.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GetPostfitParamPlots.cpp
+
+
+Go to the documentation of this file.
1#include <iostream>
+
2#include <sstream>
+
3#include <iomanip>
+
4#include <algorithm>
+
5
+
6#include "TROOT.h"
+
7#include "TGaxis.h"
+
8#include "TString.h"
+
9#include "TStyle.h"
+
10#include "TH1.h"
+
11#include "TH2.h"
+
12#include "TF1.h"
+
13#include "TLegend.h"
+
14#include "TPad.h"
+
15#include "TCanvas.h"
+
16#include "TTree.h"
+
17#include "TFile.h"
+
18#include "TVectorD.h"
+
19#include "TGraphAsymmErrors.h"
+
20
+
21#include "manager/manager.h"
+
22
+
23//How to use ./GetPostfitParamPlots ProcessMCMC_Output1.root <ProcessMCMC_Output2.root> <ProcessMCMC_Output3.root>
+
24//Originally written by Clarence, with some changes by Will, updated by Kamil, made generic plotter by Ewan
+
25//Central postfit value taken is the Highest Posterior Density but can be changed easily to Gaussian etc. Watch out for parameter names and number of parameters per plot being quite hardcoded
+
26
+
27//g++ `root-config --cflags` -g -std=c++11 -o GetPostfitParamPlots GetPostfitParamPlots.cpp -I`root-config --incdir` `root-config --glibs --libs`
+
28
+
29//Config
+
30YAML::Node config;
+
31
+
32std::vector<std::string> FileNames;
+
33std::vector<std::string> FileLabel = {"Postfit", "Second File", "Third File"};
+
34std::vector <TH1D *> PostfitHistVec;
+
35
+ +
37
+ + + +
41
+ + + +
45
+ + +
48
+ + +
51
+ + +
54
+
55std::vector< int > NDSamplesBins;
+
56std::vector< std::string > NDSamplesNames;
+ + +
59
+
60std::string SaveName;
+ + +
63
+ + +
66
+
67//KS: Color for 0 - prefit, 1 postfit, 2 another postfit, 3 you know the drill
+ +
69std::string plotType;
+
70
+
71
+
+ +
73 // EM: get the post fit errors from a comparison file and put them in a TH1D of the same format as the MaCh3 one
+
74 TH1D *retHist = (TH1D *)refHist->Clone();
+
75 retHist->Reset();
+
76
+
77 retHist = (TH1D *)(otherFile->Get( ("param_xsec_"+plotType).c_str() ))->Clone();
+
78
+
79 return retHist;
+
80}
+
+
81
+
+ +
83 // EM: copy parameter from the large TH1 to another hist, finding it in the larger one by name
+
84 int globalBin = 0;
+
85 bool Found = false;
+
86 for (; globalBin <= fullHist->GetNbinsX(); globalBin++) {
+
87 if(std::string(fullHist->GetXaxis()->GetBinLabel(globalBin)) == paramName)
+
88 {
+
89 Found = true;
+
90 break;
+
91 }
+
92 }
+
93
+
94 if(!Found){
+
95 std::cerr << "ERROR: Could not find parameter " << paramName << ", given as part of the group " << blockHist->GetTitle() << std::endl;
+
96 throw;
+
97 }
+
98
+
99 // Set the values in the sub-histograms
+
100 blockHist->SetBinContent(localBin +1, fullHist->GetBinContent(globalBin));
+
101 blockHist->SetBinError(localBin +1, fullHist->GetBinError(globalBin));
+
102
+
103 if(setLabels){
+
104 blockHist->GetXaxis()->SetBinLabel(localBin +1, paramName.c_str());
+
105 blockHist->GetXaxis()->LabelsOption("v");
+
106 }
+
107}
+
+
108
+
+
109void setTH1Style(TH1* hist, std::string styleName){
+
110 (void) styleName;
+
111
+
112 hist->SetMarkerColor(632);
+
113 hist->SetMarkerStyle(7);
+
114 hist->SetFillColor(632);
+
115 hist->SetFillStyle(3003);
+
116 hist->SetLineColor(632);
+
117 hist->SetLineStyle(0);
+
118
+
119}
+
+
120
+
+ +
122 // EM: set up the ratio hist
+
123 TH1D *Ratio = (TH1D*)PrefitCopy->Clone();
+
124 Ratio->GetYaxis()->SetTitle("(x_{Post}-#mu_{Prior})/#sigma_{Prior}");
+
125 Ratio->SetMinimum(-3.7);
+
126 Ratio->SetMaximum(3.7);
+
127
+
128 for (int j = 0; j < Ratio->GetXaxis()->GetNbins(); ++j)
+
129 {
+
130 if ( PrefitCopy->GetBinError(j+1) > 1.e-5 )
+
131 {
+
132 Ratio->SetBinContent(j+1, (PostfitCopy->GetBinContent(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1));
+
133
+
134 double up = (PostfitCopy->GetBinContent(j+1)+PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1);
+
135 double down = (PostfitCopy->GetBinContent(j+1)-PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1))/PrefitCopy->GetBinError(j+1);
+
136
+
137 double maximum = up-Ratio->GetBinContent(j+1);
+
138 double minimum = Ratio->GetBinContent(j+1)-down;
+
139
+
140 Ratio->SetBinError(j+1, std::max(maximum, minimum));
+
141 }
+
142 //KS: Most likely flat prior
+
143 else {
+
144 Ratio->SetBinContent(j+1, (PostfitCopy->GetBinContent(j+1)-PrefitCopy->GetBinContent(j+1)));
+
145
+
146 double up = (PostfitCopy->GetBinContent(j+1)+PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1));
+
147 double down = (PostfitCopy->GetBinContent(j+1)-PostfitCopy->GetBinError(j+1)-PrefitCopy->GetBinContent(j+1));
+
148
+
149 double maximum = up-Ratio->GetBinContent(j+1);
+
150 double minimum = Ratio->GetBinContent(j+1)-down;
+
151
+
152 Ratio->SetBinError(j+1, std::max(maximum, minimum));
+
153 }
+
154 } //end loop over parameters
+
155
+
156 if(setAxes){
+
157 Ratio->SetFillStyle(0);
+
158 Ratio->SetFillColor(0);
+
159
+
160 Ratio->SetLineColor(PostfitCopy->GetLineColor());
+
161 if (Ratio->GetLineColor() == 0) Ratio->SetLineColor(kBlack);
+
162 Ratio->SetMarkerColor(PostfitCopy->GetMarkerColor());
+
163
+
164 Ratio->SetLineWidth(2);
+
165 Ratio->SetTitle("");
+
166
+
167 Ratio->SetMarkerSize(2);
+
168 Ratio->SetMarkerStyle(20);
+
169
+
170 Ratio->GetYaxis()->SetTitleSize(25);
+
171 Ratio->GetYaxis()->SetTitleFont(43);
+
172 Ratio->GetYaxis()->SetTitleOffset(2.0);
+
173 Ratio->GetYaxis()->SetLabelFont(43);
+
174 Ratio->GetYaxis()->SetLabelSize(25);
+
175 Ratio->GetYaxis()->CenterTitle();
+
176 Ratio->GetYaxis()->SetNdivisions(5,2,0);
+
177
+
178 Ratio->GetXaxis()->SetTitleSize(25);
+
179 Ratio->GetXaxis()->SetTitleFont(43);
+
180 Ratio->GetXaxis()->SetTitleOffset(4.0);
+
181 Ratio->GetXaxis()->SetLabelOffset(0.025);
+
182 Ratio->GetXaxis()->SetLabelFont(43);
+
183 Ratio->GetXaxis()->SetLabelSize(25);
+
184 }
+
185
+
186 return Ratio;
+
187}
+
+
188
+
+
189inline void DrawPlots(TCanvas *canv, TH1D* PrefitCopy, std::vector<TH1D *>PostfitVec, TPad *mainPad, TPad *ratioPad) {
+
190 // EM: Draw!
+
191 canv->cd();
+
192 mainPad->Draw();
+
193 mainPad->cd();
+
194 PrefitCopy->GetYaxis()->SetTitle("Parameter Value");
+
195
+
196 PrefitCopy->GetYaxis()->SetLabelSize(0.);
+
197 PrefitCopy->GetYaxis()->SetTitleSize(0.05);
+
198 PrefitCopy->GetYaxis()->SetTitleOffset(1.3);
+
199 PrefitCopy->Draw("e2");
+
200
+
201 for(int fileId=0; fileId < (int)PostfitVec.size(); fileId++){
+ +
203
+
204 postFitHist->SetMarkerColor(PlotColor[fileId+1]);
+
205 postFitHist->SetLineColor(PlotColor[fileId+1]);
+
206 postFitHist->SetMarkerStyle(7);
+
207 postFitHist->SetLineStyle(1+fileId);
+
208 postFitHist->SetLineWidth(2);
+
209
+
210 postFitHist->Draw("e1, same");
+
211 }
+
212
+
213 canv->Update();
+
214 TGaxis *axis = new TGaxis(PrefitCopy->GetXaxis()->GetBinLowEdge(PrefitCopy->GetXaxis()->GetFirst()), gPad->GetUymin()+0.01,
+
215 PrefitCopy->GetXaxis()->GetBinLowEdge(PrefitCopy->GetXaxis()->GetFirst()), gPad->GetUymax(),
+
216 gPad->GetUymin()+0.01, gPad->GetUymax(), 510, "");
+
217 axis->SetLabelFont(43);
+
218 axis->SetLabelSize(25);
+
219 axis->Draw();
+
220
+
221 canv->cd();
+
222 ratioPad->Draw();
+
223 ratioPad->cd();
+
224
+
225 std::vector<TH1D*> ratioHists;
+
226
+
227 // save pointers to these so we can delete them once we are done
+
228 ratioHists.push_back(makeRatio(PrefitCopy, PostfitVec[0], true));
+
229
+
230 ratioHists[0]->Draw("p");
+
231 for(int postFitIdx = 1; postFitIdx < (int)PostfitVec.size(); postFitIdx++){
+ +
233
+
234 ratioHists[postFitIdx]->SetMarkerColor(TColor::GetColorPalette(postFitIdx));
+
235 ratioHists[postFitIdx]->SetLineColor(TColor::GetColorPalette(postFitIdx));
+
236 ratioHists[postFitIdx]->SetMarkerStyle(7);
+
237 ratioHists[postFitIdx]->SetLineStyle(1+postFitIdx);
+
238 ratioHists[postFitIdx]->SetLineWidth(2);
+
239
+
240 ratioHists[postFitIdx]->Draw("p same");
+
241 }
+
242
+
243 // draw lines across the plot at +-1 and 0
+ + + +
247
+
248 line.SetLineColor(kRed);
+
249 line.SetLineStyle(kDashed);
+
250 line.SetLineWidth(2);
+
251 line2.SetLineColor(kRed);
+
252 line2.SetLineStyle(kDashed);
+
253 line2.SetLineWidth(2);
+
254 line3.SetLineColor(kRed);
+
255 line3.SetLineStyle(kDashed);
+
256 line3.SetLineWidth(2);
+
257
+
258 line.Draw("same");
+
259 line2.Draw("same");
+
260 line3.Draw("same");
+
261
+
262 canv->Print((SaveName).c_str());
+
263
+
264 ratioHists.clear();
+
265 delete axis;
+
266}
+
+
267
+
268
+
+
269inline std::string FancyTitles(std::string origName) {
+
270 std::string prettyName = origName;
+
271
+
272 auto const &PrettyNames = config["GetPostfitParamPlots"]["PrettyNames"];
+
273
+ +
275 prettyName = PrettyNames[origName].as<std::string>();
+
276 }
+
277
+
278 return prettyName;
+
279}
+
+
280
+
281
+
+ +
283 for (int i = 0; i < Hist->GetXaxis()->GetNbins(); ++i)
+
284 {
+
285 std::string title = Hist->GetXaxis()->GetBinLabel(i+1);
+ +
287 Hist->GetXaxis()->SetBinLabel(i+1, title.c_str());
+
288 }
+
289}
+
+
290
+
+ +
292 for (int i = 0; i < Hist->GetXaxis()->GetNbins(); ++i)
+
293 {
+
294 std::string title = Hist->GetXaxis()->GetBinLabel(i+1);
+
295
+ +
297 Hist->GetXaxis()->SetBinLabel(i+1, title.c_str());
+
298 }
+
299}
+
+
300
+
+ +
302{
+
303 TTree *Settings = (TTree*)(File1->Get("Settings"));
+
304
+
305 Settings->SetBranchAddress("CrossSectionParameters", &CrossSectionParameters);
+
306 Settings->SetBranchAddress("FluxParameters", &FluxParameters);
+
307 Settings->SetBranchAddress("CrossSectionParametersStartingPos", &XsecStartingPos);
+
308 Settings->SetBranchAddress("NDParameters", &NDParameters);
+
309 Settings->SetBranchAddress("NDParametersStartingPos", &NDParametersStartingPos);
+
310 Settings->SetBranchAddress("FDParameters", &FDParameters);
+
311 Settings->SetBranchAddress("FDParametersStartingPos", &FDParametersStartingPos);
+
312 Settings->SetBranchAddress("OscParameters", &OscParameters);
+
313 Settings->SetBranchAddress("OscParametersStartingPos", &OscParametersStartingPos);
+
314
+
315 std::vector< int > *NDSamples_Bins =0;
+
316 std::vector< std::string > *NDSamples_Names = 0;
+
317 Settings->SetBranchAddress("NDSamplesNames", &NDSamples_Names);
+
318 Settings->SetBranchAddress("NDSamplesBins", &NDSamples_Bins);
+
319
+
320 Settings->GetEntry(0);
+
321
+ + +
324}
+
+
325
+
+ +
327{
+
328 // EM: get the names of the blocks of parameters to group together
+
329 std::vector<std::string> const blockNames = config["GetPostfitParamPlots"]["paramGroups"].as<std::vector<std::string>>();
+
330 const int XsecPlots = (int)blockNames.size();
+
331
+
332 for (int i = 0; i < XsecPlots; i++)
+
333 {
+
334 // EM: get the configuration for this parameter
+
335 std::string blockName = blockNames[i];
+
336 YAML::Node paramBlock = config["GetPostfitParamPlots"][blockName];
+
337
+
338 std::string blockTitle = paramBlock[0].as<std::string>();
+
339 std::vector<double> blockLimits = paramBlock[1].as<std::vector<double>>();
+
340 std::vector<std::string> blockContents = paramBlock[2].as<std::vector<std::string>>();
+
341
+
342 // EM: get num of params in the block
+
343 int nParams = (int)blockContents.size();
+
344
+
345 // EM: set some plot things
+
346 TH1D *blockHist_prefit = new TH1D(blockName.c_str(), blockTitle.c_str(), nParams, 0.0, (double)nParams);
+
347 blockHist_prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
348 setTH1Style(blockHist_prefit, "redHatchedError");
+
349
+
350 // EM: set the errors for the prefit block hist
+
351 for(int localBin=0; localBin < nParams; localBin ++){
+
352 // the "local" bin is the params index within the group of parameters
+
353 std::string paramName = blockContents[localBin];
+ +
355 }
+
356
+
357 // EM: now set for the postfit blocks for all files
+
358 std::vector <TH1D *> blockHist_postfit_Vec;
+
359 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
360 TH1D *blockHist_postfit = new TH1D((blockName + FileNames[fileId]).c_str(), blockTitle.c_str(), nParams, 0.0, (double)nParams);
+
361
+
362 // EM: loop through all the parameters in this block and set the contents in the blocks TH1
+
363 for(int localBin=0; localBin < nParams; localBin ++){
+
364 // the "local" bin is the params index within the group of parameters
+
365 std::string paramName = blockContents[localBin];
+ +
367 }
+ +
369 }
+
370
+
371 // set the y axis limits we got from config
+
372 blockHist_prefit->GetYaxis()->SetRangeUser(blockLimits[0], blockLimits[1]);
+
373
+
374 // Do some fancy replacements
+ +
376
+ +
378 blockHist_postfit_Vec.clear();
+
379 }
+
380}
+
+
381
+
+ +
383{
+
384 p1->SetLogx(true);
+
385 p2->SetLogx(true);
+
386
+
387 // get the names of the blocks of parameters to group together
+
388 std::vector<std::string> const fluxBlockNames = config["GetPostfitParamPlots"]["FluxGroups"].as<std::vector<std::string>>();
+
389
+
390 auto const fluxBinningTable = config["GetPostfitParamPlots"]["FluxBinning"];
+
391
+
392 const int FluxPlots = (int)fluxBlockNames.size();
+
393
+
394 for (int i = 0; i < FluxPlots; i++)
+
395 {
+
396 std::string fluxBlockName = fluxBlockNames[i];
+
397
+
398 // Access the block details
+
399 YAML::Node paramBlock = config["GetPostfitParamPlots"][fluxBlockName];
+
400
+
401 std::string blockTitle = paramBlock[0].as<std::string>();
+
402 std::vector<double> blockLimits = paramBlock[1].as<std::vector<double>>();
+
403 std::string blockBinningName = paramBlock[2].as<std::string>();
+
404 std::vector<int> blockContents = paramBlock[3].as<std::vector<int>>();
+
405
+
406 // EM: get the binning for this block of flux params
+
407 YAML::Node binningTable = config["YourBinningTableNode"]; // Assuming you have a separate node for binning
+
408 std::vector<double> binning = fluxBinningTable[blockBinningName].as<std::vector<double>>();
+
409
+
410 // now make an array cus root hates vectors
+
411 int nBinEdges = (int)binning.size();
+
412 std::vector<double> binArray(nBinEdges);
+
413 for(int edge = 0; edge < nBinEdges; edge ++) binArray[edge] = binning[edge];
+
414
+
415 // get num of params in the block
+
416 int nParams = blockContents[1] - blockContents[0] +1;
+
417 // check for sanity
+
418 if(nParams <= 0 || blockContents.size() > 2){
+
419 std::cerr << "ERROR: Invalid flux parameter block endpoints specified for " << fluxBlockName << std::endl;
+
420 std::cerr << " Should have the form [<low index>, <up index>]" << std::endl;
+
421 throw;
+
422 }
+
423 if(nParams != (int)binning.size() -1){
+
424 std::cerr << "ERROR: Binning provided for flux param block " << fluxBlockName << " Does not match the number of parameters specified for the block" << std::endl;
+
425 std::cerr << " Provided " << nParams << " flux parameters, but " << binning.size() -1 << " bins" << std::endl;
+
426 throw;
+
427 }
+
428
+
429 TH1D *blockHist_prefit = new TH1D(fluxBlockName.c_str(), blockTitle.c_str(), nBinEdges - 1, binArray.data());
+
430 blockHist_prefit->GetYaxis()->SetTitle("Parameter Variation");
+
431 blockHist_prefit->GetXaxis()->SetTitle("E_{#nu} (GeV)");
+
432 blockHist_prefit->GetXaxis()->SetTitleOffset(blockHist_prefit->GetXaxis()->GetTitleOffset()*1.2);
+
433 setTH1Style(blockHist_prefit, "redHatchedError");
+
434 // set the errors for the prefit block hist
+ + +
437 std::string paramName = "b_" + std::to_string(fluxParId);
+ +
439 }
+
440
+
441 // now set for the postfit blocks for all files
+
442 std::vector <TH1D *> blockHist_postfit_Vec;
+
443 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
444 TH1D *blockHist_postfit = new TH1D(fluxBlockName.c_str(), blockTitle.c_str(), nBinEdges - 1, binArray.data());
+
445
+ + +
448 std::string paramName = "b_" + std::to_string(fluxParId);
+
449
+ +
451 }
+
452
+ +
454 }
+
455
+
456 // set the y axis limits we got from config
+
457 blockHist_prefit->GetYaxis()->SetRangeUser(blockLimits[0], blockLimits[1]);
+
458
+ +
460 blockHist_postfit_Vec.clear();
+
461 }
+
462
+
463 canv->cd();
+
464 canv->SetLogx(false);
+
465 canv->SetBottomMargin(canv->GetBottomMargin()*1.7);
+
466}
+
+
467
+
+ +
469{
+
470 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
471
+ +
473 int Start = NDbinCounter;
+
474 for (unsigned int i = 0; i < NDSamplesNames.size(); ++i)
+
475 {
+ +
477
+
478 std::string temp = NDSamplesNames[i].c_str();
+
479 while (temp.find("_") != std::string::npos) {
+
480 temp.replace(temp.find("_"), 1, std::string(" "));
+
481 }
+
482 Prefit->SetTitle(temp.c_str());
+
483 Prefit->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
484
+
485 // set the x range for the postfits
+
486 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
487 PostfitHistVec[fileId]->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
488 }
+
489
+
490 //KS: We dont' need name for every nd param
+
491 for(int j = 0; j < NDSamplesBins[i]; ++j)
+
492 {
+
493 bool ProductOfTen = false;
+
494 if(j % 10) ProductOfTen = true;
+
495 if(j != 0 && ProductOfTen) Prefit->GetXaxis()->SetBinLabel(Start+j+1, " ");
+
496 }
+
497
+
498 Prefit->GetYaxis()->SetRangeUser(0.5, 1.5);
+
499
+ +
501
+ +
503 canv->Update();
+
504 }
+
505}
+
+
506
+
+ +
508{
+
509 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
510
+ +
512 int Start = FDbinCounter;
+
513 //KS: WARNING This is hardcoded
+
514 double FDSamplesBins[7] = {12,18,30,36,44,57,58};
+
515 std::string FDSamplesNames[7] = {"FHC 1Re", "FHC 1R#mu", "RHC 1Re","RHC 1R#mu","FHC 1Re 1 d.e.","FHC MR#mu 1 or 2 d.e.", "Momentum Scale"};
+
516 for (unsigned int i = 0; i < 7; ++i)
+
517 {
+ +
519
+
520 canv->cd();
+
521 Prefit->SetTitle(FDSamplesNames[i].c_str());
+
522 Prefit->GetXaxis()->SetRangeUser(Start, FDbinCounter);
+
523 //KS: We don't' need name for every FD param
+
524 for(int j = 0; j < FDSamplesBins[i]; ++j)
+
525 {
+
526 //bool ProductOfTen = false;
+
527 //if(j % 10) ProductOfTen = true;
+
528 //if(j != 0 && ProductOfTen) Prefit->GetXaxis()->SetBinLabel(Start+j+1, " ");
+
529 }
+
530 Prefit->GetYaxis()->SetRangeUser(0.5, 1.5);
+
531 Prefit->Draw("e2");
+
532
+ +
534
+ +
536 canv->Update();
+
537 }
+
538}
+
+
539
+
+ +
541{
+
542 Prefit->GetYaxis()->SetTitleOffset(Prefit->GetYaxis()->GetTitleOffset()*1.2);
+
543
+
544 canv->cd();
+
545 Prefit->SetTitle("Oscilation Parameters");
+ +
547
+
548 Prefit->GetYaxis()->SetRangeUser(-3, +3);
+
549 Prefit->Draw("e2");
+
550
+ +
552}
+
+
553
+
554
+
+ +
556{
+
557 std::cout<<"Input Files: "<<std::endl;
+
558 for(unsigned int i = 0; i < FileNames.size(); i++)
+
559 {
+
560 SaveName += FileNames[i] + "_";
+
561 std::cout<< " " << FileNames[i] << std::endl;
+
562 }
+
563 SaveName += "_PostfitParamPlots.pdf";
+
564
+
565 //KS: By default we take HPD values, but by changing "plotType" you can use for example Gauss
+
566 plotType = "HPD";
+
567 //plotType = "gaus";
+
568
+
569 std::cout<<"Plotting "<<plotType<<std::endl;
+
570
+
571 // open the files
+
572 std::vector <TFile*> fileVec;
+
573 for(unsigned int i = 0; i < FileNames.size(); i++)
+
574 {
+
575 TFile *file = new TFile(FileNames[i].c_str());
+
576 fileVec.push_back(file);
+
577 }
+
578
+ +
580
+
581 canv = new TCanvas("canv", "canv", 1024, 1024);
+
582 //gStyle->SetPalette(51);
+
583 gStyle->SetOptStat(0); //Set 0 to disable statystic box
+
584 canv->SetLeftMargin(0.12);
+
585 canv->SetBottomMargin(0.12);
+
586 canv->SetTopMargin(0.08);
+
587 canv->SetRightMargin(0.04);
+
588
+
589 canv->Print((SaveName+"[").c_str());
+
590
+
591 // these for non named params where we dont need as much space
+
592 p1 = new TPad("p1", "p1", 0.0, 0.3, 1.0, 1.0);
+
593 p2 = new TPad("p2", "p2", 0.0, 0.0, 1.0, 0.3);
+
594 p1->SetLeftMargin(canv->GetLeftMargin());
+
595 p1->SetRightMargin(canv->GetRightMargin());
+
596 p1->SetTopMargin(canv->GetTopMargin());
+
597 p1->SetBottomMargin(0);
+
598 p1->SetGrid();
+
599 p2->SetLeftMargin(canv->GetLeftMargin());
+
600 p2->SetRightMargin(canv->GetRightMargin());
+
601 p2->SetTopMargin(0);
+
602 p2->SetBottomMargin(0.25);
+
603 p2->SetGrid();
+
604
+
605 // these for named parameters where we need a nice big gap at the botto to fit the names
+
606 p3 = new TPad("p3", "p3", 0.0, 0.4, 1.0, 1.0);
+
607 p4 = new TPad("p4", "p4", 0.0, 0.0, 1.0, 0.4);
+
608 p3->SetLeftMargin(canv->GetLeftMargin());
+
609 p3->SetRightMargin(canv->GetRightMargin());
+
610 p3->SetTopMargin(canv->GetTopMargin());
+
611 p3->SetBottomMargin(0);
+
612 p3->SetGrid();
+
613 p4->SetLeftMargin(canv->GetLeftMargin());
+
614 p4->SetRightMargin(canv->GetRightMargin());
+
615 p4->SetTopMargin(0);
+
616 p4->SetBottomMargin(0.62);
+
617 p4->SetGrid();
+
618
+
619 Prefit = (TH1D*)fileVec[0]->Get("param_xsec_prefit");
+
620
+
621 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId ++)
+
622 {
+ +
624 Hist->SetMarkerColor(PlotColor[fileId+1]);
+
625 Hist->SetLineColor(PlotColor[fileId+1]);
+
626 Hist->SetMarkerStyle(7);
+
627 Hist->SetLineStyle(1+fileId);
+
628
+
629 PostfitHistVec.push_back(Hist);
+
630 }
+
631
+
632 nBins = Prefit->GetXaxis()->GetNbins();
+
633
+
634 Prefit->SetFillColor(PlotColor[0]);
+
635 Prefit->SetFillStyle(3003);
+
636 Prefit->SetMarkerStyle(7);
+
637 Prefit->SetMarkerColor(PlotColor[0]);
+
638 Prefit->SetLineColor(PlotColor[0]);
+
639 Prefit->SetLineStyle(kSolid);
+
640
+
641 // Make a Legend page
+
642 TLegend *leg = new TLegend(0.0, 0.0, 1.0, 1.0);
+
643 if (Prefit != NULL) leg->AddEntry(Prefit, "Prior", "lpf");
+
644 for(unsigned int fileId = 0; fileId < FileNames.size(); fileId++){
+
645 leg->AddEntry(PostfitHistVec[fileId], FileLabel[fileId].c_str(), "lpf");
+
646 }
+
647 canv->cd();
+
648 canv->Clear();
+
649 leg->Draw();
+
650 canv->Print((SaveName).c_str());
+
651 delete leg;
+
652
+ +
654
+ +
656
+
657 //KS: By default we don't run ProcessMCMC with PlotDet as this take some time, in case we did let's make fancy plots
+ +
659
+
660 //KS: Same as above but for FD parameters,
+ +
662
+
663 if(OscParameters > 0) MakeOscPlots();
+
664
+
665 canv->Print((SaveName+"]").c_str());
+
666
+
667 delete canv;
+
668 delete Prefit;
+
669 for(TFile *file: fileVec) file->Close();
+
670 fileVec.clear();
+
671}
+
+
672
+
673
+
+ +
675{
+
676 double* x = new double[nBins];
+
677 double* y = new double[nBins];
+
678 double* exl = new double[nBins];
+
679 double* eyl = new double[nBins];
+
680 double* exh = new double[nBins];
+
681 double* eyh = new double[nBins];
+
682
+
683 TH1D* PostHist = (TH1D*)File->Get( ("param_xsec_"+plotType).c_str() )->Clone();
+
684
+
685 TVectorD* Errors_HPD_Positive = (TVectorD*)File->Get( "Errors_HPD_Positive" )->Clone();
+
686 TVectorD* Errors_HPD_Negative = (TVectorD*)File->Get( "Errors_HPD_Negative" )->Clone();
+
687
+
688 //KS: I am tempted to multithred this...
+
689 for(int i = 0; i < nBins; ++i)
+
690 {
+
691 //KS: We are extrcting value from three object each having different numbering scheme, I have checked carefully so this is correct please don't cahnge all these +1 +0.5 etc. it just work...
+
692 x[i] = i + 0.5;
+
693 y[i] = PostHist->GetBinContent(i+1);
+
694
+
695 //KS: We don't want x axis errors as they are confusing in Violin plot
+
696 exh[i] = 0.00001;
+
697 exl[i] = 0.00001;
+
698 eyh[i] = (*Errors_HPD_Positive)(i);
+
699 eyl[i] = (*Errors_HPD_Negative)(i);
+
700 }
+ +
702 PostGraph->SetTitle("");
+
703
+
704 delete PostHist;
+
705 delete Errors_HPD_Positive;
+
706 delete Errors_HPD_Negative;
+
707 delete[] x;
+
708 delete[] y;
+
709 delete[] exl;
+
710 delete[] eyl;
+
711 delete[] exh;
+
712 delete[] eyh;
+
713
+
714 return PostGraph;
+
715}
+
+
716
+
717//KS: Make fancy violin plots
+
+
718void GetViolinPlots(std::string FileName1 = "", std::string FileName2 = "")
+
719{
+
720 //KS: Should be in some config... either way it control whether you plot symetric or assymetric error bars
+
721 bool PlotAssym = true;
+
722
+
723 std::cout<<" Making Violin Plot"<<std::endl;
+
724 if (!FileName1.empty()) std::cout << "File 1 " << FileName1<< std::endl;
+
725 if (!FileName2.empty()) std::cout << "File 2 " << FileName2<< std::endl;
+
726
+ +
728 SaveName = SaveName.substr(0, SaveName.find(".root"));
+
729 if(FileName2 != "") SaveName += FileName2;
+
730 if(FileName2 != "") SaveName = SaveName.substr(0, SaveName.find(".root"));
+
731 SaveName += "_Violin";
+
732 if(PlotAssym) SaveName += "_Assym";
+
733
+
734 TFile *File1 = new TFile(FileName1.c_str());
+
735 TFile *File2 = NULL;
+
736 if(FileName2 != "") File2 = new TFile(FileName2.c_str());
+
737
+
738 canv = new TCanvas("canv", "canv", 1024, 1024);
+
739 canv->SetGrid();
+
740 gStyle->SetOptStat(0);
+
741 //KS: Remove errors on X axis as they are confusing in violin type of plot
+
742 if(!PlotAssym) gStyle->SetErrorX(0.0001);
+
743 canv->SetTickx();
+
744 canv->SetTicky();
+
745 canv->SetBottomMargin(0.25);
+
746 canv->SetTopMargin(0.08);
+
747 canv->SetRightMargin(0.03);
+
748 canv->SetLeftMargin(0.10);
+
749 canv->Print((SaveName+".pdf[").c_str());
+
750 canv->SetGrid();
+
751
+
752 Violin = NULL;
+
753 ViolinPre = (TH2D*)File1->Get( "param_violin_prior" );
+
754 Violin = (TH2D*)File1->Get( "param_violin" );
+
755 if(Violin == NULL)
+
756 {
+
757 std::cout<<"Couldn't find violin plot, make sure method from MCMCProcessor is being called"<<std::endl;
+
758 return;
+
759 }
+
760
+
761 ViolinPre->SetFillColor(kRed);
+
762 ViolinPre->SetFillColorAlpha(kRed, 0.35);
+
763 ViolinPre->SetMarkerColor(kRed);
+
764 ViolinPre->SetMarkerStyle(20);
+
765 ViolinPre->SetMarkerSize(0.5);
+
766
+
767 ViolinPre->GetYaxis()->SetTitleOffset(1.3);
+
768 ViolinPre->GetYaxis()->SetTitle("Parameter Value");
+
769 ViolinPre->GetXaxis()->LabelsOption("v");
+
770
+
771 Violin->SetFillColor(kBlue);
+
772 Violin->SetFillColorAlpha(kBlue, 0.35);
+
773 Violin->SetMarkerColor(kBlue);
+
774 Violin->SetMarkerStyle(20);
+
775 Violin->SetMarkerSize(0.5);
+
776
+
777 TH1D* Postfit = (TH1D*)File1->Get( ("param_xsec_"+plotType).c_str() );
+
778 Postfit->SetMarkerColor(kRed);
+
779 Postfit->SetLineColor(kRed);
+
780 Postfit->SetMarkerStyle(7);
+
781
+ +
783 PostGraph->SetMarkerColor(kBlack);
+
784 PostGraph->SetLineColor(kBlack);
+
785 PostGraph->SetMarkerStyle(7);
+
786 PostGraph->SetLineWidth(2);
+
787 PostGraph->SetLineStyle(kSolid);
+
788 if(File2 != NULL)
+
789 {
+
790 Violin2 = (TH2D*)File2->Get( "param_violin" );
+
791 Violin2->SetMarkerColor(kGreen);
+
792 Violin2->SetLineColor(kGreen);
+
793 Violin2->SetFillColor(kGreen);
+
794 Violin2->SetFillColorAlpha(kGreen, 0.35);
+
795 }
+
796
+
797 // Make a Legend page
+
798 TLegend *leg = new TLegend(0.0, 0.0, 1.0, 1.0);
+
799 if (ViolinPre != NULL) leg->AddEntry(ViolinPre, "Prior", "lpf");
+
800 if (Violin != NULL) leg->AddEntry(Violin, "Posterior", "lpf");
+
801 if (Violin2 != NULL) leg->AddEntry(Violin2, "Second Violin", "lpf");
+
802 if(PlotAssym) leg->AddEntry(PostGraph, "HPD Assym", "lp");
+
803 else leg->AddEntry(Postfit, "HPD", "lpf");
+
804
+
805 canv->cd();
+
806 canv->Clear();
+
807 leg->Draw();
+
808 canv->Print((SaveName+".pdf").c_str());
+
809 delete leg;
+
810
+
811 // Do some fancy replacements
+ +
813 //WARNING this is super hardcoded keep this in mind, ranges are diffefernt from one defined for postfit param
+
814 const int XsecPlots = 8;
+ +
816 std::string titles[XsecPlots-1] = {"CCQE", "Pauli Blocking and Optical Potential", "2p2h", "SPP", "FSI", "CC DIS, CC Multi #pi, CC coh., NC, #nu_{e}", "CCQE Binding Energy"};
+
817
+
818 for (int i = 1; i < XsecPlots; ++i)
+
819 {
+
820 canv->cd();
+
821 ViolinPre->SetTitle(titles[i-1].c_str());
+
822 ViolinPre->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
823 ViolinPre->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
824
+
825 Violin->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
826 Violin->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
827 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-1.5, 2.5);
+
828
+
829 std::string name = ViolinPre->GetTitle();
+
830 if (name.find("SPP") != std::string::npos)
+
831 {
+
832 ViolinPre->GetYaxis()->SetRangeUser(-5., 25.); //For RES Eb we need huge range
+
833 Violin->GetYaxis()->SetRangeUser(-5., 25.);
+
834 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-5., 25.);
+
835 }
+
836 else if (name.find("CCQE Binding Energy") != std::string::npos)
+
837 {
+
838 ViolinPre->GetYaxis()->SetRangeUser(-10., 16.); //For Eb we need bigger range
+
839 Violin->GetYaxis()->SetRangeUser(-10., 16.); //For Eb we need bigger range
+
840 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-10., 16.);
+
841 }
+
842 else if (name.find("FSI") != std::string::npos)
+
843 {
+
844 ViolinPre->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
845 Violin->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
846 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-0.5, 2.8);
+
847 }
+
848 else if (name.find("CCQE") != std::string::npos)
+
849 {
+
850 ViolinPre->GetYaxis()->SetRangeUser(-2., 3.);
+
851 Violin->GetYaxis()->SetRangeUser(-2., 3.);
+
852 if(File2 != NULL) Violin2->GetYaxis()->SetRangeUser(-2., 3.);
+
853 }
+
854 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
855 ViolinPre->Draw("VIOLIN");
+
856 Violin->Draw("VIOLIN SAME");
+
857 if(File2 != NULL)
+
858 {
+
859 Violin2->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
860 Violin2->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
861 Violin2->Draw("VIOLIN SAME");
+
862 }
+
863 if (Postfit != NULL) {
+
864 Postfit->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
865 if(!PlotAssym) Postfit->Draw("SAME");
+
866 }
+
867 if (PostGraph != NULL) {
+
868 PostGraph->GetXaxis()->SetRangeUser(XsecOffset[i-1], XsecOffset[i]);
+
869 if(PlotAssym) PostGraph->Draw("P SAME");
+
870 }
+
871
+
872 canv->Print((SaveName+".pdf").c_str());
+
873 }
+
874
+
875 //KS: Now flux
+
876 if(FluxParameters > 0)
+
877 {
+
878 canv->SetBottomMargin(0.1);
+
879 gStyle->SetOptTitle(0);
+
880 const int FluxInterval = 25;
+ +
882 {
+
883 ViolinPre->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
884 Violin->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
885 Postfit->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
886 PostGraph->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
887
+
888 ViolinPre->GetYaxis()->SetRangeUser(0.7, 1.3);
+
889 Violin->GetYaxis()->SetRangeUser(0.7, 1.3);
+
890 Postfit->GetYaxis()->SetRangeUser(0.7, 1.3);
+
891 PostGraph->GetYaxis()->SetRangeUser(0.7, 1.3);
+
892
+
893 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
894 ViolinPre->Draw("VIOLIN");
+
895 Violin->Draw("VIOLIN SAME");
+
896 if(File2 != NULL)
+
897 {
+
898 Violin2->GetYaxis()->SetRangeUser(0.7, 1.3);
+
899 Violin2->GetXaxis()->SetRangeUser(nFlux, nFlux+FluxInterval);
+
900 Violin2->Draw("VIOLIN SAME");
+
901 }
+
902 if(PlotAssym) PostGraph->Draw("P SAME");
+
903 else Postfit->Draw("SAME");
+
904 canv->Print((SaveName+".pdf").c_str());
+
905 }
+
906 }
+
907 //KS all other parmeters just in case
+
908 ViolinPre->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
909 Violin->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
910 Postfit->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
911 PostGraph->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
912
+
913 ViolinPre->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
914 Violin->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
915 Postfit->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
916 PostGraph->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
917
+
918 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
919 ViolinPre->Draw("VIOLIN");
+
920 Violin->Draw("VIOLIN SAME");
+
921 if(File2 != NULL)
+
922 {
+
923 Violin2->GetXaxis()->SetRangeUser(CrossSectionParameters, nBins);
+
924 Violin2->GetYaxis()->SetRangeUser(-3.4, 3.4);
+
925 Violin2->Draw("VIOLIN SAME");
+
926 }
+
927 if(PlotAssym) PostGraph->Draw("P SAME");
+
928 else Postfit->Draw("SAME");
+
929 canv->Print((SaveName+".pdf").c_str());
+
930
+
931 canv->Print((SaveName+".pdf]").c_str());
+
932 delete canv;
+
933 delete ViolinPre;
+
934 delete Violin;
+
935 if(Violin2 != NULL) delete Violin2;
+
936 delete Postfit;
+
937 delete PostGraph;
+
938 File1->Close();
+
939 delete File1;
+
940 if(File2 != NULL)
+
941 {
+
942 File2->Close();
+
943 delete File2;
+
944 }
+
945}
+
+
946
+
+
947int main(int argc, char *argv[])
+
948{
+ +
950
+
951 if (argc != 3 && argc != 4 && argc != 5)
+
952 {
+
953 std::cerr << "How to use: "<< argv[0] << "Config.yaml MCMC_Processor_Output.root" << std::endl;
+
954 std::cerr << "You can add up to 3 different files" << std::endl;
+
955 exit(-1);
+
956 }
+
957
+
958 config = YAML::LoadFile(std::string(argv[1]));
+
959 if (argc == 3)
+
960 {
+
961 FileNames.push_back(argv[2]);
+
962
+ + +
965 }
+
966 else if (argc == 4)
+
967 {
+
968 FileNames.push_back(std::string(argv[2]));
+
969 FileNames.push_back(std::string(argv[3]));
+
970
+ +
972 GetViolinPlots(std::string(argv[2]), std::string(argv[3]));
+
973 }
+
974 else if (argc == 5)
+
975 {
+
976 FileNames.push_back(argv[2]);
+
977 FileNames.push_back(argv[3]);
+
978 FileNames.push_back(argv[4]);
+
979
+ +
981 //KS: Violin plot currently not supported by three file version although it should be super easy to adapt
+
982 }
+
983
+
984 return 0;
+
985}
+
+
986
+
YAML::Node config
+
int main(int argc, char *argv[])
+
int FDParameters
+
std::string FancyTitles(std::string origName)
+
TH1D * Prefit
+
TH1D * getOtherFileHist(TFile *otherFile, TH1D *refHist)
+
int XsecStartingPos
+
int OscParametersStartingPos
+
void DrawPlots(TCanvas *canv, TH1D *PrefitCopy, std::vector< TH1D * >PostfitVec, TPad *mainPad, TPad *ratioPad)
+
TH2D * ViolinPre
+
int CrossSectionParameters
+
void MakeNDDetPlots()
+
int OscParameters
+
int FDParametersStartingPos
+
std::string SaveName
+
TPad * p3
+
std::vector< int > NDSamplesBins
+
TH1D * makeRatio(TH1D *PrefitCopy, TH1D *PostfitCopy, bool setAxes)
+
void GetViolinPlots(std::string FileName1="", std::string FileName2="")
+
std::vector< std::string > FileNames
+
void MakeFluxPlots()
+
TH2D * Violin
+
void MakeOscPlots()
+
int NDParametersStartingPos
+
Color_t PlotColor[]
+
TH2D * Violin2
+
TPad * p4
+
void copyParToBlockHist(int localBin, std::string paramName, TH1D *blockHist, TH1D *fullHist, bool setLabels=true)
+
void PrettifyTitles(TH1D *Hist)
+
void GetPostfitParamPlots()
+
void ReadSettings(TFile *File1)
+
int NDParameters
+
std::vector< TH1D * > PostfitHistVec
+
int FluxParameters
+ +
std::vector< std::string > FileLabel
+
TCanvas * canv
+
TGraphAsymmErrors * MakeTGraphAsymmErrors(TFile *File)
+
std::string plotType
+
std::vector< std::string > NDSamplesNames
+
TPad * p1
+
void MakeXsecPlots()
+
void setTH1Style(TH1 *hist, std::string styleName)
+
TPad * p2
+
void MakeFDDetPlots()
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+ + + + diff --git a/LikelihoodFit_8cpp.html b/LikelihoodFit_8cpp.html new file mode 100644 index 00000000..645ada93 --- /dev/null +++ b/LikelihoodFit_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/LikelihoodFit.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LikelihoodFit.cpp File Reference
+
+
+
#include "LikelihoodFit.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/LikelihoodFit_8cpp_source.html b/LikelihoodFit_8cpp_source.html new file mode 100644 index 00000000..7e43283e --- /dev/null +++ b/LikelihoodFit_8cpp_source.html @@ -0,0 +1,284 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/LikelihoodFit.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LikelihoodFit.cpp
+
+
+Go to the documentation of this file.
1#include "LikelihoodFit.h"
+
2
+
3// *******************
+
4// Run the Markov chain with all the systematic objects added
+
+ +
6// *******************
+
7 NPars = 0;
+
8 NParsPCA = 0;
+
9 fMirroring = true;
+
10}
+
+
11
+
12
+
13// *************************
+
14// Destructor: close the logger and output file
+
+ +
16// *************************
+
17
+
18}
+
+
19
+
20// *******************
+
+ +
22// *******************
+
23
+
24 // Save the settings into the output file
+ +
26
+
27 // Prepare the output branches
+ +
29
+
30 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
31 {
+
32 NPars += (*it)->getSize();
+
33 NParsPCA += (*it)->getNpars();
+
34 }
+
35
+
36 if (osc) {
+
37 std::cerr<<" Osc not supported "<<std::endl;
+
38 throw;
+
39 }
+
40 //KS: If PCA is note enabled NParsPCA == NPars
+
41 MACH3LOG_INFO("Total number of parameters {}", NParsPCA);
+
42}
+
+
43
+
44// *******************
+
+
45double LikelihoodFit::CalcChi2(const double* x) {
+
46// *******************
+
47
+
48 if (step % 10000 == 0)
+
49 {
+
50 MACH3LOG_INFO("Iteration {}", step);
+
51 }
+
52
+
53 stepClock->Start();
+
54
+
55 int ParCounter = 0;
+
56 double llh = 0;
+
57 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
58 {
+
59 if(!(*it)->IsPCA())
+
60 {
+
61 std::vector<double> pars;
+
62 const int Size = (*it)->getSize();
+
63 //KS: Avoid push back as they are slow
+
64 pars.resize(Size);
+
65 for(int i = 0; i < Size; ++i, ++ParCounter)
+
66 {
+
67 double ParVal = x[ParCounter];
+
68 //KS: Basically apply mirroring for parameters out of bounds
+
69 if(fMirroring)
+
70 {
+
71 if(ParVal < (*it)->GetLowerBound(i))
+
72 {
+
73 ParVal = (*it)->GetLowerBound(i) + ((*it)->GetLowerBound(i) - ParVal);
+
74 }
+
75 else if (ParVal > (*it)->GetUpperBound(i))
+
76 {
+
77 ParVal = (*it)->GetUpperBound(i) - ( ParVal - (*it)->GetUpperBound(i));
+
78 }
+
79 }
+
80 pars[i] = ParVal;
+
81 }
+
82 (*it)->setParameters(pars);
+
83 }
+
84 else
+
85 {
+
86 std::vector<double> pars;
+
87 const int Size = (*it)->getNpars();
+
88 //KS: Avoid push back as they are slow
+
89 pars.resize(Size);
+
90 for(int i = 0; i < Size; ++i, ++ParCounter)
+
91 {
+
92 double ParVal = x[ParCounter];
+
93 //KS: Basically apply mirroring for parameters out of bounds
+
94 pars[i] = ParVal;
+
95 }
+
96 (*it)->setParameters_PCA(pars);
+
97 }
+
98 (*it)->acceptStep();
+
99 }
+
100
+
101 // Loop over the systematics and propose the initial step
+
102 int stdIt = 0;
+
103 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it, ++stdIt)
+
104 {
+
105 //GetLikelihood will return LargeL if out of bounds, for minimizers this is not the problem, while calcLikelihood will return actual likelihood
+
106 syst_llh[stdIt] = (*it)->CalcLikelihood();
+
107 llh += syst_llh[stdIt];
+
108 #ifdef DEBUG
+
109 if (debug) debugFile << "LLH after " << systematics[stdIt]->getName() << " " << llh << std::endl;
+
110 #endif
+
111 }
+
112 // Could multi-thread this
+
113 // But since sample reweight is multi-threaded it's probably better to do that
+
114 for (size_t i = 0; i < samples.size(); i++)
+
115 {
+
116 // If we're running with different oscillation parameters for neutrino and anti-neutrino
+
117 if (osc) {
+
118 samples[i]->reweight(osc->getPropPars());
+
119 // If we aren't using any oscillation
+
120 } else {
+
121 double* fake = NULL;
+
122 samples[i]->reweight(fake);
+
123 }
+
124 }
+
125
+
126 //DB for atmospheric event by event sample migration, need to fully reweight all samples to allow event passing prior to likelihood evaluation
+
127 for (size_t i = 0; i < samples.size(); i++) {
+
128 // Get the sample likelihoods and add them
+
129 sample_llh[i] = samples[i]->GetLikelihood();
+
130 llh += sample_llh[i];
+
131 #ifdef DEBUG
+
132 if (debug) debugFile << "LLH after sample " << i << " " << llh << std::endl;
+
133 #endif
+
134 }
+
135
+
136 // Save the proposed likelihood (class member)
+
137 logLProp = llh;
+
138 logLCurr = llh;
+
139 accProb = 1;
+
140
+
141 stepClock->Stop();
+
142 stepTime = stepClock->RealTime();
+
143
+
144 // Write step to output tree
+
145 outTree->Fill();
+
146
+
147 // Auto save the output
+
148 if (step % auto_save == 0) outTree->AutoSave();
+
149 step++;
+
150 accCount++;
+
151
+
152 llh = 2.0*llh;
+
153 return llh;
+
154}
+
+
155
+ +
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
double logLProp
proposed likelihood
Definition FitterBase.h:75
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
unsigned int step
current state
Definition FitterBase.h:71
+
void PrepareOutput()
Prepare the output file.
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+
int NParsPCA
Number of all parameters from all covariances in PCA base.
+
LikelihoodFit(manager *const fitMan)
Constructor.
+
virtual ~LikelihoodFit()
Destructor.
+
int NPars
Number of all parameters from all covariances.
+
void PrepareFit()
prepare output and perform sanity checks
+
bool fMirroring
Flag telling if mirroring is used or not.
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
double * getPropPars()
+ +
+ + + + diff --git a/LikelihoodFit_8h.html b/LikelihoodFit_8h.html new file mode 100644 index 00000000..0b1502fc --- /dev/null +++ b/LikelihoodFit_8h.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/LikelihoodFit.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
LikelihoodFit.h File Reference
+
+
+
#include "FitterBase.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  LikelihoodFit
 
+
+ + + + diff --git a/LikelihoodFit_8h_source.html b/LikelihoodFit_8h_source.html new file mode 100644 index 00000000..1b745a58 --- /dev/null +++ b/LikelihoodFit_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/LikelihoodFit.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LikelihoodFit.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "FitterBase.h"
+
4
+
+
5class LikelihoodFit : public FitterBase {
+
6 public:
+ +
10 virtual ~LikelihoodFit();
+
11
+
13 virtual double CalcChi2(const double* x);
+
15 inline int GetNPars(){return NPars;};
+
16
+
18 virtual void runMCMC() = 0;
+
19
+
21 virtual inline std::string GetName()const {return "LikelihoodFit";};
+
22 protected:
+
24 void PrepareFit();
+
26 int NPars;
+ + +
31};
+
+
32
+ + +
manager * fitMan
The manager.
Definition FitterBase.h:68
+ +
int NParsPCA
Number of all parameters from all covariances in PCA base.
+
int GetNPars()
Get total number of params, this sums over all covariance objects.
+
virtual ~LikelihoodFit()
Destructor.
+
virtual void runMCMC()=0
Implementation of fitting algorithm.
+
int NPars
Number of all parameters from all covariances.
+
void PrepareFit()
prepare output and perform sanity checks
+
bool fMirroring
Flag telling if mirroring is used or not.
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
virtual std::string GetName() const
Get name of class.
+ +
+ + + + diff --git a/MCMCProcessor_8cpp.html b/MCMCProcessor_8cpp.html new file mode 100644 index 00000000..c573c4fb --- /dev/null +++ b/MCMCProcessor_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MCMCProcessor.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MCMCProcessor.cpp File Reference
+
+
+
#include "MCMCProcessor.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/MCMCProcessor_8cpp_source.html b/MCMCProcessor_8cpp_source.html new file mode 100644 index 00000000..aedd1e34 --- /dev/null +++ b/MCMCProcessor_8cpp_source.html @@ -0,0 +1,4841 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MCMCProcessor.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MCMCProcessor.cpp
+
+
+Go to the documentation of this file.
1#include "MCMCProcessor.h"
+
2
+
3//Only if GPU is enabled
+
4#ifdef CUDA
+
5extern void InitGPU_AutoCorr(
+
6 float **ParStep_gpu,
+
7 float **NumeratorSum_gpu,
+
8 float **ParamSums_gpu,
+
9 float **DenomSum_gpu,
+
10 int n_Entries,
+
11 int n_Pars,
+
12 const int n_Lags);
+
13
+
14extern void CopyToGPU_AutoCorr(
+
15 float *ParStep_cpu,
+
16 float *NumeratorSum_cpu,
+
17 float *ParamSums_cpu,
+
18 float *DenomSum_cpu,
+
19
+
20 float *ParStep_gpu,
+
21 float *NumeratorSum_gpu,
+
22 float *ParamSums_gpu,
+
23 float *DenomSum_gpu);
+
24
+
25extern void RunGPU_AutoCorr(
+
26 float *ParStep_gpu,
+
27 float *ParamSums_gpu,
+
28 float *NumeratorSum_gpu,
+
29 float *DenomSum_gpu,
+
30 float *NumeratorSum_cpu,
+
31 float *DenomSum_cpu);
+
32
+
33extern void CleanupGPU_AutoCorr(
+
34 float *ParStep_gpu,
+
35 float *NumeratorSum_gpu,
+
36 float *ParamSums_gpu,
+
37 float *DenomSum_gpu);
+
38#endif
+
39
+
40// ****************************
+
+ +
42 Chain(nullptr), StepCut(""), MakeCorr(MakePostfitCorr), MadePostfit(false) {
+
43// ****************************
+ +
45
+ + + + +
50 MACH3LOG_INFO("Making post-fit processor for: {}", MCMCFile);
+
51
+
52 ParStep = nullptr;
+
53 StepNumber = nullptr;
+
54
+
55 Posterior = nullptr;
+
56 hpost = nullptr;
+
57 hpost2D = nullptr;
+
58 hviolin = nullptr;
+
59 hviolin_prior = nullptr;
+
60
+
61 OutputFile = nullptr;
+
62
+
63 ParamSums = nullptr;
+
64 BatchedAverages = nullptr;
+
65 LagL = nullptr;
+
66 SampleValues = nullptr;
+
67 SystValues = nullptr;
+
68 AccProbValues = nullptr;
+
69 AccProbBatchedAverages = nullptr;
+
70
+
71 //KS: Warning this only work when you project from Chain, will nor work when you try SetBranchAddress etc. Turn it on only if you know how to use it
+
72 PlotJarlskog = false;
+
73
+
74 //KS:Hardcoded should be a way to get it via config or something
+
75 plotRelativeToPrior = false;
+
76 printToPDF = false;
+
77 plotBinValue = false;
+
78 PlotFlatPrior = true;
+
79 CacheMCMC = false;
+
80 ApplySmoothing = true;
+
81 FancyPlotNames = true;
+
82 doDiagMCMC = false;
+
83 OutputSuffix = "_Process";
+
84 Post2DPlotThreshold = 1.e-5;
+
85
+
86 nDraw = 0;
+
87 nFlux = 0;
+
88 nEntries = 0;
+
89 nSteps = 0;
+
90 nBatches = 0;
+
91 AutoCorrLag = 0;
+
92 nSysts = 0;
+
93 nSamples = 0;
+
94
+
95 nBins = 70;
+
96 DrawRange = 1.5;
+
97
+
98 Posterior1DCut = "";
+
99 CredibleInSigmas = false;
+
100 //KS:Those keep basic information for ParameterEnum
+ + + + + + +
107 nParam.resize(kNParameterEnum);
+
108 CovPos.resize(kNParameterEnum);
+
109
+
110 for(int i = 0; i < kNParameterEnum; i++)
+
111 {
+
112 ParamTypeStartPos[i] = 0;
+
113 nParam[i] = 0;
+
114 }
+
115 //Only if GPU is enabled
+
116 #ifdef CUDA
+
117 ParStep_cpu = nullptr;
+
118 NumeratorSum_cpu = nullptr;
+
119 ParamSums_cpu = nullptr;
+
120 DenomSum_cpu = nullptr;
+
121
+
122 ParStep_gpu = nullptr;
+
123 NumeratorSum_gpu = nullptr;
+
124 ParamSums_gpu = nullptr;
+
125 DenomSum_gpu = nullptr;
+
126 #endif
+
127}
+
+
128
+
129// ****************************
+
130// The destructor
+
+ +
132// ****************************
+
133
+
134 // Close the pdf file
+
135 MACH3LOG_INFO("Closing pdf in MCMCProcessor: {}", CanvasName);
+
136 CanvasName += "]";
+
137 if(printToPDF) Posterior->Print(CanvasName);
+
138 if (Posterior != nullptr) delete Posterior;
+
139
+
140 delete Gauss;
+
141 delete Covariance;
+
142 delete Correlation;
+
143 delete Central_Value;
+
144 delete Means;
+
145 delete Errors;
+
146 delete Means_Gauss;
+
147 delete Errors_Gauss;
+
148 delete Means_HPD;
+
149 delete Errors_HPD;
+
150 delete Errors_HPD_Positive;
+
151 delete Errors_HPD_Negative;
+
152
+
153 if(hpost != nullptr)
+
154 {
+
155 for (int i = 0; i < nDraw; ++i)
+
156 {
+
157 delete hpost[i];
+
158 }
+
159 delete[] hpost;
+
160 }
+
161 if(CacheMCMC)
+
162 {
+
163 for (int i = 0; i < nDraw; ++i)
+
164 {
+
165 for (int j = 0; j < nDraw; ++j)
+
166 {
+
167 delete hpost2D[i][j];
+
168 }
+
169 delete[] ParStep[i];
+
170 delete[] hpost2D[i];
+
171 }
+
172 delete[] ParStep;
+
173 delete[] hpost2D;
+
174 }
+
175 if(StepNumber != nullptr) delete[] StepNumber;
+
176
+
177 if(hviolin != nullptr) delete hviolin;
+
178 if(hviolin_prior != nullptr) delete hviolin_prior;
+
179 if(OutputFile != nullptr) OutputFile->Close();
+
180 if(OutputFile != nullptr) delete OutputFile;
+
181 delete Chain;
+
182}
+
+
183
+
184// ***************
+
+ +
186// ***************
+
187 // Scan the ROOT file for useful branches
+
188 ScanInput();
+
189
+
190 // Setup the output
+
191 SetupOutput();
+
192}
+
+
193
+
194// ***************
+
+ +
196// ***************
+
197 // Make the post fit
+
198 MakePostfit();
+
199
+
200 // We now have the private members
+ + + + + +
206}
+
+
207
+
208// ***************
+
209// Get post-fits for the ParameterEnum type, e.g. xsec params, ND params or flux params etc
+
+ +
211// ***************
+
212 // Make the post fit
+
213 MakePostfit();
+
214
+
215 // Loop over the loaded param types
+
216 const int ParamTypeSize = ParamType.size();
+
217 int ParamNumber = 0;
+
218 for (int i = 0; i < ParamTypeSize; ++i) {
+
219 if (ParamType[i] != kParam) continue;
+
220 (*PDF_Central)(ParamNumber) = (*Means)(i);
+
221 (*PDF_Errors)(ParamNumber) = (*Errors)(i);
+
222 (*Peak_Values)(ParamNumber) = (*Means_HPD)(i);
+
223 ++ParamNumber;
+
224 }
+
225}
+
+
226
+
227
+
228// ***************
+
+ +
230// ***************
+ +
232 else MakeCovariance();
+
233 Cov = (TMatrixDSym*)Covariance->Clone();
+
234 Corr = (TMatrixDSym*)Correlation->Clone();
+
235}
+
+
236
+
237// ***************
+
+ +
239// ***************
+
240
+
241 //KS: ROOT hates me... but we can create several instances of MCMC Processor, each with own TCanvas ROOT is mad and will delete if there is more than one canvas with the same name, so we add random number to avoid issue
+
242 TRandom3* rand = new TRandom3(0);
+
243 const int uniform = int(rand->Uniform(0, 10000));
+
244 // Open a TCanvas to write the posterior onto
+
245 Posterior = new TCanvas(("Posterior" + std::to_string(uniform)).c_str(), ("Posterior" + std::to_string(uniform)).c_str(), 0, 0, 1024, 1024);
+
246
+
247 Posterior->SetGrid();
+
248 gStyle->SetOptStat(0);
+
249 gStyle->SetOptTitle(0);
+
250 Posterior->SetTickx();
+
251 Posterior->SetTicky();
+
252 Posterior->SetBottomMargin(0.1);
+
253 Posterior->SetTopMargin(0.05);
+
254 Posterior->SetRightMargin(0.03);
+
255 Posterior->SetLeftMargin(0.15);
+
256
+
257 //To avoid TCanvas::Print> messages
+ +
259
+
260 // Output file to write to
+
261 OutputName = MCMCFile + OutputSuffix +".root";
+
262
+
263 // Output file
+
264 OutputFile = new TFile(OutputName.c_str(), "recreate");
+
265 OutputFile->cd();
+
266}
+
+
267
+
268
+
269// ****************************
+
270//CW: Function to make the post-fit
+
+ +
272// ****************************
+
273
+
274 // Check if we've already made post-fit
+
275 if (MadePostfit == true) return;
+
276 MadePostfit = true;
+
277
+
278 // Check if the output file is ready
+
279 if (OutputFile == nullptr) MakeOutputFile();
+
280
+
281 MACH3LOG_INFO("MCMCProcessor is making post-fit plots...");
+
282
+
283 // Directory for posteriors
+
284 TDirectory *PostDir = OutputFile->mkdir("Post");
+
285
+
286 // We fit with this Gaussian
+
287 Gauss = new TF1("Gauss","[0]/sqrt(2.0*3.14159)/[2]*TMath::Exp(-0.5*pow(x-[1],2)/[2]/[2])",-5,5);
+
288 Gauss->SetLineWidth(2);
+
289 Gauss->SetLineColor(kOrange-5);
+
290
+
291 // nDraw is number of draws we want to do
+
292 for (int i = 0; i < nDraw; ++i)
+
293 {
+
294 if (i % (nDraw/5) == 0)
+
295 {
+ +
297 }
+
298 OutputFile->cd();
+
299 TString Title = "";
+
300 double Prior = 1.0;
+
301 double PriorError = 1.0;
+
302
+ +
304
+
305 // This holds the posterior density
+
306 const double maxi = Chain->GetMaximum(BranchNames[i]);
+
307 const double mini = Chain->GetMinimum(BranchNames[i]);
+
308 // This holds the posterior density
+ +
310 hpost[i]->SetMinimum(0);
+
311 hpost[i]->GetYaxis()->SetTitle("Steps");
+
312 hpost[i]->GetYaxis()->SetNoExponent(false);
+
313
+
314 //KS: Apply additional Cuts, like mass ordering
+
315 std::string CutPosterior1D = "";
+
316 if(Posterior1DCut != "")
+
317 {
+ +
319 }
+
320 else CutPosterior1D = StepCut;
+
321
+
322 // Project BranchNames[i] onto hpost, applying stepcut
+
323 Chain->Project(BranchNames[i], BranchNames[i], CutPosterior1D.c_str());
+
324
+
325 if(ApplySmoothing) hpost[i]->Smooth();
+
326
+
327 (*Central_Value)(i) = Prior;
+
328
+ +
330 GetGaussian(hpost[i], i);
+
331 GetHPD(hpost[i], i);
+
332
+
333 // Write the results from the projection into the TVectors and TMatrices
+
334 (*Covariance)(i,i) = (*Errors)(i)*(*Errors)(i);
+
335 (*Correlation)(i,i) = 1.0;
+
336
+
337 //KS: This need to be before SetMaximum(), this way plot is nicer as line end at the maximum
+
338 TLine *hpd = new TLine((*Means_HPD)(i), hpost[i]->GetMinimum(), (*Means_HPD)(i), hpost[i]->GetMaximum());
+
339 hpd->SetLineColor(kBlack);
+
340 hpd->SetLineWidth(2);
+
341 hpd->SetLineStyle(kSolid);
+
342
+
343 hpost[i]->SetLineWidth(2);
+
344 hpost[i]->SetLineColor(kBlue-1);
+
345 hpost[i]->SetMaximum(hpost[i]->GetMaximum()*DrawRange);
+
346 hpost[i]->SetTitle(Title);
+
347 hpost[i]->GetXaxis()->SetTitle(hpost[i]->GetTitle());
+
348
+
349 // Now make the TLine for the Asimov
+ +
351 Asimov->SetLineColor(kRed-3);
+
352 Asimov->SetLineWidth(2);
+
353 Asimov->SetLineStyle(kDashed);
+
354
+
355 TLegend *leg = new TLegend(0.12, 0.6, 0.6, 0.97);
+
356 leg->SetTextSize(0.04);
+
357 leg->AddEntry(hpost[i], Form("#splitline{PDF}{#mu = %.2f, #sigma = %.2f}", hpost[i]->GetMean(), hpost[i]->GetRMS()), "l");
+
358 leg->AddEntry(Gauss, Form("#splitline{Gauss}{#mu = %.2f, #sigma = %.2f}", Gauss->GetParameter(1), Gauss->GetParameter(2)), "l");
+
359 leg->AddEntry(hpd, Form("#splitline{HPD}{#mu = %.2f, #sigma = %.2f (+%.2f-%.2f)}", (*Means_HPD)(i), (*Errors_HPD)(i), (*Errors_HPD_Positive)(i), (*Errors_HPD_Negative)(i)), "l");
+
360 leg->AddEntry(Asimov, Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError), "l");
+
361 leg->SetLineColor(0);
+
362 leg->SetLineStyle(0);
+
363 leg->SetFillColor(0);
+
364 leg->SetFillStyle(0);
+
365
+
366 //CW: Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
367 if (hpost[i]->GetMaximum() == hpost[i]->Integral()*DrawRange)
+
368 {
+
369 MACH3LOG_WARN("Found fixed parameter, moving on");
+
370 IamVaried[i] = false;
+
371 //KS:Set mean and error to prior for fixed parameters, it looks much better when fixed parameter has mean on prior rather than on 0 with 0 error.
+
372 (*Means_HPD)(i) = Prior;
+
373 (*Errors_HPD)(i) = PriorError;
+
374
+
375 delete Asimov;
+
376 delete hpd;
+
377 delete leg;
+
378 continue;
+
379 }
+
380
+
381 // Store that this parameter is indeed being varied
+
382 IamVaried[i] = true;
+
383
+
384 // Write to file
+
385 Posterior->SetName(hpost[i]->GetName());
+
386 Posterior->SetTitle(hpost[i]->GetTitle());
+
387
+
388 // Draw onto the TCanvas
+
389 hpost[i]->Draw();
+
390 hpd->Draw("same");
+
391 Asimov->Draw("same");
+
392 leg->Draw("same");
+
393
+
394 if(printToPDF) Posterior->Print(CanvasName);
+
395
+
396 // cd into params directory in root file
+
397 PostDir->cd();
+
398 Posterior->Write();
+
399
+
400 delete Asimov;
+
401 delete hpd;
+
402 delete leg;
+
403 } // end the for loop over nDraw
+
404
+
405 OutputFile->cd();
+
406 TTree *SettingsBranch = new TTree("Settings", "Settings");
+ +
408 SettingsBranch->Branch("CrossSectionParameters", &CrossSectionParameters);
+ +
410 SettingsBranch->Branch("CrossSectionParametersStartingPos", &CrossSectionParametersStartingPos);
+
411 int FluxParameters = nFlux;
+
412 SettingsBranch->Branch("FluxParameters", &FluxParameters);
+
413
+ +
415 SettingsBranch->Branch("NDParameters", &NDParameters);
+ +
417 SettingsBranch->Branch("NDParametersStartingPos", &NDParametersStartingPos);
+
418
+ +
420 SettingsBranch->Branch("FDParameters", &FDParameters);
+ +
422 SettingsBranch->Branch("FDParametersStartingPos", &FDParametersStartingPos);
+
423
+ +
425 SettingsBranch->Branch("OscParameters", &OscParameters);
+ +
427 SettingsBranch->Branch("OscParametersStartingPos", &OscParametersStartingPos);
+
428
+
429 SettingsBranch->Branch("NDSamplesBins", &NDSamplesBins);
+
430 SettingsBranch->Branch("NDSamplesNames", &NDSamplesNames);
+
431
+
432 SettingsBranch->Fill();
+
433 SettingsBranch->Write();
+
434
+
435 delete SettingsBranch;
+
436
+
437 TDirectory *Names = OutputFile->mkdir("Names");
+
438 Names->cd();
+
439 for (std::vector<TString>::iterator it = BranchNames.begin(); it != BranchNames.end(); ++it) {
+
440 TObjString((*it)).Write();
+
441 }
+
442 OutputFile->cd();
+
443 Central_Value->Write("Central_Value");
+
444 Means->Write("PDF_Means");
+
445 Errors->Write("PDF_Error");
+
446 Means_Gauss->Write("Gauss_Means");
+
447 Errors_Gauss->Write("Gauss_Errors");
+
448 Means_HPD->Write("Means_HPD");
+
449 Errors_HPD->Write("Errors_HPD");
+
450 Errors_HPD_Positive->Write("Errors_HPD_Positive");
+
451 Errors_HPD_Negative->Write("Errors_HPD_Negative");
+
452
+
453 PostDir->Close();
+
454 delete PostDir;
+
455} // Have now written the postfit projections
+
+
456
+
457// *******************
+
458//CW: Draw the postfit
+
+ +
460// *******************
+
461
+
462 if (OutputFile == nullptr) MakeOutputFile();
+
463
+
464 // Make the prefit plot
+ +
466
+
467 // cd into the output file
+
468 OutputFile->cd();
+
469
+
470 std::string CutPosterior1D = "";
+
471 if(Posterior1DCut != "")
+
472 {
+ +
474 }
+
475 else CutPosterior1D = StepCut;
+
476
+
477 // Make a TH1D of the central values and the errors
+
478 TH1D *paramPlot = new TH1D("paramPlot", "paramPlot", nDraw, 0, nDraw);
+
479 paramPlot->SetName("mach3params");
+
480 paramPlot->SetTitle(CutPosterior1D.c_str());
+
481 paramPlot->SetFillStyle(3001);
+
482 paramPlot->SetFillColor(kBlue-1);
+
483 paramPlot->SetMarkerColor(paramPlot->GetFillColor());
+
484 paramPlot->SetMarkerStyle(20);
+
485 paramPlot->SetLineColor(paramPlot->GetFillColor());
+
486 paramPlot->SetMarkerSize(prefit->GetMarkerSize());
+
487
+
488 // Same but with Gaussian output
+
489 TH1D *paramPlot_Gauss = (TH1D*)(paramPlot->Clone());
+
490 paramPlot_Gauss->SetMarkerColor(kOrange-5);
+
491 paramPlot_Gauss->SetMarkerStyle(23);
+
492 paramPlot_Gauss->SetLineWidth(2);
+
493 paramPlot_Gauss->SetMarkerSize((prefit->GetMarkerSize())*0.75);
+
494 paramPlot_Gauss->SetFillColor(paramPlot_Gauss->GetMarkerColor());
+
495 paramPlot_Gauss->SetFillStyle(3244);
+
496 paramPlot_Gauss->SetLineColor(paramPlot_Gauss->GetMarkerColor());
+
497
+
498 // Same but with Gaussian output
+
499 TH1D *paramPlot_HPD = (TH1D*)(paramPlot->Clone());
+
500 paramPlot_HPD->SetMarkerColor(kBlack);
+
501 paramPlot_HPD->SetMarkerStyle(25);
+
502 paramPlot_HPD->SetLineWidth(2);
+
503 paramPlot_HPD->SetMarkerSize((prefit->GetMarkerSize())*0.5);
+
504 paramPlot_HPD->SetFillColor(0);
+
505 paramPlot_HPD->SetFillStyle(0);
+
506 paramPlot_HPD->SetLineColor(paramPlot_HPD->GetMarkerColor());
+
507
+
508 // Set labels and data
+
509 for (int i = 0; i < nDraw; ++i)
+
510 {
+
511 //Those keep which parameter type we run currently and realtive number
+
512 int ParamEnu = ParamType[i];
+
513 int ParamNo = i - ParamTypeStartPos[ParameterEnum(ParamEnu)];
+
514
+
515 //KS: Sliglthy hacky way to get realtive to prior or nominal as this is convention we use
+
516 //This only applies for xsec for other systematic types doesn't matter
+
517 double CentralValueTemp = 0;
+ +
519 double Err, Err_Gauss, Err_HPD;
+
520
+ +
522 {
+ +
524 // Normalise the prior relative the nominal/prior, just the way we get our fit results in MaCh3
+
525 if ( CentralValueTemp != 0)
+
526 {
+
527 Central = (*Means)(i) / CentralValueTemp;
+
528 Err = (*Errors)(i) / CentralValueTemp;
+
529
+
530 Central_gauss = (*Means_Gauss)(i) / CentralValueTemp;
+
531 Err_Gauss = (*Errors_Gauss)(i) / CentralValueTemp;
+
532
+
533 Central_HPD = (*Means_HPD)(i) / CentralValueTemp;
+
534 Err_HPD = (*Errors_HPD)(i) / CentralValueTemp;
+
535 }
+
536 else {
+
537 Central = 1+(*Means)(i);
+
538 Err = (*Errors)(i);
+
539
+
540 Central_gauss = 1+(*Means_Gauss)(i);
+
541 Err_Gauss = (*Errors_Gauss)(i);
+
542
+
543 Central_HPD = 1+(*Means_HPD)(i) ;
+
544 Err_HPD = (*Errors_HPD)(i);
+
545 }
+
546 }
+
547 //KS: Just get value of each parameter without dividing by prior
+
548 else
+
549 {
+
550 Central = (*Means)(i);
+
551 Err = (*Errors)(i);
+
552
+
553 Central_gauss = (*Means_Gauss)(i);
+
554 Err_Gauss = (*Errors_Gauss)(i);
+
555
+
556 Central_HPD = (*Means_HPD)(i) ;
+
557 Err_HPD = (*Errors_HPD)(i);
+
558 }
+
559
+
560 paramPlot->SetBinContent(i+1, Central);
+
561 paramPlot->SetBinError(i+1, Err);
+
562
+
563 paramPlot_Gauss->SetBinContent(i+1, Central_gauss);
+
564 paramPlot_Gauss->SetBinError(i+1, Err_Gauss);
+
565
+
566 paramPlot_HPD->SetBinContent(i+1, Central_HPD);
+
567 paramPlot_HPD->SetBinError(i+1, Err_HPD);
+
568
+
569 paramPlot->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
570 paramPlot_Gauss->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
571 paramPlot_HPD->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
572 }
+
573
+
574 // Make a TLegend
+
575 TLegend *CompLeg = new TLegend(0.33, 0.73, 0.76, 0.95);
+
576 CompLeg->AddEntry(prefit, "Prefit", "fp");
+
577 CompLeg->AddEntry(paramPlot, "Postfit PDF", "fp");
+
578 CompLeg->AddEntry(paramPlot_Gauss, "Postfit Gauss", "fp");
+
579 CompLeg->AddEntry(paramPlot_HPD, "Postfit HPD", "lfep");
+
580 CompLeg->SetFillColor(0);
+
581 CompLeg->SetFillStyle(0);
+
582 CompLeg->SetLineWidth(0);
+
583 CompLeg->SetLineStyle(0);
+
584 CompLeg->SetBorderSize(0);
+
585
+
586 const double BottomMargin = Posterior->GetBottomMargin();
+
587 Posterior->SetBottomMargin(0.2);
+
588
+
589 OutputFile->cd();
+
590 //KS: Plot Xsec and Flux
+
591 if (PlotXSec == true)
+
592 {
+
593 const int Start = ParamTypeStartPos[kXSecPar];
+
594 // Plot the xsec parameters (0 to ~nXsec-nFlux) nXsec == xsec + flux, quite confusing I know
+
595 // Have already looked through the branches earlier
+
596 if(plotRelativeToPrior) prefit->GetYaxis()->SetTitle("Variation rel. prior");
+
597 else prefit->GetYaxis()->SetTitle("Parameter Value");
+
598 prefit->GetYaxis()->SetRangeUser(-2.5, 2.5);
+
599 prefit->GetXaxis()->SetTitle("");
+
600 prefit->GetXaxis()->LabelsOption("v");
+
601
+
602 prefit->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
603 paramPlot->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
604 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start, Start+ nParam[kXSecPar]-nFlux);
+
605 paramPlot_HPD->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
606
+
607 // Write the individual ones
+
608 prefit->Write("param_xsec_prefit");
+
609 paramPlot->Write("param_xsec");
+
610 paramPlot_Gauss->Write("param_xsec_gaus");
+
611 paramPlot_HPD->Write("param_xsec_HPD");
+
612
+
613 // And the combined
+
614 prefit->Draw("e2");
+
615 paramPlot->Draw("e2, same");
+
616 paramPlot_Gauss->Draw("e2, same");
+
617 paramPlot_HPD->Draw("e1, same");
+
618 CompLeg->Draw("same");
+
619 Posterior->Write("param_xsec_canv");
+
620 if(printToPDF) Posterior->Print(CanvasName);
+
621 Posterior->Clear();
+
622
+
623 OutputFile->cd();
+
624 // Plot the flux parameters (nXSec to nxsec+nflux) if enabled
+
625 // Have already looked through the branches earlier
+
626 prefit->GetYaxis()->SetRangeUser(0.7, 1.3);
+
627 paramPlot->GetYaxis()->SetRangeUser(0.7, 1.3);
+
628 paramPlot_Gauss->GetYaxis()->SetRangeUser(0.7, 1.3);
+
629 paramPlot_HPD->GetYaxis()->SetRangeUser(0.7, 1.3);
+
630
+
631 prefit->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
632 paramPlot->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
633 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
634 paramPlot_HPD->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
635
+
636 prefit->Write("param_flux_prefit");
+
637 paramPlot->Write("param_flux");
+
638 paramPlot_Gauss->Write("param_flux_gaus");
+
639 paramPlot_HPD->Write("param_flux_HPD");
+
640
+
641 prefit->Draw("e2");
+
642 paramPlot->Draw("e2, same");
+
643 paramPlot_Gauss->Draw("e1, same");
+
644 paramPlot_HPD->Draw("e1, same");
+
645 CompLeg->Draw("same");
+
646 Posterior->Write("param_flux_canv");
+
647 if(printToPDF) Posterior->Print(CanvasName);
+
648 Posterior->Clear();
+
649 }
+
650 if(PlotDet)
+
651 {
+ +
653 int NDbinCounter = Start;
+
654 //KS: Make prefit postfit for each ND sample, having all of them at the same plot is unreadable
+
655 for(unsigned int i = 0; i < NDSamplesNames.size(); i++ )
+
656 {
+
657 std::string NDname = NDSamplesNames[i];
+ +
659 OutputFile->cd();
+
660 prefit->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
661 prefit->GetYaxis()->SetRangeUser(0.6, 1.4);
+
662 prefit->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
663 prefit->GetXaxis()->SetTitle();
+
664 prefit->GetXaxis()->LabelsOption("v");
+
665
+
666 paramPlot->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
667 paramPlot->GetYaxis()->SetRangeUser(0.6, 1.4);
+
668 paramPlot->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
669 paramPlot->GetXaxis()->SetTitle("");
+
670 paramPlot->SetTitle(CutPosterior1D.c_str());
+
671 paramPlot->GetXaxis()->LabelsOption("v");
+
672
+
673 paramPlot_Gauss->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
674 paramPlot_Gauss->GetYaxis()->SetRangeUser(0.6, 1.4);
+
675 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
676 paramPlot_Gauss->GetXaxis()->SetTitle("");
+
677 paramPlot_Gauss->SetTitle(CutPosterior1D.c_str());
+
678 paramPlot_Gauss->GetXaxis()->LabelsOption("v");
+
679
+
680 paramPlot_HPD->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
681 paramPlot_HPD->GetYaxis()->SetRangeUser(0.6, 1.4);
+
682 paramPlot_HPD->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
683 paramPlot_HPD->GetXaxis()->SetTitle("");
+
684 paramPlot_HPD->SetTitle(CutPosterior1D.c_str());
+
685 paramPlot_HPD->GetXaxis()->LabelsOption("v");
+
686
+
687 prefit->Write(("param_"+NDname+"_prefit").c_str());
+
688 paramPlot->Write(("param_"+NDname).c_str());
+
689 paramPlot_Gauss->Write(("param_"+NDname+"_gaus").c_str());
+
690 paramPlot_HPD->Write(("param_"+NDname+"_HPD").c_str());
+
691
+
692 prefit->Draw("e2");
+
693 paramPlot->Draw("e2, same");
+
694 paramPlot_Gauss->Draw("e1, same");
+
695 paramPlot_HPD->Draw("e1, same");
+
696 CompLeg->Draw("same");
+
697 Posterior->Write(("param_"+NDname+"_canv").c_str());
+
698 if(printToPDF) Posterior->Print(CanvasName);
+
699 Posterior->Clear();
+ +
701 }
+
702 }
+
703
+
704 delete prefit;
+
705 delete paramPlot;
+
706 delete paramPlot_Gauss;
+
707 delete paramPlot_HPD;
+
708 delete CompLeg;
+
709
+
710 //KS: Return Margin to default one
+
711 Posterior->SetBottomMargin(BottomMargin);
+
712}
+
+
713
+
714// *********************
+
715// Make fancy Credible Intervals plots
+
+ +
717// *********************
+
718
+
719 if(hpost[0] == nullptr) MakePostfit();
+
720
+
721 MACH3LOG_INFO("Making Credible Intervals ");
+
722
+
723 const double LeftMargin = Posterior->GetLeftMargin();
+
724 Posterior->SetLeftMargin(0.15);
+
725
+
726 //Load values set via config or executable
+
727 std::vector<double> CredibleIntervals = Credible_Intervals;
+ +
729 //Nothing was passed via config so use default values which are fancy ;)
+
730 if(CredibleIntervals.size() == 0 && CredibleIntervalsColours.size() == 0)
+
731 {
+
732 CredibleIntervals.insert(CredibleIntervals.end(), { 0.99, 0.90, 0.68 });
+
733 CredibleIntervalsColours.insert(CredibleIntervalsColours.end(), { kCyan+4, kCyan-2, kCyan-10 });
+
734 }
+ +
736 {
+
737 MACH3LOG_ERROR("Size of CredibleIntervals is not equat to size of CredibleIntervalsColours");
+
738 throw;
+
739 }
+
740 const int nCredible = CredibleIntervals.size();
+
741 TH1D** hpost_copy = new TH1D*[nDraw];
+
742 TH1D*** hpost_cl = new TH1D**[nDraw];
+
743
+
744 //KS: Copy all histograms to be thread safe
+
745 for (int i = 0; i < nDraw; ++i)
+
746 {
+
747 hpost_copy[i] = (TH1D*) hpost[i]->Clone(Form("hpost_copy_%i", i));
+
748 hpost_cl[i] = new TH1D*[nCredible];
+
749
+
750 for (int j = 0; j < nCredible; ++j)
+
751 {
+
752 hpost_cl[i][j] = (TH1D*) hpost[i]->Clone( Form("hpost_copy_%i_CL_%f", i, CredibleIntervals[j]));
+
753
+
754 //KS: Reset to get rid to TF1 otherwise we run into segfault :(
+
755 hpost_cl[i][j]->Reset("");
+
756 hpost_cl[i][j]->Fill(0.0, 0.0);
+
757 }
+
758 }
+
759
+
760 #ifdef MULTITHREAD
+
761 #pragma omp parallel for
+
762 #endif
+
763 for (int i = 0; i < nDraw; ++i)
+
764 {
+
766 hpost_copy[i]->Scale(1. / hpost_copy[i]->Integral());
+
767 for (int j = 0; j < nCredible; ++j)
+
768 {
+
769 // Scale the histograms before gettindg credible intervals
+
770 hpost_cl[i][j]->Scale(1. / hpost_cl[i][j]->Integral());
+
771
+
772 //KS: We have sliglhy different approach depdening if you passed percentage or sigmas
+ +
774 {
+
775 //KS: Convert sigmas into percentage
+
776 const double CredInter = GetSigmaValue((int)std::round(CredibleIntervals[j]));
+ +
778 }
+
779 else
+
780 {
+ +
782 }
+
783
+
784 hpost_cl[i][j]->SetFillColor(CredibleIntervalsColours[j]);
+
785 hpost_cl[i][j]->SetLineWidth(1);
+
786 }
+
787 hpost_copy[i]->GetYaxis()->SetTitleOffset(1.8);
+
788 hpost_copy[i]->SetLineWidth(1);
+
789 hpost_copy[i]->SetMaximum(hpost_copy[i]->GetMaximum()*1.2);
+
790 hpost_copy[i]->SetLineWidth(2);
+
791 hpost_copy[i]->SetLineColor(kBlack);
+
792 hpost_copy[i]->GetYaxis()->SetTitle("Posterior Probability");
+
793 }
+
794
+
795 OutputFile->cd();
+
796 TDirectory *CredibleDir = OutputFile->mkdir("Credible");
+
797
+
798 for (int i = 0; i < nDraw; ++i)
+
799 {
+
800 if(!IamVaried[i]) continue;
+
801
+
802 // Now make the TLine for the Asimov
+
803 TString Title = "";
+
804 double Prior = 1.0;
+
805 double PriorError = 1.0;
+
806
+ +
808
+ +
810 Asimov->SetLineColor(kRed-3);
+
811 Asimov->SetLineWidth(2);
+
812 Asimov->SetLineStyle(kDashed);
+
813
+
814 TLegend* legend = new TLegend(0.20, 0.7, 0.4, 0.92);
+
815 legend->SetTextSize(0.03);
+
816 legend->SetFillColor(0);
+
817 legend->SetFillStyle(0);
+
818 legend->SetLineColor(0);
+
819 legend->SetLineStyle(0);
+
820 legend->SetBorderSize(0);
+
821 hpost_copy[i]->Draw("HIST");
+
822
+
823 for (int j = 0; j < nCredible; ++j)
+
824 hpost_cl[i][j]->Draw("HIST SAME");
+
825 for (int j = nCredible-1; j >= 0; --j)
+
826 {
+ +
828 legend->AddEntry(hpost_cl[i][j], Form("%.0f#sigma Credible Interval", CredibleIntervals[j]), "f");
+
829 else
+
830 legend->AddEntry(hpost_cl[i][j], Form("%.0f%% Credible Interval", CredibleIntervals[j]*100), "f");
+
831 }
+
832 legend->AddEntry(Asimov, Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError), "l");
+
833 legend->Draw("SAME");
+
834 Asimov->Draw("SAME");
+
835
+
836 // Write to file
+
837 Posterior->SetName(hpost[i]->GetName());
+
838 Posterior->SetTitle(hpost[i]->GetTitle());
+
839
+
840 if(printToPDF) Posterior->Print(CanvasName);
+
841 // cd into directory in root file
+
842 CredibleDir->cd();
+
843 Posterior->Write();
+
844
+
845 delete legend;
+
846 delete Asimov;
+
847 }
+
848
+
849 //KS: Remove histograms
+
850 for (int i = 0; i < nDraw; ++i)
+
851 {
+
852 delete hpost_copy[i];
+
853 for (int j = 0; j < nCredible; ++j)
+
854 {
+
855 delete hpost_cl[i][j];
+
856 }
+
857 delete[] hpost_cl[i];
+
858 }
+
859 delete[] hpost_copy;
+
860 delete[] hpost_cl;
+
861
+
862 CredibleDir->Close();
+
863 delete CredibleDir;
+
864
+
865 OutputFile->cd();
+
866
+
867 //Set back to normal
+
868 Posterior->SetLeftMargin(LeftMargin);
+
869}
+
+
870
+
871
+
872// *********************
+
873// Make fancy violin plots
+
+ +
875// *********************
+
876 //KS: Make sure we have steps
+
877 if(!CacheMCMC) CacheSteps();
+
878
+
879 MACH3LOG_INFO("Producing Violin Plot");
+
880
+
881 //KS: Find min and max to make histogram in range
+
882 double maxi_y = Chain->GetMaximum(BranchNames[0]);
+
883 double mini_y = Chain->GetMinimum(BranchNames[0]);
+
884 for (int i = 1; i < nDraw; ++i)
+
885 {
+
886 if(Chain->GetMaximum(BranchNames[i]) > maxi_y) maxi_y = Chain->GetMaximum(BranchNames[i]);
+
887 if(Chain->GetMinimum(BranchNames[i]) < mini_y) mini_y = Chain->GetMinimum(BranchNames[i]);
+
888 }
+
889
+
890 const int vBins = (maxi_y-mini_y)*25;
+
891
+
892 hviolin = new TH2D("hviolin", "hviolin", nDraw, 0, nDraw, vBins, mini_y, maxi_y);
+
893
+
894 //KS: Prior has larger errors so we increase range and number of bins
+
895 const int PriorFactor = 4;
+
896 hviolin_prior = new TH2D("hviolin_prior", "hviolin_prior", nDraw, 0, nDraw, PriorFactor*vBins, PriorFactor*mini_y, PriorFactor*maxi_y);
+
897
+
898 TRandom3* rand = new TRandom3(0);
+
899
+
900 std::vector<double> PriorVec(nDraw);
+
901 std::vector<double> PriorErrorVec(nDraw);
+
902 std::vector<bool> PriorFlatVec(nDraw);
+
903
+
904 for (int x = 0; x < nDraw; ++x)
+
905 {
+ +
907 double Prior, PriorError;
+
908
+ +
910 //Set fancy labels
+
911 hviolin->GetXaxis()->SetBinLabel(x+1, Title);
+
912 hviolin_prior->GetXaxis()->SetBinLabel(x+1, Title);
+
913 PriorVec[x] = Prior;
+ +
915
+ + + +
919 }
+
920
+
921 TStopwatch clock;
+
922 clock.Start();
+
923
+
924 // nDraw is number of draws we want to do
+
925 #ifdef MULTITHREAD
+
926 #pragma omp parallel for
+
927 #endif
+
928 for (int x = 0; x < nDraw; ++x)
+
929 {
+
930 //KS: Consider another treatment for fixed params
+
931 //if (IamVaried[x] == false) continue;
+
932 for (int k = 0; k < nEntries; ++k)
+
933 {
+
934 //KS: Burn in cut
+
935 if(StepNumber[k] < BurnInCut) continue;
+
936 //KS: We know exaclty which x bin we will end up, find y bin. This allow to avoid coslty Fill() and enable multithreading becasue I am master of faster
+
937 const double y = hviolin->GetYaxis()->FindBin(ParStep[x][k]);
+
938 hviolin->SetBinContent(x+1, y, hviolin->GetBinContent(x+1, y)+1);
+
939 }
+
940
+
941 //KS: If we set option to not plot flat prior and param has flat prior then we skip this step
+
942 if(!(!PlotFlatPrior && PriorFlatVec[x]))
+
943 {
+
944 for (int k = 0; k < nEntries; ++k)
+
945 {
+
946 const double Entry = rand->Gaus(PriorVec[x], PriorErrorVec[x]);
+
947 const double y = hviolin_prior->GetYaxis()->FindBin(Entry);
+
948 hviolin_prior->SetBinContent(x+1, y, hviolin_prior->GetBinContent(x+1, y)+1);
+
949 }
+
950 }
+
951 } // end the for loop over nDraw
+
952 clock.Stop();
+
953 std::cout << "Making Violin plot took " << clock.RealTime() << "s to finish for " << nEntries << " steps" << std::endl;
+
954
+
955 //KS: Tells how many parameters in one canvas we want
+
956 const int IntervalsSize = 10;
+
957 const int NIntervals = nDraw/IntervalsSize;
+
958
+
959 hviolin->GetYaxis()->SetTitle("Parameter Value");
+
960 hviolin->GetXaxis()->SetTitle();
+
961 hviolin->GetXaxis()->LabelsOption("v");
+
962
+
963 hviolin_prior->GetYaxis()->SetTitle("Parameter Value");
+
964 hviolin_prior->GetXaxis()->SetTitle();
+
965 hviolin_prior->GetXaxis()->LabelsOption("v");
+
966
+
967 hviolin_prior->SetLineColor(kRed);
+
968 hviolin_prior->SetMarkerColor(kRed);
+
969 hviolin_prior->SetFillColorAlpha(kRed, 0.35);
+
970 hviolin_prior->SetMarkerStyle(20);
+
971 hviolin_prior->SetMarkerSize(0.5);
+
972
+
973 hviolin->SetLineColor(kBlue);
+
974 hviolin->SetMarkerColor(kBlue);
+
975 hviolin->SetFillColorAlpha(kBlue, 0.35);
+
976 hviolin->SetMarkerStyle(20);
+
977 hviolin->SetMarkerSize(1.0);
+
978
+
979 const double BottomMargin = Posterior->GetBottomMargin();
+
980 Posterior->SetBottomMargin(0.2);
+
981
+
982 OutputFile->cd();
+
983 hviolin->Write("param_violin");
+
984 hviolin_prior->Write("param_violin_prior");
+
985 //KS: This is moslty for example plots, we have full file in the ROOT file so can do much better plot later
+
986 hviolin->GetYaxis()->SetRangeUser(-1, +2);
+
987 hviolin_prior->GetYaxis()->SetRangeUser(-1, +2);
+
988 for (int i = 0; i < NIntervals+1; ++i)
+
989 {
+
990 hviolin->GetXaxis()->SetRangeUser(i*IntervalsSize, i*IntervalsSize+IntervalsSize);
+
991 hviolin_prior->GetXaxis()->SetRangeUser(i*IntervalsSize, i*IntervalsSize+IntervalsSize);
+
992 if(i == NIntervals+1)
+
993 {
+
994 hviolin->GetXaxis()->SetRangeUser(i*IntervalsSize, nDraw);
+
995 hviolin_prior->GetXaxis()->SetRangeUser(i*IntervalsSize, nDraw);
+
996 }
+
997 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
998 hviolin_prior->Draw("VIOLIN");
+
999 hviolin->Draw("VIOLIN SAME");
+
1000 if(printToPDF) Posterior->Print(CanvasName);
+
1001 }
+
1002 delete rand;
+
1003 //KS: Return Margin to default one
+
1004 Posterior->SetBottomMargin(BottomMargin);
+
1005}
+
+
1006
+
1007// *********************
+
1008// Make the post-fit covariance matrix in all dimensions
+
+ +
1010// *********************
+
1011
+
1012 if (OutputFile == nullptr) MakeOutputFile();
+
1013
+
1014 bool HaveMadeDiagonal = false;
+
1015 MACH3LOG_INFO("Making post-fit covariances...");
+
1016 // Check that the diagonal entries have been filled
+
1017 // i.e. MakePostfit() has been called
+
1018 for (int i = 0; i < nDraw; ++i) {
+
1019 if ((*Covariance)(i,i) == __UNDEF__) {
+
1020 HaveMadeDiagonal = false;
+
1021 MACH3LOG_INFO("Have not run diagonal elements in covariance, will do so now by calling MakePostfit()");
+
1022 break;
+
1023 } else {
+
1024 HaveMadeDiagonal = true;
+
1025 }
+
1026 }
+
1027
+
1028 if (HaveMadeDiagonal == false) {
+
1029 MakePostfit();
+
1030 }
+
1031
+
1032 gStyle->SetPalette(55);
+
1033
+
1034 int covBinning = nDraw;
+
1035 // Now we are sure we have the diagonal elements, let's make the off-diagonals
+
1036 for (int i = 0; i < covBinning; ++i)
+
1037 {
+
1038 if (i % (covBinning/5) == 0)
+
1039 std::cout << " " << i << "/" << covBinning << " (" << int((double(i)/double(covBinning)*100.0))+1 << "%)" << std::endl;
+
1040
+
1041 TString Title_i = "";
+
1042 double Prior_i, PriorError;
+
1043
+ +
1045
+
1046 const double min_i = Chain->GetMinimum(BranchNames[i]);
+
1047 const double max_i = Chain->GetMaximum(BranchNames[i]);
+
1048
+
1049 // Loop over the other parameters to get the correlations
+
1050 for (int j = 0; j <= i; ++j) {
+
1051
+
1052 // Skip the diagonal elements which we've already done above
+
1053 if (j == i) continue;
+
1054
+
1055 // If this parameter isn't varied
+
1056 if (IamVaried[j] == false) {
+
1057 (*Covariance)(i,j) = 0.0;
+
1058 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1059 (*Correlation)(i,j) = 0.0;
+
1060 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1061 continue;
+
1062 }
+
1063
+
1064 TString Title_j = "";
+
1065 double Prior_j, PriorError_j;
+ +
1067
+
1068 OutputFile->cd();
+
1069
+
1070 // The draw which we want to perform
+ +
1072
+
1073 const double max_j = Chain->GetMaximum(BranchNames[j]);
+
1074 const double min_j = Chain->GetMinimum(BranchNames[j]);
+
1075
+
1076 // TH2F to hold the Correlation
+ +
1078
+
1079 hpost_2D->SetMinimum(0);
+
1080 hpost_2D->GetXaxis()->SetTitle(Title_i);
+
1081 hpost_2D->GetYaxis()->SetTitle(Title_j);
+
1082 hpost_2D->GetZaxis()->SetTitle("Steps");
+
1083
+
1084 // The draw command we want, i.e. draw param j vs param i
+
1085 Chain->Project(DrawMe, DrawMe, StepCut.c_str());
+
1086
+
1087 if(ApplySmoothing) hpost_2D->Smooth();
+
1088 // Get the Covariance for these two parameters
+
1089 (*Covariance)(i,j) = hpost_2D->GetCovariance();
+
1090 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1091
+
1092 (*Correlation)(i,j) = hpost_2D->GetCorrelationFactor();
+
1093 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1094
+
1095 if(printToPDF)
+
1096 {
+
1097 //KS: Skip Flux Params
+
1098 if(ParamType[i] == kXSecPar && ParamType[j] == kXSecPar)
+
1099 {
+
1100 if(IsXsec[j] && IsXsec[i] && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold)
+
1101 {
+
1102 Posterior->cd();
+
1103 hpost_2D->Draw("colz");
+
1104 Posterior->SetName(hpost_2D->GetName());
+
1105 Posterior->SetTitle(hpost_2D->GetTitle());
+
1106 Posterior->Print(CanvasName);
+
1107 }
+
1108 }
+
1109 }
+
1110 // Write it to root file
+
1111 //OutputFile->cd();
+
1112 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold ) hpost_2D->Write();
+
1113
+
1114 delete hpost_2D;
+
1115 } // End j loop
+
1116 } // End i loop
+
1117 OutputFile->cd();
+
1118 Covariance->Write("Covariance");
+
1119 Correlation->Write("Correlation");
+
1120}
+
+
1121
+
1122
+
1123// ***************
+
1124//KS: Cache all steps to allow multithreading, hit RAM quite a bit
+
+ +
1126// ***************
+
1127 if(CacheMCMC == true) return;
+
1128
+
1129 CacheMCMC = true;
+
1130
+
1131 if(ParStep != nullptr)
+
1132 {
+
1133 MACH3LOG_ERROR("It look like ParStep was already filled ");
+
1134 MACH3LOG_ERROR("Eventhough it is used for MakeCovariance_MP and for DiagMCMC ");
+
1135 MACH3LOG_ERROR("it has differnt structure in both for cache hits, sorry ");
+
1136 throw;
+
1137 }
+
1138
+
1139 MACH3LOG_INFO("Caching input tree...");
+
1140 MACH3LOG_INFO("Allocating {:.2f} MB", (sizeof(double)*nDraw*nEntries)/1.E6);
+
1141 TStopwatch clock;
+
1142 clock.Start();
+
1143
+
1144 ParStep = new double*[nDraw];
+
1145 StepNumber = new int[nEntries];
+
1146
+
1147 hpost2D = new TH2D**[nDraw]();
+
1148
+
1149 for (int i = 0; i < nDraw; ++i)
+
1150 {
+
1151 ParStep[i] = new double[nEntries];
+
1152 hpost2D[i] = new TH2D*[nDraw]();
+
1153
+
1154 for (int j = 0; j < nEntries; ++j)
+
1155 {
+
1156 ParStep[i][j] = -999.99;
+
1157 //KS: Set this only once
+
1158 if(i == 0) StepNumber[j] = -999.99;
+
1159 }
+
1160 }
+
1161
+
1162 // Set all the branches to off
+
1163 Chain->SetBranchStatus("*", false);
+
1164
+
1165 // Turn on the branches which we want for parameters
+
1166 for (int i = 0; i < nDraw; ++i)
+
1167 {
+
1168 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
1169 }
+
1170 Chain->SetBranchStatus("step", true);
+
1171
+
1172 const int countwidth = nEntries/10;
+
1173 // Loop over the entries
+
1174 //KS: This is really a bottleneck right now, thus revisit with ROOT6 https://pep-root6.github.io/docs/analysis/parallell/root.html
+
1175 for (int j = 0; j < nEntries; ++j)
+
1176 {
+
1177 if (j % countwidth == 0)
+ +
1179
+
1180 Chain->SetBranchAddress("step", &StepNumber[j]);
+
1181 // Set the branch addresses for params
+
1182 for (int i = 0; i < nDraw; ++i)
+
1183 {
+
1184 Chain->SetBranchAddress(BranchNames[i].Data(), &ParStep[i][j]);
+
1185 }
+
1186
+
1187 if (j % countwidth == 0) {
+ +
1189 } else {
+
1190 // Fill up the ParStep array
+
1191 Chain->GetEntry(j);
+
1192 }
+
1193
+
1194 }
+
1195
+
1196 // Set all the branches to on
+
1197 Chain->SetBranchStatus("*", true);
+
1198
+
1199 // Cache max and min in chain for covariance matrix
+
1200 for (int i = 0; i < nDraw; ++i)
+
1201 {
+
1202 const double Min_Chain_i = Chain->GetMinimum(BranchNames[i]);
+
1203 const double Max_Chain_i = Chain->GetMaximum(BranchNames[i]);
+
1204
+
1205 TString Title_i = "";
+
1206 double Prior_i, PriorError_i;
+ +
1208
+
1209 for (int j = 0; j <= i; ++j)
+
1210 {
+
1211 const double Min_Chain_j = Chain->GetMinimum(BranchNames[j]);
+
1212 const double Max_Chain_j = Chain->GetMaximum(BranchNames[j]);
+
1213
+
1214 // TH2D to hold the Correlation
+
1215 hpost2D[i][j] = new TH2D(Form("hpost2D_%i_%i",i,j), Form("hpost2D_%i_%i",i,j), nBins, Min_Chain_i, Max_Chain_i, nBins, Min_Chain_j, Max_Chain_j);
+
1216
+
1217 TString Title_j = "";
+
1218 double Prior_j, PriorError_j;
+ +
1220
+
1221 hpost2D[i][j]->SetMinimum(0);
+
1222 hpost2D[i][j]->GetXaxis()->SetTitle(Title_i);
+
1223 hpost2D[i][j]->GetYaxis()->SetTitle(Title_j);
+
1224 hpost2D[i][j]->GetZaxis()->SetTitle("Steps");
+
1225 }
+
1226 }
+
1227
+
1228 clock.Stop();
+
1229 MACH3LOG_INFO("Caching steps took {:.2f}s to finish for {} steps", clock.RealTime(), nEntries );
+
1230}
+
+
1231
+
1232
+
1233// *********************
+
1234// Make the post-fit covariance matrix in all dimensions
+
+ +
1236// *********************
+
1237
+
1238 if (OutputFile == nullptr) MakeOutputFile();
+
1239
+
1240 if(!CacheMCMC) CacheSteps();
+
1241
+
1242 int covBinning = nDraw;
+
1243
+
1244 bool HaveMadeDiagonal = false;
+
1245 // Check that the diagonal entries have been filled
+
1246 // i.e. MakePostfit() has been called
+
1247 for (int i = 0; i < covBinning; ++i) {
+
1248 if ((*Covariance)(i,i) == __UNDEF__) {
+
1249 HaveMadeDiagonal = false;
+
1250 std::cout << "Have not run diagonal elements in covariance, will do so now by calling MakePostfit()" << std::endl;
+
1251 break;
+
1252 } else {
+
1253 HaveMadeDiagonal = true;
+
1254 }
+
1255 }
+
1256
+
1257 if (HaveMadeDiagonal == false) MakePostfit();
+
1258 MACH3LOG_INFO("Calculating covaraince matrix");
+
1259 TStopwatch clock;
+
1260 clock.Start();
+
1261
+
1262 gStyle->SetPalette(55);
+
1263 // Now we are sure we have the diagonal elements, let's make the off-diagonals
+
1264 #ifdef MULTITHREAD
+
1265 #pragma omp parallel for
+
1266 #endif
+
1267 for (int i = 0; i < covBinning; ++i)
+
1268 {
+
1269 for (int j = 0; j <= i; ++j)
+
1270 {
+
1271 // Skip the diagonal elements which we've already done above
+
1272 if (j == i) continue;
+
1273
+
1274 // If this parameter isn't varied
+
1275 if (IamVaried[j] == false) {
+
1276 (*Covariance)(i,j) = 0.0;
+
1277 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1278 (*Correlation)(i,j) = 0.0;
+
1279 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1280 continue;
+
1281 }
+
1282 hpost2D[i][j]->SetMinimum(0);
+
1283
+
1284 for (int k = 0; k < nEntries; ++k)
+
1285 {
+
1286 //KS: Burn in cut
+
1287 if(StepNumber[k] < BurnInCut) continue;
+
1288
+
1289 //KS: Fill histogram with cached steps
+
1290 hpost2D[i][j]->Fill(ParStep[i][k], ParStep[j][k]);
+
1291 }
+
1292 if(ApplySmoothing) hpost2D[i][j]->Smooth();
+
1293
+
1294 // Get the Covariance for these two parameters
+
1295 (*Covariance)(i,j) = hpost2D[i][j]->GetCovariance();
+
1296 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1297
+
1298 //KS: Since we already have covariance consider calcaulating correlation using it, right now we effectively calcaualte covariance twice
+
1299 //https://root.cern.ch/doc/master/TH2_8cxx_source.html#l01099
+
1300 (*Correlation)(i,j) = hpost2D[i][j]->GetCorrelationFactor();
+
1301 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1302 }// End j loop
+
1303 }// End i loop
+
1304
+
1305 clock.Stop();
+
1306 std::cout << "Making Covariance took " << clock.RealTime() << "s to finish for " << nEntries << " steps" << std::endl;
+
1307
+
1308 OutputFile->cd();
+
1309 if(printToPDF)
+
1310 {
+
1311 Posterior->cd();
+
1312 for (int i = 0; i < covBinning; ++i)
+
1313 {
+
1314 for (int j = 0; j <= i; ++j)
+
1315 {
+
1316 // Skip the diagonal elements which we've already done above
+
1317 if (j == i) continue;
+
1318 if (IamVaried[j] == false) continue;
+
1319
+
1320 if(ParamType[i] == kXSecPar && ParamType[j] == kXSecPar)
+
1321 {
+
1322 //KS: Skip Flux Params
+
1323 if(IsXsec[j] && IsXsec[i] && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold)
+
1324 {
+
1325 hpost2D[i][j]->Draw("colz");
+
1326 Posterior->SetName(hpost2D[i][j]->GetName());
+
1327 Posterior->SetTitle(hpost2D[i][j]->GetTitle());
+
1328 Posterior->Print(CanvasName);
+
1329 }
+
1330 }
+
1331 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold) hpost2D[i][j]->Write();
+
1332 }// End j loop
+
1333 }// End i loop
+
1334 } //end if pdf
+
1335 Covariance->Write("Covariance");
+
1336 Correlation->Write("Correlation");
+
1337}
+
+
1338
+
1339// *********************
+
1340// Make the covariance plots
+
+ +
1342// *********************
+
1343
+
1344 int covBinning = nDraw;
+
1345 // The Covariance matrix from the fit
+
1346 TH2D* hCov = new TH2D("hCov", "hCov", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1347 hCov->GetZaxis()->SetTitle("Covariance");
+
1348 // The Covariance matrix square root, with correct sign
+
1349 TH2D* hCovSq = new TH2D("hCovSq", "hCovSq", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1350 hCovSq->GetZaxis()->SetTitle("Covariance");
+
1351 // The Correlation
+
1352 TH2D* hCorr = new TH2D("hCorr", "hCorr", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1353 hCorr->GetZaxis()->SetTitle("Correlation");
+
1354 hCorr->SetMinimum(-1);
+
1355 hCorr->SetMaximum(1);
+
1356 hCov->GetXaxis()->SetLabelSize(0.015);
+
1357 hCov->GetYaxis()->SetLabelSize(0.015);
+
1358 hCovSq->GetXaxis()->SetLabelSize(0.015);
+
1359 hCovSq->GetYaxis()->SetLabelSize(0.015);
+
1360 hCorr->GetXaxis()->SetLabelSize(0.015);
+
1361 hCorr->GetYaxis()->SetLabelSize(0.015);
+
1362
+
1363 // Loop over the Covariance matrix entries
+
1364 for (int i = 0; i < covBinning; ++i)
+
1365 {
+
1366 TString titlex = "";
+
1367 double nom, err;
+ +
1369
+
1370 hCov->GetXaxis()->SetBinLabel(i+1, titlex);
+
1371 hCovSq->GetXaxis()->SetBinLabel(i+1, titlex);
+
1372 hCorr->GetXaxis()->SetBinLabel(i+1, titlex);
+
1373
+
1374 for (int j = 0; j < covBinning; ++j)
+
1375 {
+
1376 // The value of the Covariance
+
1377 double cov = (*Covariance)(i,j);
+
1378 double corr = (*Correlation)(i,j);
+
1379
+
1380 hCov->SetBinContent(i+1, j+1, cov);
+
1381 hCovSq->SetBinContent(i+1, j+1, ((cov > 0) - (cov < 0))*std::sqrt(std::fabs(cov)));
+
1382 hCorr->SetBinContent(i+1, j+1, corr);
+
1383
+
1384
+
1385 TString titley = "";
+
1386 double nom_j, err_j;
+ +
1388
+
1389 hCov->GetYaxis()->SetBinLabel(j+1, titley);
+
1390 hCovSq->GetYaxis()->SetBinLabel(j+1, titley);
+
1391 hCorr->GetYaxis()->SetBinLabel(j+1, titley);
+
1392 }
+
1393 }
+
1394
+
1395 // Take away the stat box
+
1396 gStyle->SetOptStat(0);
+
1397 if(plotBinValue)gStyle->SetPaintTextFormat("4.1f"); //Precision of value in matrix element
+
1398 // Make pretty Correlation colors (red to blue)
+
1399 const int NRGBs = 5;
+
1400 TColor::InitializeColors();
+
1401 Double_t stops[NRGBs] = { 0.00, 0.25, 0.50, 0.75, 1.00 };
+
1402 Double_t red[NRGBs] = { 0.00, 0.25, 1.00, 1.00, 0.50 };
+
1403 Double_t green[NRGBs] = { 0.00, 0.25, 1.00, 0.25, 0.00 };
+
1404 Double_t blue[NRGBs] = { 0.50, 1.00, 1.00, 0.25, 0.00 };
+
1405 TColor::CreateGradientColorTable(5, stops, red, green, blue, 255);
+
1406 gStyle->SetNumberContours(255);
+
1407
+
1408 // cd into the correlation directory
+
1409 OutputFile->cd();
+
1410
+
1411 Posterior->cd();
+
1412 Posterior->Clear();
+
1413 if(plotBinValue) hCov->Draw("colz text");
+
1414 else hCov->Draw("colz");
+
1415 Posterior->SetRightMargin(0.15);
+
1416 if(printToPDF) Posterior->Print(CanvasName);
+
1417
+
1418 Posterior->cd();
+
1419 Posterior->Clear();
+
1420 if(plotBinValue) hCorr->Draw("colz text");
+
1421 else hCorr->Draw("colz");
+
1422 Posterior->SetRightMargin(0.15);
+
1423 if(printToPDF) Posterior->Print(CanvasName);
+
1424
+
1425 hCov->Write("Covariance_plot");
+
1426 hCovSq->Write("Covariance_sq_plot");
+
1427 hCorr->Write("Correlation_plot");
+
1428
+
1429 //Back to normal
+
1430 Posterior->SetRightMargin(0.03);
+
1431 delete hCov;
+
1432 delete hCovSq;
+
1433 delete hCorr;
+
1434
+ +
1436}
+
+
1437
+
1438
+
1439// *********************
+
1440//KS: Make the 1D projections of Correlations inspired by Henry's slides (page 28) https://www.t2k.org/asg/oagroup/meeting/2023/2023-07-10-oa-pre-meeting/MaCh3FDUpdate
+
+ +
1442// *********************
+
1443
+
1444 //KS: Store it as we go back to them at the end
+
1445 const double TopMargin = Posterior->GetTopMargin();
+
1446 const double BottomMargin = Posterior->GetBottomMargin();
+
1447 const int OptTitle = gStyle->GetOptTitle();
+
1448
+
1449 Posterior->SetTopMargin(0.1);
+
1450 Posterior->SetBottomMargin(0.2);
+
1451 gStyle->SetOptTitle(1);
+
1452
+
1453 const int Nhists = 3;
+
1454 //KS: Highest value is just meant bo be sliglhy higher than 1 to catch >,
+
1455 const double Thresholds[Nhists+1] = {0, 0.25, 0.5, 1.0001};
+
1456 const Color_t CorrColours[Nhists] = {kRed-10, kRed-6, kRed};
+
1457
+
1458 //KS: This strore neccesary entires for stripped covariance which strore only "menaingfull correlations
+
1459 std::vector<std::vector<double>> CorrOfInterest;
+
1460 CorrOfInterest.resize(nDraw);
+
1461 std::vector<std::vector<std::string>> NameCorrOfInterest;
+
1462 NameCorrOfInterest.resize(nDraw);
+
1463
+
1464 TH1D ***Corr1DHist = new TH1D**[nDraw]();
+
1465 //KS: Initialising ROOT objects is never safe in MP loop
+
1466 for(int i = 0; i < nDraw; ++i)
+
1467 {
+
1468 TString Title = "";
+
1469 double Prior = 1.0;
+
1470 double PriorError = 1.0;
+ +
1472
+
1473 Corr1DHist[i] = new TH1D*[Nhists]();
+
1474 for(int j = 0; j < Nhists; ++j)
+
1475 {
+
1476 Corr1DHist[i][j] = new TH1D(Form("Corr1DHist_%i_%i", i, j), Form("Corr1DHist_%i_%i", i, j), nDraw, 0, nDraw);
+
1477 Corr1DHist[i][j]->SetTitle(Form("%s",Title.Data()));
+
1478 Corr1DHist[i][j]->GetYaxis()->SetTitle("Correlation");
+
1479 Corr1DHist[i][j]->SetFillColor(CorrColours[j]);
+
1480 Corr1DHist[i][j]->SetLineColor(kBlack);
+
1481
+
1482 for (int k = 0; k < nDraw; ++k)
+
1483 {
+
1484 TString Title_y = "";
+
1485 double Prior_y = 1.0;
+
1486 double PriorError_y = 1.0;
+ +
1488 Corr1DHist[i][j]->GetXaxis()->SetBinLabel(k+1, Title_y.Data());
+
1489 }
+
1490 }
+
1491 }
+
1492
+
1493 #ifdef MULTITHREAD
+
1494 #pragma omp parallel for
+
1495 #endif
+
1496 for(int i = 0; i < nDraw; ++i)
+
1497 {
+
1498 for(int j = 0; j < nDraw; ++j)
+
1499 {
+
1500 for(int k = 0; k < Nhists; ++k)
+
1501 {
+
1502 const double TempEntry = std::fabs((*Correlation)(i,j));
+
1503 if(Thresholds[k+1] > TempEntry && TempEntry >= Thresholds[k])
+
1504 {
+
1505 Corr1DHist[i][k]->SetBinContent(j+1, (*Correlation)(i,j));
+
1506 }
+
1507 }
+
1508 if(std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold && i != j)
+
1509 {
+
1510 CorrOfInterest[i].push_back((*Correlation)(i,j));
+
1511 NameCorrOfInterest[i].push_back(Corr1DHist[i][0]->GetXaxis()->GetBinLabel(j+1));
+
1512 }
+
1513 }
+
1514 }
+
1515
+
1516 TDirectory *CorrDir = OutputFile->mkdir("Corr1D");
+
1517 CorrDir->cd();
+
1518
+
1519 for(int i = 0; i < nDraw; i++)
+
1520 {
+
1521 if (IamVaried[i] == false) continue;
+
1522
+
1523 Corr1DHist[i][0]->SetMaximum(+1.);
+
1524 Corr1DHist[i][0]->SetMinimum(-1.);
+
1525 Corr1DHist[i][0]->Draw();
+
1526 for(int k = 1; k < Nhists; k++)
+
1527 {
+
1528 Corr1DHist[i][k]->Draw("SAME");
+
1529 }
+
1530
+
1531 TLegend *leg = new TLegend(0.3, 0.75, 0.6, 0.90);
+
1532 leg->SetTextSize(0.02);
+
1533 for(int k = 0; k < Nhists; k++)
+
1534 {
+
1535 leg->AddEntry(Corr1DHist[i][k], Form("%.2f > |Corr| >= %.2f", Thresholds[k+1], Thresholds[k]), "f");
+
1536 }
+
1537 leg->SetLineColor(0);
+
1538 leg->SetLineStyle(0);
+
1539 leg->SetFillColor(0);
+
1540 leg->SetFillStyle(0);
+
1541 leg->Draw("SAME");
+
1542
+
1543 Posterior->Write(Corr1DHist[i][0]->GetTitle());
+
1544 if(printToPDF) Posterior->Print(CanvasName);
+
1545
+
1546 delete leg;
+
1547 }
+
1548
+
1549 //KS: Plot only meaninfull correlations
+
1550 for(int i = 0; i < nDraw; i++)
+
1551 {
+
1552 const int size = CorrOfInterest[i].size();
+
1553
+
1554 if(size == 0) continue;
+
1555 TH1D* Corr1DHist_Reduced = new TH1D("Corr1DHist_Reduced", "Corr1DHist_Reduced", size, 0, size);
+
1556
+
1557 Corr1DHist_Reduced->SetTitle(Corr1DHist[i][0]->GetTitle());
+
1558 Corr1DHist_Reduced->GetYaxis()->SetTitle("Correlation");
+
1559 Corr1DHist_Reduced->SetFillColor(kBlue);
+
1560 Corr1DHist_Reduced->SetLineColor(kBlue);
+
1561
+
1562 for (int j = 0; j < size; ++j)
+
1563 {
+
1564 Corr1DHist_Reduced->GetXaxis()->SetBinLabel(j+1, NameCorrOfInterest[i][j].c_str());
+
1565 Corr1DHist_Reduced->SetBinContent(j+1, CorrOfInterest[i][j]);
+
1566 }
+
1567 Corr1DHist_Reduced->GetXaxis()->LabelsOption("v");
+
1568
+
1569 Corr1DHist_Reduced->SetMaximum(+1.);
+
1570 Corr1DHist_Reduced->SetMinimum(-1.);
+
1571 Corr1DHist_Reduced->Draw();
+
1572
+
1573 Posterior->Write(Form("%s_Red", Corr1DHist_Reduced->GetTitle()));
+
1574 if(printToPDF) Posterior->Print(CanvasName);
+
1575
+
1576 delete Corr1DHist_Reduced;
+
1577 }
+
1578
+
1579 for(int i = 0; i < nDraw; i++)
+
1580 {
+
1581 for(int k = 1; k < Nhists; k++)
+
1582 {
+
1583 delete Corr1DHist[i][k];
+
1584 }
+
1585 delete[] Corr1DHist[i];
+
1586 }
+
1587 delete[] Corr1DHist;
+
1588
+
1589 CorrDir->Close();
+
1590 delete CorrDir;
+
1591
+
1592 OutputFile->cd();
+
1593
+
1594 Posterior->SetTopMargin(TopMargin);
+
1595 Posterior->SetBottomMargin(BottomMargin);
+
1596 gStyle->SetOptTitle(OptTitle);
+
1597
+
1598}
+
+
1599
+
1600// *********************
+
1601// Make fancy Credible Intervals plots
+
+ +
1603// *********************
+
1604
+
1605 if(hpost2D == nullptr) MakeCovariance_MP();
+
1606 std::cout << "Making Credible Regions "<< std::endl;
+
1607
+
1608 //Load values set via config or executable
+
1609 std::vector<double> CredibleRegions = Credible_Regions;
+
1610 std::vector<Style_t> CredibleRegionStyle = Credible_RegionStyle;
+
1611 std::vector<Color_t> CredibleRegionColor = Credible_RegionColor;
+
1612
+
1613 //Nothing was passed via config so use default values which are still fancy
+
1614 if(CredibleRegions.size() == 0 && CredibleRegionStyle.size() == 0 && CredibleRegionColor.size() == 0)
+
1615 {
+
1616 CredibleRegions.insert(CredibleRegions.end(), { 0.99, 0.90, 0.68 });
+
1617 CredibleRegionStyle.insert(CredibleRegionStyle.end(), { kDashed, kSolid, kDotted });
+
1618 CredibleRegionColor.insert(CredibleRegionColor.end(), { kGreen-3, kGreen-10, kGreen });
+
1619 }
+
1620 if( (CredibleRegions.size() != CredibleRegionStyle.size()) || (CredibleRegionStyle.size() != CredibleRegionColor.size()) )
+
1621 {
+
1622 std::cerr<<" size of CredibleRegions is not equat to size of CredibleRegionStyle"<<std::endl;
+
1623 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1624 throw;
+
1625 }
+
1626 const int nCredible = CredibleRegions.size();
+
1627 TH2D*** hpost_2D_copy = new TH2D**[nDraw];
+
1628 TH2D**** hpost_2D_cl = new TH2D***[nDraw];
+
1629
+
1630 //KS: Copy all histograms to be thread safe
+
1631 for (int i = 0; i < nDraw; ++i)
+
1632 {
+
1633 hpost_2D_copy[i] = new TH2D*[nDraw];
+
1634 hpost_2D_cl[i] = new TH2D**[nDraw];
+
1635 for (int j = 0; j <= i; ++j)
+
1636 {
+
1637 hpost_2D_copy[i][j] = (TH2D*) hpost2D[i][j]->Clone( Form("hpost_copy_%i_%i", i, j));
+
1638
+
1639 hpost_2D_cl[i][j] = new TH2D*[nCredible];
+
1640 for (int k = 0; k < nCredible; ++k)
+
1641 {
+
1642 hpost_2D_cl[i][j][k] = (TH2D*)hpost2D[i][j]->Clone( Form("hpost_copy_%i_%i_CL_%f", i, j, CredibleRegions[k]));;
+
1643 }
+
1644 }
+
1645 }
+
1646
+
1647 #ifdef MULTITHREAD
+
1648 #pragma omp parallel for
+
1649 #endif
+
1650 //Calcualte creadible histogram
+
1651 for (int i = 0; i < nDraw; ++i)
+
1652 {
+
1653 for (int j = 0; j <= i; ++j)
+
1654 {
+
1655 for (int k = 0; k < nCredible; ++k)
+
1656 {
+ +
1658 {
+
1659 //KS: Convert sigmas into percentage
+
1660 double CredReg = GetSigmaValue((int)std::round(CredibleRegions[k]));
+ +
1662 }
+
1663 else
+
1664 {
+ +
1666 }
+
1667 hpost_2D_cl[i][j][k]->SetLineColor(CredibleRegionColor[k]);
+
1668 hpost_2D_cl[i][j][k]->SetLineWidth(2);
+
1669 hpost_2D_cl[i][j][k]->SetLineStyle(CredibleRegionStyle[k]);
+
1670 }
+
1671 }
+
1672 }
+
1673
+
1674 gStyle->SetPalette(51);
+
1675 for (int i = 0; i < nDraw; ++i)
+
1676 {
+
1677 for (int j = 0; j <= i; ++j)
+
1678 {
+
1679 // Skip the diagonal elements which we've already done above
+
1680 if (j == i) continue;
+
1681 if (IamVaried[j] == false) continue;
+
1682
+
1683 TLegend* legend = new TLegend(0.20, 0.7, 0.4, 0.92);
+
1684 legend->SetTextColor(kRed);
+
1685 legend->SetTextSize(0.03);
+
1686 legend->SetFillColor(0);
+
1687 legend->SetFillStyle(0);
+
1688 legend->SetLineColor(0);
+
1689 legend->SetLineStyle(0);
+
1690 legend->SetBorderSize(0);
+
1691
+
1692 //Get Best point
+
1693 TGraph *bestfitM = new TGraph(1);
+
1694 const int MaxBin = hpost_2D_copy[i][j]->GetMaximumBin();
+
1695 int Mbx, Mby, Mbz;
+
1696 hpost_2D_copy[i][j]->GetBinXYZ(MaxBin, Mbx, Mby, Mbz);
+
1697 const double Mx = hpost_2D_copy[i][j]->GetXaxis()->GetBinCenter(Mbx);
+
1698 const double My = hpost_2D_copy[i][j]->GetYaxis()->GetBinCenter(Mby);
+
1699
+
1700 bestfitM->SetPoint(0, Mx, My);
+
1701 bestfitM->SetMarkerStyle(22);
+
1702 bestfitM->SetMarkerSize(1);
+
1703 bestfitM->SetMarkerColor(kMagenta);
+
1704 legend->AddEntry(bestfitM,"Best Fit","p");
+
1705
+
1706 //Plot default 2D posterior
+
1707 hpost_2D_copy[i][j]->Draw("COLZ");
+
1708
+
1709 //Now credible regions
+
1710 for (int k = 0; k < nCredible; ++k)
+
1711 hpost_2D_cl[i][j][k]->Draw("CONT3 SAME");
+
1712 for (int k = nCredible-1; k >= 0; --k)
+
1713 {
+ +
1715 legend->AddEntry(hpost_2D_cl[i][j][k], Form("%.0f#sigma Credible Interval", CredibleRegions[k]), "l");
+
1716 else
+
1717 legend->AddEntry(hpost_2D_cl[i][j][k], Form("%.0f%% Credible Region", CredibleRegions[k]*100), "l");
+
1718 }
+
1719
+
1720 legend->Draw("SAME");
+
1721 bestfitM->Draw("SAME.P");
+
1722
+
1723 // Write to file
+
1724 Posterior->SetName(hpost2D[i][j]->GetName());
+
1725 Posterior->SetTitle(hpost2D[i][j]->GetTitle());
+
1726
+
1727 //KS: Print only regions with correlation greater than specified value, by defualt 0.2. This is done to avoid dumping thousands of plots
+
1728 if(printToPDF && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold) Posterior->Print(CanvasName);
+
1729 // Write it to root file
+
1730 //OutputFile->cd();
+
1731 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold ) Posterior->Write();
+
1732
+
1733 delete legend;
+
1734 delete bestfitM;
+
1735 }
+
1736 }
+
1737
+
1738 OutputFile->cd();
+
1739 //KS: Remove histograms
+
1740 for (int i = 0; i < nDraw; ++i)
+
1741 {
+
1742 for (int j = 0; j <= i; ++j)
+
1743 {
+
1744 delete hpost_2D_copy[i][j];
+
1745 for (int k = 0; k < nCredible; ++k)
+
1746 {
+
1747 delete hpost_2D_cl[i][j][k];
+
1748 }
+
1749 delete[] hpost_2D_cl[i][j];
+
1750 }
+
1751 delete[] hpost_2D_copy[i];
+
1752 delete[] hpost_2D_cl[i];
+
1753 }
+
1754 delete[] hpost_2D_copy;
+
1755 delete[] hpost_2D_cl;
+
1756}
+
+
1757
+
1758
+
1759// *********************
+
1760// Make fancy triangle plot for selected parameters
+
+
1761void MCMCProcessor::MakeTrianglePlot(std::vector<std::string> ParamNames) {
+
1762// *********************
+
1763
+
1764 if(hpost2D == nullptr) MakeCovariance_MP();
+
1765 MACH3LOG_INFO("Making Triangle Plot");
+
1766
+
1767 const int nParamPlot = ParamNames.size();
+
1768 std::vector<int> ParamNumber;
+
1769 for(int j = 0; j < nParamPlot; ++j)
+
1770 {
+
1771 //KS: First we need to find parameter number based on name
+
1772 int ParamNo = __UNDEF__;
+
1773 for (int i = 0; i < nDraw; ++i)
+
1774 {
+
1775 TString Title = "";
+
1776 double Prior = 1.0;
+
1777 double PriorError = 1.0;
+
1778
+ +
1780
+
1781 if(ParamNames[j] == Title) ParamNo = i;
+
1782 }
+
1783 if(ParamNo == __UNDEF__)
+
1784 {
+
1785 MACH3LOG_WARN("Couldn't find param {}. Will not plot Triangle plot", ParamNames[j]);
+
1786 return;
+
1787 }
+
1788 ParamNumber.push_back(ParamNo);
+
1789 }
+
1790
+
1791 //KS: Store it as we go back to them at the end
+
1792 const double TopMargin = Posterior->GetTopMargin();
+
1793 const double BottomMargin = Posterior->GetBottomMargin();
+
1794 const double LeftMargin = Posterior->GetLeftMargin();
+
1795 const double RighMargin = Posterior->GetRightMargin();
+
1796 Posterior->SetTopMargin(0.001);
+
1797 Posterior->SetBottomMargin(0.001);
+
1798 Posterior->SetLeftMargin(0.001);
+
1799 Posterior->SetRightMargin(0.001);
+
1800
+
1801 Posterior->cd();
+
1802 Posterior->Clear();
+
1803 Posterior->Update();
+
1804
+
1805 //KS: We sort to have parameters from highest to lowest, this is related to how we make 2D projections in MakeCovariance_MP
+
1806 std::sort(ParamNumber.begin(), ParamNumber.end(), std::greater<int>());
+
1807
+
1808 //KS: Calculate how many pads/plots we need
+
1809 int Npad = 0;
+
1810 for(int j = 1; j < nParamPlot+1; j++) Npad += j;
+
1811 Posterior->cd();
+
1812
+
1813 //Load values set via config or executable
+
1814 std::vector<double> CredibleIntervals = Credible_Intervals;
+ +
1816 //Nothing was passed via config so use default values which are still fancy
+
1817 if(CredibleIntervals.size() == 0 && CredibleIntervalsColours.size() == 0)
+
1818 {
+
1819 CredibleIntervals.insert(CredibleIntervals.end(), { 0.99, 0.90, 0.68 });
+
1820 CredibleIntervalsColours.insert(CredibleIntervalsColours.end(), { kCyan+4, kCyan-2, kCyan-10 });
+
1821 }
+
1822 if(CredibleIntervals.size() != CredibleIntervalsColours.size())
+
1823 {
+
1824 std::cerr<<" size of CredibleIntervals is not equat to size of CredibleIntervalsColours"<<std::endl;
+
1825 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1826 throw;
+
1827 }
+
1828 //Load values set via config or executable
+
1829 std::vector<double> CredibleRegions = Credible_Regions;
+
1830 std::vector<Style_t> CredibleRegionStyle = Credible_RegionStyle;
+
1831 std::vector<Color_t> CredibleRegionColor = Credible_RegionColor;
+
1832
+
1833 //Nothing was passed via config so use default values which are still fancy
+
1834 if(CredibleRegions.size() == 0 && CredibleRegionStyle.size() == 0 && CredibleRegionColor.size() == 0)
+
1835 {
+
1836 CredibleRegions.insert(CredibleRegions.end(), { 0.99, 0.90, 0.68 });
+
1837 CredibleRegionStyle.insert(CredibleRegionStyle.end(), { kDashed, kSolid, kDotted });
+
1838 CredibleRegionColor.insert(CredibleRegionColor.end(), { kGreen-3, kGreen-10, kGreen });
+
1839 }
+
1840 if( (CredibleRegions.size() != CredibleRegionStyle.size()) || (CredibleRegionStyle.size() != CredibleRegionColor.size()) )
+
1841 {
+
1842 std::cerr<<" size of CredibleRegions is not equat to size of CredibleRegionStyle"<<std::endl;
+
1843 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1844 throw;
+
1845 }
+
1846 const int nCredibleIntervals = CredibleIntervals.size();
+
1847 const int nCredibleRegions = CredibleRegions.size();
+
1848
+
1849 //KS: Initialise Tpad histograms etc we will need
+
1850 TPad** TrianglePad = new TPad*[Npad];
+
1851 //KS: 1D copy of posterior, we need it as we modify them
+
1852 TH1D** hpost_copy = new TH1D*[nParamPlot];
+
1853 TH1D*** hpost_cl = new TH1D**[nParamPlot];
+
1854 TText **TriangleText = new TText *[nParamPlot*2];
+ +
1856 TH2D*** hpost_2D_cl = new TH2D**[Npad-nParamPlot];
+
1857 gStyle->SetPalette(51);
+
1858
+
1859 //KS: Super convoluted way of calculating ranges for our pads, trust me it works...
+
1860 double* X_Min = new double[nParamPlot];
+
1861 double* X_Max = new double[nParamPlot];
+
1862
+
1863 X_Min[0] = 0.10;
+
1864 double xScale = (0.95 - (X_Min[0]+0.05))/nParamPlot;
+
1865 //KS: 0.05 is becasue we need additional offset for labels
+
1866 X_Max[0] = X_Min[0]+xScale+0.05;
+
1867 for(int i = 1; i < nParamPlot; i++)
+
1868 {
+
1869 X_Min[i] = X_Max[i-1];
+
1870 X_Max[i] = X_Min[i]+xScale;
+
1871 }
+
1872 double* Y_Min = new double[nParamPlot];
+
1873 double* Y_Max = new double[nParamPlot];
+
1874 Y_Max[0] = 0.95;
+
1875 //KS: 0.10 is becasue we need additional offset for labels
+
1876 double yScale = std::fabs(0.10 - (Y_Max[0]))/nParamPlot;
+
1877 Y_Min[0] = Y_Max[0]-yScale;
+
1878 for(int i = 1; i < nParamPlot; i++)
+
1879 {
+
1880 Y_Max[i] = Y_Min[i-1];
+
1881 Y_Min[i] = Y_Max[i]-yScale;
+
1882 }
+
1883
+
1884 //KS: We store as numbering of isn't straightforward
+
1885 int counterPad = 0;
+
1886 int counterText = 0;
+
1887 int counterPost = 0;
+
1888 int counter2DPost = 0;
+
1889 //KS: We start from top of the plot, might be confusing but works very well
+
1890 for(int y = 0; y < nParamPlot; y++)
+
1891 {
+
1892 //KS: start from left and go right, depending on y
+
1893 for(int x = 0; x <= y; x++)
+
1894 {
+
1895 //KS: Need to go to canvas every time to have our pads in the same canvas, not pads in the pads
+
1896 Posterior->cd();
+
1897 TrianglePad[counterPad] = new TPad(Form("TPad_%i", counterPad), Form("TPad_%i", counterPad), X_Min[x], Y_Min[y], X_Max[x], Y_Max[y]);
+
1898
+
1899 TrianglePad[counterPad]->SetTopMargin(0);
+
1900 TrianglePad[counterPad]->SetRightMargin(0);
+
1901
+
1902 TrianglePad[counterPad]->SetGrid();
+
1903 TrianglePad[counterPad]->SetFrameBorderMode(0);
+
1904 TrianglePad[counterPad]->SetBorderMode(0);
+
1905 TrianglePad[counterPad]->SetBorderSize(0);
+
1906
+
1907 //KS: Corresponds to bottom part of the plot, need marings for lables
+
1908 if(y == (nParamPlot-1)) TrianglePad[counterPad]->SetBottomMargin(0.1);
+
1909 else TrianglePad[counterPad]->SetBottomMargin(0);
+
1910
+
1911 //KS: Corresponds to left part, need marings for lables
+
1912 if(x == 0) TrianglePad[counterPad]->SetLeftMargin(0.15);
+
1913 else TrianglePad[counterPad]->SetLeftMargin(0);
+
1914
+
1915 TrianglePad[counterPad]->Draw();
+
1916 TrianglePad[counterPad]->cd();
+
1917
+
1918 //KS:if diagonal plot main posterior
+
1919 if(x == y)
+
1920 {
+
1921 hpost_copy[counterPost] = (TH1D*) hpost[ParamNumber[x]]->Clone(Form("hpost_copy_%i", ParamNumber[x]));
+ + +
1925 for (int j = 0; j < nCredibleIntervals; ++j)
+
1926 {
+
1927 hpost_cl[counterPost][j] = (TH1D*) hpost[ParamNumber[x]]->Clone( Form("hpost_copy_%i_CL_%f", ParamNumber[x], CredibleIntervals[j]));
+
1928 //KS: Reset to get rid to TF1 otherwise we run into segfault :(
+
1929 hpost_cl[counterPost][j]->Reset("");
+
1930 hpost_cl[counterPost][j]->Fill(0.0, 0.0);
+
1931
+
1932 // Scale the histograms before gettindg credible intervals
+
1933 hpost_cl[counterPost][j]->Scale(1. / hpost_cl[counterPost][j]->Integral());
+
1934 //KS: Slightly different approach depending if interavls are in pecentage or sigmas
+ +
1936 {
+
1937 //KS: Convert sigmas into percentage
+
1938 double CredReg = GetSigmaValue((int)std::round(CredibleIntervals[j]));
+ +
1940 }
+
1941 else
+
1942 {
+ +
1944 }
+
1945
+ +
1947 hpost_cl[counterPost][j]->SetLineWidth(1);
+
1948 }
+
1949
+ +
1951 hpost_copy[counterPost]->SetLineWidth(2);
+
1952 hpost_copy[counterPost]->SetLineColor(kBlack);
+
1953
+
1954 //KS: Don't want any titles
+
1955 hpost_copy[counterPost]->GetXaxis()->SetTitle("");
+
1956 hpost_copy[counterPost]->GetYaxis()->SetTitle("");
+
1957 hpost_copy[counterPost]->SetTitle("");
+
1958
+
1959 hpost_copy[counterPost]->GetXaxis()->SetLabelSize(0.1);
+
1960 hpost_copy[counterPost]->GetYaxis()->SetLabelSize(0.1);
+
1961
+
1962 hpost_copy[counterPost]->GetXaxis()->SetNdivisions(4);
+
1963 hpost_copy[counterPost]->GetYaxis()->SetNdivisions(4);
+
1964
+
1965 hpost_copy[counterPost]->Draw("HIST");
+
1966 for (int j = 0; j < nCredibleIntervals; ++j)
+
1967 hpost_cl[counterPost][j]->Draw("HIST SAME");
+
1968 counterPost++;
+
1969 }
+
1970 //KS: Here we plot 2D credible regions
+
1971 else
+
1972 {
+
1973 hpost_2D_copy[counter2DPost] = (TH2D*) hpost2D[ParamNumber[x]][ParamNumber[y]]->Clone( Form("hpost_copy_%i_%i", ParamNumber[x], ParamNumber[y]));
+ +
1975 //KS: Now copy for every credible region
+
1976 for (int k = 0; k < nCredibleRegions; ++k)
+
1977 {
+
1978 hpost_2D_cl[counter2DPost][k] = (TH2D*)hpost2D[ParamNumber[x]][ParamNumber[y]]->Clone( Form("hpost_copy_%i_%i_CL_%f", ParamNumber[x], ParamNumber[y], CredibleRegions[k]));
+
1979
+ +
1981 {
+
1982 //KS: Convert sigmas into percentage
+
1983 double CredReg = GetSigmaValue((int)std::round(CredibleRegions[k]));
+ +
1985 }
+
1986 else
+
1987 {
+ +
1989 }
+
1990
+ +
1992 hpost_2D_cl[counter2DPost][k]->SetLineWidth(2);
+ +
1994 }
+
1995
+
1996 //KS: Don't want any titles
+
1997 hpost_2D_copy[counter2DPost]->GetXaxis()->SetTitle("");
+
1998 hpost_2D_copy[counter2DPost]->GetYaxis()->SetTitle("");
+
1999 hpost_2D_copy[counter2DPost]->SetTitle("");
+
2000
+
2001 hpost_2D_copy[counter2DPost]->GetXaxis()->SetLabelSize(0.1);
+
2002 hpost_2D_copy[counter2DPost]->GetYaxis()->SetLabelSize(0.1);
+
2003
+
2004 hpost_2D_copy[counter2DPost]-> GetXaxis()->SetNdivisions(4);
+
2005 hpost_2D_copy[counter2DPost]-> GetYaxis()->SetNdivisions(4);
+
2006 hpost_2D_copy[counter2DPost]->Draw("COL");
+
2007 //Now credible regions
+
2008 for (int k = 0; k < nCredibleRegions; ++k)
+
2009 hpost_2D_cl[counter2DPost][k]->Draw("CONT3 SAME");
+
2010 counter2DPost++;
+
2011 }
+
2012 //KS: Corresponds to bottom part of the plot
+
2013 if(y == (nParamPlot-1))
+
2014 {
+
2015 Posterior->cd();
+
2016 TriangleText[counterText] = new TText(X_Min[x]+ (X_Max[x]-X_Min[x])/4, 0.04, hpost[ParamNumber[x]]->GetTitle());
+
2017 //KS: Unfortunately for many plots or long names this can go out of bounds :(
+
2018 TriangleText[counterText]->SetTextSize(0.015);
+
2019 TriangleText[counterText]->SetNDC(true);
+
2020 TriangleText[counterText]->Draw();
+
2021
+
2022 counterText++;
+
2023 }
+
2024 //KS: Corresponds to left part
+
2025 if(x == 0)
+
2026 {
+
2027 Posterior->cd();
+
2028 TriangleText[counterText] = new TText(0.04, Y_Min[y] + (Y_Max[y]-Y_Min[y])/4, hpost[ParamNumber[y]]->GetTitle());
+
2029 //KS: Rotate as this is y axis
+
2030 TriangleText[counterText]->SetTextAngle(90);
+
2031 //KS: Unfortunately for many plots or long names this can go out of bounds :(
+
2032 TriangleText[counterText]->SetTextSize(0.015);
+
2033 TriangleText[counterText]->SetNDC(true);
+
2034 TriangleText[counterText]->Draw();
+
2035 counterText++;
+
2036 }
+
2037 Posterior->Update();
+
2038 counterPad++;
+
2039 }
+
2040 }
+
2041
+
2042 Posterior->cd();
+
2043 TLegend* legend = new TLegend(0.60, 0.7, 0.9, 0.9);
+
2044 legend->SetTextSize(0.03);
+
2045 legend->SetFillColor(0);
+
2046 legend->SetFillStyle(0);
+
2047 legend->SetLineColor(0);
+
2048 legend->SetLineStyle(0);
+
2049 legend->SetBorderSize(0);
+
2050 //KS: Legend is shared so just take first histograms
+
2051 for (int j = nCredibleIntervals-1; j >= 0; --j)
+
2052 {
+ +
2054 legend->AddEntry(hpost_cl[0][j], Form("%.0f#sigma Credible Interval", CredibleIntervals[j]), "f");
+
2055 else
+
2056 legend->AddEntry(hpost_cl[0][j], Form("%.0f%% Credible Interval", CredibleRegions[j]*100), "f");
+
2057 }
+
2058 for (int k = nCredibleRegions-1; k >= 0; --k)
+
2059 {
+ +
2061 legend->AddEntry(hpost_2D_cl[0][k], Form("%.0f#sigma Credible Region", CredibleRegions[k]), "l");
+
2062 else
+
2063 legend->AddEntry(hpost_2D_cl[0][k], Form("%.0f%% Credible Region", CredibleRegions[k]*100), "l");
+
2064 }
+
2065 legend->Draw("SAME");
+
2066 Posterior->Update();
+
2067
+
2068 // Write to file
+
2069 Posterior->SetName("TrianglePlot");
+
2070 Posterior->SetTitle("TrianglePlot");
+
2071
+
2072 if(printToPDF) Posterior->Print(CanvasName);
+
2073 // Write it to root file
+
2074 OutputFile->cd();
+
2075 Posterior->Write();
+
2076
+
2077 //KS: Remove allocated structures
+
2078 for(int i = 0; i < Npad; i++) delete TrianglePad[i];
+
2079 for(int i = 0; i < nParamPlot*2; i++) delete TriangleText[i];
+
2080 for(int i = 0; i < nParamPlot; i++)
+
2081 {
+
2082 delete hpost_copy[i];
+
2083 for (int j = 0; j < nCredibleIntervals; ++j)
+
2084 {
+
2085 delete hpost_cl[i][j];
+
2086 }
+
2087 delete[] hpost_cl[i];
+
2088 }
+
2089 for(int i = 0; i < Npad - nParamPlot; i++)
+
2090 {
+
2091 delete hpost_2D_copy[i];
+
2092 for (int j = 0; j < nCredibleRegions; ++j)
+
2093 {
+
2094 delete hpost_2D_cl[i][j];
+
2095 }
+
2096 delete[] hpost_2D_cl[i];
+
2097 }
+
2098
+
2099 delete[] hpost_copy;
+
2100 delete[] hpost_cl;
+
2101 delete[] hpost_2D_copy;
+
2102 delete[] hpost_2D_cl;
+
2103 delete[] TrianglePad;
+
2104 delete[] TriangleText;
+
2105 delete[] X_Min;
+
2106 delete[] X_Max;
+
2107 delete[] Y_Min;
+
2108 delete[] Y_Max;
+
2109 delete legend;
+
2110
+
2111 //KS: Restore margin
+
2112 Posterior->SetTopMargin(TopMargin);
+
2113 Posterior->SetLeftMargin(BottomMargin);
+
2114 Posterior->SetLeftMargin(LeftMargin);
+
2115 Posterior->SetRightMargin(RighMargin);
+
2116}
+
+
2117
+
2118// *********************
+
2119// Convert sigma from normal distribution into percentage
+
+ +
2121// *********************
+
2122 double width = 0;
+
2123 switch (std::abs(sigma))
+
2124 {
+
2125 case 1:
+
2126 width = 0.682689492137;
+
2127 break;
+
2128 case 2:
+
2129 width = 0.954499736104;
+
2130 break;
+
2131 case 3:
+
2132 width = 0.997300203937;
+
2133 break;
+
2134 case 4:
+
2135 width = 0.999936657516;
+
2136 break;
+
2137 case 5:
+
2138 width = 0.999999426697;
+
2139 break;
+
2140 case 6:
+
2141 width = 0.999999998027;
+
2142 break;
+
2143 default:
+
2144 std::cerr<<sigma<<" is unsuported value of sigma"<<std::endl;
+
2145 throw;
+
2146 break;
+
2147 }
+
2148 return width;
+
2149}
+
+
2150
+
2151
+
2152// **************************
+
2153// Scan the input trees
+
+ +
2155// **************************
+
2156 // Open the Chain
+
2157 Chain = new TChain("posteriors","posteriors");
+
2158 Chain->Add(MCMCFile.c_str());
+
2159
+
2160 nEntries = Chain->GetEntries();
+
2161
+
2162 // Get the list of branches
+
2163 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
2164
+
2165 // Get the number of branches
+
2166 nBranches = brlis->GetEntries();
+
2167
+
2168 BranchNames.reserve(nBranches);
+
2169 IamVaried.reserve(nBranches);
+
2170 ParamType.reserve(nBranches);
+
2171
+
2172 // Loop over the number of branches
+
2173 // Find the name and how many of each systematic we have
+
2174 for (int i = 0; i < nBranches; i++)
+
2175 {
+
2176 // Get the TBranch and its name
+
2177 TBranch* br = (TBranch*)brlis->At(i);
+
2178 TString bname = br->GetName();
+
2179
+
2180 //KS: Exclude paramer types
+
2181 bool rejected = false;
+
2182 for(unsigned int ik = 0; ik < ExcludedTypes.size(); ++ik )
+
2183 {
+
2184 if(bname.BeginsWith(ExcludedTypes[ik]))
+
2185 {
+
2186 rejected = true;
+
2187 break;
+
2188 }
+
2189 }
+
2190 if(rejected) continue;
+
2191 // If we're on beam systematics
+
2192 if(bname.BeginsWith("xsec_"))
+
2193 {
+
2194 BranchNames.push_back(bname);
+
2195 ParamType.push_back(kXSecPar);
+
2196 PlotXSec = true;
+
2197 nParam[kXSecPar]++;
+
2198 }
+
2199 else if (bname.BeginsWith("ndd_"))
+
2200 {
+
2201 BranchNames.push_back(bname);
+
2202 ParamType.push_back(kNDPar);
+
2203 PlotDet = true;
+
2204 nParam[kNDPar]++;
+
2205 }
+
2206 else if (bname.BeginsWith("skd_joint_"))
+
2207 {
+
2208 BranchNames.push_back(bname);
+
2209 ParamType.push_back(kFDDetPar);
+
2210 nParam[kFDDetPar]++;
+
2211 }
+
2212 else if (bname.BeginsWith("sin2th_") ||
+
2213 bname.BeginsWith("delm2_") ||
+
2214 bname.BeginsWith("delta_") )
+
2215 {
+
2216 BranchNames.push_back(bname);
+
2217 ParamType.push_back(kOSCPar);
+
2218 nParam[kOSCPar]++;
+
2219 }
+
2220
+
2221 //KS: as a bonus get LogL systeamtic
+
2222 if (bname.BeginsWith("LogL_sample_")) {
+
2223 SampleName_v.push_back(bname);
+
2224 nSamples++;
+
2225 }
+
2226 else if (bname.BeginsWith("LogL_systematic_")) {
+
2227 SystName_v.push_back(bname);
+
2228 nSysts++;
+
2229 }
+
2230 }
+
2231 nDraw = BranchNames.size();
+
2232 // Read the input Covariances
+
2233 ReadInputCov();
+
2234
+
2235 // Check order of parameter types
+ +
2237 MACH3LOG_INFO("************************************************");
+
2238 MACH3LOG_INFO("Scanning output branches...");
+
2239 MACH3LOG_INFO("# useful entries in tree: \033[1;32m {} \033[0m ", nDraw);
+
2240 MACH3LOG_INFO("# XSec params: \033[1;32m {} starting at {} \033[0m ", nParam[kXSecPar] - nFlux, ParamTypeStartPos[kXSecPar]);
+
2241 MACH3LOG_INFO("# Flux params: {}", nFlux);
+
2242 MACH3LOG_INFO("# Flux params: {}", nFlux);
+
2243 MACH3LOG_INFO("# ND params: \033[1;32m {} starting at {} \033[0m ", nParam[kNDPar] - nFlux, ParamTypeStartPos[kNDPar]);
+
2244 MACH3LOG_INFO("# FD params: \033[1;32m {} starting at {} \033[0m ", nParam[kFDDetPar] - nFlux, ParamTypeStartPos[kFDDetPar]);
+
2245 MACH3LOG_INFO("# Osc params: \033[1;32m {} starting at {} \033[0m ", nParam[kOSCPar] - nFlux, ParamTypeStartPos[kOSCPar]);
+
2246 MACH3LOG_INFO("************************************************");
+
2247
+
2248 nSteps = Chain->GetMaximum("step");
+
2249 // Set the step cut to be 20%
+
2250 int cut = nSteps/5;
+
2251 SetStepCut(cut);
+
2252}
+
+
2253
+
2254// ****************************
+
2255// Set up the output files and canvases
+
+ +
2257// ****************************
+
2258
+
2259 // Make sure we can read files located anywhere and strip the .root ending
+
2260 MCMCFile = MCMCFile.substr(0, MCMCFile.find(".root"));
+
2261
+
2262 // Check if the output file is ready
+
2263 if (OutputFile == nullptr) MakeOutputFile();
+
2264
+
2265 CanvasName = MCMCFile + OutputSuffix + ".pdf[";
+
2266 if(printToPDF) Posterior->Print(CanvasName);
+
2267
+
2268 // Once the pdf file is open no longer need to bracket
+
2269 CanvasName.ReplaceAll("[","");
+
2270
+
2271 // We fit with this Gaussian
+
2272 Gauss = new TF1("gauss","[0]/sqrt(2.0*3.14159)/[2]*TMath::Exp(-0.5*pow(x-[1],2)/[2]/[2])", -5, 5);
+
2273
+
2274 // Declare the TVectors
+ + + +
2278 Means = new TVectorD(nDraw);
+
2279 Errors = new TVectorD(nDraw);
+
2280 Means_Gauss = new TVectorD(nDraw);
+ +
2282 Means_HPD = new TVectorD(nDraw);
+
2283 Errors_HPD = new TVectorD(nDraw);
+ + +
2286
+
2287 // Initialise to something silly
+
2288 #ifdef MULTITHREAD
+
2289 #pragma omp parallel for
+
2290 #endif
+
2291 for (int i = 0; i < nDraw; ++i)
+
2292 {
+
2293 (*Central_Value)(i) = __UNDEF__;
+
2294 (*Means)(i) = __UNDEF__;
+
2295 (*Errors)(i) = __UNDEF__;
+
2296 (*Means_Gauss)(i) = __UNDEF__;
+
2297 (*Errors_Gauss)(i) = __UNDEF__;
+
2298 (*Means_HPD)(i) = __UNDEF__;
+
2299 (*Errors_HPD)(i) = __UNDEF__;
+
2300 (*Errors_HPD_Positive)(i) = __UNDEF__;
+
2301 (*Errors_HPD_Negative)(i) = __UNDEF__;
+
2302 for (int j = 0; j < nDraw; ++j) {
+
2303 (*Covariance)(i, j) = __UNDEF__;
+
2304 (*Correlation)(i, j) = __UNDEF__;
+
2305 }
+
2306 }
+
2307
+
2308 hpost = new TH1D*[nDraw]();
+
2309}
+
+
2310
+
2311
+
2312// ****************************
+
2313// Check order of parameter types
+
+ +
2315// *****************************
+
2316 for(int i = 0; i < kNParameterEnum; i++)
+
2317 {
+
2318 for(unsigned int j = 0; j < ParamType.size(); j++)
+
2319 {
+
2320 if(ParamType[j] == ParameterEnum(i))
+
2321 {
+
2322 //KS: When we find that i-th parameter types start at j, save and move to the next parameter.
+ +
2324 break;
+
2325 }
+
2326 }
+
2327 }
+
2328}
+
+
2329
+
2330// *****************************
+
2331// Make the prefit plots
+
+ +
2333// *****************************
+
2334
+
2335 if (OutputFile == nullptr) MakeOutputFile();
+
2336
+
2337 TH1D *PreFitPlot = new TH1D("Prefit", "Prefit", nDraw, 0, nDraw);
+
2338 for (int i = 0; i < PreFitPlot->GetNbinsX() + 1; ++i) {
+
2339 PreFitPlot->SetBinContent(i+1, 0);
+
2340 PreFitPlot->SetBinError(i+1, 0);
+
2341 }
+
2342
+
2343 //KS: Slightly hacky way to get relative to prior or nominal as this is convention we use,
+
2344 //Only applies for xsec, for other systematic it make no difference
+ +
2346
+
2347 // Set labels and data
+
2348 for (int i = 0; i < nDraw; ++i)
+
2349 {
+
2350 //Those keep which parameter type we run currently and relative number
+
2351 int ParamEnum = ParamType[i];
+
2352 int ParamNo = i - ParamTypeStartPos[ParameterEnum(ParamEnum)];
+ + +
2355 {
+
2356 // Normalise the prior relative the nominal/prior, just the way we get our fit results in MaCh3
+
2357 if ( CentralValueTemp != 0)
+
2358 {
+ + +
2361 } else
+
2362 {
+
2363 Central = CentralValueTemp + 1.0;
+
2364 Error = ParamErrors[ParamEnum][ParamNo];
+
2365 }
+
2366 }
+
2367 else
+
2368 {
+ +
2370 Error = ParamErrors[ParamEnum][ParamNo];
+
2371 }
+
2372 //KS: If plotting error for param with flat prior is turned off and given param really has flat prior set error to 0
+
2373 if(!PlotFlatPrior && ParamFlat[ParamEnum][ParamNo])
+
2374 {
+
2375 Error = 0.;
+
2376 }
+
2377
+
2378 PreFitPlot->SetBinContent(i+1, Central);
+
2379 PreFitPlot->SetBinError(i+1, Error);
+
2380 PreFitPlot->GetXaxis()->SetBinLabel(i+1, ParamNames[ParamEnum][ParamNo]);
+
2381 }
+
2382 PreFitPlot->SetDirectory(0);
+
2383
+
2384 PreFitPlot->SetFillStyle(1001);
+
2385 PreFitPlot->SetFillColor(kRed-3);
+
2386 PreFitPlot->SetMarkerStyle(21);
+
2387 PreFitPlot->SetMarkerSize(2.4);
+
2388 PreFitPlot->SetMarkerColor(kWhite);
+
2389 PreFitPlot->SetLineColor(PreFitPlot->GetFillColor());
+
2390 PreFitPlot->GetXaxis()->LabelsOption("v");
+
2391
+
2392 return PreFitPlot;
+
2393}
+
+
2394
+
2395
+
2396// **************************
+
2397//CW: Read the input Covariance matrix entries
+
2398// Get stuff like parameter input errors, names, and so on
+
+ +
2400// **************************
+ +
2402 if(nParam[kXSecPar] > 0) ReadXSecFile();
+
2403 if(nParam[kNDPar] > 0) ReadNDFile();
+
2404 if(nParam[kFDDetPar] > 0) ReadFDFile();
+
2405 if(nParam[kOSCPar] > 0) ReadOSCFile();
+
2406 //KS: Remove parameters which were removed
+ +
2408}
+
+
2409
+
2410// **************************
+
2411// Read the output MCMC file and find what inputs were used
+
+ +
2413// **************************
+
2414
+
2415 // Now read the MCMC file
+
2416 TFile *TempFile = new TFile(MCMCFile.c_str(), "open");
+
2417
+
2418 // Get the settings for the MCMC
+
2419 TMacro *Config = (TMacro*)(TempFile->Get("MaCh3_Config"));
+
2420 if (Config == nullptr) {
+
2421 MACH3LOG_ERROR("Didn't find MaCh3_Config tree in MCMC file! {}", MCMCFile);
+
2422 TempFile->ls();
+
2423 throw;
+
2424 }
+
2425 //KS:Most inputs are in ${MACH3}/inputs/blarb.root
+
2426 if (std::getenv("MACH3") != nullptr) {
+
2427 MACH3LOG_INFO("Found MACH3 environment variable: {}", std::getenv("MACH3"));
+
2428 }
+
2429
+
2430 YAML::Node Settings = TMacroToYAML(*Config);
+
2431
+
2432 bool InputNotFound = false;
+
2433 //CW: Get the xsec Covariance matrix
+
2434 CovPos[kXSecPar] = GetFromManager<std::vector<std::string>>(Settings["General"]["Systematics"]["XsecCovFile"], {"none"});
+
2435 if(CovPos[kXSecPar].back() == "none")
+
2436 {
+
2437 MACH3LOG_WARN("Couldn't find XsecCov branch in output");
+
2438 InputNotFound = true;
+
2439 }
+
2440
+
2441 //CW: And the ND Covariance matrix
+
2442 CovPos[kNDPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["NDCovFile"], "none"));
+
2443 if(CovPos[kNDPar].back() == "none")
+
2444 {
+
2445 MACH3LOG_WARN("Couldn't find NDCov branch in output");
+
2446 InputNotFound = true;
+
2447 }
+
2448
+
2449 //CW: And the FD Covariance matrix
+
2450 CovPos[kFDDetPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["FDCovFile"], "none"));
+
2451 if(CovPos[kFDDetPar].back() == "none")
+
2452 {
+
2453 MACH3LOG_WARN("Couldn't find FDCov branch in output");
+
2454 InputNotFound = true;
+
2455 }
+
2456
+
2457 //CW: And the Osc Covariance matrix
+
2458 CovPos[kOSCPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["OscCovFile"], "none"));
+
2459 if(CovPos[kOSCPar].back() == "none")
+
2460 {
+
2461 MACH3LOG_WARN("Couldn't find OscCov branch in output");
+
2462 InputNotFound = true;
+
2463 }
+
2464 if(InputNotFound) std::cout<<Settings<<std::endl;
+
2465
+
2466 if (std::getenv("MACH3") != nullptr)
+
2467 {
+
2468 for(unsigned int i = 0; i < CovPos[kXSecPar].size(); i++)
+
2469 CovPos[kXSecPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2470
+
2471 for(unsigned int i = 0; i < CovPos[kNDPar].size(); i++)
+
2472 CovPos[kNDPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2473
+
2474 for(unsigned int i = 0; i < CovPos[kFDDetPar].size(); i++)
+
2475 CovPos[kFDDetPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2476
+
2477 for(unsigned int i = 0; i < CovPos[kOSCPar].size(); i++)
+
2478 CovPos[kOSCPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2479 }
+
2480
+
2481 // Delete the TTrees and the input file handle since we've now got the settings we need
+
2482 delete Config;
+
2483
+
2484 // Delete the MCMCFile pointer we're reading
+
2485 TempFile->Close();
+
2486 delete TempFile;
+
2487}
+
+
2488
+
2489
+
2490// ***************
+
2491// Read the xsec file and get the input central values and errors
+
+ +
2493// ***************
+
2494 YAML::Node XSecFile;
+
2495 XSecFile["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
2496 for(unsigned int i = 0; i < CovPos[kXSecPar].size(); i++)
+
2497 {
+
2498 YAML::Node YAMLDocTemp = YAML::LoadFile(CovPos[kXSecPar][i]);
+
2499 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
2500 XSecFile["Systematics"].push_back(item);
+
2501 }
+
2502 }
+
2503
+
2504 auto systematics = XSecFile["Systematics"];
+
2505 int i = 0;
+
2506 for (auto it = systematics.begin(); it != systematics.end(); ++it, ++i)
+
2507 {
+
2508 auto const &param = *it;
+
2509
+
2510 // Push back the name
+
2511 std::string TempString = (param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
2512
+
2513 //KS:Reject particular parameter names, noticed that sometimes string comparison doesn't work becasue of some weird casting of TObjString into std::string. This is rare and sooner or later we move away from TObjString so this is fine
+
2514 bool rejected = false;
+
2515 for (unsigned int ik = 0; ik < ExcludedNames.size(); ++ik)
+
2516 {
+
2517 if (TempString.rfind(ExcludedNames.at(ik), 0) == 0)
+
2518 {
+
2519 const int Tracker = ParamTypeStartPos[kXSecPar] + i;
+
2520 BranchNames[Tracker] = "delete";
+
2521 nParam[kXSecPar]--;
+
2522 rejected = true;
+
2523 break;
+
2524 }
+
2525 }
+
2526 if(rejected) continue;
+
2527 ParamNames[kXSecPar].push_back(TempString);
+
2528 if(ParamNames[kXSecPar][i].BeginsWith("b_"))
+
2529 {
+
2530 IsXsec.push_back(false);
+
2531 nFlux++;
+
2532 }
+
2533 else IsXsec.push_back(true);
+
2534
+
2535 ParamCentral[kXSecPar].push_back( param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>() );
+
2536 ParamNom[kXSecPar].push_back( param["Systematic"]["ParameterValues"]["Generated"].as<double>() );
+
2537 ParamErrors[kXSecPar].push_back( param["Systematic"]["Error"].as<double>() );
+
2538
+
2539 bool flat = false;
+
2540 if (param["Systematic"]["FlatPrior"]) { flat = param["Systematic"]["FlatPrior"].as<bool>(); }
+
2541 ParamFlat[kXSecPar].push_back( flat );
+
2542 }
+
2543}
+
+
2544
+
2545// ***************
+
2546// Read the ND cov file and get the input central values and errors
+
+ +
2548// ***************
+
2549
+
2550 // Do the same for the ND280
+
2551 TFile *NDdetFile = new TFile(CovPos[kNDPar].back().c_str(), "open");
+
2552 if (NDdetFile->IsZombie()) {
+
2553 std::cerr << "Couldn't find NDdetFile " << CovPos[kNDPar].back() << std::endl;
+
2554 throw;
+
2555 }
+
2556 NDdetFile->cd();
+
2557
+
2558 TMatrixDSym *NDdetMatrix = (TMatrixDSym*)(NDdetFile->Get("nddet_cov"));
+
2559 TVectorD *NDdetNominal = (TVectorD*)(NDdetFile->Get("det_weights"));
+
2560 TDirectory *BinningDirectory = (TDirectory*)NDdetFile->Get("Binning")->Clone();
+
2561
+
2562 for (int i = 0; i < NDdetNominal->GetNrows(); ++i)
+
2563 {
+
2564 ParamNom[kNDPar].push_back( (*NDdetNominal)(i) );
+
2565 ParamCentral[kNDPar].push_back( (*NDdetNominal)(i) );
+
2566
+
2567 ParamErrors[kNDPar].push_back( std::sqrt((*NDdetMatrix)(i,i)) );
+
2568 ParamNames[kNDPar].push_back( Form("ND Det %i", i) );
+
2569 //KS: Currently we can only set it via config, change it in future
+
2570 ParamFlat[kNDPar].push_back( false );
+
2571 }
+
2572
+
2573 TIter next(BinningDirectory->GetListOfKeys());
+
2574 TKey *key = nullptr;
+
2575
+
2576 // Loop through all entries
+
2577 while ((key = (TKey*)next()))
+
2578 {
+
2579 std::string name = std::string(key->GetName());
+
2580 TH2Poly* RefPoly = (TH2Poly*)BinningDirectory->Get((name).c_str())->Clone();
+
2581 int size = RefPoly->GetNumberOfBins();
+
2582 NDSamplesBins.push_back(size);
+
2583 NDSamplesNames.push_back(RefPoly->GetTitle());
+
2584 }
+
2585
+
2586 NDdetFile->Close();
+
2587 delete NDdetFile;
+
2588}
+
+
2589
+
2590
+
2591// ***************
+
2592// Read the FD cov file and get the input central values and errors
+
+ +
2594// ***************
+
2595
+
2596 // Do the same for the FD
+
2597 TFile *FDdetFile = new TFile(CovPos[kFDDetPar].back().c_str(), "open");
+
2598 if (FDdetFile->IsZombie()) {
+
2599 std::cerr << "Couldn't find FDdetFile " << CovPos[kFDDetPar].back() << std::endl;
+
2600 throw;
+
2601 }
+
2602 FDdetFile->cd();
+
2603
+
2604 TMatrixDSym *FDdetMatrix = (TMatrixDSym*)(FDdetFile->Get("SKJointError_Erec_Total"));
+
2605
+
2606 for (int i = 0; i < FDdetMatrix->GetNrows(); ++i)
+
2607 {
+
2608 //KS: FD parameters start at 1. in contrary to ND280
+
2609 ParamNom[kFDDetPar].push_back(1.);
+
2610 ParamCentral[kFDDetPar].push_back(1.);
+
2611
+
2612 ParamErrors[kFDDetPar].push_back( std::sqrt((*FDdetMatrix)(i,i)) );
+
2613 ParamNames[kFDDetPar].push_back( Form("FD Det %i", i) );
+
2614
+
2615 //KS: Currently we can only set it via config, change it in future
+
2616 ParamFlat[kFDDetPar].push_back( false );
+
2617 }
+
2618 //KS: The last parameter is p scale
+
2619 if(FancyPlotNames) ParamNames[kFDDetPar].back() = "Momentum Scale";
+
2620
+
2621 FDdetFile->Close();
+
2622 delete FDdetFile;
+
2623 delete FDdetMatrix;
+
2624}
+
+
2625
+
2626// ***************
+
2627// Read the Osc cov file and get the input central values and errors
+
+ +
2629// ***************
+
2630
+
2631 // Do the same for the ND280
+
2632 TFile *OscFile = new TFile(CovPos[kOSCPar].back().c_str(), "open");
+
2633 if (OscFile->IsZombie()) {
+
2634 std::cerr << "Couldn't find OSCFile " << CovPos[kOSCPar].back() << std::endl;
+
2635 throw;
+
2636 }
+
2637 OscFile->cd();
+
2638
+
2639 TMatrixDSym *OscMatrix = (TMatrixDSym*)(OscFile->Get("osc_cov"));
+
2640 //KS: Osc nominal we can also set via config so there is danger that this will nor corrspond to what was used in the fit
+
2641 TVectorD *OscNominal = (TVectorD*)(OscFile->Get("osc_nom"));
+
2642 TObjArray* osc_param_names = (TObjArray*)(OscFile->Get("osc_param_names"));
+
2643 TVectorD* osc_flat_prior = (TVectorD*)OscFile->Get("osc_flat_prior");
+
2644
+
2645 for (int i = 0; i < osc_flat_prior->GetNrows(); ++i)
+
2646 {
+
2647 ParamNom[kOSCPar].push_back( (*OscNominal)(i) );
+
2648 ParamCentral[kOSCPar].push_back( (*OscNominal)(i) );
+
2649
+
2650 ParamErrors[kOSCPar].push_back( std::sqrt((*OscMatrix)(i,i)) );
+
2651 // Push back the name
+
2652 std::string TempString = std::string(((TObjString*)osc_param_names->At(i))->GetString());
+
2653 ParamNames[kOSCPar].push_back(TempString);
+
2654
+
2655 ParamFlat[kOSCPar].push_back( (bool)((*osc_flat_prior)(i)) );
+
2656 }
+
2657 if(PlotJarlskog)
+
2658 {
+
2659 Chain->SetAlias("J_cp", "TMath::Sqrt(sin2th_13)*TMath::Sqrt(1.-sin2th_13)*TMath::Sqrt(1.-sin2th_13)*TMath::Sqrt(sin2th_12)*TMath::Sqrt(1.-sin2th_12)*TMath::Sqrt(sin2th_23)*TMath::Sqrt(1.-sin2th_23)*TMath::Sin(delta_cp)");
+
2660 BranchNames.push_back("J_cp");
+
2661 ParamType.push_back(kOSCPar);
+
2662 nParam[kOSCPar]++;
+
2663 nDraw++;
+
2664
+
2665 //TODO we should actually calucate central value and prior error but leave it for now...
+
2666 ParamNom[kOSCPar].push_back( 0. );
+
2667 ParamCentral[kOSCPar].push_back( 0. );
+
2668 ParamErrors[kOSCPar].push_back( 1. );
+
2669 // Push back the name
+
2670 ParamNames[kOSCPar].push_back("J_cp");
+
2671 ParamFlat[kOSCPar].push_back( false );
+
2672 }
+
2673 OscFile->Close();
+
2674 delete OscFile;
+
2675}
+
+
2676
+
2677// ***************
+
2678//This is bit messy as currently BranchNames is taken from actual Chain.root file while proper parameter name from matrix.root and right now we don't access them at the same time.
+
+ +
2680// ***************
+
2681
+
2682 for(int i = 0; i < nDraw; i++)
+
2683 {
+
2684 if(BranchNames[i] == "delete")
+
2685 {
+
2686 BranchNames.erase(BranchNames.begin() + i);
+
2687 ParamType.erase(ParamType.begin() + i);
+
2688 nDraw--;
+
2689 i = 0;
+
2690 }
+
2691 }
+
2692}
+
+
2693
+
2694
+
2695// ***************
+
2696// Make the step cut from a string
+
+ +
2698// ***************
+
2699 StepCut = Cuts;
+
2700 BurnInCut = std::stoi( Cuts );
+
2701}
+
+
2702
+
2703// ***************
+
2704// Make the step cut from an int
+
+ +
2706// ***************
+
2707 std::stringstream TempStream;
+
2708 TempStream << "step > " << Cuts;
+
2709 StepCut = TempStream.str();
+
2710 BurnInCut = Cuts;
+
2711}
+
+
2712
+
2713// **************************
+
2714//CW: Get the mean and RMS of a 1D posterior
+
+
2715void MCMCProcessor::GetArithmetic(TH1D * const hpost, const int i) {
+
2716// **************************
+
2717 (*Means)(i) = hpost->GetMean();
+
2718 (*Errors)(i) = hpost->GetRMS();
+
2719}
+
+
2720
+
2721// **************************
+
2722//CW: Get Gaussian characteristics
+
+
2723void MCMCProcessor::GetGaussian(TH1D *& hpost , const int i) {
+
2724// **************************
+
2725
+
2726 const double mean = hpost->GetMean();
+
2727 const double err = hpost->GetRMS();
+
2728 const double peakval = hpost->GetBinCenter(hpost->GetMaximumBin());
+
2729
+
2730 // Set the range for the Gaussian fit
+
2731 Gauss->SetRange(mean - 1.5*err , mean + 1.5*err);
+
2732 // Set the starting parameters close to RMS and peaks of the histograms
+
2733 Gauss->SetParameters(hpost->GetMaximum()*err*std::sqrt(2*3.14), peakval, err);
+
2734
+
2735 // Perform the fit
+
2736 hpost->Fit(Gauss->GetName(),"Rq");
+
2737 hpost->SetStats(0);
+
2738
+
2739 (*Means_Gauss)(i) = Gauss->GetParameter(1);
+
2740 (*Errors_Gauss)(i) = Gauss->GetParameter(2);
+
2741}
+
+
2742
+
2743
+
2744// ***************
+
2745//CW: Get the highest posterior density from a TH1D
+
+
2746void MCMCProcessor::GetHPD(TH1D* const hpost, const int i, const double coverage) {
+
2747// ***************
+
2748 // Get the bin which has the largest posterior density
+
2749 const int MaxBin = hpost->GetMaximumBin();
+
2750 // And it's value
+
2751 const double peakval = hpost->GetBinCenter(MaxBin);
+
2752
+
2753 // The total integral of the posterior
+
2754 const long double Integral = hpost->Integral();
+
2755 //KS: and integral of left handed and right handed parts
+
2756 const long double LowIntegral = hpost->Integral(1, MaxBin-1) + hpost->GetBinContent(MaxBin)/2.0;
+
2757 const long double HighIntegral = hpost->Integral(MaxBin+1, hpost->GetNbinsX()) + hpost->GetBinContent(MaxBin)/2.0;
+
2758
+
2759 // Keep count of how much area we're covering
+
2760 //KS: Take only half content of HPD bin as one half goes for right handed error and the other for left handed error
+
2761 long double sum = hpost->GetBinContent(MaxBin)/2.0;
+
2762
+
2763 // Counter for current bin
+
2764 int CurrBin = MaxBin;
+ +
2766 CurrBin++;
+
2767 sum += hpost->GetBinContent(CurrBin);
+
2768 }
+
2769 const double sigma_p = std::fabs(hpost->GetBinCenter(MaxBin)-hpost->GetXaxis()->GetBinUpEdge(CurrBin));
+
2770 // Reset the sum
+
2771 //KS: Take only half content of HPD bin as one half goes for right handed error and the other for left handed error
+
2772 sum = hpost->GetBinContent(MaxBin)/2.0;
+
2773
+
2774 // Reset the bin counter
+
2775 CurrBin = MaxBin;
+
2776 // Counter for current bin
+ +
2778 CurrBin--;
+
2779 sum += hpost->GetBinContent(CurrBin);
+
2780 }
+
2781 const double sigma_m = std::fabs(hpost->GetBinCenter(CurrBin)-hpost->GetBinLowEdge(MaxBin));
+
2782
+
2783 // Now do the double sided HPD
+
2784 //KS: Start sum from the HPD
+
2785 sum = hpost->GetBinContent(MaxBin);
+
2786 int LowBin = MaxBin;
+
2787 int HighBin = MaxBin;
+
2788 long double LowCon = 0.0;
+
2789 long double HighCon = 0.0;
+
2790
+
2791 while (sum/Integral < coverage && (LowBin > 0 || HighBin < hpost->GetNbinsX()+1))
+
2792 {
+
2793 LowCon = 0.0;
+
2794 HighCon = 0.0;
+
2795 //KS:: Move further only if you haven't reached histogram end
+
2796 if(LowBin > 1)
+
2797 {
+
2798 LowBin--;
+
2799 LowCon = hpost->GetBinContent(LowBin);
+
2800 }
+ +
2802 {
+
2803 HighBin++;
+
2804 HighCon = hpost->GetBinContent(HighBin);
+
2805 }
+
2806
+
2807 // If we're on the last slice and the lower contour is larger than the upper
+ +
2809 sum += LowCon;
+
2810 break;
+
2811 // If we're on the last slice and the upper contour is larger than the lower
+
2812 } else if ((sum+LowCon+HighCon)/Integral > coverage && HighCon >= LowCon) {
+
2813 sum += HighCon;
+
2814 break;
+
2815 } else {
+
2816 sum += LowCon + HighCon;
+
2817 }
+
2818 }
+
2819
+
2820 double sigma_hpd = 0.0;
+
2821 if (LowCon > HighCon) {
+
2822 sigma_hpd = std::fabs(hpost->GetBinLowEdge(LowBin)-hpost->GetBinCenter(MaxBin));
+
2823 } else {
+
2824 sigma_hpd = std::fabs(hpost->GetXaxis()->GetBinUpEdge(HighBin)-hpost->GetBinCenter(MaxBin));
+
2825 }
+
2826
+
2827 (*Means_HPD)(i) = peakval;
+
2828 (*Errors_HPD)(i) = sigma_hpd;
+
2829 (*Errors_HPD_Positive)(i) = sigma_p;
+
2830 (*Errors_HPD_Negative)(i) = sigma_m;
+
2831}
+
+
2832
+
2833// ***************
+
2834//KS: Get 1D histogram within credible interval, hpost_copy has to have the same binning, I don't do Copy() as this will lead to problems if this is used under multithreading
+
+ +
2836// ***************
+
2837
+
2838 if(coverage > 1)
+
2839 {
+
2840 std::cerr<<"Specified Credible Interval is greater that 1 and equal to "<< coverage <<" Should be between 0 and 1"<<std::endl;
+
2841 throw;
+
2842 }
+
2843 //KS: Reset first copy of histogram
+
2844 hpost_copy->Reset("");
+
2845 hpost_copy->Fill(0.0, 0.0);
+
2846
+
2847 //KS: Temporary structure to be thread save
+
2848 double *hist_copy = new double[hpost->GetXaxis()->GetNbins()+1];
+
2849 bool *hist_copy_fill = new bool[hpost->GetXaxis()->GetNbins()+1];
+
2850 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2851 {
+
2852 hist_copy[i] = hpost->GetBinContent(i);
+
2853 hist_copy_fill[i] = false;
+
2854 }
+
2855
+
2857 const long double Integral = hpost->Integral();
+
2858 long double sum = 0;
+
2859
+
2860 while ((sum / Integral) < coverage)
+
2861 {
+
2863 int max_entry_bin = 0;
+
2864 double max_entries = 0.;
+
2865 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2866 {
+
2867 if (hist_copy[i] > max_entries)
+
2868 {
+ +
2870 max_entry_bin = i;
+
2871 }
+
2872 }
+
2874 hist_copy[max_entry_bin] = -1.;
+ +
2876
+
2877 sum += max_entries;
+
2878 }
+
2879 //KS: Now fill our copy only for bins which got included in coverage region
+
2880 for(int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2881 {
+
2882 if(hist_copy_fill[i]) hpost_copy->SetBinContent(i, hpost->GetBinContent(i));
+
2883 }
+
2884
+
2885 delete[] hist_copy;
+
2886 delete[] hist_copy_fill;
+
2887
+
2888 return;
+
2889}
+
+
2890
+
2891// ***************
+
2892//KS: Set 2D contour within some coverage
+
+
2893void MCMCProcessor::GetCredibleRegion(TH2D* const hpost, const double coverage) {
+
2894// ***************
+
2895
+
2896 if(coverage > 1)
+
2897 {
+
2898 std::cerr<<"Specified Credible Region is greater than 1 and equal to "<< coverage <<" Should be between 0 and 1"<<std::endl;
+
2899 throw;
+
2900 }
+
2901
+
2902 //KS: Temporary structure to be thread save
+
2903 double **hist_copy = new double*[hpost->GetXaxis()->GetNbins()+1];
+
2904 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2905 {
+
2906 hist_copy[i] = new double[hpost->GetYaxis()->GetNbins()+1];
+
2907 for (int j = 0; j <= hpost->GetYaxis()->GetNbins(); ++j)
+
2908 {
+
2909 hist_copy[i][j] = hpost->GetBinContent(i,j);
+
2910 }
+
2911 }
+
2912
+
2914 const long double Integral = hpost->Integral();
+
2915 long double sum = 0;
+
2916
+
2917 //We need to as ROOT requiers array to set to contour
+
2918 double Contour[1];
+
2919 while ((sum / Integral) < coverage)
+
2920 {
+
2922 int max_entry_bin_x = 0;
+
2923 int max_entry_bin_y = 0;
+
2924 double max_entries = 0.;
+
2925 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2926 {
+
2927 for (int j = 0; j <= hpost->GetYaxis()->GetNbins(); ++j)
+
2928 {
+
2929 if (hist_copy[i][j] > max_entries)
+
2930 {
+ + + +
2934 }
+
2935 }
+
2936 }
+ +
2939
+
2940 sum += max_entries;
+
2941 Contour[0] = max_entries;
+
2942 }
+
2943 hpost->SetContour(1, Contour);
+
2944
+
2945 //Delete temporary arrays
+
2946 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2947 {
+
2948 delete[] hist_copy[i];
+
2949 }
+
2950 delete[] hist_copy;
+
2951
+
2952 return;
+
2953}
+
+
2954
+
2955// ***************
+
2956// Pass central value
+
+ +
2958// **************************
+
2959
+ +
2961 int ParamNo = __UNDEF__;
+
2962 ParamNo = param - ParamTypeStartPos[ParType];
+
2963
+
2964 Prior = ParamCentral[ParType][ParamNo];
+
2965 PriorError = ParamErrors[ParType][ParamNo];
+
2966 Title = ParamNames[ParType][ParamNo];
+
2967 return;
+
2968}
+
+
2969
+
2970// ***************
+
2971// Find Param Index based on name
+
+ +
2973// **************************
+
2974
+
2975 int ParamNo = __UNDEF__;
+
2976 for (int i = 0; i < nDraw; ++i)
+
2977 {
+
2978 TString Title = "";
+
2979 double Prior = 1.0;
+
2980 double PriorError = 1.0;
+
2981
+ +
2983
+
2984 if(Name == Title)
+
2985 {
+
2986 ParamNo = i;
+
2987 break;
+
2988 }
+
2989 }
+
2990 return ParamNo;
+
2991}
+
+
2992
+
2993// **************************************************
+
2994// Helper function to reset histograms
+
+ +
2996// **************************************************
+
2997 #ifdef MULTITHREAD
+
2998 #pragma omp parallel for
+
2999 #endif
+
3000 for (int i = 0; i < nDraw; ++i)
+
3001 {
+
3002 for (int j = 0; j <= i; ++j)
+
3003 {
+
3004 // TH2D to hold the Correlation
+
3005 hpost2D[i][j]->Reset("");
+
3006 hpost2D[i][j]->Fill(0.0, 0.0, 0.0);
+
3007 }
+
3008 }
+
3009}
+
+
3010
+
3011// **************************
+
3012// KS: Get Super Fancy Polar Plot
+
+
3013void MCMCProcessor::GetPolarPlot(std::vector<std::string> ParNames){
+
3014// **************************
+
3015
+
3016 if(hpost[0] == nullptr) MakePostfit();
+
3017
+
3018 const double TopMargin = Posterior->GetTopMargin();
+
3019 const double BottomMargin = Posterior->GetBottomMargin();
+
3020 const double LeftMargin = Posterior->GetLeftMargin();
+
3021 const double RightMargin = Posterior->GetRightMargin();
+
3022
+
3023 Posterior->SetTopMargin(0.1);
+
3024 Posterior->SetBottomMargin(0.1);
+
3025 Posterior->SetLeftMargin(0.1);
+
3026 Posterior->SetRightMargin(0.1);
+
3027 Posterior->Update();
+
3028
+
3029 std::cout << "Calculating Polar Plot "<< std::endl;
+
3030 TDirectory *PolarDir = OutputFile->mkdir("PolarDir");
+
3031 PolarDir->cd();
+
3032
+
3033 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3034 {
+
3035 //KS: First we need to find parameter number based on name
+
3036 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3037 bool skip = false;
+
3038 if(ParamNo == __UNDEF__)
+
3039 {
+
3040 MACH3LOG_WARN("Couldn't find param {}. Will not calculate Polar Plot", ParNames[k]);
+
3041 skip = true;
+
3042 }
+
3043 if(skip) continue;
+
3044
+
3045 TString Title = "";
+
3046 double Prior = 1.0;
+
3047 double PriorError = 1.0;
+ +
3049
+
3050 std::vector<double> x_val(nBins);
+
3051 std::vector<double> y_val(nBins);
+
3052
+
3053 double xmin = 0;
+
3054 double xmax = 2*TMath::Pi();
+
3055
+
3056 double Integral = hpost[ParamNo]->Integral();
+
3057 for (Int_t ipt = 0; ipt < nBins; ipt++)
+
3058 {
+ +
3060 y_val[ipt] = hpost[ParamNo]->GetBinContent(ipt+1)/Integral;
+
3061 }
+
3062
+
3063 TGraphPolar * PolarGraph = new TGraphPolar(nBins, x_val.data(), y_val.data());
+
3064 PolarGraph->SetLineWidth(2);
+
3065 PolarGraph->SetFillStyle(3001);
+
3066 PolarGraph->SetLineColor(kRed);
+
3067 PolarGraph->SetFillColor(kRed);
+
3068 PolarGraph->Draw("AFL");
+
3069
+
3070 TText* Text = new TText(0.6, 0.1, Title);
+
3071 Text->SetTextSize(0.04);
+
3072 Text->SetNDC(true);
+
3073 Text->Draw("");
+
3074
+
3075 Posterior->Print(CanvasName);
+
3076 Posterior->Write(Title);
+
3077
+
3078 delete PolarGraph;
+
3079 delete Text;
+
3080 } //End loop over parameters
+
3081
+
3082 PolarDir->Close();
+
3083 delete PolarDir;
+
3084
+
3085 OutputFile->cd();
+
3086
+
3087 Posterior->SetTopMargin(TopMargin);
+
3088 Posterior->SetBottomMargin(BottomMargin);
+
3089 Posterior->SetLeftMargin(LeftMargin);
+
3090 Posterior->SetRightMargin(RightMargin);
+
3091}
+
+
3092
+
3093// **************************
+
3094// Get Bayes Factor for particualar parameter
+
+
3095void MCMCProcessor::GetBayesFactor(std::vector<std::string> ParNames, std::vector<std::vector<double>> Model1Bounds, std::vector<std::vector<double>> Model2Bounds, std::vector<std::vector<std::string>> ModelNames){
+
3096// **************************
+
3097
+
3098 if(hpost[0] == nullptr) MakePostfit();
+
3099
+
3100 MACH3LOG_INFO("Calculating Bayes Factor");
+
3101 if((ParNames.size() != Model1Bounds.size()) || (Model2Bounds.size() != Model1Bounds.size()) || (Model2Bounds.size() != ModelNames.size()))
+
3102 {
+
3103 MACH3LOG_ERROR("Size doesn't match");
+
3104 throw;
+
3105 }
+
3106 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3107 {
+
3108 //KS: First we need to find parameter number based on name
+
3109 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3110 bool skip = false;
+
3111 if(ParamNo == __UNDEF__)
+
3112 {
+
3113 MACH3LOG_WARN("Couldn't find param {}. Will not calculate Bayes Factor", ParNames[k]);
+
3114 skip = true;
+
3115 }
+
3116 if(skip) continue;
+
3117
+
3118 const double M1_min = Model1Bounds[k][0];
+
3119 const double M2_min = Model2Bounds[k][0];
+
3120 const double M1_max = Model1Bounds[k][1];
+
3121 const double M2_max = Model2Bounds[k][1];
+
3122
+
3123 long double IntegralMode1 = hpost[ParamNo]->Integral(hpost[ParamNo]->FindFixBin(M1_min), hpost[ParamNo]->FindFixBin(M1_max));
+
3124 long double IntegralMode2 = hpost[ParamNo]->Integral(hpost[ParamNo]->FindFixBin(M2_min), hpost[ParamNo]->FindFixBin(M2_max));
+
3125
+
3126 double BayesFactor = 0.;
+
3127 std::string Name = "";
+
3128 //KS: Calc Bayes Factor
+
3129 //If M1 is more likely
+ +
3131 {
+ +
3133 Name = "\\mathfrak{B}(" + ModelNames[k][0]+ "/" + ModelNames[k][1] + ") = " + std::to_string(BayesFactor);
+
3134 }
+
3135 else //If M2 is more likely
+
3136 {
+ +
3138 Name = "\\mathfrak{B}(" + ModelNames[k][1]+ "/" + ModelNames[k][0] + ") = " + std::to_string(BayesFactor);
+
3139 }
+ + +
3142
+
3143 MACH3LOG_INFO("{} for {}", Name, ParNames[k]);
+
3144 MACH3LOG_INFO("Following Jeffreys Scale = ", JeffreysScale);
+
3145 MACH3LOG_INFO("Following Dunne-Kaboth Scale = ", DunneKabothScale);
+
3146 std::cout<<std::endl;
+
3147 }
+
3148 return;
+
3149}
+
+
3150
+
3151
+
3152// **************************
+
3153// KS: Get Savage Dockey point hypothesis test
+
+
3154void MCMCProcessor::GetSavageDickey(std::vector<std::string> ParNames, std::vector<double> EvaluationPoint, std::vector<std::vector<double>> Bounds){
+
3155// **************************
+
3156
+
3157 if((ParNames.size() != EvaluationPoint.size()) || (Bounds.size() != EvaluationPoint.size()))
+
3158 {
+
3159 MACH3LOG_ERROR("Size doesn't match");
+
3160 throw;
+
3161 }
+
3162
+
3163 if(hpost[0] == nullptr) MakePostfit();
+
3164
+
3165 MACH3LOG_INFO("Calculating Savage Dickey");
+
3166 TDirectory *SavageDickeyDir = OutputFile->mkdir("SavageDickey");
+
3167 SavageDickeyDir->cd();
+
3168
+
3169 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3170 {
+
3171 //KS: First we need to find parameter number based on name
+
3172 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3173 bool skip = false;
+
3174 if(ParamNo == __UNDEF__)
+
3175 {
+
3176 MACH3LOG_WARN("Couldn't find param {}. Will not calculate SavageDickey", ParNames[k]);
+
3177 skip = true;
+
3178 }
+
3179 if(skip) continue;
+
3180
+
3181 TString Title = "";
+
3182 double Prior = 1.0;
+
3183 double PriorError = 1.0;
+
3184 bool FlatPrior = false;
+ +
3186
+
3187 ParameterEnum ParType = ParamType[ParamNo];
+
3188 int ParamTemp = ParamNo - ParamTypeStartPos[ParType];
+ +
3190
+
3191 TH1D* PosteriorHist = (TH1D*) hpost[ParamNo]->Clone(Title);
+
3192 RemoveFitter(PosteriorHist, "Gauss");
+
3193
+
3194 TH1D* PriorHist = nullptr;
+
3195 //KS: If flat prior we need to have well defined bounds otherwise Prior distriution will not make sense
+
3196 if(FlatPrior)
+
3197 {
+
3198 int NBins = PosteriorHist->GetNbinsX();
+
3199 if(Bounds[k][0] > Bounds[k][1])
+
3200 {
+
3201 MACH3LOG_ERROR("Lower bound is higher than upper bound");
+
3202 throw;
+
3203 }
+
3204 PriorHist = new TH1D("PriorHist", Title, NBins, Bounds[k][0], Bounds[k][1]);
+
3205
+
3206 double FlatProb = ( Bounds[k][1] - Bounds[k][0]) / NBins;
+
3207 for (int g = 0; g < NBins + 1; ++g)
+
3208 {
+
3209 PriorHist->SetBinContent(g+1, FlatProb);
+
3210 }
+
3211 }
+
3212 else //KS: Otherwise throw from Gaussian
+
3213 {
+
3214 PriorHist = (TH1D*) PosteriorHist->Clone("Prior");
+
3215 PriorHist->Reset("");
+
3216 PriorHist->Fill(0.0, 0.0);
+
3217
+
3218 TRandom3* rand = new TRandom3(0);
+
3219 //KS: Throw nice gaussian, just need big number to have smooth distribution
+
3220 for(int g = 0; g < 1000000; ++g)
+
3221 {
+
3222 PriorHist->Fill(rand->Gaus(Prior, PriorError));
+
3223 }
+
3224 delete rand;
+
3225 }
+
3226 // Area normalise the distributions
+
3227 PriorHist->Scale(1./PriorHist->Integral(), "width");
+
3228 PosteriorHist->Scale(1./PosteriorHist->Integral(), "width");
+
3229
+
3230 PriorHist->SetLineColor(kRed);
+
3231 PriorHist->SetMarkerColor(kRed);
+
3232 PriorHist->SetFillColorAlpha(kRed, 0.35);
+
3233 PriorHist->SetFillStyle(1001);
+
3234 PriorHist->GetXaxis()->SetTitle(Title);
+
3235 PriorHist->GetYaxis()->SetTitle("Posterior Probability");
+
3236 PriorHist->SetMaximum(PosteriorHist->GetMaximum()*1.5);
+
3237 PriorHist->GetYaxis()->SetLabelOffset(999);
+
3238 PriorHist->GetYaxis()->SetLabelSize(0);
+
3239 PriorHist->SetLineWidth(2);
+
3240 PriorHist->SetLineStyle(kSolid);
+
3241
+
3242 PosteriorHist->SetLineColor(kBlue);
+
3243 PosteriorHist->SetMarkerColor(kBlue);
+
3244 PosteriorHist->SetFillColorAlpha(kBlue, 0.35);
+
3245 PosteriorHist->SetFillStyle(1001);
+
3246
+
3247 PriorHist->Draw("hist");
+
3248 PosteriorHist->Draw("hist same");
+
3249
+
3250 double ProbPrior = PriorHist->GetBinContent(PriorHist->FindBin(EvaluationPoint[k]));
+
3251 //KS: In case we go so far away that prior is 0, set this to small value to avoid dividing by 0
+
3252 if(ProbPrior < 0) ProbPrior = 0.00001;
+
3253 double ProbPosterior = PosteriorHist->GetBinContent(PosteriorHist->FindBin(EvaluationPoint[k]));
+ +
3255
+ +
3257 //Get Best point
+
3258 TGraph *PostPoint = new TGraph(1);
+
3259 PostPoint->SetPoint(0, EvaluationPoint[k], ProbPosterior);
+
3260 PostPoint->SetMarkerStyle(20);
+
3261 PostPoint->SetMarkerSize(1);
+
3262 PostPoint->Draw("P same");
+
3263
+
3264 TGraph *PriorPoint = new TGraph(1);
+
3265 PriorPoint->SetPoint(0, EvaluationPoint[k], ProbPrior);
+
3266 PriorPoint->SetMarkerStyle(20);
+
3267 PriorPoint->SetMarkerSize(1);
+
3268 PriorPoint->Draw("P same");
+
3269
+
3270 TLegend *legend = new TLegend(0.12, 0.6, 0.6, 0.97);
+
3271 legend->SetTextSize(0.04);
+
3272 legend->AddEntry(PriorHist, "Prior", "l");
+
3273 legend->AddEntry(PosteriorHist, "Posterior", "l");
+
3274 legend->AddEntry(PostPoint, Form("SavageDickey = %.2f, (%s)", SavageDickey, DunneKabothScale.c_str()),"");
+
3275 legend->SetLineColor(0);
+
3276 legend->SetLineStyle(0);
+
3277 legend->SetFillColor(0);
+
3278 legend->SetFillStyle(0);
+
3279 legend->SetBorderSize(0);
+
3280 legend->Draw("same");
+
3281
+
3282 Posterior->Print(CanvasName);
+
3283 Posterior->Write(Title);
+
3284
+
3285 delete PosteriorHist;
+
3286 delete PriorHist;
+
3287 delete PostPoint;
+
3288 delete PriorPoint;
+
3289 delete legend;
+
3290 } //End loop over parameters
+
3291
+
3292 SavageDickeyDir->Close();
+
3293 delete SavageDickeyDir;
+
3294
+
3295 OutputFile->cd();
+
3296}
+
+
3297
+
3298
+
3299// **************************
+
3300// KS: Following H. Jeffreys. The theory of probability. UOP Oxford, 1998. DOI: 10.2307/3619118.
+
+ +
3302// **************************
+
3303 std::string JeffreysScale = "";
+
3304 //KS: Get fancy Jeffreys Scale as I am to lazy to look into table everytime
+
3305 if(BayesFactor < 0) JeffreysScale = "Negative";
+
3306 else if( 5 > BayesFactor) JeffreysScale = "Barely worth mentioning";
+
3307 else if( 10 > BayesFactor) JeffreysScale = "Substantial";
+
3308 else if( 15 > BayesFactor) JeffreysScale = "Strong";
+
3309 else if( 20 > BayesFactor) JeffreysScale = "Very strong";
+
3310 else JeffreysScale = "Decisive";
+
3311
+
3312 MACH3LOG_INFO("Following Jeffreys Scale = {}",JeffreysScale);
+
3313 return JeffreysScale;
+
3314}
+
+
3315
+
3316
+
3317// **************************
+
3318// KS: Based on Table 1 in https://www.t2k.org/docs/technotes/435
+
+ +
3320// **************************
+
3321 std::string DunneKaboth = "";
+
3322 //KS: Get fancy DunneKaboth Scale as I am to lazy to look into table everytime
+
3323
+
3324 if(2.125 > BayesFactor) DunneKaboth = "< 1 #sigma";
+
3325 else if( 20.74 > BayesFactor) DunneKaboth = "> 1 #sigma";
+
3326 else if( 369.4 > BayesFactor) DunneKaboth = "> 2 #sigma";
+
3327 else if( 15800 > BayesFactor) DunneKaboth = "> 3 #sigma";
+
3328 else if( 1745000 > BayesFactor) DunneKaboth = "> 4 #sigma";
+
3329 else DunneKaboth = "> 5 #sigma";
+
3330
+
3331 return DunneKaboth;
+
3332}
+
+
3333
+
3334// **************************
+
3335// KS: Reweight prior of MCMC chain to another
+
+
3336void MCMCProcessor::ReweightPrior(std::vector<std::string> Names, std::vector<double> NewCentral, std::vector<double> NewError){
+
3337// **************************
+
3338
+
3339 if( (Names.size() != NewCentral.size()) || (NewCentral.size() != NewError.size()))
+
3340 {
+
3341 MACH3LOG_ERROR("Size of passed vectors doesn't match in ReweightPrior");
+
3342 throw;
+
3343 }
+
3344 std::vector<int> Param;
+
3345 std::vector<double> OldCentral;
+
3346 std::vector<double> OldError;
+
3347 std::vector<bool> FlatPrior;
+
3348
+
3349 //KS: First we need to find parameter number based on name
+
3350 for(unsigned int k = 0; k < Names.size(); ++k)
+
3351 {
+
3352 //KS: First we need to find parameter number based on name
+
3353 int ParamNo = GetParamIndexFromName(Names[k]);
+
3354 if(ParamNo == __UNDEF__)
+
3355 {
+
3356 MACH3LOG_WARN("Couldn't find param {}. Can't reweight Prior", Names[k]);
+
3357 continue;
+
3358 }
+
3359
+
3360 TString Title = "";
+
3361 double Prior = 1.0;
+
3362 double PriorError = 1.0;
+ +
3364
+
3365 Param.push_back(ParamNo);
+
3366 OldCentral.push_back(Prior);
+
3367 OldError.push_back(PriorError);
+
3368
+
3369 ParameterEnum ParType = ParamType[ParamNo];
+
3370 int ParamTemp = ParamNo - ParamTypeStartPos[ParType];
+
3371
+
3372 FlatPrior.push_back(ParamFlat[ParType][ParamTemp]);
+
3373 }
+
3374
+
3375 double* ParameterPos = new double[Names.size()];
+
3376
+
3377 std::string InputFile = MCMCFile+".root";
+
3378 std::string OutputFilename = MCMCFile + "_reweighted.root";
+
3379
+
3380 //KS: Simply create copy of file and add there new branch
+
3381 system(("cp "+InputFile+" "+OutputFilename).c_str());
+
3382
+
3383 TFile *OutputChain = new TFile(OutputFilename.c_str(), "UPDATE");
+
3384 OutputChain->cd();
+
3385 TTree *post = (TTree *)OutputChain->Get("posteriors");
+
3386
+
3387 double Weight = 1.;
+
3388
+
3389 post->SetBranchStatus("*",false);
+
3390 // Set the branch addresses for params
+
3391 for (unsigned int j = 0; j < Names.size(); ++j) {
+
3392 post->SetBranchStatus(BranchNames[Param[j]].Data(), true);
+
3393 post->SetBranchAddress(BranchNames[Param[j]].Data(), &ParameterPos[j]);
+
3394 }
+
3395 TBranch *bpt = post->Branch("Weight", &Weight, "Weight/D");
+
3396 post->SetBranchStatus("Weight", true);
+
3397
+
3398 for (int i = 0; i < nEntries; ++i)
+
3399 {
+
3400 post->GetEntry(i);
+
3401 Weight = 1.;
+
3402
+
3403 //KS: Calcualte reweight weight. Weights are multiplicative so we can do several reweights at once. FIXME Big limitation is that code only works for uncorelated paramters :(
+
3404 for (unsigned int j = 0; j < Names.size(); ++j)
+
3405 {
+
3406 double new_chi = (ParameterPos[j] - NewCentral[j])/NewError[j];
+
3407 double new_prior = std::exp(-0.5 * new_chi * new_chi);
+
3408
+
3409 double old_chi = -1;
+
3410 double old_prior = -1;
+
3411 if(FlatPrior[j])
+
3412 {
+
3413 old_prior = 1.0;
+
3414 }
+
3415 else
+
3416 {
+ +
3418 old_prior = std::exp(-0.5 * old_chi * old_chi);
+
3419 }
+ +
3421 }
+
3422 bpt->Fill();
+
3423 }
+
3424 post->SetBranchStatus("*",true);
+
3425 OutputChain->cd();
+
3426 post->Write("posteriors", TObject::kOverwrite);
+
3427 OutputChain->Close();
+
3428 delete OutputChain;
+
3429 delete[] ParameterPos;
+
3430
+
3431 OutputFile->cd();
+
3432}
+
+
3433
+
3434// **************************
+
3435// Diagnose the MCMC
+
+ +
3437// **************************
+
3438
+
3439// MCMC stuff to implement:
+
3440// Trace plots -- DONE
+
3441// LogL vs step plots -- DONE
+
3442// Acceptance probability -- DONE
+
3443// Autocorrelation -- DONE
+
3444// _Batched Means_ -- DONE
+
3445
+
3446 // Prepare branches etc for DiagMCMC
+ +
3448
+
3449 // Draw the simple trace matrices
+
3450 ParamTraces();
+
3451
+
3452 // Get the batched means
+
3453 BatchedMeans();
+
3454
+
3455 // Draw the auto-correlations
+ +
3457
+
3458 // Get Geweke Z score helping select burn-in
+ +
3460
+
3461 // Draw acceptance Probability
+ +
3463}
+
+
3464
+
3465
+
3466// **************************
+
3467//CW: Prepare branches etc. for DiagMCMC
+
+ +
3469// **************************
+
3470
+
3471 doDiagMCMC = true;
+
3472
+
3473 if(ParStep != nullptr)
+
3474 {
+
3475 MACH3LOG_ERROR("It look like ParStep was already filled ");
+
3476 MACH3LOG_ERROR("Eventhough it is used for MakeCovariance_MP and for DiagMCMC");
+
3477 MACH3LOG_ERROR("it has differnt structure in both for cache hits, sorry ");
+
3478 throw;
+
3479 }
+
3480 if(nBatches == 0)
+
3481 {
+
3482 MACH3LOG_ERROR("nBatches is equal to 0");
+
3483 MACH3LOG_ERROR("please use SetnBatches to set other value fore exampl 20");
+
3484 throw;
+
3485 }
+
3486
+
3487 // Initialise ParStep
+
3488 ParStep = new double*[nEntries]();
+
3489 SampleValues = new double*[nEntries]();
+
3490 SystValues = new double*[nEntries]();
+
3491 AccProbValues = new double[nEntries]();
+
3492 StepNumber = new int[nEntries]();
+
3493 #ifdef MULTITHREAD
+
3494 #pragma omp parallel for
+
3495 #endif
+
3496 for (int i = 0; i < nEntries; ++i) {
+
3497 ParStep[i] = new double[nDraw]();
+
3498 SampleValues[i] = new double[nSamples]();
+
3499 SystValues[i] = new double[nSysts]();
+
3500 for (int j = 0; j < nDraw; ++j) {
+
3501 ParStep[i][j] = -999.99;
+
3502 }
+
3503 for (int j = 0; j < nSamples; ++j) {
+
3504 SampleValues[i][j] = -999.99;
+
3505 }
+
3506 for (int j = 0; j < nSysts; ++j) {
+
3507 SystValues[i][j] = -999.99;
+
3508 }
+
3509 AccProbValues[i] = -999.99;
+
3510
+
3511 StepNumber[i] = -999.99;
+
3512 }
+
3513
+
3514 // Initialise the sums
+
3515 ParamSums = new double[nDraw]();
+
3516 for (int i = 0; i < nDraw; ++i) {
+
3517 ParamSums[i] = 0.0;
+
3518 }
+
3519 MACH3LOG_INFO("Reading input tree...");
+
3520 TStopwatch clock;
+
3521 clock.Start();
+
3522
+
3523 // Set all the branches to off
+
3524 Chain->SetBranchStatus("*", false);
+
3525
+
3526// Turn on the branches which we want for parameters
+
3527 for (int i = 0; i < nDraw; ++i) {
+
3528 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
3529 }
+
3530
+
3531 // Turn on the branches which we want for LogL sample
+
3532 for (int i = 0; i < nSamples; ++i) {
+
3533 Chain->SetBranchStatus(SampleName_v[i].Data(), true);
+
3534 }
+
3535
+
3536 // Turn on the branches which we want for LogL systs
+
3537 for (int i = 0; i < nSysts; ++i) {
+
3538 Chain->SetBranchStatus(SystName_v[i].Data(), true);
+
3539 }
+
3540
+
3541 // Turn on the branches which we want for acc prob
+
3542 Chain->SetBranchStatus("accProb", true);
+
3543
+
3544 // Only needed for Geweke right now
+
3545 Chain->SetBranchStatus("step", true);
+
3546
+
3547 // 10 entries output
+
3548 const int countwidth = nEntries/10;
+
3549
+
3550 // Can also do the batched means here to minimize excessive loops
+
3551 // The length of each batch
+
3552 const int BatchLength = nEntries/nBatches+1;
+
3553 BatchedAverages = new double*[nBatches]();
+
3554 AccProbBatchedAverages = new double[nBatches]();
+
3555 for (int i = 0; i < nBatches; ++i) {
+
3556 BatchedAverages[i] = new double[nDraw];
+ +
3558 for (int j = 0; j < nDraw; ++j) {
+
3559 BatchedAverages[i][j] = 0.0;
+
3560 }
+
3561 }
+
3562
+
3563 // Loop over the entries
+
3564 //KS: This is really a bottleneck right now, thus revisit with ROOT6 https://pep-root6.github.io/docs/analysis/parallell/root.html
+
3565 for (int i = 0; i < nEntries; ++i) {
+
3566
+
3567 if (i % countwidth == 0) {
+
3568 std::cout << i << "/" << nEntries << " (" << double(i)/double(nEntries)*100. << "%)" << std::endl;
+
3569 }
+
3570
+
3571 // Set the branch addresses for params
+
3572 for (int j = 0; j < nDraw; ++j) {
+
3573 Chain->SetBranchAddress(BranchNames[j].Data(), &ParStep[i][j]);
+
3574 }
+
3575
+
3576 // Set the branch addresses for samples
+
3577 for (int j = 0; j < nSamples; ++j) {
+
3578 Chain->SetBranchAddress(SampleName_v[j].Data(), &SampleValues[i][j]);
+
3579 }
+
3580
+
3581 // Set the branch addresses for systematics
+
3582 for (int j = 0; j < nSysts; ++j) {
+
3583 Chain->SetBranchAddress(SystName_v[j].Data(), &SystValues[i][j]);
+
3584 }
+
3585
+
3586 // Set the branch addresses for Acceptance Probability
+
3587 Chain->SetBranchAddress("accProb", &AccProbValues[i]);
+
3588
+
3589 Chain->SetBranchAddress("step", &StepNumber[i]);
+
3590
+
3591 // Fill up the arrays
+
3592 Chain->GetEntry(i);
+
3593
+
3594 // Find which batch the event belongs in
+
3595 int BatchNumber = -1;
+
3596 // I'm so lazy! But it's OK, the major overhead here is GetEntry: saved by ROOT!
+
3597 for (int j = 0; j < nBatches; ++j) {
+
3598 if (i < (j+1)*BatchLength) {
+
3599 BatchNumber = j;
+
3600 break;
+
3601 }
+
3602 }
+
3603
+
3604 // Fill up the sum for each j param
+
3605 for (int j = 0; j < nDraw; ++j) {
+
3606 ParamSums[j] += ParStep[i][j];
+ +
3608 }
+
3609
+
3610 //KS: Could easyli add this to above loop but I accProb is different beast so better keep it like this
+ +
3612 }
+
3613
+
3614 clock.Stop();
+
3615 std::cout << "Took " << clock.RealTime() << "s to finish caching statistic for Diag MCMC with " << nEntries << " steps" << std::endl;
+
3616
+
3617 // Make the sums into average
+
3618 #ifdef MULTITHREAD
+
3619 #pragma omp parallel for
+
3620 #endif
+
3621 for (int i = 0; i < nDraw; ++i) {
+
3622 ParamSums[i] /= nEntries;
+
3623 for (int j = 0; j < nBatches; ++j) {
+
3624 // Divide by the total number of events in the batch
+ +
3626 if(i==0) AccProbBatchedAverages[j] /= BatchLength; //KS: we have only one accProb, keep it like this for now
+
3627 }
+
3628 }
+
3629
+
3630 // And make our sweet output file
+
3631 if (OutputFile == nullptr) MakeOutputFile();
+
3632}
+
+
3633
+
3634// *****************
+
3635//CW: Draw trace plots of the parameters i.e. parameter vs step
+
+ +
3637// *****************
+
3638
+
3639 if (ParStep == nullptr) PrepareDiagMCMC();
+
3640 MACH3LOG_INFO("Making trace plots...");
+
3641 // Make the TH1Ds
+
3642 TH1D** TraceParamPlots = new TH1D*[nDraw];
+ +
3644 TH1D** TraceSystsPlots = new TH1D*[nSysts];
+
3645
+
3646 // Set the titles and limits for TH2Ds
+
3647 for (int j = 0; j < nDraw; ++j) {
+
3648
+
3649 TString Title = "";
+
3650 double Prior = 1.0;
+
3651 double PriorError = 1.0;
+
3652
+ +
3654 std::string HistName = Form("%s_%s_Trace", Title.Data(), BranchNames[j].Data());
+
3655
+
3656 TraceParamPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3657 TraceParamPlots[j]->GetXaxis()->SetTitle("Step");
+
3658 TraceParamPlots[j]->GetYaxis()->SetTitle("Parameter Variation");
+
3659 }
+
3660
+
3661 for (int j = 0; j < nSamples; ++j) {
+
3662 std::string HistName = SampleName_v[j].Data();
+
3663 TraceSamplePlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3664 TraceSamplePlots[j]->GetXaxis()->SetTitle("Step");
+
3665 TraceSamplePlots[j]->GetYaxis()->SetTitle("Sample -logL");
+
3666 }
+
3667
+
3668 for (int j = 0; j < nSysts; ++j) {
+
3669 std::string HistName = SystName_v[j].Data();
+
3670 TraceSystsPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3671 TraceSystsPlots[j]->GetXaxis()->SetTitle("Step");
+
3672 TraceSystsPlots[j]->GetYaxis()->SetTitle("Systematic -logL");
+
3673 }
+
3674
+
3675 // Have now made the empty TH1Ds, now for writing content to them!
+
3676
+
3677 // Loop over the number of parameters to draw their traces
+
3678 // Each histogram
+
3679#ifdef MULTITHREAD
+
3680 MACH3LOG_INFO("Using multi-threading...");
+
3681 #pragma omp parallel for
+
3682#endif
+
3683 for (int i = 0; i < nEntries; ++i) {
+
3684 // Set bin content for the ith bin to the parameter values
+
3685 for (int j = 0; j < nDraw; ++j) {
+
3686 TraceParamPlots[j]->SetBinContent(i, ParStep[i][j]);
+
3687 }
+
3688
+
3689 for (int j = 0; j < nSamples; ++j) {
+
3690 TraceSamplePlots[j]->SetBinContent(i, SampleValues[i][j]);
+
3691 }
+
3692
+
3693 for (int j = 0; j < nSysts; ++j) {
+
3694 TraceSystsPlots[j]->SetBinContent(i, SystValues[i][j]);
+
3695 }
+
3696 }
+
3697
+
3698 // Write the output and delete the TH2Ds
+
3699 TDirectory *TraceDir = OutputFile->mkdir("Trace");
+
3700 TraceDir->cd();
+
3701 for (int j = 0; j < nDraw; ++j) {
+
3702 // Fit a linear function to the traces
+
3703 TF1 *Fitter = new TF1("Fitter","[0]", int(nEntries/2), nEntries);
+
3704 Fitter->SetLineColor(kRed);
+
3705 TraceParamPlots[j]->Fit("Fitter","Rq");
+
3706 TraceParamPlots[j]->Write();
+
3707 delete Fitter;
+
3708 delete TraceParamPlots[j];
+
3709 }
+
3710 delete[] TraceParamPlots;
+
3711
+
3712 TDirectory *LLDir = OutputFile->mkdir("LogL");
+
3713 LLDir->cd();
+
3714 for (int j = 0; j < nSamples; ++j) {
+
3715 TraceSamplePlots[j]->Write();
+
3716 delete TraceSamplePlots[j];
+
3717 delete[] SampleValues[j];
+
3718 }
+
3719 delete[] TraceSamplePlots;
+
3720 delete[] SampleValues;
+
3721
+
3722 for (int j = 0; j < nSysts; ++j) {
+
3723 TraceSystsPlots[j]->Write();
+
3724 delete TraceSystsPlots[j];
+
3725 delete SystValues[j];
+
3726 }
+
3727 delete[] TraceSystsPlots;
+
3728 delete[] SystValues;
+
3729
+
3730 TraceDir->Close();
+
3731 delete TraceDir;
+
3732
+
3733 OutputFile->cd();
+
3734}
+
+
3735
+
3736
+
3737// *********************************
+
3738//KS: Calculate autocoraetlions supports both OpenMP and CUDA :)
+
+ +
3740// *********************************
+
3741
+
3742 if (ParStep == nullptr) PrepareDiagMCMC();
+
3743
+
3744 TStopwatch clock;
+
3745 clock.Start();
+
3746 const int nLags = AutoCorrLag;
+
3747 MACH3LOG_INFO("Making auto-correlations for nLags = {}", nLags);
+
3748
+
3749 // The sum of (Y-Ymean)^2 over all steps for each parameter
+
3750 double **DenomSum = new double*[nDraw]();
+
3751 double **NumeratorSum = new double*[nDraw]();
+
3752 LagL = new double*[nDraw];
+
3753 for (int j = 0; j < nDraw; ++j) {
+
3754 DenomSum[j] = new double[nLags];
+
3755 NumeratorSum[j] = new double[nLags];
+
3756 LagL[j] = new double[nLags];
+
3757 }
+
3758 TH1D** LagKPlots = new TH1D*[nDraw];
+
3759 // Loop over the parameters of interest
+
3760 for (int j = 0; j < nDraw; ++j)
+
3761 {
+
3762 // Loop over each lag
+
3763 for (int k = 0; k < nLags; ++k) {
+
3764 NumeratorSum[j][k] = 0.0;
+
3765 DenomSum[j][k] = 0.0;
+
3766 LagL[j][k] = 0.0;
+
3767 }
+
3768
+
3769 // Make TH1Ds for each parameter which hold the lag
+
3770 TString Title = "";
+
3771 double Prior = 1.0;
+
3772 double PriorError = 1.0;
+
3773
+ +
3775 std::string HistName = Form("%s_%s_Lag", Title.Data(), BranchNames[j].Data());
+
3776 LagKPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nLags, 0.0, nLags);
+
3777 LagKPlots[j]->GetXaxis()->SetTitle("Lag");
+
3778 LagKPlots[j]->GetYaxis()->SetTitle("Auto-correlation function");
+
3779 }
+
3780//KS: If CUDA is not enabled do calculations on CPU
+
3781#ifndef CUDA
+
3782 // Loop over the lags
+
3783 //CW: Each lag is independent so might as well multi-thread them!
+
3784 #ifdef MULTITHREAD
+
3785 std::cout << "Using multi-threading..." << std::endl;
+
3786 #pragma omp parallel for
+
3787 #endif
+
3788 for (int k = 0; k < nLags; ++k) {
+
3789 // Loop over the number of entries
+
3790 for (int i = 0; i < nEntries; ++i) {
+
3791 // Loop over the number of parameters
+
3792 for (int j = 0; j < nDraw; ++j) {
+
3793 const double Diff = ParStep[i][j]-ParamSums[j];
+
3794
+
3795 // Only sum the numerator up to i = N-k
+
3796 if (i < nEntries-k) {
+
3797 const double LagTerm = ParStep[i+k][j]-ParamSums[j];
+
3798 const double Product = Diff*LagTerm;
+
3799 NumeratorSum[j][k] += Product;
+
3800 }
+
3801
+
3802 // Square the difference to form the denominator
+
3803 const double Denom = Diff*Diff;
+
3804 DenomSum[j][k] += Denom;
+
3805 }
+
3806 }
+
3807 }
+
3808#else //NOW GPU specific code
+
3809 std::cout << "Using GPU" << std::endl;
+
3810 //KS: This allocates memory and copy data from CPU to GPU
+ +
3812
+
3813 //KS: This runs the main kernel and copy results back to CPU
+ + + + + + +
3820 DenomSum_cpu);
+
3821
+
3822 #ifdef MULTITHREAD
+
3823 #pragma omp parallel for collapse(2)
+
3824 #endif
+
3825 //KS: Now that that we received data from GPU convert it to CPU-like format
+
3826 for (int j = 0; j < nDraw; ++j)
+
3827 {
+
3828 for (int k = 0; k < nLags; ++k)
+
3829 {
+
3830 const int temp_index = j*nLags+k;
+ + +
3833 }
+
3834 }
+
3835 //delete auxilary variables
+
3836 delete[] NumeratorSum_cpu;
+
3837 delete[] DenomSum_cpu;
+
3838 delete[] ParStep_cpu;
+
3839 delete[] ParamSums_cpu;
+
3840
+
3841 //KS: Delete stuff at GPU as well
+ + + + +
3846 DenomSum_gpu);
+
3847
+
3848//KS: End of GPU specific code
+
3849#endif
+
3850
+
3851 OutputFile->cd();
+
3852 TDirectory *AutoCorrDir = OutputFile->mkdir("Auto_corr");
+
3853 // Now fill the LagK auto-correlation plots
+
3854 for (int j = 0; j < nDraw; ++j) {
+
3855 for (int k = 0; k < nLags; ++k) {
+
3856 LagL[j][k] = NumeratorSum[j][k]/DenomSum[j][k];
+
3857 LagKPlots[j]->SetBinContent(k, NumeratorSum[j][k]/DenomSum[j][k]);
+
3858 }
+
3859 AutoCorrDir->cd();
+
3860 LagKPlots[j]->Write();
+
3861 delete LagKPlots[j];
+
3862 }
+
3863 delete[] LagKPlots;
+
3864
+
3865 //KS: This is different diagnostic however it relies on calucated Lag, thus we call it before we delete LagKPlots
+ +
3867
+
3868 for (int j = 0; j < nDraw; ++j) {
+
3869 delete[] NumeratorSum[j];
+
3870 delete[] DenomSum[j];
+
3871 delete[] LagL[j];
+
3872 }
+
3873 delete[] NumeratorSum;
+
3874 delete[] DenomSum;
+
3875 delete[] LagL;
+
3876 delete[] ParamSums;
+
3877
+
3878 AutoCorrDir->Close();
+
3879 delete AutoCorrDir;
+
3880
+
3881 OutputFile->cd();
+
3882
+
3883 clock.Stop();
+
3884 std::cout << "It took " << clock.RealTime() << std::endl;
+
3885}
+
+
3886
+
3887#ifdef CUDA
+
3888// **************************
+
3889//KS: Allocates memory and copy data from CPU to GPU
+
3890void MCMCProcessor::PrepareGPU_AutoCorr(const int nLags) {
+
3891// **************************
+
3892
+
3893 //KS: Create temproary arrays that will comiunicate with GPU code
+
3894 ParStep_cpu = new float[nDraw*nEntries];
+
3895 NumeratorSum_cpu = new float[nDraw*nLags];
+
3896 DenomSum_cpu = new float[nDraw*nLags];
+
3897 ParamSums_cpu = new float[nDraw];
+
3898
+
3899 #ifdef MULTITHREAD
+
3900 //KS: Open parallel region
+
3901 #pragma omp parallel
+
3902 {
+
3903 #endif
+
3904 //KS: Operations are indepenedt thus we are using nowait close
+
3905 #ifdef MULTITHREAD
+
3906 #pragma omp for nowait
+
3907 #endif
+
3908 for (int i = 0; i < nDraw; ++i)
+
3909 {
+
3910 //KS: We basically need this to convert from double to float for GPU
+ +
3912 }
+
3913
+
3914 #ifdef MULTITHREAD
+
3915 #pragma omp for collapse(2) nowait
+
3916 #endif
+
3917 for (int j = 0; j < nDraw; ++j)
+
3918 {
+
3919 for (int k = 0; k < nLags; ++k)
+
3920 {
+
3921 const int temp = j*nLags+k;
+
3922 NumeratorSum_cpu[temp] = 0.0;
+
3923 DenomSum_cpu[temp] = 0.0;
+
3924 }
+
3925 }
+
3926
+
3927 #ifdef MULTITHREAD
+
3928 #pragma omp for collapse(2)
+
3929 #endif
+
3930 for (int j = 0; j < nDraw; ++j)
+
3931 {
+
3932 for (int i = 0; i < nEntries; ++i)
+
3933 {
+
3934 const int temp = j*nEntries+i;
+
3935 ParStep_cpu[temp] = ParStep[i][j];
+
3936 }
+
3937 }
+
3938 #ifdef MULTITHREAD
+
3939 //KS: End parallel region
+
3940 }
+
3941 #endif
+
3942
+
3943 //KS: First allocate memory on GPU
+ + + +
3947 &DenomSum_gpu,
+
3948
+
3949 nEntries,
+
3950 nDraw,
+
3951 nLags);
+
3952
+
3953
+
3954 //KS: Now copy from CPU to GPU
+ + + + +
3959
+ + + +
3963 DenomSum_gpu);
+
3964}
+
3965#endif
+
3966
+
3967
+
3968// **************************
+
3969// KS: calc Effective Sample Size Following https://mc-stan.org/docs/2_18/reference-manual/effective-sample-size-section.html
+
3970// Furthermore we calculate Sampling efficiency follwing https://kmh-lanl.hansonhub.com/talks/maxent00b.pdf
+
3971// Rule of thumb is to have efficiency above 25%
+
+ +
3973// **************************
+
3974
+
3975 if(LagL == nullptr)
+
3976 {
+
3977 std::cerr<<"Trying to call CalculateESS before LagL was calcauted, this will not work"<<std::endl;
+
3978 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
3979 throw;
+
3980 }
+
3981 std::cout << "Making ESS plots..." << std::endl;
+
3982
+ + +
3985 double *TempDenominator = new double[nDraw]();
+
3986
+
3987 const int Nhists = 5;
+
3988 const double Thresholds[Nhists+1] = {1, 0.02, 0.005, 0.001, 0.0001, 0.0};
+ +
3990
+
3991 //KS: This histogram is inspired by the following: https://mc-stan.org/bayesplot/articles/visual-mcmc-diagnostics.html
+ +
3993 for(int i = 0; i < Nhists; ++i)
+
3994 {
+
3995 EffectiveSampleSizeHist[i] = new TH1D(Form("EffectiveSampleSizeHist_%i",i), Form("EffectiveSampleSizeHist_%i",i), nDraw, 0, nDraw);
+
3996 EffectiveSampleSizeHist[i]->GetYaxis()->SetTitle("N_{eff}/N");
+
3997 EffectiveSampleSizeHist[i]->SetFillColor(ESSColours[i]);
+
3998 EffectiveSampleSizeHist[i]->SetLineColor(ESSColours[i]);
+
3999 for (int j = 0; j < nDraw; ++j)
+
4000 {
+
4001 TString Title = "";
+
4002 double Prior = 1.0;
+
4003 double PriorError = 1.0;
+ +
4005 EffectiveSampleSizeHist[i]->GetXaxis()->SetBinLabel(j+1, Title.Data());
+
4006 }
+
4007 }
+
4008
+
4009 #ifdef MULTITHREAD
+
4010 #pragma omp parallel for
+
4011 #endif
+
4012 //KS: Calculate ESS and MCMC efficiency for each parameter
+
4013 for (int j = 0; j < nDraw; ++j)
+
4014 {
+
4015 (*EffectiveSampleSize)(j) = __UNDEF__;
+
4016 (*SamplingEfficiency)(j) = __UNDEF__;
+
4017 TempDenominator[j] = 0.;
+
4018 //KS: Firs sum over all Calculated autoceralations
+
4019 for (int k = 0; k < nLags; ++k)
+
4020 {
+
4021 TempDenominator[j] += LagL[j][k];
+
4022 }
+ +
4024 (*EffectiveSampleSize)(j) = nEntries/TempDenominator[j];
+
4025 // 100 becasue we convert to percentage
+
4026 (*SamplingEfficiency)(j) = 100 * 1/TempDenominator[j];
+
4027
+
4028 for(int i = 0; i < Nhists; ++i)
+
4029 {
+
4030 EffectiveSampleSizeHist[i]->SetBinContent(j+1, 0);
+
4031 EffectiveSampleSizeHist[i]->SetBinError(j+1, 0);
+
4032
+
4033 const double TempEntry = std::fabs((*EffectiveSampleSize)(j)) / nEntries;
+
4034 if(Thresholds[i] >= TempEntry && TempEntry > Thresholds[i+1])
+
4035 {
+
4036 if( std::isnan((*EffectiveSampleSize)(j)) ) continue;
+
4037 EffectiveSampleSizeHist[i]->SetBinContent(j+1, TempEntry);
+
4038 }
+
4039 }
+
4040 }
+
4041
+
4042 //KS Write to the output tree
+
4043 //Save to file
+
4044 OutputFile->cd();
+
4045 EffectiveSampleSize->Write("EffectiveSampleSize");
+
4046 SamplingEfficiency->Write("SamplingEfficiency");
+
4047
+
4048 EffectiveSampleSizeHist[0]->SetTitle("Effective Sample Size");
+
4049 EffectiveSampleSizeHist[0]->Draw();
+
4050 for(int i = 1; i < Nhists; ++i)
+
4051 {
+
4052 EffectiveSampleSizeHist[i]->Draw("SAME");
+
4053 }
+
4054
+
4055 TLegend *leg = new TLegend(0.2, 0.7, 0.6, 0.95);
+
4056 leg->SetTextSize(0.03);
+
4057 for(int i = 0; i < Nhists; ++i)
+
4058 {
+
4059 leg->AddEntry(EffectiveSampleSizeHist[i], Form("%.4f >= N_{eff}/N > %.4f", Thresholds[i], Thresholds[i+1]), "f");
+
4060 }
+
4061 leg->SetLineColor(0);
+
4062 leg->SetLineStyle(0);
+
4063 leg->SetFillColor(0);
+
4064 leg->SetFillStyle(0);
+
4065 leg->Draw("SAME");
+
4066
+
4067 Posterior->Write("EffectiveSampleSizeCanvas");
+
4068
+
4069 //Delete all variables
+
4070 delete EffectiveSampleSize;
+
4071 delete SamplingEfficiency;
+
4072 for(int i = 0; i < Nhists; ++i)
+
4073 {
+
4074 delete EffectiveSampleSizeHist[i];
+
4075 }
+
4076 delete leg;
+
4077 delete[] EffectiveSampleSizeHist;
+
4078 //KS Remove auxiliary arrays
+
4079 delete[] TempDenominator;
+
4080}
+
+
4081
+
4082// **************************
+
4083//CW: Batched means, literally read from an array and chuck into TH1D
+
+ +
4085// **************************
+
4086
+
4087 if (BatchedAverages == nullptr) PrepareDiagMCMC();
+
4088
+
4089 std::cout << "Making BatchedMeans plots..." << std::endl;
+
4090
+
4091 TH1D ** BatchedParamPlots = new TH1D*[nDraw];
+
4092 for (int j = 0; j < nDraw; ++j) {
+
4093 TString Title = "";
+
4094 double Prior = 1.0;
+
4095 double PriorError = 1.0;
+
4096
+ +
4098
+
4099 std::string HistName = Form("%s_%s_batch", Title.Data(), BranchNames[j].Data());
+
4100 BatchedParamPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nBatches, 0, nBatches);
+
4101 }
+
4102
+
4103 #ifdef MULTITHREAD
+
4104 #pragma omp parallel for
+
4105 #endif
+
4106 for (int j = 0; j < nDraw; ++j) {
+
4107 for (int i = 0; i < nBatches; ++i) {
+
4108 BatchedParamPlots[j]->SetBinContent(i+1, BatchedAverages[i][j]);
+ + +
4111 std::stringstream ss;
+
4112 ss << BatchRangeLow << " - " << BatchRangeHigh;
+
4113 BatchedParamPlots[j]->GetXaxis()->SetBinLabel(i+1, ss.str().c_str());
+
4114 }
+
4115 }
+
4116
+
4117 TDirectory *BatchDir = OutputFile->mkdir("Batched_means");
+
4118 BatchDir->cd();
+
4119 for (int j = 0; j < nDraw; ++j) {
+
4120 TF1 *Fitter = new TF1("Fitter","[0]", 0, nBatches);
+
4121 Fitter->SetLineColor(kRed);
+
4122 BatchedParamPlots[j]->Fit("Fitter","Rq");
+
4123 BatchedParamPlots[j]->Write();
+
4124 delete Fitter;
+
4125 delete BatchedParamPlots[j];
+
4126 }
+
4127 delete[] BatchedParamPlots;
+
4128
+
4129 //KS: Get the batched means variance estimation and variable indicating if number of batches is sensible
+
4130 // We do this before deleting BatchedAverages
+ +
4132
+
4133 for (int i = 0; i < nBatches; ++i) {
+
4134 delete BatchedAverages[i];
+
4135 }
+
4136 delete[] BatchedAverages;
+
4137
+
4138 BatchDir->Close();
+
4139 delete BatchDir;
+
4140
+
4141 OutputFile->cd();
+
4142}
+
+
4143
+
4144// **************************
+
4145// Get the batched means variance estimation and variable indicating if number of batches is sensible
+
+ +
4147// **************************
+
4148
+
4149 if(BatchedAverages == nullptr)
+
4150 {
+
4151 std::cerr<<"BatchedAverages haven't been initialises or have been deleted somehting is wrong"<<std::endl;
+
4152 std::cerr<<"I need it and refuse to go further"<<std::endl;
+
4153 throw;
+
4154 }
+
4155
+
4156 // Calcualte variance estimator using batched means following https://arxiv.org/pdf/1911.00915.pdf see Eq. 1.2
+ +
4158 //KS: The hypothesis is rejected if C > z α for a given confidence level α. If the batch means do not pass the test, Correlated is reported for the half-width on the statistical reports following https://rossetti.github.io/RossettiArenaBook/ch5-BatchMeansMethod.html alternatively for more oldschhol see Alexopoulos and Seila 1998 section 3.4.3
+ +
4160
+
4161 double* OverallBatchMean = new double[nDraw]();
+
4162 double* C_Rho_Nominator = new double[nDraw]();
+
4163 double* C_Rho_Denominator = new double[nDraw]();
+
4164 double* C_Nominator = new double[nDraw]();
+
4165 double* C_Denominator = new double[nDraw]();
+
4166 const int BatchLength = nEntries/nBatches+1;
+
4167//KS: Start parallel region
+
4168#ifdef MULTITHREAD
+
4169#pragma omp parallel
+
4170{
+
4171#endif
+
4172 #ifdef MULTITHREAD
+
4173 #pragma omp for
+
4174 #endif
+
4175 //KS: First calcuate mean of batched means for each param and Initialise everything to 0
+
4176 for (int j = 0; j < nDraw; ++j)
+
4177 {
+
4178 OverallBatchMean[j] = 0.0;
+
4179 C_Rho_Nominator[j] = 0.0;
+
4180 C_Rho_Denominator[j] = 0.0;
+
4181 C_Nominator[j] = 0.0;
+
4182 C_Denominator[j] = 0.0;
+
4183
+
4184 (*BatchedVariance)(j) = 0.0;
+
4185 (*C_Test_Statistics)(j) = 0.0;
+
4186 for (int i = 0; i < nBatches; ++i)
+
4187 {
+ +
4189 }
+ +
4191 }
+
4192
+
4193 #ifdef MULTITHREAD
+
4194 #pragma omp for nowait
+
4195 #endif
+
4196 //KS: next loop is copletely idnepend thus nowait clause
+
4197 for (int j = 0; j < nDraw; ++j)
+
4198 {
+
4199 for (int i = 0; i < nBatches; ++i)
+
4200 {
+
4201 (*BatchedVariance)(j) += (OverallBatchMean[j] - BatchedAverages[i][j])*(OverallBatchMean[j] - BatchedAverages[i][j]);
+
4202 }
+
4203 (*BatchedVariance)(j) = (BatchLength/(nBatches-1))* (*BatchedVariance)(j);
+
4204 }
+
4205
+
4206 //KS: Now we focus on C test statistic, again use nowait as next is calcualtion is independent
+
4207 #ifdef MULTITHREAD
+
4208 #pragma omp for nowait
+
4209 #endif
+
4210 for (int j = 0; j < nDraw; ++j)
+
4211 {
+ + +
4214 for (int i = 0; i < nBatches; ++i)
+
4215 {
+ +
4217 }
+ +
4219 }
+
4220
+
4221 //KS: We still calcualte C and for this we need rho wee need autocorealtion between bathces
+
4222 #ifdef MULTITHREAD
+
4223 #pragma omp for
+
4224 #endif
+
4225 for (int j = 0; j < nDraw; ++j)
+
4226 {
+
4227 for (int i = 0; i < nBatches-1; ++i)
+
4228 {
+ +
4230 }
+
4231
+
4232 for (int i = 0; i < nBatches; ++i)
+
4233 {
+ +
4235 }
+
4236 }
+
4237
+
4238 //KS: Finall calcuations of C
+
4239 #ifdef MULTITHREAD
+
4240 #pragma omp for
+
4241 #endif
+
4242 for (int j = 0; j < nDraw; ++j)
+
4243 {
+
4244 (*C_Test_Statistics)(j) = std::sqrt((nBatches*nBatches - 1)/(nBatches-2)) * ( C_Rho_Nominator[j]/C_Rho_Denominator[j] + C_Nominator[j]/ C_Denominator[j]);
+
4245 }
+
4246#ifdef MULTITHREAD
+
4247} //End parallel region
+
4248#endif
+
4249
+
4250 //Save to file
+
4251 OutputFile->cd();
+
4252 BatchedVariance->Write("BatchedMeansVariance");
+
4253 C_Test_Statistics->Write("C_Test_Statistics");
+
4254
+
4255 //Delete all variables
+
4256 delete BatchedVariance;
+
4257 delete C_Test_Statistics;
+
4258 delete[] OverallBatchMean;
+
4259 delete[] C_Rho_Nominator;
+
4260 delete[] C_Rho_Denominator;
+
4261 delete[] C_Nominator;
+
4262 delete[] C_Denominator;
+
4263}
+
+
4264
+
4265// **************************
+
4266// Geweke Diagnostic based on
+
4267// https://www.math.arizona.edu/~piegorsch/675/GewekeDiagnostics.pdf
+
4268// https://www2.math.su.se/matstat/reports/master/2011/rep2/report.pdf Chapter 3.1
+
+ +
4270// **************************
+
4271
+
4272 std::cout << "Making Geweke Diagnostic "<< std::endl;
+
4273
+
4274 //KS: Up refers to upper limit we check, it stays constnt, in literature it is moslty 50% thus using 0.5 for threshold
+
4275 double* MeanUp = new double[nDraw]();
+
4276 double* SpectralVarianceUp = new double[nDraw]();
+
4277 int* DenomCounterUp = new int[nDraw]();
+
4278 const double Threshold = 0.5 * nSteps;
+
4279
+
4280 //KS: Select values betwen which you want to scan, for example 0 means 0% burn in and 1 100% burn in.
+
4281 const double LowerThreshold = 0;
+
4282 const double UpperThreshold = 1.0;
+
4283 // Tells how many intervals between thresholds we want to check
+
4284 const int NChecks = 100;
+
4285 const double Division = (UpperThreshold - LowerThreshold)/NChecks;
+
4286
+
4287 TH1D** GewekePlots = new TH1D*[nDraw];
+
4288 for (int j = 0; j < nDraw; ++j)
+
4289 {
+
4290 MeanUp[j] = 0;
+
4291 SpectralVarianceUp[j] = 0;
+
4292 DenomCounterUp[j] = 0;
+
4293
+
4294 TString Title = "";
+
4295 double Prior = 1.0;
+
4296 double PriorError = 1.0;
+ +
4298 std::string HistName = Form("%s_%s_Geweke", Title.Data(), BranchNames[j].Data());
+
4299 GewekePlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), NChecks, 0.0, 100*UpperThreshold);
+
4300 GewekePlots[j]->GetXaxis()->SetTitle("Burn-In (%)");
+
4301 GewekePlots[j]->GetYaxis()->SetTitle("Geweke T score");
+
4302 }
+
4303
+
4304//KS: Start parallel region
+
4305#ifdef MULTITHREAD
+
4306#pragma omp parallel
+
4307{
+
4308#endif
+
4309 //KS: First we calcualte mean and spectral variance for the upper limit, this doesn't change and in literature is most often 50%
+
4310 #ifdef MULTITHREAD
+
4311 #pragma omp for
+
4312 #endif
+
4313 for (int j = 0; j < nDraw; ++j)
+
4314 {
+
4315 for(int i = 0; i < nEntries; ++i)
+
4316 {
+
4317 if(StepNumber[i] > Threshold)
+
4318 {
+
4319 MeanUp[j] += ParStep[i][j];
+
4320 DenomCounterUp[j]++;
+
4321 }
+
4322 }
+ +
4324 }
+
4325
+
4326 //KS: now Spectral variance which in this case is sample variance
+
4327 #ifdef MULTITHREAD
+
4328 #pragma omp for collapse(2)
+
4329 #endif
+
4330 for (int j = 0; j < nDraw; ++j)
+
4331 {
+
4332 for(int i = 0; i < nEntries; ++i)
+
4333 {
+
4334 if(StepNumber[i] > Threshold)
+
4335 {
+
4336 SpectralVarianceUp[j] += (ParStep[i][j] - MeanUp[j])*(ParStep[i][j] - MeanUp[j]);
+
4337 }
+
4338 }
+
4339 }
+
4340
+
4341 //Loop over how many intervals we calucate
+
4342 #ifdef MULTITHREAD
+
4343 #pragma omp for
+
4344 #endif
+
4345 for (int k = 1; k < NChecks+1; ++k)
+
4346 {
+
4347 //KS each thread has it't own
+
4348 double* MeanDown = new double[nDraw]();
+
4349 double* SpectralVarianceDown = new double[nDraw]();
+
4350 int* DenomCounterDown = new int[nDraw]();
+
4351
+
4352 //set to 0
+
4353 for (int j = 0; j < nDraw; ++j)
+
4354 {
+
4355 MeanDown[j] = 0;
+ +
4357 DenomCounterDown[j] = 0;
+
4358 }
+
4359
+
4360 const int ThresholsCheck = Division*k*nSteps;
+
4361 //KS: First mean
+
4362 for (int j = 0; j < nDraw; ++j)
+
4363 {
+
4364 for(int i = 0; i < nEntries; ++i)
+
4365 {
+ +
4367 {
+
4368 MeanDown[j] += ParStep[i][j];
+ +
4370 }
+
4371 }
+ +
4373 }
+
4374
+
4375 //Now spectral variance
+
4376 for (int j = 0; j < nDraw; ++j)
+
4377 {
+
4378 for(int i = 0; i < nEntries; ++i)
+
4379 {
+ +
4381 {
+ +
4383 }
+
4384 }
+
4385 }
+
4386 //Lasly calc T score and fill histogram entry
+
4387 for (int j = 0; j < nDraw; ++j)
+
4388 {
+ +
4390
+
4391 GewekePlots[j]->SetBinContent(k, T_score);
+
4392 }
+
4393 //KS: delete for each thread
+
4394 delete[] MeanDown;
+
4395 delete[] SpectralVarianceDown;
+
4396 delete[] DenomCounterDown;
+
4397 } //end loop over intervals
+
4398#ifdef MULTITHREAD
+
4399} //End parallel region
+
4400#endif
+
4401
+
4402 //Finally save it to TFile
+
4403 OutputFile->cd();
+
4404 TDirectory *GewekeDir = OutputFile->mkdir("Geweke");
+
4405 for (int j = 0; j < nDraw; ++j)
+
4406 {
+
4407 GewekeDir->cd();
+
4408 GewekePlots[j]->Write();
+
4409 delete GewekePlots[j];
+
4410 }
+
4411 delete[] GewekePlots;
+
4412
+
4413 //Free memory
+
4414 delete[] MeanUp;
+
4415 delete[] DenomCounterUp;
+
4416 delete[] SpectralVarianceUp;
+
4417
+
4418 for (int i = 0; i < nEntries; ++i) {
+
4419 delete[] ParStep[i];
+
4420 }
+
4421 delete[] ParStep;
+
4422
+
4423 GewekeDir->Close();
+
4424 delete GewekeDir;
+
4425
+
4426 OutputFile->cd();
+
4427}
+
+
4428
+
4429// **************************
+
4430// Acceptance Probability
+
+ +
4432// **************************
+
4433 if (AccProbBatchedAverages == nullptr) PrepareDiagMCMC();
+
4434
+
4435 std::cout << "Making AccProb plots..." << std::endl;
+
4436
+
4437 // Set the titles and limits for TH1Ds
+
4438 TH1D* AcceptanceProbPlot = new TH1D("AcceptanceProbability", "Acceptance Probability", nEntries, 0, nEntries);
+
4439 AcceptanceProbPlot->GetXaxis()->SetTitle("Step");
+
4440 AcceptanceProbPlot->GetYaxis()->SetTitle("Acceptance Probability");
+
4441
+
4442 TH1D* BatchedAcceptanceProblot = new TH1D("AcceptanceProbability_Batch", "AcceptanceProbability_Batch", nBatches, 0, nBatches);
+
4443 BatchedAcceptanceProblot->GetYaxis()->SetTitle("Acceptance Probability");
+
4444
+
4445 for (int i = 0; i < nBatches; ++i) {
+ + + +
4449 std::stringstream ss;
+
4450 ss << BatchRangeLow << " - " << BatchRangeHigh;
+
4451 BatchedAcceptanceProblot->GetXaxis()->SetBinLabel(i+1, ss.str().c_str());
+
4452 }
+
4453
+
4454#ifdef MULTITHREAD
+
4455#pragma omp parallel for
+
4456#endif
+
4457 for (int i = 0; i < nEntries; ++i) {
+
4458 // Set bin content for the ith bin to the parameter values
+
4459 AcceptanceProbPlot->SetBinContent(i, AccProbValues[i]);
+
4460 }
+
4461
+
4462 TDirectory *probDir = OutputFile->mkdir("AccProb");
+
4463 probDir->cd();
+
4464
+
4465 AcceptanceProbPlot->Write();
+
4466 BatchedAcceptanceProblot->Write();
+
4467
+
4468 delete AcceptanceProbPlot;
+ +
4470 delete[] AccProbValues;
+
4471 delete[] AccProbBatchedAverages;
+
4472
+
4473 probDir->Close();
+
4474 delete probDir;
+
4475
+
4476 OutputFile->cd();
+
4477
+
4478}
+
+
int size
+
std::vector< std::string > ParamNames
+
int FDParameters
+
int OscParametersStartingPos
+
int CrossSectionParameters
+
int OscParameters
+
int FDParametersStartingPos
+
int NDParametersStartingPos
+
int NDParameters
+
int FluxParameters
+ +
#define __UNDEF__
+
ParameterEnum
+
@ kOSCPar
+
@ kNDPar
+
@ kXSecPar
+
@ kNParameterEnum
+
@ kFDDetPar
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
TChain * Chain
Definition RHat.cpp:38
+
double * EffectiveSampleSize
Definition RHat.cpp:57
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + + + + +
TMatrixDSym * Correlation
+
void MakeViolin()
Make and Draw Violin.
+
void MakeCredibleIntervals()
Make and Draw Credible intervals.
+ +
double ** ParStep
+ +
void GetGaussian(TH1D *&hpost, const int i)
+
std::vector< Style_t > Credible_RegionStyle
+
std::string GetDunneKaboth(const double BayesFactor)
+
void MakeCredibleRegions()
Make and Draw Credible Regions.
+
void Initialise()
Scan chain, what parameters we have and load information from covariance matrices.
+ + +
double Post2DPlotThreshold
+
void AcceptanceProbabilities()
+
std::vector< std::string > NDSamplesNames
+
void GetNthParameter(const int param, double &Prior, double &PriorError, TString &Title)
+
double ** SampleValues
+ + +
std::vector< bool > IsXsec
+ + +
TVectorD * Means_HPD
+
void ResetHistograms()
Reset 2D posteriors, in case we would like to calculate in again with different BurnInCut.
+
std::vector< TString > SampleName_v
+ +
std::vector< std::vector< double > > ParamCentral
+
std::vector< std::vector< double > > ParamErrors
+
void GetPolarPlot(std::vector< std::string > ParNames)
Make funny polar plot.
+
std::string OutputName
+ +
std::vector< int > nParam
+
std::vector< double > Credible_Regions
+ + +
std::vector< std::vector< bool > > ParamFlat
+
std::vector< std::vector< double > > ParamNom
+
double ** SystValues
+ +
TVectorD * Errors
+
double * AccProbBatchedAverages
+ +
void GetHPD(TH1D *const hpost, const int i, const double coverage=0.6827)
+
std::string StepCut
+
void GetPostfit_Ind(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Peaks, ParameterEnum kParam)
Or the individual post-fits.
+ +
void GetPostfit(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Central_Gauss, TVectorD *&Errors_Gauss, TVectorD *&Peaks)
Get the post-fit results (arithmetic and Gaussian)
+
TVectorD * Means_Gauss
+ + + + +
void SetStepCut(std::string Cuts)
+ + +
std::string MCMCFile
+
std::string GetJeffreysScale(const double BayesFactor)
+
std::vector< std::string > ExcludedNames
+
int GetParamIndexFromName(const std::string Name)
+
TVectorD * Errors_HPD_Negative
+
std::vector< std::vector< std::string > > CovPos
+
double * ParamSums
+
void DiagMCMC()
KS: Perform MCMC diagnostic including AutoCorrelation, Trace etc.
+
TCanvas * Posterior
+
void GetCredibleRegion(TH2D *hpost, const double coverage=0.6827)
+
std::string Posterior1DCut
+
void MakePostfit()
Make 1D projection for each parameter and prepare structure.
+
void GetArithmetic(TH1D *const hpost, const int i)
+
MCMCProcessor(const std::string &InputFile, bool MakePostfitCorr)
+
double * AccProbValues
+ +
void DrawCovariance()
Draw the post-fit covariances.
+
void GetCredibleInterval(TH1D *const hpost, TH1D *hpost_copy, const double coverage=0.6827)
+ + + +
std::vector< bool > IamVaried
+ +
double GetSigmaValue(int sigma)
+ +
std::string OutputSuffix
+ + + + +
TVectorD * Errors_Gauss
+
std::vector< ParameterEnum > ParamType
+
TVectorD * Central_Value
+
std::vector< std::string > ExcludedTypes
+ +
void GetBayesFactor(std::vector< std::string > ParName, std::vector< std::vector< double > > Model1Bounds, std::vector< std::vector< double > > Model2Bounds, std::vector< std::vector< std::string > > ModelNames)
+
std::vector< double > Credible_Intervals
+
void MakeTrianglePlot(std::vector< std::string > ParamNames)
Make fancy triangle plot for selected parameters.
+
double ** BatchedAverages
+
void DrawPostfit()
Draw the post-fit comparisons.
+ +
std::vector< Color_t > Credible_IntervalsColours
+
void ReweightPrior(std::vector< std::string > Names, std::vector< double > NewCentral, std::vector< double > NewError)
+
TVectorD * Errors_HPD
+
std::vector< Color_t > Credible_RegionColor
+
void GetCovariance(TMatrixDSym *&Cov, TMatrixDSym *&Corr)
Get the post-fit covariances and correlations.
+
TVectorD * Means
+
std::vector< TString > SystName_v
+
void CacheSteps()
KS:By caching each step we use multithreading.
+ +
std::vector< TString > BranchNames
+ + + + +
std::vector< std::vector< TString > > ParamNames
+ + + +
std::vector< int > NDSamplesBins
+ + +
std::vector< int > ParamTypeStartPos
+ + +
void GetSavageDickey(std::vector< std::string > ParName, std::vector< double > EvaluationPoint, std::vector< std::vector< double > > Bounds)
+ + + +
void CalculateESS(const int nLags)
+ +
TVectorD * Errors_HPD_Positive
+
TMatrixDSym * Covariance
+ +
void MakeCovariance()
Calculate covariance by making 2D projection of each combination of parameters.
+ +
void EstimateDataTransferRate(TChain *chain, const int entry)
Definition Monitor.cpp:114
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
void GetCPUInfo()
Definition Monitor.cpp:53
+
void GetGPUInfo()
Definition Monitor.cpp:76
+
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.
Definition Monitor.cpp:6
+
+ + + + diff --git a/MCMCProcessor_8h.html b/MCMCProcessor_8h.html new file mode 100644 index 00000000..f08ce7b5 --- /dev/null +++ b/MCMCProcessor_8h.html @@ -0,0 +1,205 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MCMCProcessor.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
MCMCProcessor.h File Reference
+
+
+
#include <iostream>
+#include <sstream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include <cmath>
+#include "TObjArray.h"
+#include "TObjString.h"
+#include "TChain.h"
+#include "TFile.h"
+#include "TBranch.h"
+#include "TCanvas.h"
+#include "TLine.h"
+#include "TLegend.h"
+#include "TString.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TF1.h"
+#include "TH2Poly.h"
+#include "TGraphErrors.h"
+#include "TVectorD.h"
+#include "TColor.h"
+#include "TStyle.h"
+#include "TStopwatch.h"
+#include "TText.h"
+#include "TGaxis.h"
+#include "TTree.h"
+#include "TROOT.h"
+#include "TKey.h"
+#include "TRandom3.h"
+#include "TGraphPolar.h"
+#include "TMath.h"
+#include "samplePDF/Structs.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  MCMCProcessor
 
+ + + +

+Macros

#define __UNDEF__   1234567890
 
+ + + +

+Enumerations

enum  ParameterEnum {
+  kXSecPar = 0 +, kNDPar = 1 +, kFDDetPar = 2 +, kOSCPar = 3 +,
+  kNParameterEnum = 4 +
+ }
 
+

Macro Definition Documentation

+ +

◆ __UNDEF__

+ +
+
+ + + + +
#define __UNDEF__   1234567890
+
+ +

Definition at line 4 of file MCMCProcessor.h.

+ +
+
+

Enumeration Type Documentation

+ +

◆ ParameterEnum

+ +
+
+ + + + +
enum ParameterEnum
+
+ + + + + + +
Enumerator
kXSecPar 
kNDPar 
kFDDetPar 
kOSCPar 
kNParameterEnum 
+ +

Definition at line 57 of file MCMCProcessor.h.

+
57 {
+
58 kXSecPar = 0, //KS: This hold both xsec and flux
+
59 kNDPar = 1,
+
60 kFDDetPar = 2,
+
61 kOSCPar = 3,
+
62
+
63 kNParameterEnum = 4 //KS: keep it at the end to keep track of all parameters
+
64};
+
@ kOSCPar
+
@ kNDPar
+
@ kXSecPar
+
@ kNParameterEnum
+
@ kFDDetPar
+
+
+
+
+ + + + diff --git a/MCMCProcessor_8h_source.html b/MCMCProcessor_8h_source.html new file mode 100644 index 00000000..5a41a21f --- /dev/null +++ b/MCMCProcessor_8h_source.html @@ -0,0 +1,680 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MCMCProcessor.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MCMCProcessor.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#ifndef __UNDEF__
+
4#define __UNDEF__ 1234567890
+
5#endif
+
6// C++ includes
+
7#include <iostream>
+
8#include <sstream>
+
9#include <iomanip>
+
10#include <vector>
+
11#include <algorithm>
+
12#include <cmath>
+
13
+
14// ROOT includes
+
15#include "TObjArray.h"
+
16#include "TObjString.h"
+
17#include "TChain.h"
+
18#include "TFile.h"
+
19#include "TBranch.h"
+
20#include "TCanvas.h"
+
21#include "TLine.h"
+
22#include "TLegend.h"
+
23#include "TString.h"
+
24#include "TH1.h"
+
25#include "TH2.h"
+
26#include "TF1.h"
+
27#include "TH2Poly.h"
+
28#include "TGraphErrors.h"
+
29#include "TVectorD.h"
+
30#include "TColor.h"
+
31#include "TStyle.h"
+
32#include "TStopwatch.h"
+
33#include "TText.h"
+
34#include "TGaxis.h"
+
35#include "TObjString.h"
+
36#include "TTree.h"
+
37#include "TROOT.h"
+
38#include "TKey.h"
+
39#include "TRandom3.h"
+
40#include "TGraphPolar.h"
+
41#include "TMath.h"
+
42
+
43#include "samplePDF/Structs.h"
+
44#include "manager/manager.h"
+
45
+
46
+
47// Class to process MCMC output produced by mcmc::runMCMC
+
48// Useful for when we want to extract values from a previous MCMC
+
49// and want to send off another MCMC with those values, or perhaps to LLH scans at central values
+
50// Mostly taken from nd280_utils/DrawComp.cpp
+
51//
+
52// Return: Postfit parameters, Postfit covariance matrix
+
53//
+
54// Make LLH scans around output
+
55
+
56//KS: Enum for different covariance classes
+
+ +
58 kXSecPar = 0, //KS: This hold both xsec and flux
+
59 kNDPar = 1,
+ + +
62
+
63 kNParameterEnum = 4 //KS: keep it at the end to keep track of all parameters
+
64};
+
+
65
+
+ +
67 public:
+
68 MCMCProcessor(const std::string &InputFile, bool MakePostfitCorr);
+ +
70
+
72 void Initialise();
+
74 void MakePostfit();
+
76 void MakeCovariance();
+
78 void CacheSteps();
+
79 void MakeCovariance_MP();
+
81 void ResetHistograms();
+
82
+
84 void DrawPostfit();
+
86 void MakeViolin();
+ +
90 void DrawCovariance();
+ +
94 void MakeTrianglePlot(std::vector<std::string> ParamNames);
+
96 void GetPolarPlot(std::vector<std::string> ParNames);
+
97
+
98 //Bayesian statistic hypothesis testing
+
99 void GetBayesFactor(std::vector<std::string> ParName, std::vector<std::vector<double>> Model1Bounds, std::vector<std::vector<double>> Model2Bounds, std::vector<std::vector<std::string>> ModelNames);
+
100 void GetSavageDickey(std::vector<std::string> ParName, std::vector<double> EvaluationPoint, std::vector<std::vector<double>> Bounds);
+
101 void ReweightPrior(std::vector<std::string> Names, std::vector<double> NewCentral, std::vector<double> NewError);
+
102
+
104 void DiagMCMC();
+
105
+
106 // Get the number of parameters
+
107 inline int GetNParams() { return nDraw; };
+
108 inline int GetNFlux() { return nFlux; };
+
109 inline int GetNXSec() { return nParam[kXSecPar]; };
+
110 inline int GetNND() { return nParam[kNDPar]; };
+
111 inline int GetNFD() { return nParam[kFDDetPar]; };
+
112 inline int GetOSC() { return nParam[kOSCPar]; };
+
113
+
114 //Posterior getters
+
115 inline TH1D* GetHpost(const int i) { return hpost[i]; };
+
116 inline TH2D* GetHpost2D(const int i, const int j) { return hpost2D[i][j]; };
+
117 inline TH2D* GetViolin() { return hviolin; };
+
118 inline TH2D* GetViolinPrior() { return hviolin_prior; };
+
119
+
120 //Covariance getters
+
121 inline std::vector<std::string> const & GetXSecCov() const { return CovPos[kXSecPar]; };
+
122 inline std::string const & GetNDCov() const { return CovPos[kNDPar].back(); };
+
123 inline std::string const & GetFDCov() const { return CovPos[kFDDetPar].back(); };
+
124 inline std::string const & GetOscCov() const { return CovPos[kOSCPar].back(); };
+
125 //inline std::string const & GetNDruns() const { return NDruns; };
+
126 //inline std::vector<std::string> const & GetNDsel() const {return NDsel;};
+
127
+ + + +
134
+
135 // Get the vector of branch names
+
136 const std::vector<TString>& GetBranchNames() const { return BranchNames;};
+
137 //Getters
+
138 void GetNthParameter(const int param, double &Prior, double &PriorError, TString &Title);
+
139 int GetParamIndexFromName(const std::string Name);
+
140 inline int GetnEntries(){return nEntries;};
+
141 inline int GetnSteps(){return nSteps;};
+
142
+
143 //KS: Many setters which in future will be loaded via config
+
144 // Set the step cutting
+
145 // Either by string
+
146 void SetStepCut(std::string Cuts);
+
147 // Or by int
+
148 void SetStepCut(const int Cuts);
+
149
+
150 //Setter related to plotting
+ +
152 inline void SetPrintToPDF(const bool PlotOrNot){printToPDF = PlotOrNot; };
+ +
154 inline void SetPlotBinValue(const bool PlotOrNot){plotBinValue = PlotOrNot; };
+
155 inline void SetFancyNames(const bool PlotOrNot){FancyPlotNames = PlotOrNot; };
+
156 inline void SetSmoothing(const bool PlotOrNot){ApplySmoothing = PlotOrNot; };
+
157 //Code will only plot 2D posteriors if Correlation are larger than defined threshold
+ +
159
+
160 //Setter related what parameters we want to exclude from analysis
+
161 inline void SetExcludedTypes(std::vector<std::string> Name){ExcludedTypes = Name; };
+
162 inline void SetExcludedNames(std::vector<std::string> Name){ExcludedNames = Name; };
+
163
+
164 //DiagMCMC-related setter
+
165 inline void SetnBatches(const int Batches){nBatches = Batches; };
+
166 inline void SetnLags(const int nLags){AutoCorrLag = nLags; };
+
167
+
168 inline void SetOutputSuffix(const std::string Suffix){OutputSuffix = Suffix; };
+
169 inline void SetPosterior1DCut(const std::string Cut){Posterior1DCut = Cut; };
+
170
+
171 //Setter related to Credible Intervals or Regions
+
+
172 inline void SetCredibleIntervals(std::vector<double> Intervals)
+
173 {
+
174 if(Intervals.size() > 1)
+
175 {
+
176 for(unsigned int i = 1; i < Intervals.size(); i++ )
+
177 {
+
178 if(Intervals[i] > Intervals[i-1])
+
179 {
+
180 std::cerr<<" Interval "<<i<<" is smaller than "<<i-1<<std::endl;
+
181 std::cerr<<Intervals[i] <<" "<<Intervals[i-1]<<std::endl;
+
182 std::cerr<<" They should be grouped in decreasing order"<<std::endl;
+
183 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
184 throw;
+
185 }
+
186 }
+
187 }
+ +
189 };
+
+ +
191
+
+
192 inline void SetCredibleRegions(std::vector<double> Intervals)
+
193 {
+
194 if(Intervals.size() > 1)
+
195 {
+
196 for(unsigned int i = 1; i < Intervals.size(); i++ )
+
197 {
+
198 if(Intervals[i] > Intervals[i-1])
+
199 {
+
200 std::cerr<<" Interval "<<i<<" is smaller than "<<i-1<<std::endl;
+
201 std::cerr<<Intervals[i] <<" "<<Intervals[i-1]<<std::endl;
+
202 std::cerr<<" They should be grouped in decreasing order"<<std::endl;
+
203 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
204 throw;
+
205 }
+
206 }
+
207 }
+ +
209 };
+
+
210 inline void SetCredibleRegionStyle(std::vector<Style_t> Intervals){Credible_RegionStyle = Intervals; };
+
211 inline void SetCredibleRegionColor(std::vector<Color_t> Intervals){Credible_RegionColor = Intervals; };
+ +
213
+
214 private:
+
215 inline TH1D* MakePrefit();
+
216 inline void MakeOutputFile();
+
217 inline void DrawCorrelations1D();
+
218
+
219 // Read Matrices
+
220 inline void ReadInputCov();
+
221 inline void FindInputFiles();
+
222 inline void ReadXSecFile();
+
223 inline void ReadNDFile();
+
224 inline void ReadFDFile();
+
225 inline void ReadOSCFile();
+
226 inline void RemoveParameters();
+
227
+
228 // Scan Input etc.
+
229 inline void ScanInput();
+
230 inline void ScanParameterOrder();
+
231 inline void SetupOutput();
+
232
+
233 //Analyse posterior distribution
+
234 inline void GetArithmetic(TH1D * const hpost, const int i);
+
235 inline void GetGaussian(TH1D *& hpost, const int i);
+
236 inline void GetHPD(TH1D * const hpost, const int i, const double coverage = 0.6827);
+
237 inline void GetCredibleInterval(TH1D* const hpost, TH1D* hpost_copy, const double coverage = 0.6827);
+
238 inline void GetCredibleRegion(TH2D* hpost, const double coverage = 0.6827);
+
239 inline std::string GetJeffreysScale(const double BayesFactor);
+
240 inline std::string GetDunneKaboth(const double BayesFactor);
+
241 inline double GetSigmaValue(int sigma);
+
242
+
243 // MCMC Diagnostic
+
244 inline void PrepareDiagMCMC();
+
245 inline void ParamTraces();
+
246 inline void AutoCorrelation();
+
247 inline void CalculateESS(const int nLags);
+
248 inline void BatchedAnalysis();
+
249 inline void BatchedMeans();
+
250 inline void GewekeDiagnostic();
+
251 inline void AcceptanceProbabilities();
+
252
+
253 //Useful strings telling us about output etc
+
254 std::string MCMCFile;
+
255 std::string OutputSuffix;
+
256 // Covariance matrix name position
+
257 std::vector<std::vector<std::string>> CovPos;
+
258 // ND runs
+
259 //std::string NDruns;
+
260 // ND selections
+
261 //std::vector<std::string> NDsel;
+
262
+
263 //Main chain storing all steps etc
+ +
265 //BurnIn Cuts
+
266 std::string StepCut;
+
267 std::string Posterior1DCut;
+ + +
270 //KS: For merged chains number of entries will be different from nSteps
+ + + + +
275
+
276 //Name of all branches as well as branches we don't want to incldue in the analysis
+
277 std::vector<TString> BranchNames;
+
278 std::vector<std::string> ExcludedTypes;
+
279 std::vector<std::string> ExcludedNames;
+
280
+
281 //Number of all parameters used in the analysis
+
282 int nDraw;
+
283
+
284 // Is the ith parameter varied
+
285 std::vector<bool> IamVaried;
+
286 std::vector<std::vector<TString>> ParamNames;
+
287 std::vector<std::vector<double>> ParamCentral;
+
288 std::vector<std::vector<double>> ParamNom;
+
289 std::vector<std::vector<double>> ParamErrors;
+
290 std::vector<std::vector<bool>> ParamFlat;
+
291 //Number of parameters per type
+
292 std::vector<int> nParam;
+
293 // Make an enum for which class this parameter belongs to so we don't have to keep string comparing
+
294 std::vector<ParameterEnum> ParamType;
+
295 //KS: in MCMC output there is order of parameters so for example first goes xsec then nd det etc.
+
296 //Idea is that this paraemter will keep track of it so code is flexible
+
297 std::vector<int> ParamTypeStartPos;
+
298
+
299 //In XsecMatrix we have both xsec and flux parameters, this is just for some ploting options
+
300 std::vector<bool> IsXsec;
+
301 int nFlux; // This keep number of Flux params in xsec matrix
+
302
+
303 // Vector of each systematic
+
304 std::vector<TString> SampleName_v;
+
305 std::vector<TString> SystName_v;
+
306
+
307 std::string OutputName;
+ +
309
+
310 //Plotting flags
+ + + + +
315
+
316 //Even more flags
+ + + + + +
322 bool plotBinValue; //If true it will print value on each bin of covariance matrix
+ +
324 //KS: If true credible stuff is done in sigmas not %
+ +
326 //KS: Set Threshold when to plot 2D posterior as by default we get a LOT of plots
+ +
328
+
329 std::vector< int > NDSamplesBins;
+
330 std::vector< std::string > NDSamplesNames;
+
331
+
332 // Gaussian fitter
+ +
334
+
335 // The output file
+ +
337
+
338 //Fancy canvas used for our beautiful plots
+ +
340
+
341 //Vector of best fit points and errors obtained with different methods
+ + + + + + + + + +
351
+ + +
354
+
355 // Holds Posterior Distributions
+ + + + +
360
+
361 double** ParStep;
+ +
363
+
364 // Number of bins
+
365 int nBins;
+
366 // Drawrange for SetMaximum
+
367 double DrawRange;
+
368
+
369 //Flags related with MCMC diagnostic
+ + +
372
+
373 //Number of batches and LagL used in MCMC diagnostic
+ + +
376
+
377 // Holds all the parameter variations
+
378 double *ParamSums;
+ +
380 double **LagL;
+
381
+
382 // Holds the sample values
+
383 double **SampleValues;
+
384 // Holds the systs values
+
385 double **SystValues;
+
386
+
387 // Holds all accProb
+ + +
390
+
391 //Only if GPU is enabled
+
392 #ifdef CUDA
+
393 inline void PrepareGPU_AutoCorr(const int nLags);
+
394
+
395 float* ParStep_cpu;
+
396 float* NumeratorSum_cpu;
+
397 float* ParamSums_cpu;
+
398 float* DenomSum_cpu;
+
399
+
400 float* ParStep_gpu;
+
401 float* NumeratorSum_gpu;
+
402 float* ParamSums_gpu;
+
403 float* DenomSum_gpu;
+
404 #endif
+
405
+
406 //KS: Credible Intervals/Regions related
+
407 std::vector<double> Credible_Intervals;
+
408 std::vector<Color_t> Credible_IntervalsColours;
+
409
+
410 std::vector<double> Credible_Regions;
+
411 std::vector<Style_t> Credible_RegionStyle;
+
412 std::vector<Color_t> Credible_RegionColor;
+
413};
+
+
ParameterEnum
+
@ kOSCPar
+
@ kNDPar
+
@ kXSecPar
+
@ kNParameterEnum
+
@ kFDDetPar
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + + + + + +
TMatrixDSym * Correlation
+
TH2D * GetViolinPrior()
+
void MakeViolin()
Make and Draw Violin.
+
void MakeCredibleIntervals()
Make and Draw Credible intervals.
+ +
double ** ParStep
+
void SetExcludedNames(std::vector< std::string > Name)
+
std::string const & GetFDCov() const
+ +
void GetGaussian(TH1D *&hpost, const int i)
+
void SetnLags(const int nLags)
+
std::vector< Style_t > Credible_RegionStyle
+
std::string GetDunneKaboth(const double BayesFactor)
+
void MakeCredibleRegions()
Make and Draw Credible Regions.
+
void Initialise()
Scan chain, what parameters we have and load information from covariance matrices.
+ + +
double Post2DPlotThreshold
+
void AcceptanceProbabilities()
+
std::vector< std::string > NDSamplesNames
+
void GetNthParameter(const int param, double &Prior, double &PriorError, TString &Title)
+
double ** SampleValues
+ + +
std::vector< bool > IsXsec
+
void SetOutputSuffix(const std::string Suffix)
+ +
void SetCredibleRegions(std::vector< double > Intervals)
+ +
TVectorD * Means_HPD
+
void ResetHistograms()
Reset 2D posteriors, in case we would like to calculate in again with different BurnInCut.
+
std::vector< TString > SampleName_v
+ +
const std::vector< TString > & GetBranchNames() const
+
std::vector< std::vector< double > > ParamCentral
+
std::vector< std::vector< double > > ParamErrors
+
void GetPolarPlot(std::vector< std::string > ParNames)
Make funny polar plot.
+
std::string OutputName
+ +
std::vector< int > nParam
+
void SetExcludedTypes(std::vector< std::string > Name)
+
std::vector< double > Credible_Regions
+ + +
std::vector< std::vector< bool > > ParamFlat
+
void SetSmoothing(const bool PlotOrNot)
+
std::vector< std::vector< double > > ParamNom
+
double ** SystValues
+
TH2D * GetViolin()
+ +
TVectorD * Errors
+
double * AccProbBatchedAverages
+ +
void GetHPD(TH1D *const hpost, const int i, const double coverage=0.6827)
+
std::string StepCut
+
void SetCredibleIntervals(std::vector< double > Intervals)
+
void GetPostfit_Ind(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Peaks, ParameterEnum kParam)
Or the individual post-fits.
+ +
void SetnBatches(const int Batches)
+
void GetPostfit(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Central_Gauss, TVectorD *&Errors_Gauss, TVectorD *&Peaks)
Get the post-fit results (arithmetic and Gaussian)
+
TVectorD * Means_Gauss
+ + +
void SetPosterior1DCut(const std::string Cut)
+ + + +
void SetStepCut(std::string Cuts)
+ + + +
std::string MCMCFile
+
void SetPlotRelativeToPrior(const bool PlotOrNot)
+
TH1D * GetHpost(const int i)
+
std::string GetJeffreysScale(const double BayesFactor)
+
std::vector< std::string > ExcludedNames
+
TH2D * GetHpost2D(const int i, const int j)
+
int GetParamIndexFromName(const std::string Name)
+
TVectorD * Errors_HPD_Negative
+
std::vector< std::vector< std::string > > CovPos
+
void SetCredibleRegionColor(std::vector< Color_t > Intervals)
+
double * ParamSums
+
void SetFancyNames(const bool PlotOrNot)
+
void DiagMCMC()
KS: Perform MCMC diagnostic including AutoCorrelation, Trace etc.
+ +
TCanvas * Posterior
+
void GetCredibleRegion(TH2D *hpost, const double coverage=0.6827)
+
std::string Posterior1DCut
+
void MakePostfit()
Make 1D projection for each parameter and prepare structure.
+
void GetArithmetic(TH1D *const hpost, const int i)
+
double * AccProbValues
+ +
void DrawCovariance()
Draw the post-fit covariances.
+
void GetCredibleInterval(TH1D *const hpost, TH1D *hpost_copy, const double coverage=0.6827)
+ + + +
std::string const & GetNDCov() const
+
std::vector< bool > IamVaried
+ +
double GetSigmaValue(int sigma)
+
void SetPrintToPDF(const bool PlotOrNot)
+ +
std::string OutputSuffix
+ + + + +
TVectorD * Errors_Gauss
+
std::vector< ParameterEnum > ParamType
+
TVectorD * Central_Value
+
std::vector< std::string > ExcludedTypes
+ +
void GetBayesFactor(std::vector< std::string > ParName, std::vector< std::vector< double > > Model1Bounds, std::vector< std::vector< double > > Model2Bounds, std::vector< std::vector< std::string > > ModelNames)
+
std::vector< double > Credible_Intervals
+
void MakeTrianglePlot(std::vector< std::string > ParamNames)
Make fancy triangle plot for selected parameters.
+
double ** BatchedAverages
+
void DrawPostfit()
Draw the post-fit comparisons.
+ +
void SetPost2DPlotThreshold(const double Threshold)
+
std::vector< Color_t > Credible_IntervalsColours
+
void ReweightPrior(std::vector< std::string > Names, std::vector< double > NewCentral, std::vector< double > NewError)
+
TVectorD * Errors_HPD
+
std::vector< std::string > const & GetXSecCov() const
+
void SetCredibleIntervalsColours(std::vector< Color_t > Intervals)
+
std::string const & GetOscCov() const
+
std::vector< Color_t > Credible_RegionColor
+
void GetCovariance(TMatrixDSym *&Cov, TMatrixDSym *&Corr)
Get the post-fit covariances and correlations.
+
TVectorD * Means
+
std::vector< TString > SystName_v
+
void CacheSteps()
KS:By caching each step we use multithreading.
+ + +
std::vector< TString > BranchNames
+ + + + + + + +
void SetPlotErrorForFlatPrior(const bool PlotOrNot)
+
std::vector< std::vector< TString > > ParamNames
+ + + + +
std::vector< int > NDSamplesBins
+ + +
std::vector< int > ParamTypeStartPos
+
void SetCredibleRegionStyle(std::vector< Style_t > Intervals)
+ +
void SetPlotBinValue(const bool PlotOrNot)
+ +
void GetSavageDickey(std::vector< std::string > ParName, std::vector< double > EvaluationPoint, std::vector< std::vector< double > > Bounds)
+ + + +
void CalculateESS(const int nLags)
+
void SetCredibleInSigmas(const bool Intervals)
+ + +
TVectorD * Errors_HPD_Positive
+
TMatrixDSym * Covariance
+ +
void MakeCovariance()
Calculate covariance by making 2D projection of each combination of parameters.
+ + +
+ + + + diff --git a/MaCh3Logger_8h.html b/MaCh3Logger_8h.html new file mode 100644 index 00000000..30caccb3 --- /dev/null +++ b/MaCh3Logger_8h.html @@ -0,0 +1,266 @@ + + + + + + + +MaCh3: /github/workspace/manager/MaCh3Logger.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
MaCh3Logger.h File Reference
+
+
+
#include "spdlog/spdlog.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + +

+Macros

#define MACH3LOG_TRACE   SPDLOG_TRACE
 
#define MACH3LOG_DEBUG   SPDLOG_DEBUG
 
#define MACH3LOG_INFO   SPDLOG_INFO
 
#define MACH3LOG_WARN   SPDLOG_WARN
 
#define MACH3LOG_ERROR   SPDLOG_ERROR
 
#define MACH3LOG_CRITICAL   SPDLOG_CRITICAL
 
#define MACH3LOG_OFF   SPDLOG_OFF
 
+ + + +

+Functions

void SetMaCh3LoggerFormat ()
 
+

Macro Definition Documentation

+ +

◆ MACH3LOG_CRITICAL

+ +
+
+ + + + +
#define MACH3LOG_CRITICAL   SPDLOG_CRITICAL
+
+ +

Definition at line 12 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_DEBUG

+ +
+
+ + + + +
#define MACH3LOG_DEBUG   SPDLOG_DEBUG
+
+ +

Definition at line 8 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_ERROR

+ +
+
+ + + + +
#define MACH3LOG_ERROR   SPDLOG_ERROR
+
+ +

Definition at line 11 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_INFO

+ +
+
+ + + + +
#define MACH3LOG_INFO   SPDLOG_INFO
+
+ +

Definition at line 9 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_OFF

+ +
+
+ + + + +
#define MACH3LOG_OFF   SPDLOG_OFF
+
+ +

Definition at line 13 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_TRACE

+ +
+
+ + + + +
#define MACH3LOG_TRACE   SPDLOG_TRACE
+
+ +

Definition at line 7 of file MaCh3Logger.h.

+ +
+
+ +

◆ MACH3LOG_WARN

+ +
+
+ + + + +
#define MACH3LOG_WARN   SPDLOG_WARN
+
+ +

Definition at line 10 of file MaCh3Logger.h.

+ +
+
+

Function Documentation

+ +

◆ SetMaCh3LoggerFormat()

+ +
+
+ + + + + +
+ + + + + + + +
void SetMaCh3LoggerFormat ()
+
+inline
+
+ +

Definition at line 16 of file MaCh3Logger.h.

+
17{
+
18 //KS: %H for hour, %M for minute, %S for second, [%s:%#] for class and line
+
19 //For documentation see https://github.com/gabime/spdlog/wiki/3.-Custom-formatting
+
20 #ifdef DEBUG
+
21 spdlog::set_pattern("[%H:%M:%S][%s:%#][%^%l%$] %v");
+
22 #else
+
23 spdlog::set_pattern("[%H:%M:%S][%s][%^%l%$] %v");
+
24 #endif
+
25}
+
+
+
+
+ + + + diff --git a/MaCh3Logger_8h_source.html b/MaCh3Logger_8h_source.html new file mode 100644 index 00000000..822bee7a --- /dev/null +++ b/MaCh3Logger_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +MaCh3: /github/workspace/manager/MaCh3Logger.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MaCh3Logger.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "spdlog/spdlog.h"
+
4
+
5//KS: Based on this https://github.com/gabime/spdlog/blob/a2b4262090fd3f005c2315dcb5be2f0f1774a005/include/spdlog/spdlog.h#L284
+
6
+
7#define MACH3LOG_TRACE SPDLOG_TRACE
+
8#define MACH3LOG_DEBUG SPDLOG_DEBUG
+
9#define MACH3LOG_INFO SPDLOG_INFO
+
10#define MACH3LOG_WARN SPDLOG_WARN
+
11#define MACH3LOG_ERROR SPDLOG_ERROR
+
12#define MACH3LOG_CRITICAL SPDLOG_CRITICAL
+
13#define MACH3LOG_OFF SPDLOG_OFF
+
14
+
15
+
+ +
17{
+
18 //KS: %H for hour, %M for minute, %S for second, [%s:%#] for class and line
+
19 //For documentation see https://github.com/gabime/spdlog/wiki/3.-Custom-formatting
+
20 #ifdef DEBUG
+
21 spdlog::set_pattern("[%H:%M:%S][%s:%#][%^%l%$] %v");
+
22 #else
+
23 spdlog::set_pattern("[%H:%M:%S][%s][%^%l%$] %v");
+
24 #endif
+
25}
+
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
+ + + + diff --git a/MinuitFit_8cpp.html b/MinuitFit_8cpp.html new file mode 100644 index 00000000..d6f84454 --- /dev/null +++ b/MinuitFit_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MinuitFit.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MinuitFit.cpp File Reference
+
+
+
#include "MinuitFit.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/MinuitFit_8cpp_source.html b/MinuitFit_8cpp_source.html new file mode 100644 index 00000000..c96e5fcc --- /dev/null +++ b/MinuitFit_8cpp_source.html @@ -0,0 +1,308 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MinuitFit.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MinuitFit.cpp
+
+
+Go to the documentation of this file.
1#include "MinuitFit.h"
+
2
+
3// *******************
+
4// Run the Markov chain with all the systematic objects added
+
+ +
6// *******************
+
7
+
8 MACH3LOG_INFO("Creating instance of Minimizer with Minuit2 and Migrad");
+
9
+
10 //Other then Migrad available are Simplex,Combined,Scan
+
11 minuit = ROOT::Math::Factory::CreateMinimizer("Minuit2", "Migrad");
+
12}
+
+
13
+
14// *************************
+
15// Destructor: close the logger and output file
+
+ +
17// *************************
+
18 if(minuit != NULL) delete minuit;
+
19}
+
+
20
+
21
+
22// *******************
+
23// Run the Minuit with all the systematic objects added
+
+ +
25// *******************
+
26
+
27 PrepareFit();
+
28
+
29 //KS: For none PCA this will be equal to normal parameters
+
30 const int NparsMinuitFull = NPars;
+
31 const int NparsMinuit = NParsPCA;
+
32
+
33 //KS: Set SetFunction we will Minimize
+
34 ROOT::Math::Functor fChi2(this, &MinuitFit::CalcChi2, NparsMinuit);
+
35 minuit->SetFunction(fChi2);
+
36
+
37 //KS: add config or something
+
38 minuit->SetPrintLevel(2);
+
39 minuit->SetTolerance(0.01);
+
40 minuit->SetMaxFunctionCalls(fitMan->raw()["General.NSteps"].as<double>());
+
41 minuit->SetMaxIterations(10000);
+
42
+
43 MACH3LOG_INFO("Preparing Minuit");
+
44 int ParCounter = 0;
+
45
+
46 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
47 {
+
48 if(!(*it)->IsPCA())
+
49 {
+
50 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
51 {
+
52 //KS: Index, name, prior, step scale [differrent to MCMC],
+
53 minuit->SetVariable(ParCounter, ((*it)->GetParName(i)), (*it)->getParInit(i), (*it)->getDiagonalError(i)/10);
+
54 minuit->SetVariableValue(ParCounter, (*it)->getParInit(i));
+
55 //KS: lower bound, upper bound, if Mirroring eneabled then ignore
+
56 if(!fMirroring) minuit->SetVariableLimits(ParCounter, (*it)->GetLowerBound(i), (*it)->GetUpperBound(i));
+
57 if((*it)->isParameterFixed(i))
+
58 {
+
59 minuit->FixVariable(ParCounter);
+
60 }
+
61 }
+
62 }
+
63 else
+
64 {
+
65 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
66 {
+
67 minuit->SetVariable(ParCounter, Form("%i_PCA", i), (*it)->getParProp_PCA(i), (*it)->getEigenValuesMaster()[i]/10);
+
68 if((*it)->isParameterFixedPCA(i))
+
69 {
+
70 minuit->FixVariable(ParCounter);
+
71 }
+
72 }
+
73 }
+
74 }
+
75
+
76 minuit->SetPrintLevel(2);
+
77
+
78 MACH3LOG_INFO("Starting MIGRAD");
+
79 minuit->Minimize();
+
80
+
81 MACH3LOG_INFO("Starting HESSE");
+
82 minuit->Hesse();
+
83 outputFile->cd();
+
84
+ + + +
88
+
89 for(int i = 0; i < NparsMinuitFull; ++i)
+
90 {
+
91 (*MinuitParValue)(i) = 0;
+
92 (*MinuitParError)(i) = 0;
+
93 for(int j = 0; j < NparsMinuitFull; ++j)
+
94 {
+
95 (*Postmatrix)(i,j) = 0;
+
96 (*Postmatrix)(i,j) = minuit->CovMatrix(i,j);
+
97 }
+
98 }
+
99
+
100 ParCounter = 0;
+
101 const double *X = minuit->X();
+
102 const double *err = minuit->Errors();
+
103 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
104 {
+
105 if(!(*it)->IsPCA())
+
106 {
+
107 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
108 {
+
109 double ParVal = X[ParCounter];
+
110 //KS: Basically apply mirroring for parameters out of bounds
+
111 if(fMirroring)
+
112 {
+
113 if(ParVal < (*it)->GetLowerBound(i))
+
114 {
+
115 ParVal = (*it)->GetLowerBound(i) + ((*it)->GetLowerBound(i) - ParVal);
+
116 }
+
117 else if (ParVal > (*it)->GetUpperBound(i))
+
118 {
+
119 ParVal = (*it)->GetUpperBound(i) - ( ParVal - (*it)->GetUpperBound(i));
+
120 }
+
121 }
+
122 (*MinuitParValue)(ParCounter) = ParVal;
+
123 (*MinuitParError)(ParCounter) = err[ParCounter];
+
124 //KS: For fixed params HESS will not calcuate error so we need to pass prior error
+
125 if((*it)->isParameterFixed(i))
+
126 {
+
127 (*MinuitParError)(ParCounter) = (*it)->getDiagonalError(i);
+ +
129 }
+
130 }
+
131 }
+
132 else
+
133 {
+
134 //KS: We need to convert parameters from PCA to normal base
+
135 TVectorD ParVals((*it)->getSize());
+
136 TVectorD ParVals_PCA((*it)->getNpars());
+
137
+
138 TVectorD ErrorVals((*it)->getSize());
+
139 TVectorD ErrorVals_PCA((*it)->getNpars());
+
140
+
141 TMatrixD MatrixVals((*it)->getSize(), (*it)->getSize());
+
142 TMatrixD MatrixVals_PCA((*it)->getNpars(), (*it)->getNpars());
+
143
+
144 //First save them
+
145 //KS: This code is super convoluted as MaCh3 can store separate matrices while Minuit has one matrix. In future this will be simplified, keep it like this for now.
+
146 const int StartVal = ParCounter;
+
147 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
148 {
+ + + +
152 for(int j = 0; j < (*it)->getNpars(); ++j, ++ParCounterMatrix)
+
153 {
+ +
155 }
+
156 }
+
157 ParVals = ((*it)->getTransferMatrix())*ParVals_PCA;
+
158 ErrorVals = ((*it)->getTransferMatrix())*ErrorVals_PCA;
+
159 MatrixVals.Mult(((*it)->getTransferMatrix()),MatrixVals_PCA);
+
160
+ +
162 //KS: Now after going from PCA to normal let';s save it
+
163 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
164 {
+
165 (*MinuitParValue)(ParCounter) = ParVals(i);
+
166 (*MinuitParError)(ParCounter) = std::fabs(ErrorVals(i));
+ +
168 for(int j = 0; j < (*it)->getSize(); ++j, ++ParCounterMatrix)
+
169 {
+
170 (*Postmatrix)(ParCounter,ParCounterMatrix) = MatrixVals(i,j);
+
171 }
+
172 //If fixed take prior
+
173 if((*it)->isParameterFixedPCA(i))
+
174 {
+
175 (*MinuitParError)(ParCounter) = (*it)->getDiagonalError(i);
+ +
177 }
+
178 }
+
179 }
+
180 }
+
181
+
182 MinuitParValue->Write("MinuitParValue");
+
183 MinuitParError->Write("MinuitParError");
+
184 Postmatrix->Write("Postmatrix");
+
185 delete MinuitParValue;
+
186 delete MinuitParError;
+
187 delete Postmatrix;
+
188 // Save all the output
+
189 SaveOutput();
+
190}
+
+
191
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+ +
int NParsPCA
Number of all parameters from all covariances in PCA base.
+
int NPars
Number of all parameters from all covariances.
+
void PrepareFit()
prepare output and perform sanity checks
+
bool fMirroring
Flag telling if mirroring is used or not.
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
ROOT::Math::Minimizer * minuit
Pointer to minimizer, which most often is Minuit.
Definition MinuitFit.h:23
+
MinuitFit(manager *const fitMan)
Constructor.
Definition MinuitFit.cpp:5
+
void runMCMC() override
Actual implementation of Minuit Fit algorithm.
Definition MinuitFit.cpp:24
+
virtual ~MinuitFit()
Destructor.
Definition MinuitFit.cpp:16
+ +
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
+ + + + diff --git a/MinuitFit_8h.html b/MinuitFit_8h.html new file mode 100644 index 00000000..dd2949d8 --- /dev/null +++ b/MinuitFit_8h.html @@ -0,0 +1,101 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MinuitFit.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
MinuitFit.h File Reference
+
+
+
#include "LikelihoodFit.h"
+#include "Math/Minimizer.h"
+#include "Math/Factory.h"
+#include "Math/Functor.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  MinuitFit
 
+
+ + + + diff --git a/MinuitFit_8h_source.html b/MinuitFit_8h_source.html new file mode 100644 index 00000000..f1bb89a3 --- /dev/null +++ b/MinuitFit_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/MinuitFit.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MinuitFit.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "LikelihoodFit.h"
+
4#include "Math/Minimizer.h"
+
5#include "Math/Factory.h"
+
6#include "Math/Functor.h"
+
7
+
+
8class MinuitFit : public LikelihoodFit {
+
9 public:
+
11 MinuitFit(manager * const fitMan);
+
13 virtual ~MinuitFit();
+
14
+
16 void runMCMC() override;
+
17
+
19 inline std::string GetName()const {return "MinuitFit";};
+
20
+
21 private:
+
23 ROOT::Math::Minimizer* minuit;
+
24};
+
+
25
+ +
manager * fitMan
The manager.
Definition FitterBase.h:68
+ + +
std::string GetName() const
Get name of class.
Definition MinuitFit.h:19
+
ROOT::Math::Minimizer * minuit
Pointer to minimizer, which most often is Minuit.
Definition MinuitFit.h:23
+
void runMCMC() override
Actual implementation of Minuit Fit algorithm.
Definition MinuitFit.cpp:24
+
virtual ~MinuitFit()
Destructor.
Definition MinuitFit.cpp:16
+ +
+ + + + diff --git a/Monitor_8cpp.html b/Monitor_8cpp.html new file mode 100644 index 00000000..b7a5ecf6 --- /dev/null +++ b/Monitor_8cpp.html @@ -0,0 +1,119 @@ + + + + + + + +MaCh3: /github/workspace/manager/Monitor.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
Monitor.cpp File Reference
+
+
+
#include "manager/Monitor.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + + + + + + + + +

+Functions

void MaCh3Utils::MaCh3Welcome ()
 KS: Prints welcome message with MaCh3 logo.
 
void MaCh3Utils::GetCPUInfo ()
 
void MaCh3Utils::GetGPUInfo ()
 
std::string MaCh3Utils::TerminalToString (const char *cmd)
 
void MaCh3Utils::EstimateDataTransferRate (TChain *chain, const int entry)
 
void MaCh3Utils::PrintProgressBar (const int Done, const int All)
 
int MaCh3Utils::getValue (std::string Type)
 
int MaCh3Utils::parseLine (const std::string &line)
 
+
+ + + + diff --git a/Monitor_8cpp_source.html b/Monitor_8cpp_source.html new file mode 100644 index 00000000..1191eacb --- /dev/null +++ b/Monitor_8cpp_source.html @@ -0,0 +1,340 @@ + + + + + + + +MaCh3: /github/workspace/manager/Monitor.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Monitor.cpp
+
+
+Go to the documentation of this file.
1#include "manager/Monitor.h"
+
2
+
+
3namespace MaCh3Utils {
+
4
+
5// *************************
+
+ +
7// *************************
+
8
+
9 //KS: Find MaCh3 version based on header file. There could be better way to just include version.h but as long as we don't have to hardcode version I am content
+
10 std::string MaCh3_VERSION = "";
+
11 std::string file = std::string(std::getenv("MaCh3_ROOT")) + "/version.h";
+
12 // Open the version.h file
+
13 std::ifstream versionFile(file);
+
14
+
15 // Check if the file is opened successfully
+
16 if (!versionFile.is_open()) {
+
17 MACH3LOG_ERROR("Error: Couldn't open version.h {}", file);
+
18 throw;
+
19 }
+
20
+
21 std::string line;
+
22 const std::string searchKey = "MaCh3_VERSION=";
+
23
+
24 // Read each line from the file
+
25 while (std::getline(versionFile, line)) {
+
26 // Search for the line containing MaCh3_VERSION
+
27 auto pos = line.find(searchKey);
+
28 if (pos != std::string::npos) {
+
29 // Extract the version string
+
30 MaCh3_VERSION = line.substr(pos + searchKey.length());
+
31 MaCh3_VERSION.erase(0, MaCh3_VERSION.find_first_not_of("\"")); // Remove leading quote
+
32 MaCh3_VERSION.erase(MaCh3_VERSION.find_last_not_of("\";") + 1); // Remove trailing quote and semicolon
+
33 break; // Stop searching once found
+
34 }
+
35 }
+
36 // Close the file
+
37 versionFile.close();
+
38
+
39 MACH3LOG_INFO("##################################");
+
40 MACH3LOG_INFO("Welcome to: ");
+
41 MACH3LOG_INFO(" __ __ _____ _ ____ ");
+
42 MACH3LOG_INFO(" | \\/ | / ____| | |___ \\ ");
+
43 MACH3LOG_INFO(" | \\ / | __ _| | | |__ __) |");
+
44 MACH3LOG_INFO(" | |\\/| |/ _` | | | '_ \\ |__ < ");
+
45 MACH3LOG_INFO(" | | | | (_| | |____| | | |___) |");
+
46 MACH3LOG_INFO(" |_| |_|\\__,_|\\_____|_| |_|____/ ");
+
47 MACH3LOG_INFO("Version: {}", MaCh3_VERSION);
+
48 MACH3LOG_INFO("##################################");
+
49}
+
+
50
+
51// ************************
+
52//KS: Simple function retrieving CPU info
+
+ +
54// ************************
+
55
+
56 //KS: Use -m 1 to limit to only one grep because in one computing node there is a lot of CPU which are the same
+
57 MACH3LOG_INFO("Using following CPU:");
+
58
+
59 MACH3LOG_INFO("{}", TerminalToString("cat /proc/cpuinfo | grep -m 1 name"));
+
60 MACH3LOG_INFO("{}", TerminalToString("cat /proc/cpuinfo | grep -m 1 MHz"));
+
61 //KS: Below code is convoluted because I mostly work on English based Linux but sometimes on Polish based Linux, this ensures it works on both. We can add support for other languages if needed
+
62 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -i Archit"));
+
63 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -i 'Cache L1d'"));
+
64 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -i 'Cache L1i'"));
+
65 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -i 'Cache L2'"));
+
66 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -i 'Cache L3'"));
+
67 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -m 1 -E 'Thread.* per core:|Wątków na rdzeń:'"));
+
68 MACH3LOG_INFO("{}", TerminalToString("lscpu | grep -m 1 -E '^CPU(:|\\(s\\)):?\\s+[0-9]+'"));
+
69
+
70 //KS: /proc/cpuinfo and lscpu holds much more info I have limited it but one can expand it if needed
+
71}
+
+
72
+
73
+
74// ************************
+
75//KS: Simple function retrieving GPU info
+
+ +
77// ************************
+
78
+
79#ifdef CUDA
+
80 MACH3LOG_INFO("Using following GPU:");
+
81 // Print GPU name
+
82 MACH3LOG_INFO("GPU Name: {}", TerminalToString("nvidia-smi --query-gpu=name --format=csv,noheader"));
+
83 // Print number of GPUs
+
84 MACH3LOG_INFO("Number of GPUs: {}", TerminalToString("nvidia-smi --query-gpu=count --format=csv,noheader"));
+
85 // Print total VRAM
+
86 MACH3LOG_INFO("Total VRAM: {} MB", TerminalToString("nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits"));
+
87 // Print Driver Version
+
88 MACH3LOG_INFO("Driver Version: {}", TerminalToString("nvidia-smi --query-gpu=driver_version --format=csv,noheader"));
+
89#endif
+
90 return;
+
91}
+
+
92
+
93
+
94// ************************
+
+
95std::string TerminalToString(const char* cmd) {
+
96// ************************
+
97
+
98 std::array<char, 128> buffer;
+
99 std::string result;
+
100 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
+
101 if (!pipe) {
+
102 throw std::runtime_error("popen() failed!");
+
103 }
+
104 while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
+
105 result += buffer.data();
+
106 }
+
107 // Remove trailing newline characters
+
108 result.erase(std::remove(result.begin(), result.end(), '\n'), result.end());
+
109 return result;
+
110}
+
+
111
+
112// ************************
+
113//KS: Simple to retrieve speed of get entry inspired by
+
+ +
115// ************************
+
116
+ +
118
+
119 timer.Start();
+
120 Int_t bytesProcessed{ chain->GetEntry(entry) };
+
121
+
122 timer.Stop();
+
123
+
124 Double_t timeInSeconds = timer.RealTime();
+
125 Double_t dataRateMBps = (double(bytesProcessed) / (1024.0 * 1024.0)) / timeInSeconds;
+
126
+
127 MACH3LOG_INFO("Data transfer: {} B, rate: {:.2f} MB/s", bytesProcessed, dataRateMBps);
+
128}
+
+
129
+
130
+
131
+
132// ************************
+
133//KS: Simply print progress bar
+
+
134void PrintProgressBar(const int Done, const int All){
+
135// ************************
+
136
+
137 double progress = double((double(Done)/double(All)));
+
138 const int barWidth = 20;
+
139 std::ostringstream progressBar;
+
140
+
141 progressBar << "[";
+
142 int pos = barWidth * progress;
+
143 for (int i = 0; i < barWidth; ++i) {
+
144 if (i < pos)
+
145 progressBar << "=";
+
146 else if (i == pos)
+
147 progressBar << ">";
+
148 else
+
149 progressBar << " ";
+
150 }
+
151
+
152 progressBar << "] " << std::setw(3) << Done <<"/"<< All<<" ("<<static_cast<int>(progress * 100.0)<<"%)\r";
+
153 MACH3LOG_INFO("{}", progressBar.str());
+
154}
+
+
155
+
156// ***************************************************************************
+
157//CW: Get memory, which is probably silly
+
+
158int getValue(std::string Type){ //Note: this value is in KB!
+
159// ***************************************************************************
+
160 std::ifstream file("/proc/self/status");
+
161 int result = -1;
+
162 std::string line;
+
163
+
164 if (Type == "VmSize")
+
165 {
+
166 while (std::getline(file, line))
+
167 {
+
168 if (line.compare(0, 7, "VmSize:") == 0)
+
169 {
+
170 result = parseLine(line.substr(7));
+
171 break;
+
172 }
+
173 }
+
174 }
+
175 else if (Type == "VmRSS")
+
176 {
+
177 while (std::getline(file, line))
+
178 {
+
179 if (line.compare(0, 6, "VmRSS:") == 0)
+
180 {
+
181 result = parseLine(line.substr(6));
+
182 break;
+
183 }
+
184 }
+
185 }
+
186 else if (Type == "MemTotal")
+
187 {
+
188 std::ifstream meminfo("/proc/meminfo");
+
189 while (std::getline(meminfo, line))
+
190 {
+
191 if (line.find("MemTotal:") != std::string::npos) {
+
192 result = parseLine(line.substr(9));
+
193 break;
+
194 }
+
195 }
+
196 }
+
197 else
+
198 {
+
199 std::cerr << "Not supported getValue: " << Type << std::endl;
+
200 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
201 throw;
+
202 }
+
203
+
204 return result;
+
205}
+
+
206
+
207// ***************************************************************************
+
208//CW: Get memory, which is probably silly
+
+
209int parseLine(const std::string& line){
+
210// ***************************************************************************
+
211 std::istringstream iss(line);
+
212 int value;
+
213 iss >> value;
+
214 return value;
+
215}
+
+
216
+
217}
+
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
int getValue(std::string Type)
Definition Monitor.cpp:158
+
void EstimateDataTransferRate(TChain *chain, const int entry)
Definition Monitor.cpp:114
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
void GetCPUInfo()
Definition Monitor.cpp:53
+
void GetGPUInfo()
Definition Monitor.cpp:76
+
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.
Definition Monitor.cpp:6
+
std::string TerminalToString(const char *cmd)
Definition Monitor.cpp:95
+
int parseLine(const std::string &line)
Definition Monitor.cpp:209
+
+ + + + diff --git a/Monitor_8h.html b/Monitor_8h.html new file mode 100644 index 00000000..95e3fbb0 --- /dev/null +++ b/Monitor_8h.html @@ -0,0 +1,131 @@ + + + + + + + +MaCh3: /github/workspace/manager/Monitor.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
Monitor.h File Reference
+
+
+
#include <iostream>
+#include <fstream>
+#include <string>
+#include <vector>
+#include <cstdlib>
+#include "TTree.h"
+#include "TBranch.h"
+#include "TMacro.h"
+#include "TChain.h"
+#include "TStopwatch.h"
+#include "manager/MaCh3Logger.h"
+#include "samplePDF/Structs.h"
+#include "manager/YamlHelper.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + + + + + + + + +

+Functions

void MaCh3Utils::MaCh3Welcome ()
 KS: Prints welcome message with MaCh3 logo.
 
void MaCh3Utils::GetCPUInfo ()
 
void MaCh3Utils::GetGPUInfo ()
 
std::string MaCh3Utils::TerminalToString (const char *cmd)
 
void MaCh3Utils::EstimateDataTransferRate (TChain *chain, const int entry)
 
void MaCh3Utils::PrintProgressBar (const int Done, const int All)
 
int MaCh3Utils::getValue (std::string Type)
 
int MaCh3Utils::parseLine (const std::string &line)
 
+
+ + + + diff --git a/Monitor_8h_source.html b/Monitor_8h_source.html new file mode 100644 index 00000000..c6b76f82 --- /dev/null +++ b/Monitor_8h_source.html @@ -0,0 +1,144 @@ + + + + + + + +MaCh3: /github/workspace/manager/Monitor.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Monitor.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// C++ includes
+
4#include <iostream>
+
5#include <fstream>
+
6#include <string>
+
7#include <vector>
+
8#include <cstdlib>
+
9
+
10// ROOT include
+
11#include "TTree.h"
+
12#include "TBranch.h"
+
13#include "TMacro.h"
+
14#include "TChain.h"
+
15#include "TStopwatch.h"
+
16
+
17#include "manager/MaCh3Logger.h"
+
18
+
19#include "samplePDF/Structs.h"
+
20#include "manager/YamlHelper.h"
+
21
+
22
+
23namespace MaCh3Utils {
+
24
+
28 void MaCh3Welcome();
+
29 //KS: Check what CPU you are using
+
30 void GetCPUInfo();
+
31 //KS: Check what GPU you are using
+
32 void GetGPUInfo();
+
33 //KS: Convoluted code to grab output from terminal to string
+
34 std::string TerminalToString(const char* cmd);
+
35 //KS: Check what CPU you are using
+ +
37 //KS: Simply print progress bar
+
38 void PrintProgressBar(const int Done, const int All);
+
39 //CW: Get info like RAM
+
40 int getValue(std::string Type);
+
41 int parseLine(const std::string& line);
+
42}
+ + + +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
int getValue(std::string Type)
Definition Monitor.cpp:158
+
void EstimateDataTransferRate(TChain *chain, const int entry)
Definition Monitor.cpp:114
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
void GetCPUInfo()
Definition Monitor.cpp:53
+
void GetGPUInfo()
Definition Monitor.cpp:76
+
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.
Definition Monitor.cpp:6
+
std::string TerminalToString(const char *cmd)
Definition Monitor.cpp:95
+
int parseLine(const std::string &line)
Definition Monitor.cpp:209
+
+ + + + diff --git a/OscClass__CUDAProb3_8cpp.html b/OscClass__CUDAProb3_8cpp.html new file mode 100644 index 00000000..03ae99bb --- /dev/null +++ b/OscClass__CUDAProb3_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/OscClass/OscClass_CUDAProb3.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OscClass_CUDAProb3.cpp File Reference
+
+
+ +

Go to the source code of this file.

+
+ + + + diff --git a/OscClass__CUDAProb3_8cpp_source.html b/OscClass__CUDAProb3_8cpp_source.html new file mode 100644 index 00000000..c6532d22 --- /dev/null +++ b/OscClass__CUDAProb3_8cpp_source.html @@ -0,0 +1,2030 @@ + + + + + + + +MaCh3: /github/workspace/OscClass/OscClass_CUDAProb3.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OscClass_CUDAProb3.cpp
+
+
+Go to the documentation of this file.
+
2
+
3//#define DEBUG 1
+
4
+
+ +
6 std::cout << std::setprecision(10);
+
7
+
8 std::vector<FLOAT_T> cosineList;
+
9 cosineList.push_back(-0.99895);
+
10
+
11 std::vector<FLOAT_T> energyList;
+
12 energyList.push_back(0.0035);
+
13
+
14 int n_cosines = 1;
+
15 int n_energies = 1;
+
16
+
17 int nu_flav = -1;
+
18
+
19 const FLOAT_T theta12 = 0.5695951908800630486710466089860865317151404697548723;
+
20 const FLOAT_T theta13 = 0.1608752771983210967007023071793306595103776477788280;
+
21 const FLOAT_T theta23 = 0.7853981633974483096156608458198757210492923498437764;
+
22 const FLOAT_T dcp = 0.0;
+
23
+
24 const FLOAT_T dm12sq = 7.9e-5;
+
25 const FLOAT_T dm23sq = 2.5e-3;
+
26
+
27 int n_threads = 1;
+ +
29 mypropagator = new AtmosCpuPropagator<FLOAT_T>(n_cosines, n_energies, n_threads); // cpu propagator with 4 threads
+
30
+
31 mypropagator->setEnergyList(energyList);
+
32 mypropagator->setCosineList(cosineList);
+
33
+
34 std::string InputLocation = "/models/PREM_4layer.dat";
+
35 if (std::getenv("CUDAProb3_DIR") != NULL)
+
36 {
+
37 InputLocation.insert(0, std::string(std::getenv("CUDAProb3_DIR"))+"/");
+
38 }
+
39 else
+
40 {
+
41 std::cerr<<" Envioremnt CUDAProb3_DIR is not defined, did you source setup.MaCh3.sh?"<<std::endl;
+
42 throw;
+
43 }
+
44 mypropagator->setDensityFromFile(InputLocation);
+
45 mypropagator->setMNSMatrix(theta12, theta13, theta23, dcp, nu_flav);
+
46 mypropagator->setNeutrinoMasses(dm12sq, dm23sq);
+
47 mypropagator->setProductionHeight(22.0);
+
48 mypropagator->calculateProbabilities(cudaprob3::Antineutrino);
+
49 std::cout << mypropagator->getProbability(0,0, ProbType::e_e) << std::endl;
+
50
+
51 throw;
+
52
+
53 //####################################################################################
+
54 //Set definite values
+
55
+
56 nOscpars = 6;
+
57
+ + +
60 nFinalFlavours = 3; //DB =2 if excluding taus, =3 if including taus
+
61
+ + +
64
+
65 //####################################################################################
+
66 //Get FitMan parameters
+
67
+ +
69
+
70 EarthDensityFile = osc_manager->raw()["OscillatorObj"]["OscillatorEarthDensityFile"].as<std::string>();
+
71 ArrayConfig = osc_manager->raw()["OscillatorObj"]["OscillatorArrayConfig"].as<int>();
+
72 fFillHistograms = osc_manager->raw()["OscillatorObj"]["OscillatorFillHistograms"].as<bool>();
+
73
+
74 IsLinear = osc_manager->raw()["OscillatorObj"]["OscillatorIsLinear"].as<bool>();
+
75 useFineBinsPerBin = osc_manager->raw()["OscillatorObj"]["OscillatorUseFineBinsPerCoarseBin"].as<bool>();
+
76
+
77 UseBinningTemplates = osc_manager->raw()["OscillatorObj"]["OscillatorUseBinningTemplates"].as<bool>();
+
78 PrimaryBinningTemplateName = osc_manager->raw()["OscillatorObj"]["OscillatorPrimaryBinningTemplateName"].as<std::string>();
+
79 SecondaryBinningTemplateName = osc_manager->raw()["OscillatorObj"]["OscillatorSecondaryBinningTemplateName"].as<std::string>();
+
80 InputFileName = osc_manager->raw()["OscillatorObj"]["OscillatorInputFileName"].as<std::string>();
+
81
+
82 nCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatornCoarseCosz"].as<int>();
+
83 lCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatorlCoarseCosz"].as<double>();
+
84 hCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatorhCoarseCosz"].as<double>();
+
85
+
86 nCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatornCoarseEnergy"].as<int>();
+
87 lCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorlCoarseEnergy"].as<double>();
+
88 hCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorhCoarseEnergy"].as<double>();
+
89
+
90 nFineCosz = osc_manager->raw()["OscillatorObj"]["OscillatornFineCosz"].as<int>();
+
91 nFineEnergy = osc_manager->raw()["OscillatorObj"]["OscillatornFineEnergy"].as<int>();
+
92 fineCoarseRatioCosz = osc_manager->raw()["OscillatorObj"]["OscillatorfineCoarseRatioCosz"].as<double>();
+
93 fineCoarseRatioEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorfineCoarseRatioEnergy"].as<double>();
+
94
+
95 UseProductionHeightAveraging = osc_manager->raw()["OscillatorObj"]["OscillatorUseProductionHeightAveraging"].as<bool>();
+
96 ProductionHeightFileName = osc_manager->raw()["OscillatorObj"]["OscillatorProductionHeightFileName"].as<std::string>();
+
97 nProductionHeightAveragingBins = osc_manager->raw()["OscillatorObj"]["OscillatornProductionHeightAveragingBins"].as<int>();
+
98 lProductionHeightRange = osc_manager->raw()["OscillatorObj"]["OscillatorlProductionHeightRange"].as<double>();
+
99 hProductionHeightRange = osc_manager->raw()["OscillatorObj"]["OscillatorhProductionHeightRange"].as<double>();
+
100
+
101 UseChemicalComposition = osc_manager->raw()["OscillatorObj"]["OscillatorUseChemicalComposition"].as<bool>();
+
102
+
103 RebinMode = osc_manager->raw()["OscillatorObj"]["OscillatorRebinMode"].as<bool>(); //I do wonder whether I need this as making this work with production height averaging is going to be a pain
+
104 std::cout << std::endl;
+
105
+
106 //####################################################################################
+
107
+ + +
110
+ +
112
+
113 TFile* InFile = new TFile(InputFileName.c_str(),"READ");
+
114 if (InFile->IsZombie()) {
+
115 std::cout << "Oscillator Template file is not found. Given:" << InputFileName << std::endl;
+
116 throw;
+
117 }
+
118
+ +
120 if (!PrimaryHistTemplate) {
+
121 std::cout << "Primary Histogram template not found. Given:" << PrimaryBinningTemplateName << std::endl;
+
122 throw;
+
123 }
+
124 PrimaryHistTemplate->SetDirectory(0);
+
125
+ + +
128 std::cout << "Secondary Histogram template not found. Given:" << SecondaryBinningTemplateName << std::endl;
+
129 throw;
+
130 }
+
131 SecondaryHistTemplate->SetDirectory(0);
+
132
+
133 InFile->Close();
+
134
+
135 nCoarseCosz = PrimaryHistTemplate->GetNbinsY();
+
136 lCoarseCosz = PrimaryHistTemplate->GetYaxis()->GetBinLowEdge(1);
+
137 hCoarseCosz = PrimaryHistTemplate->GetYaxis()->GetBinLowEdge(nCoarseCosz+1);
+
138
+
139 nCoarseEnergy = PrimaryHistTemplate->GetNbinsX();
+
140 lCoarseEnergy = PrimaryHistTemplate->GetXaxis()->GetBinLowEdge(1);
+
141 hCoarseEnergy = PrimaryHistTemplate->GetXaxis()->GetBinLowEdge(nCoarseEnergy+1);
+
142
+
143 nFineCosz = SecondaryHistTemplate->GetNbinsY();
+
144 nFineEnergy = SecondaryHistTemplate->GetNbinsX();
+
145
+ + + + +
150
+
151 std::cout << "Oscillator set to use normal mode" << std::endl;
+
152 std::cout << "Initialising oscillograms in TH2D constuctor" << std::endl;
+
153 std::cout << "--------------------------------------------" << std::endl;
+
154 std::cout << "Using Templates -" << std::endl;
+
155 std::cout << "Primary:" << std::setw(20) << PrimaryBinningTemplateName << std::endl;
+
156 std::cout << "Secondary:" << std::setw(20) << SecondaryBinningTemplateName << std::endl;
+
157 std::cout << "From file:" << std::setw(20) << InputFileName << std::endl;
+
158
+
159 } else {
+
160 if (!IsLinear) {
+ + +
163 }
+
164
+ + + + +
169
+
170 std::vector<double> Energy_Coarse;
+
171 std::vector<double> Cosz_Coarse;
+
172 std::vector<double> Energy_Fine;
+
173 std::vector<double> Cosz_Fine;
+
174
+
175 if (IsLinear) {
+ +
177 } else {
+ +
179 }
+ +
181
+
182 if (!useFineBinsPerBin) {
+
183
+
184 if (IsLinear) {
+ +
186 } else {
+ +
188 }
+ +
190
+
191 } else {
+
192 if (nFineEnergy != floor(nFineEnergy)) {
+
193 std::cerr << "nFineEnergy:" << nFineEnergy << " is not an integer" << std::endl;
+
194 throw;
+
195 }
+
196
+
197 if (nFineCosz != floor(nFineCosz)) {
+
198 std::cerr << "nFineCosz:" << nFineCosz << " is not an integer" << std::endl;
+
199 throw;
+
200 }
+
201
+
202 if (nFineEnergy < 1) {
+
203 std::cerr << "Invalid binning specified. nFineEnergy should be integer >= 1. Given:" << nFineEnergy << std::endl;
+
204 throw;
+
205 }
+
206
+
207 if (nFineCosz < 1) {
+
208 std::cerr << "Invalid binning specified. nFineCosz should be integer >= 1. Given:" << nFineCosz << std::endl;
+
209 throw;
+
210 }
+
211
+ + +
214
+ + +
217 }
+
218
+
219 if (fineCoarseRatioCosz == -1 || fineCoarseRatioEnergy == -1) {
+
220
+
221 PrimaryHistTemplate = new TH2D("hPrimaryBinning","PrimaryBinning",Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
222 SecondaryHistTemplate = new TH2D("hSecondaryBinning","SecondaryBinning",Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
223
+
224 } else if ((fineCoarseRatioCosz > 0 && fineCoarseRatioCosz <= 1.0) && (fineCoarseRatioEnergy > 0 && fineCoarseRatioEnergy <= 1.0)) {
+ + +
227
+ +
229 SecondaryHistTemplate = new TH2D("hSecondaryBinning","SecondaryBinning",nFineEnergy,lFineEnergy,hFineEnergy,nFineCosz,lFineCosz,hFineCosz);
+
230 } else {
+
231 std::cerr << "fineCoarseRatioCosz is an invalid number:" << fineCoarseRatioCosz << std::endl;
+
232 std::cerr << "fineCoarseRatioEnergy is an invalid number:" << fineCoarseRatioEnergy << std::endl;
+
233 std::cerr << "Expected both to be either -1 or 0 > fineCoarseRatio >= 1.0" << std::endl;
+
234 throw;
+
235 }
+
236 }
+
237
+
238 if (RebinMode) {
+
239 nMaxBin = 5000*5000;
+
240 std::cout << "Oscillator set to use RebinMode. Max Bins:" << nMaxBin << std::endl;
+
241 std::cout << "If for whatever reason you need to increase this, go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_)" << std::endl;
+
242
+
243 std::cout << "Production height averaging does not work for a rebinnable oscillator" << std::endl;
+ + +
246 } else {
+
247 std::cout << "Oscillator set to use normal mode" << std::endl;
+
248 }
+
249
+ +
251 if (fFillHistograms) {
+ +
253 }
+
254
+
255 isUsingGPU();
+
256 std::cout << std::endl;
+ +
258 std::cout << std::endl;
+ +
260
+ + + +
264}
+
+
265
+
+
266void Oscillator::RebinOscillogram(int Switcher, std::vector<double> NewBinning) {
+
267 if (!RebinMode) {
+
268 std::cout << "Rebin called when Oscillator not in rebin mode. Skipping.." << std::endl;
+
269 throw;
+
270 }
+
271
+
272 bool CoarseChanged = false;
+
273 bool FineChanged = false;
+
274
+
275 //DB This would only be needed in oscillogram binning studies and in normal running this would not be needed. Hence console output to remind user to call needed function
+
276 std::cout << "Due to the newly implemented pointer method of returning oscillogram weights, please ensure that you call samplePDFSKBase::FindEventOscBin() after Oscillogram::RebinOscillogram() to update the osc_w_pointers" << std::endl;
+
277
+
278 if (Switcher==0) {
+
279 if (NewBinning.size()==2) {
+
280 if ((NewBinning[0]*NewBinning[1]) > nMaxBin) {
+
281 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
282 throw;
+
283 }
+
284
+
285 if (NewBinning[0] > nFineCosz) {
+
286 std::cout << "Requested coarse cosZ binning is larger than the fine cosZ binning" << std::endl;
+
287 throw;
+
288 }
+
289
+
290 if (NewBinning[1] > nFineEnergy) {
+
291 std::cout << "Requested coarse energy binning is larger than the fine energy binning" << std::endl;
+
292 throw;
+
293 }
+
294
+ + +
297 } else {
+
298 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
299 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
300 throw;
+
301 }
+
302
+
303 CoarseChanged = true;
+
304 }
+
305
+
306 else if (Switcher==1) {
+
307 if (NewBinning.size()==2) {
+
308 if ((NewBinning[0]*NewBinning[1]) > nMaxBin) {
+
309 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
310 throw;
+
311 }
+
312
+
313 if (NewBinning[0] < nCoarseCosz) {
+
314 std::cout << "Requested fine cosZ binning is smaller than the coarse cosZ binning" << std::endl;
+
315 throw;
+
316 }
+
317
+
318 if (NewBinning[1] < nCoarseEnergy) {
+
319 std::cout << "Requested fine energy binning is smaller than the coarse energy binning" << std::endl;
+
320 throw;
+
321 }
+
322
+ + +
325 } else {
+
326 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
327 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
328 throw;
+
329 }
+
330
+
331 FineChanged = true;
+
332 }
+
333
+
334 else if (Switcher==2) {
+
335 if (NewBinning.size()==4) {
+
336 if (((NewBinning[0]*NewBinning[1]) > nMaxBin)||((NewBinning[2]*NewBinning[3]) > nMaxBin)) {
+
337 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
338 throw;
+
339 }
+ + + + +
344 } else {
+
345 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
346 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
347 throw;
+
348 }
+
349
+
350 CoarseChanged = true;
+
351 FineChanged = true;
+
352 }
+
353
+
354 else if (Switcher==3) {
+
355 if (NewBinning.size()==2) {
+
356 if ((NewBinning[0]<0)||(NewBinning[0]>1)) {
+
357 std::cout << "Rebinned factorised value for CosZ outside of 0 to 1 range:" << NewBinning[0] << std::endl;
+
358 std::cout << "Skipping.." << std::endl;
+
359 }
+
360 if ((NewBinning[1]<0)||(NewBinning[1]>1)) {
+
361 std::cout << "Rebinned factorised value for Energy outside of 0 to 1 range:" << NewBinning[1] << std::endl;
+
362 std::cout << "Skipping.." << std::endl;
+
363 }
+ + + +
367 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
368 throw;
+
369 }
+ + +
372 } else {
+
373 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
374 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
375 throw;
+
376 }
+
377
+
378 CoarseChanged = true;
+
379 }
+
380
+
381 else if (Switcher == 4) {
+
382 if (NewBinning.size()==2) {
+
383 if (NewBinning[0] != floor(NewBinning[0])) {
+
384 std::cerr << "NewBinning[0]:" << NewBinning[0] << " is not an integer" << std::endl;
+
385 throw;
+
386 }
+
387
+
388 if (NewBinning[1] != floor(NewBinning[1])) {
+
389 std::cerr << "NewBinning[1]:" << NewBinning[1] << " is not an integer" << std::endl;
+
390 throw;
+
391 }
+
392
+
393 if (NewBinning[0] < 1) {
+
394 std::cerr << "Invalid binning specified. NewBinning[0] should be integer >= 1. Given:" << NewBinning[0] << std::endl;
+
395 throw;
+
396 }
+
397
+
398 if (NewBinning[1] < 1) {
+
399 std::cerr << "Invalid binning specified. NewBinning[0] should be integer >= 1. Given:" << NewBinning[1] << std::endl;
+
400 throw;
+
401 }
+
402
+ + +
405
+
406 } else {
+
407 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 or 4 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
408 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, 4 or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
409 throw;
+
410 }
+
411
+
412 FineChanged = true;
+
413 }
+
414
+
415 else {
+
416 std::cout << "Invalid switcher option given. Switcher given:" << Switcher << std::endl;
+
417 throw;
+
418 }
+
419
+ +
421
+
422 if (fFillHistograms) {
+ + +
425 }
+
426
+ +
428}
+
+
429
+
+ +
431 DeleteArrays();
+
432
+
433 std::vector<double> Energy_Coarse;
+
434 std::vector<double> Cosz_Coarse;
+
435 std::vector<double> Energy_Fine;
+
436 std::vector<double> Cosz_Fine;
+
437
+
438 if (CoarseChanged) {
+
439 if (IsLinear) {
+ +
441 } else {
+ +
443 }
+
444
+ +
446 } else {
+
447 Energy_Coarse.resize(hPrimaryBinning->GetNbinsX()+1);
+
448 for (int i=0;i<=hPrimaryBinning->GetNbinsX();i++) {
+
449 Energy_Coarse[i] = hPrimaryBinning->GetXaxis()->GetBinLowEdge(i+1);
+
450 }
+
451
+
452 Cosz_Coarse.resize(hPrimaryBinning->GetNbinsY()+1);
+
453 for (int i=0;i<=hPrimaryBinning->GetNbinsY();i++) {
+
454 Cosz_Coarse[i] = hPrimaryBinning->GetYaxis()->GetBinLowEdge(i+1);
+
455 }
+
456 }
+
457
+
458 if (FineChanged) {
+
459
+
460 if (!useFineBinsPerBin) {
+
461 if (IsLinear) {
+ +
463 } else {
+ +
465 }
+ +
467 } else {
+ + +
470 }
+
471
+
472 } else {
+
473 Energy_Fine.resize(hSecondaryBinning->GetNbinsX()+1);
+
474 for (int i=0;i<=hSecondaryBinning->GetNbinsX();i++) {
+
475 Energy_Fine[i] = hSecondaryBinning->GetXaxis()->GetBinLowEdge(i+1);
+
476 }
+
477
+
478 Cosz_Fine.resize(hSecondaryBinning->GetNbinsY()+1);
+
479 for (int i=0;i<=hSecondaryBinning->GetNbinsY();i++) {
+
480 Cosz_Fine[i] = hSecondaryBinning->GetYaxis()->GetBinLowEdge(i+1);
+
481 }
+
482 }
+
483
+
484 hPrimaryBinning->SetBins(Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
485 hSecondaryBinning->SetBins(Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
486
+
487 nPrimaryBinsX = hPrimaryBinning->GetNbinsX();
+
488 nPrimaryBinsY = hPrimaryBinning->GetNbinsY();
+ +
490
+
491 nSecondaryBinsX = hSecondaryBinning->GetNbinsX();
+
492 nSecondaryBinsY = hSecondaryBinning->GetNbinsY();
+ +
494
+
495 std::cout << "---------------------------------" << std::endl;
+
496 std::cout << " " << std::setw(7) << "nBins" << " " << std::setw(10) << "LowerEdge" << " " << std::setw(10) << "HigherEdge" << std::endl;
+
497 std::cout << "Coarse Oscillogram Binning: " << std::endl;
+
498 if (IsLinear) {
+
499 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << lCoarseEnergy << " " << std::setw(10) << hCoarseEnergy << std::endl;
+
500 } else {
+
501 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << pow(10,lCoarseEnergy) << " " << std::setw(10) << pow(10,hCoarseEnergy) << std::endl;
+
502 }
+
503 std::cout << "Cosz = " << std::setw(7) << nCoarseCosz << " " << std::setw(10) << lCoarseCosz << " " << std::setw(10) << hCoarseCosz << std::endl;
+
504 std::cout << "\n" << std::endl;
+
505 std::cout << "Fine Oscillogram Binning: " << std::endl;
+
506 if (IsLinear) {
+
507 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << lFineEnergy << " " << std::setw(10) << hFineEnergy << std::endl;
+
508 } else {
+
509 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << pow(10,lFineEnergy) << " " << std::setw(10) << pow(10,hFineEnergy) << std::endl;
+
510 }
+
511 std::cout << "Cosz = " << std::setw(7) << nFineCosz << " " << std::setw(10) << lFineCosz << " " << std::setw(10) << hFineCosz << std::endl;
+
512 std::cout << "---------------------------------" << std::endl;
+
513
+
514 if (hPrimaryOscillogram.size()!=0) {
+
515 for (int i=0;i<nNeutrinoSigns;i++) {
+
516 for (int j=0;j<nInitialFlavours;j++) {
+
517 for (int k=0;k<nFinalFlavours;k++) {
+
518
+
519 hPrimaryOscillogram[i][j][k]->SetBins(Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
520 hSecondaryOscillogram[i][j][k]->SetBins(Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
521
+
522 }
+
523 }
+
524 }
+
525 }
+
526
+
527 ResizeArrays();
+
528
+
529 //DB According to LP, unique pointers should auto manage their own memory usage and once a new object is help in a unique pointer, it will 'delete' the old object
+ + +
532 FillArrays();
+
533}
+
+
534
+
+ +
536 for (unsigned int iPrimaryHist=0;iPrimaryHist<nPrimaryHists;iPrimaryHist++) {
+ +
538 }
+ +
540
+
541 delete[] hPrimaryCounter_Arr;
+
542
+
543 for (int iBin=0;iBin<nPrimaryBins;iBin++) {
+ + +
546 }
+
547
+
548 PrimaryXBinEdges = std::vector<double>();
+
549 PrimaryYBinEdges = std::vector<double>();
+
550
+
551 SecondaryXBinEdges = std::vector<double>();
+
552 SecondaryYBinEdges = std::vector<double>();
+
553
+
554}
+
+
555
+
+ +
557
+ +
559 for (unsigned int iPrimaryHist=0;iPrimaryHist<nPrimaryHists;iPrimaryHist++) {
+ +
561 }
+
562 hPrimaryCounter_Arr = new double[nPrimaryBins];
+
563
+ + +
566
+
567 PrimaryXBinEdges.resize(hPrimaryBinning->GetNbinsX()+1);
+
568 PrimaryYBinEdges.resize(hPrimaryBinning->GetNbinsY()+1);
+
569 SecondaryXBinEdges.resize(hSecondaryBinning->GetNbinsX()+1);
+
570 SecondaryYBinEdges.resize(hSecondaryBinning->GetNbinsY()+1);
+
571
+
572 PrimaryXBinEvalPoints.resize(hPrimaryBinning->GetNbinsX());
+
573 PrimaryYBinEvalPoints.resize(hPrimaryBinning->GetNbinsY());
+
574 SecondaryXBinEvalPoints.resize(hSecondaryBinning->GetNbinsX());
+
575 SecondaryYBinEvalPoints.resize(hSecondaryBinning->GetNbinsY());
+
576
+
577 for (int yBin=1;yBin<=hPrimaryBinning->GetNbinsY()+1;yBin++) {
+
578 PrimaryYBinEdges[yBin-1] = hPrimaryBinning->GetYaxis()->GetBinLowEdge(yBin);
+
579 }
+
580
+
581 for (int yBin=1;yBin<=hSecondaryBinning->GetNbinsY()+1;yBin++) {
+
582 SecondaryYBinEdges[yBin-1] = hSecondaryBinning->GetYaxis()->GetBinLowEdge(yBin);
+
583 }
+
584
+
585 for (int yBin=1;yBin<=hPrimaryBinning->GetNbinsY();yBin++) {
+
586 PrimaryYBinEvalPoints[yBin-1] = hPrimaryBinning->GetYaxis()->GetBinCenter(yBin);
+
587 }
+
588
+
589 for (int yBin=1;yBin<=hSecondaryBinning->GetNbinsY();yBin++) {
+
590 SecondaryYBinEvalPoints[yBin-1] = hSecondaryBinning->GetYaxis()->GetBinCenter(yBin);
+ +
592 }
+
593
+
594 if (IsLinear) {
+
595 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX()+1;xBin++) {
+
596 PrimaryXBinEdges[xBin-1] = hPrimaryBinning->GetXaxis()->GetBinLowEdge(xBin);
+
597 }
+
598
+
599 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX()+1;xBin++) {
+
600 SecondaryXBinEdges[xBin-1] = hSecondaryBinning->GetXaxis()->GetBinLowEdge(xBin);
+
601 }
+
602
+
603 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX();xBin++) {
+
604 PrimaryXBinEvalPoints[xBin-1] = hPrimaryBinning->GetXaxis()->GetBinCenter(xBin);
+
605 }
+
606
+
607 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX();xBin++) {
+
608 SecondaryXBinEvalPoints[xBin-1] = hSecondaryBinning->GetXaxis()->GetBinCenter(xBin);
+
609 }
+
610
+
611 } else {
+
612 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX()+1;xBin++) {
+
613 PrimaryXBinEdges[xBin-1] = pow(10.0,hPrimaryBinning->GetXaxis()->GetBinLowEdge(xBin));
+
614 }
+
615
+
616 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX()+1;xBin++) {
+
617 SecondaryXBinEdges[xBin-1] = pow(10.0,hSecondaryBinning->GetXaxis()->GetBinLowEdge(xBin));
+
618 }
+
619
+
620 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX();xBin++) {
+
621 PrimaryXBinEvalPoints[xBin-1] = pow(10.0,hPrimaryBinning->GetXaxis()->GetBinCenter(xBin));
+
622 }
+
623
+
624 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX();xBin++) {
+
625 SecondaryXBinEvalPoints[xBin-1] = pow(10.0,hSecondaryBinning->GetXaxis()->GetBinCenter(xBin));
+
626 }
+
627 }
+
628
+
629}
+
+
630
+
+ +
632 if (ArrayConfig == 1) {
+ +
634 } else {
+ +
636 }
+
637
+ +
639 unsigned int nContribs = PrimaryBinContrib_Bin[iPrimaryBin].size();
+
640
+
641 double Val = 0.;
+
642 for (unsigned int iContrib=0;iContrib<nContribs;iContrib++) {
+ +
644 }
+
645 if (Val == 0.) {
+
646 std::cerr << "Coarse Bin found which has no contributions" << std::endl;
+
647 throw;
+
648 }
+
649
+ +
651 }
+
652}
+
+
653
+
+ +
655
+
656 for (int x=0;x<nSecondaryBinsX;x++) {
+
657 for (int y=0;y<nSecondaryBinsY;y++) {
+
658 int iter = x*nSecondaryBinsY+y;
+
659
+ + + +
663
+
664 if (!IsValidBox(Box_Fine)) {
+
665 std::cout << "Fine Binning Box is not valid!" << std::endl;
+ +
667 throw;
+
668 }
+
669
+
670 for (int yBin=0;yBin<nPrimaryBinsY;yBin++) {
+
671 //If bottom edge of Coarse bin is above than the top edge of the Fine bin
+ +
673 continue;
+
674 }
+
675
+
676 //If top edge of Coarse bin is lower than the bottom edge of the Fine bin
+ +
678 continue;
+
679 }
+
680
+
681 for (int xBin=0;xBin<nPrimaryBinsX;xBin++) {
+
682
+
683 //If left edge of Coarse bin is above than the right edge of the Fine bin
+ +
685 continue;
+
686 }
+
687
+
688 //If right edge of Coarse bin is lower than the left edge of the Fine bin
+ +
690 continue;
+
691 }
+
692
+ + + +
696
+
697 if (!IsValidBox(Box_Coarse)) {
+
698 std::cout << "Coarse Binning Box is not valid!" << std::endl;
+ +
700 throw;
+
701 }
+
702
+ +
704 if (FracOverlapped<1e-6) FracOverlapped = 0.;
+
705
+
706 if (FracOverlapped>1.) {
+ + +
709 throw;
+
710 }
+
711
+
712 if (FracOverlapped != 0.) {
+ + + +
716
+ + +
719 }
+
720
+
721 }
+
722 }
+
723 }
+
724 }
+
725
+
726}
+
+
727
+
+ +
729
+
730 for (int x=0;x<nSecondaryBinsX;x++) {
+
731 for (int y=0;y<nSecondaryBinsY;y++) {
+
732 int iter = x*nSecondaryBinsY+y;
+
733
+ + +
736
+ +
738
+
739 if (IsLinear) {
+
740 PrimaryBin_ToAdd_X = hPrimaryBinning->GetXaxis()->FindBin(EnergyEvalPoint)-1;
+
741 } else {
+
742 PrimaryBin_ToAdd_X = hPrimaryBinning->GetXaxis()->FindBin(log10(EnergyEvalPoint))-1;
+
743 }
+
744
+
745 int PrimaryBin_ToAdd_Y = hPrimaryBinning->GetYaxis()->FindBin(CoszEvalPoint)-1;
+ +
747
+ + +
750 }
+
751 }
+
752
+
753}
+
+
754
+
+ +
756 std::cout << "---------------------------------" << std::endl;
+
757 std::cout << " " << std::setw(7) << "nBins" << " " << std::setw(10) << "LowerEdge" << " " << std::setw(10) << "HigherEdge" << std::endl;
+
758 std::cout << "Coarse Binning: " << std::endl;
+
759 if (IsLinear) {
+
760 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << lCoarseEnergy << " " << std::setw(10) << hCoarseEnergy << std::endl;
+
761 } else {
+
762 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << pow(10,lCoarseEnergy) << " " << std::setw(10) << pow(10,hCoarseEnergy) << std::endl;
+
763 }
+
764 std::cout << "Cosz = " << std::setw(7) << nCoarseCosz << " " << std::setw(10) << lCoarseCosz << " " << std::setw(10) << hCoarseCosz << std::endl;
+
765 std::cout << "\n" << std::endl;
+
766 std::cout << "Fine Binning: " << std::endl;
+
767 if (IsLinear) {
+
768 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << lFineEnergy << " " << std::setw(10) << hFineEnergy << std::endl;
+
769 } else {
+
770 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << pow(10,lFineEnergy) << " " << std::setw(10) << pow(10,hFineEnergy) << std::endl;
+
771 }
+
772 std::cout << "Cosz = " << std::setw(7) << nFineCosz << " " << std::setw(10) << lFineCosz << " " << std::setw(10) << hFineCosz << std::endl;
+
773 std::cout << "---------------------------------" << std::endl;
+
774
+
775 hPrimaryBinning = (TH2D*)PrimaryHistTemplate->Clone("hPrimaryBinning");
+
776 hPrimaryBinning->SetTitle("hPrimaryBinning");
+
777 hSecondaryBinning = (TH2D*)SecondaryHistTemplate->Clone("hSecondaryBinning");
+
778 hSecondaryBinning->SetTitle("SecondaryBinning");
+
779
+
780 nPrimaryBinsX = hPrimaryBinning->GetNbinsX();
+
781 nPrimaryBinsY = hPrimaryBinning->GetNbinsY();
+ +
783
+
784 nSecondaryBinsX = hSecondaryBinning->GetNbinsX();
+
785 nSecondaryBinsY = hSecondaryBinning->GetNbinsY();
+ +
787
+
788 if (!RebinMode) {
+ +
790 }
+
791 else {
+
792 ProbList = new FLOAT_T[nMaxBin];
+
793 }
+
794
+
795 ResizeArrays();
+
796 FillArrays();
+
797}
+
+
798
+
+ +
800 hPrimaryOscillogram = std::vector< std::vector< std::vector< TH2D* > > >(nNeutrinoSigns);
+
801 hSecondaryOscillogram = std::vector< std::vector< std::vector< TH2D* > > >(nNeutrinoSigns);
+
802
+ + +
805
+
806 for (int i=0;i<nNeutrinoSigns;i++) {
+
807 if (i==0) {NeutrinoSign = "#bar{#nu}";}
+
808 else {NeutrinoSign = "#nu";}
+
809
+ + +
812
+
813 for (int j=0;j<nInitialFlavours;j++) {
+ + +
816
+
817 for (int k=0;k<nFinalFlavours;k++) {
+
818 if (j==0) {HistTitle = NeutrinoSign+"_{e} #rightarrow ";}
+
819 else if (j==1) {HistTitle = NeutrinoSign+"_{#mu} #rightarrow ";}
+
820 else {HistTitle = NeutrinoSign+"_{#tau} #rightarrow ";}
+
821
+
822 if (k==0) {HistTitle += NeutrinoSign+"_{e}";}
+
823 else if (k==1) {HistTitle += NeutrinoSign+"_{#mu}";}
+
824 else {HistTitle += NeutrinoSign+"_{#tau}";}
+
825
+
826 hPrimaryOscillogram[i][j][k] = (TH2D*)hPrimaryBinning->Clone(Form("hPrimaryOscillogram_%i_%i_%i",i,j,k));
+
827 hPrimaryOscillogram[i][j][k]->SetTitle(HistTitle+";log_{10}(E_{#nu}) (GeV);Cosine Zenith");
+
828 hSecondaryOscillogram[i][j][k] = (TH2D*)hSecondaryBinning->Clone(Form("hSecondaryOscillogram_%i_%i_%i",i,j,k));
+
829 hSecondaryOscillogram[i][j][k]->SetTitle(HistTitle+";log_{10}(E_{#nu}) (GeV);Cosine Zenith");
+
830
+
831 }
+
832 }
+
833 }
+
834
+ +
836}
+
+
837
+
+ +
839 for (int i=0;i<nNeutrinoSigns;i++) {
+
840 for (int j=0;j<nInitialFlavours;j++) {
+
841 for (int k=0;k<nFinalFlavours;k++) {
+
842 delete hPrimaryOscillogram[i][j][k];
+
843 }
+
844 }
+
845 }
+
846}
+
+
847
+
+ + +
850 for (int i=0;i<nNeutrinoSigns;i++) {
+
851 for (int j=0;j<nInitialFlavours;j++) {
+
852 for (int k=0;k<nFinalFlavours;k++) {
+
853 delete hPrimaryOscillogram[i][j][k];
+
854 delete hSecondaryOscillogram[i][j][k];
+
855 }
+
856 hPrimaryOscillogram[i][j].clear();
+
857 hSecondaryOscillogram[i][j].clear();
+
858 }
+
859 hPrimaryOscillogram[i].clear();
+
860 hSecondaryOscillogram[i].clear();
+
861 }
+
862 hPrimaryOscillogram.clear();
+
863 hSecondaryOscillogram.clear();
+
864 }
+
865
+
866 hPrimaryBinning->Reset();
+
867 hSecondaryBinning->Reset();
+
868
+
869 PrimaryXBinEdges.clear();
+
870 PrimaryYBinEdges.clear();
+
871
+
872 SecondaryXBinEdges.clear();
+
873 SecondaryYBinEdges.clear();
+
874
+
875 for (int i=0;i<nPrimaryBins;i++) {
+
876 PrimaryBinContrib_Bin[i].clear();
+ +
878 }
+
879 PrimaryBinContrib_Bin.clear();
+ +
881
+
882 nPrimaryBinsX = -1;
+
883 nPrimaryBinsY = -1;
+
884 nPrimaryBins = -1;
+
885
+
886 nSecondaryBinsX = -1;
+
887 nSecondaryBinsY = -1;
+
888 nSecondaryBins = -1;
+
889
+
890 delete ProbList;
+
891
+ +
893}
+
+
894
+
+ +
896 for (int i=0;i<6;i++) {
+
897 foscpar[i] = -999;
+
898 }
+
899 fprodH = -999;
+
900 fYp_Val = -1.;
+
901 for (int i=0;i<4;i++) {
+
902 fBinning[i] = -1;
+
903 }
+
904}
+
+
905
+ +
913
+
+
914bool Oscillator::isAlreadyCalculated(double* oscpar, double prodH, double Yp_Val) {
+
915
+
916 bool fAlreadyCalculated = true;
+
917 for (int i=0;i<nOscpars;i++) {
+
918 if (oscpar[i]!=foscpar[i]) {
+
919 fAlreadyCalculated = false;
+
920 }
+
921 }
+
922 if (prodH!=fprodH) {
+
923 fAlreadyCalculated = false;
+
924 }
+
925 if (Yp_Val!=fYp_Val) {
+
926 fAlreadyCalculated = false;
+
927 }
+
928 if (fBinning[0] != nCoarseCosz) {
+
929 fAlreadyCalculated = false;
+
930 }
+
931 if (fBinning[1] != nCoarseEnergy) {
+
932 fAlreadyCalculated = false;
+
933 }
+
934 if (fBinning[2] != nFineCosz) {
+
935 fAlreadyCalculated = false;
+
936 }
+
937 if (fBinning[3] != nFineEnergy) {
+
938 fAlreadyCalculated = false;
+
939 }
+
940 return fAlreadyCalculated;
+
941}
+
+
942
+
+
943void Oscillator::SaveParams(double* oscpar, double prodH, double Yp_Val) {
+
944 for (int i=0;i<nOscpars;i++) {
+
945 foscpar[i] = oscpar[i];
+
946 }
+
947 fprodH = prodH;
+
948 fYp_Val = Yp_Val;
+ + +
951 fBinning[2] = nFineCosz;
+ +
953}
+
+
954
+
+
955void Oscillator::FillOscillogram(double* oscpar, double prodH, double Yp_Val) {
+ +
957 return;
+
958 }
+
959
+ +
961
+
962 //DB oscpar, as given from MaCh3, expresses the mixing angles in sin^2(theta). The propagator expects them in theta
+
963 for (int iOscPar=0;iOscPar<3;iOscPar++) {
+
964 if (oscpar[iOscPar] < 0) {
+
965 std::cerr << "Invalid oscillation parameter (Can not sqrt this value)!:" << oscpar[iOscPar] << std::endl;
+
966 throw;
+
967 }
+
968 }
+
969
+
970 /*
+
971 // Get how many layers are in the propagator's earth file
+
972 nLayers = propagator->getNlayerBoundaries();
+
973 std::vector<FLOAT_T> chemicalComposition_Dial(nLayers);
+
974 // The electron density in the first layer is pretty well known, so don't change
+
975 chemicalComposition_Dial[0] = 0.497;
+
976 chemicalComposition_Dial[1] = 0.497;
+
977 // Starting layer for different density
+
978 int start = 2;
+
979 if (nLayers == 6) {
+
980 start = 3;
+
981 chemicalComposition_Dial[2] = 0.497;
+
982 }
+
983 for (int i = start; i < nLayers; ++i) {
+
984 chemicalComposition_Dial[i] = Yp_Val;
+
985 }
+
986
+
987 if (UseChemicalComposition) {
+
988 propagator->setChemicalComposition(chemicalComposition_Dial);
+
989 } else {
+
990 propagator->setChemicalComposition(chemicalComposition_Nom);
+
991 }
+
992 */
+
993
+
994 //propagator->setNeutrinoMasses(dm12sq, dm23sq);
+
995 propagator->setNeutrinoMasses(7.9e-5,2.5e-3);
+
996 //propagator->setProductionHeight(prodH);
+
997 propagator->setProductionHeight(22.0);
+
998
+
999 for (int i=0;i<nNeutrinoSigns;i++) {
+
1000
+
1001 if (NeutrinoTypes[i]==cudaprob3::Antineutrino) {
+
1002 // DB, Haven't really thought about it, but prob3++ sets dcp->-dcp here: https://github.com/rogerwendell/Prob3plusplus/blob/fd189e232e96e2c5ebb2f7bd3a5406b288228e41/BargerPropagator.cc#L235
+
1003 // Copying that behaviour gives same behaviour as prob3++/probGPU
+
1004
+
1005 //DB Liban has now implemented a check to deal with the -1 factor inside CUDAProb3::setMNS
+
1006 propagator->setMNSMatrix(0.5695951908800630486710466089860865317151404697548723, 0.1608752771983210967007023071793306595103776477788280, 0.7853981633974483096156608458198757210492923498437764, 0., -1);
+
1007 } else {
+
1008 propagator->setMNSMatrix(0.5695951908800630486710466089860865317151404697548723, 0.1608752771983210967007023071793306595103776477788280, 0.7853981633974483096156608458198757210492923498437764, 0., 1);
+
1009 }
+
1010
+
1011
+
1012 propagator->calculateProbabilities(NeutrinoTypes[i]);
+
1013
+
1014 for (int j=0;j<nInitialFlavours;j++) {
+
1015 for (int k=0;k<nFinalFlavours;k++) {
+
1016
+
1017 FLOAT_T prob = propagator->getProbability(0,0,ProbType::e_e);
+
1018 std::cout << prob << std::endl;
+
1019 throw;
+
1020
+
1021#ifdef DEBUG
+ + + +
1025 FLOAT_T dm12sq = oscpar[3];
+
1026 FLOAT_T dm23sq = oscpar[4];
+
1027 FLOAT_T dcp = oscpar[5];
+
1028
+
1029 //DB This part could be replaced with pointers
+
1030 for (int iter=0;iter<nSecondaryBins;iter++) {
+ + +
1033 FLOAT_T prob = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1034 if (std::isnan(prob)) {
+
1035 std::cerr << "Prob is NAN!" << std::endl;
+
1036 std::cerr << "In Flav:" << j << std::endl;
+
1037 std::cerr << "Out Flav:" << k << std::endl;
+
1038 std::cerr << "NeutrinoType:" << NeutrinoTypes[i] << std::endl;
+
1039
+
1040 std::cerr << "theta12:" << theta12 << std::endl;
+
1041 std::cerr << "theta13:" << theta13 << std::endl;
+
1042 std::cerr << "theta23:" << theta23 << std::endl;
+
1043 std::cerr << "dcp:" << dcp << std::endl;
+
1044
+
1045 std::cerr << "prodH:" << prodH << std::endl;
+
1046 std::cerr << "\n" << std::endl;
+
1047
+
1048 for (int iOscPar=0;iOscPar<3;iOscPar++) {
+
1049 std::cerr << "iOscPar:" << iOscPar << std::endl;
+
1050 std::cerr << "oscpar[iOscPar]:" << oscpar[iOscPar] << std::endl;
+
1051 std::cerr << "sqrt(oscpar[iOscPar]):" << sqrt(oscpar[iOscPar]) << std::endl;
+
1052 std::cerr << "asin(sqrt(oscpar[iOscPar])):" << asin(sqrt(oscpar[iOscPar])) << std::endl;
+
1053 std::cerr << "\n" << std::endl;
+
1054 }
+
1055
+
1056 throw;
+
1057 }
+
1058
+
1059 ProbList[iter] = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1060 }
+
1061
+
1062#else
+
1063 propagator->getProbabilityArr(ProbList, OscChannels[j][k]);
+
1064
+
1065
+
1066 for (int iter=0;iter<nSecondaryBins;iter++) {
+ + +
1069 ProbList[iter] = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1070 std::cout << "xBin:" << xBin << " | yBin:" << yBin << " | iter:" << iter << " | ProbList[iter]:" << ProbList[iter] << std::endl;
+
1071 }
+
1072#endif
+
1073 // Sometimes CUDAProb3 can return *slightly* unphysical oscillation probabilities
+
1074 for (int iter=0;iter<nSecondaryBins;iter++) {
+
1075 ProbList[iter] = ProbList[iter] > 0 ? ProbList[iter] : 0;
+
1076 ProbList[iter] = (fabs(ProbList[iter]-1.0) < 1.0e-4) ? 1.0 : ProbList[iter];
+
1077 }
+
1078
+ +
1080 if (fFillHistograms) {
+ + +
1083 }
+
1084
+
1085 }
+
1086 }
+
1087 }
+
1088
+
1089}
+
+
1090
+ +
1108
+
+ +
1110 if (hPrimaryOscillogram.size()==0) {
+
1111 std::cout << "Primary oscillograms are not initialised so I'm not going to try and fill them" << std::endl;
+
1112 throw;
+
1113 }
+
1114
+ + +
1117
+
1118 for (int iBin=0;iBin<nPrimaryBins;iBin++) {
+
1119 int xBin = int(iBin%nPrimaryBinsX)+1;
+
1120 int yBin = int(iBin/nPrimaryBinsX)+1;
+
1121
+ +
1123 }
+
1124}
+
+
1125
+
+ +
1127 if (hSecondaryOscillogram.size()==0) {
+
1128 std::cout << "Secondary oscillograms are not initialised so I'm not going to try and fill them" << std::endl;
+
1129 throw;
+
1130 }
+
1131
+ +
1133
+
1134 for (int iter=0;iter<nSecondaryBins;iter++) {
+
1135 int yBin = int(iter%nSecondaryBinsY)+1;
+
1136 int xBin = int(iter/nSecondaryBinsY)+1;
+
1137
+ +
1139 }
+
1140}
+
+
1141
+
+ +
1143 if (hPrimaryOscillogram.size()==0) {
+
1144 std::cout << "Oscillograms are not initialised so I'm not going to try and return them" << std::endl;
+
1145 throw;
+
1146 }
+
1147
+
1148
+
1149 std::vector<TH2D*> Array;
+
1150 TH2D* Hist;
+
1151
+ +
1153
+
1154 for (int i=0;i<nNeutrinoSigns;i++) {
+
1155 for (int j=0;j<nInitialFlavours;j++) {
+
1156 for (int k=0;k<nFinalFlavours;k++) {
+
1157
+
1158 if (fPrimary) {
+
1159 Hist = (TH2D*)hPrimaryOscillogram[i][j][k]->Clone(Form("hPrimaryArray_%i_%i_%i",i,j,k));
+
1160 }
+
1161 else {
+
1162 Hist = (TH2D*)hSecondaryOscillogram[i][j][k]->Clone(Form("hSecondaryArray_%i_%i_%i",i,j,k));
+
1163 }
+
1164
+
1165 Array.push_back(Hist);
+
1166 }
+
1167 }
+
1168 }
+
1169
+
1170 return Array;
+
1171}
+
+
1172
+
+ + + + +
1177
+ +
1179
+ +
1181 std::cout << "Something is wrong! Oscillation probability not calculated for neutrino flavour requested" << std::endl;
+
1182 std::cout << "NInitialFlavours:" << nInitialFlavours << " | Requested Flavour:" << InitialNeutrinoIndex << std::endl;
+
1183 std::cout << "NFinalFlavours:" << nFinalFlavours << " | Requested Flavour:" << FinalNeutrinoIndex << std::endl;
+
1184 std::exit(-1);
+
1185 }
+
1186
+
1187 int xBin = -999;
+
1188 if (IsLinear) {
+
1189 xBin = hPrimaryBinning->GetXaxis()->FindBin(NeutrinoEnergy);
+
1190 } else {
+
1191 xBin = hPrimaryBinning->GetXaxis()->FindBin(log10(NeutrinoEnergy));
+
1192 }
+
1193 int yBin = hPrimaryBinning->GetYaxis()->FindBin(Cosz);
+
1194
+
1195 if (xBin==-999) {
+
1196 std::cout << "xBin not set in Oscillator::ReturnProb. Quitting.." << std::endl;
+
1197 throw;
+
1198 }
+
1199
+ +
1201}
+
+
1202
+
+ +
1204#ifdef USE_GPU
+
1205 std::cout << "-------------------------" << std::endl;
+
1206 std::cout << "Set Oscillator to use GPU" << std::endl;
+
1207 std::cout << "-------------------------" << std::endl;
+
1208#else
+
1209 std::cout << "-------------------------" << std::endl;
+
1210 std::cout << "Set Oscillator to use CPU" << std::endl;
+
1211 std::cout << "-------------------------" << std::endl;
+
1212#endif
+
1213}
+
+
1214
+
+ +
1216 if (hPrimaryOscillogram.size()==0) {
+
1217 std::cout << "Oscillograms are not initialised so I'm not going to try and save them" << std::endl;
+
1218 throw;
+
1219 }
+
1220
+
1221 std::cout << "Saving Oscillograms to:" << FileName << std::endl;
+
1222 TFile* File = new TFile(FileName,"RECREATE");
+
1223
+
1224 File->mkdir("FineOsc");
+
1225 File->cd("FineOsc");
+
1226 for (int i=0;i<nNeutrinoSigns;i++) {
+
1227 for (int j=0;j<nInitialFlavours;j++) {
+
1228 for (int k=0;k<nFinalFlavours;k++) {
+
1229 hPrimaryOscillogram[i][j][k]->Write();
+
1230 }
+
1231 }
+
1232 }
+
1233
+
1234 File->mkdir("CoarseOsc");
+
1235 File->cd("CoarseOsc");
+
1236 for (int i=0;i<nNeutrinoSigns;i++) {
+
1237 for (int j=0;j<nInitialFlavours;j++) {
+
1238 for (int k=0;k<nFinalFlavours;k++) {
+
1239 hSecondaryOscillogram[i][j][k]->Write();
+
1240 }
+
1241 }
+
1242 }
+
1243
+
1244 File->Close();
+
1245}
+
+
1246
+
+ + +
1249 std::cout << "Generated and Detected neutrino flavour are different signs - Quitting" << std::endl;
+
1250 std::cout << "GenNeutrinoFlavour:" << GenNeutrinoFlavour << std::endl;
+
1251 std::cout << "DetNeutrinoFlavour:" << DetNeutrinoFlavour << std::endl;
+
1252 throw;
+
1253 }
+
1254
+ + + +
1258
+ +
1260
+
1261 int xBin = -999;
+
1262 if (IsLinear) {
+
1263 xBin = hPrimaryBinning->GetXaxis()->FindBin(NeutrinoEnergy)-1;
+
1264 } else {
+
1265 xBin = hPrimaryBinning->GetXaxis()->FindBin(log10(NeutrinoEnergy))-1;
+
1266 }
+
1267 int yBin = hPrimaryBinning->GetYaxis()->FindBin(TrueCZ)-1;
+
1268
+
1269 if (xBin==-999) {
+
1270 std::cout << "xBin not set in Oscillator::ReturnProb. Quitting.." << std::endl;
+
1271 throw;
+
1272 }
+
1273
+
1274 int Bin = yBin*nPrimaryBinsX+xBin;
+
1275
+ +
1277 std::cout << "iPrimaryHist out of range - Given:" << iPrimaryHist << std::endl;
+
1278 throw;
+
1279 }
+
1280
+
1281 if ((Bin<0)||(Bin>nPrimaryBins)) {
+
1282 std::cout << "Bin out of range - Given:" << Bin << std::endl;
+
1283 throw;
+
1284 }
+
1285
+ +
1287}
+
+
1288
+
+ +
1290 std::cout << Box1.BL.x << "," << Box1.BL.y << " | " << Box1.UR.x << "," << Box1.UR.y << std::endl;
+
1291}
+
+
1292
+
+ +
1294 if (Box1.UR.y <= Box1.BL.y) return false;
+
1295 if (Box1.UR.x <= Box1.BL.x) return false;
+
1296 return true;
+
1297}
+
+
1298
+
1299//Find Fraction of Box2 overlapping Box1
+
+ +
1301 double Box2_xLength = Box2.UR.x-Box2.BL.x;
+
1302 double Box2_yLength = Box2.UR.y-Box2.BL.y;
+ +
1304
+
1305 double Area_Overlapped = 0;
+
1306 double xLength_Overlapped = std::min(Box1.UR.x,Box2.UR.x) - std::max(Box1.BL.x,Box2.BL.x);
+
1307 double yLength_Overlapped = std::min(Box1.UR.y,Box2.UR.y) - std::max(Box1.BL.y,Box2.BL.y);
+
1308
+
1309 if (xLength_Overlapped > 0 && yLength_Overlapped > 0) {
+ +
1311 }
+
1312
+ +
1314
+ +
1316}
+
+
1317
+
+ +
1319 std::cout << "-----------------------------" << std::endl;
+
1320 std::cout << "Initialising Propagator:" << std::endl;
+
1321 std::cout << " - nEnergyBins : " << nSecondaryBinsX << std::endl;
+
1322 std::cout << " - nCoszBins : " << nSecondaryBinsY << std::endl;
+
1323 std::cout << std::endl;
+
1324
+
1325 /*
+
1326 int nEnergy = nSecondaryBinsX;
+
1327 int nCosine = nSecondaryBinsY;
+
1328
+
1329#ifdef USE_GPU
+
1330 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCudaPropagatorSingle<FLOAT_T>(0,nCosine, nEnergy)); // Single-GPU propagator
+
1331#else
+
1332 int nThreads = 1;
+
1333 #pragma omp parallel
+
1334 {
+
1335#pragma omp single
+
1336 nThreads = omp_get_num_threads();
+
1337 }
+
1338
+
1339 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCpuPropagator<FLOAT_T>(nCosine, nEnergy, nThreads)); // MultiThread CPU propagator
+
1340#endif
+
1341
+
1342 propagator->setEnergyList(SecondaryXBinEvalPoints);
+
1343 propagator->setCosineList(SecondaryYBinEvalPoints);
+
1344 */
+
1345
+
1346 int nThreads = 1;
+
1347 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCpuPropagator<FLOAT_T>(1, 1, nThreads));
+
1348
+
1349 std::vector<FLOAT_T> Energy;
+
1350 Energy.push_back(0.0035);
+
1351 propagator->setEnergyList(Energy);
+
1352
+
1353 std::vector<FLOAT_T> Cosine;
+
1354 Cosine.push_back(-0.99895);
+
1355 propagator->setCosineList(Cosine);
+
1356
+ +
1358 std::cout << "Loading Earth density from: " << EarthDensityFile << std::endl;
+
1359
+
1360 propagator->setDensityFromFile(EarthDensityFile.Data());
+
1361
+ + +
1364 } else {
+
1365 std::cout << "Not using production height averaging" << std::endl;
+
1366 }
+
1367
+
1368
+
1369 std::cout << "--------------------------------------------" << std::endl;
+
1370}
+
+
1371
+
+ +
1373 delete propagator.release();
+
1374}
+
+
1375
+
+ + +
1378
+ +
1380 std::cout << "Not using PREM model Chemical composition dial values" << std::endl;
+
1381
+
1382 // Get how many layers are in the propagator's earth file
+
1383 nLayers = propagator->getNlayerBoundaries();
+
1384 chemicalComposition_Nom = std::vector<FLOAT_T>(nLayers);
+
1385 for (int i = 0; i < nLayers; ++i) {
+ +
1387 }
+
1388 }
+
1389}
+
+
1390
+
+ +
1392
+ +
1394 NeutrinoTypes[0] = cudaprob3::Antineutrino;
+
1395 NeutrinoTypes[1] = cudaprob3::Neutrino;
+
1396
+ +
1398 NeutrinoTypes_Names[0] = "Antineutrino";
+
1399 NeutrinoTypes_Names[1] = "Neutrino";
+
1400
+ +
1402 for (int i=0;i<nInitialFlavours;i++) {
+
1403 OscChannels[i].resize(nFinalFlavours);
+
1404 }
+
1405 OscChannels[0][0] = cudaprob3::e_e;
+
1406 OscChannels[0][1] = cudaprob3::e_m;
+
1407 OscChannels[0][2] = cudaprob3::e_t;
+
1408 OscChannels[1][0] = cudaprob3::m_e;
+
1409 OscChannels[1][1] = cudaprob3::m_m;
+
1410 OscChannels[1][2] = cudaprob3::m_t;
+
1411
+ +
1413 for (int i=0;i<nInitialFlavours;i++) {
+ +
1415 }
+
1416 OscChannels_Names[0][0] = "e_e";
+
1417 OscChannels_Names[0][1] = "e_m";
+
1418 OscChannels_Names[0][2] = "e_t";
+
1419 OscChannels_Names[1][0] = "m_e";
+
1420 OscChannels_Names[1][1] = "m_m";
+
1421 OscChannels_Names[1][2] = "m_t";
+
1422}
+
+
1423
+
+ +
1425{
+
1426 // If the earth density file is null, set the default
+
1427 if (EarthDensityFile.Length() == 0)
+
1428 {
+
1429 std::string InputLocation = "/models/PREM_4layer_cubic.dat";
+
1430 if (std::getenv("CUDAProb3_DIR") != NULL)
+
1431 {
+
1432 InputLocation.insert(0, std::string(std::getenv("CUDAProb3_DIR"))+"/");
+
1433 }
+
1434 else
+
1435 {
+
1436 std::cerr<<" Envioremnt CUDAProb3_DIR is not defined, did you source setup.MaCh3.sh?"<<std::endl;
+
1437 throw;
+
1438 }
+ +
1440 std::cout << "No specified Earth density file - Defaulting to: " << EarthDensityFile << "\n" << std::endl;
+
1441 }
+
1442}
+
+
1443
+
+ +
1445 std::cout << "Loading Production Height Probabilities from: " << ProductionHeightFileName << std::endl;
+
1446
+ +
1448 if (!File || File->IsZombie()) {
+
1449 std::cerr << "Can not find file:" << ProductionHeightFileName << std::endl;
+
1450 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1451 throw;
+
1452 }
+
1453
+
1454 int nNuTypes = 2;
+
1455 int nNuFlav = 3;
+
1456
+
1457 std::vector< std::vector<TString> > NuFlavNames(2);
+
1458 NuFlavNames[0].resize(3);
+
1459 NuFlavNames[1].resize(3);
+
1460
+
1461 NuFlavNames[0][0] = "nue";
+
1462 NuFlavNames[0][1] = "numu";
+
1463 NuFlavNames[0][2] = "nutau";
+
1464 NuFlavNames[1][0] = "nuebar";
+
1465 NuFlavNames[1][1] = "numubar";
+
1466 NuFlavNames[1][2] = "nutaubar";
+
1467
+
1468 std::vector< std::vector<TH3D*> > vecHist;
+
1469 vecHist.resize(nNuTypes);
+
1470 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1471 vecHist[iNuType].resize(nNuFlav);
+
1472 }
+
1473
+
1474 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1475 for (int iNuFlav=0;iNuFlav<nNuFlav;iNuFlav++) {
+
1476 TString HistName = "ProductionHeight_"+NuFlavNames[iNuType][iNuFlav];
+
1477 TH3D* Hist = (TH3D*)File->Get(HistName);
+
1478
+
1479 if (!Hist) {
+
1480 std::cerr << HistName << " not found in File:" << ProductionHeightFileName << std::endl;
+
1481 File->ls();
+
1482 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1483 throw;
+
1484 }
+
1485
+ +
1487
+ +
1489 std::cerr << HistName << " has different number of Z bins:" << vecHist[iNuType][iNuFlav]->GetNbinsZ() << std::endl;
+
1490 std::cerr << "Expected:" << nProductionHeightAveragingBins << std::endl;
+
1491 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1492 throw;
+
1493 }
+
1494
+ +
1496 std::cerr << HistName << " has different number of X bins:" << vecHist[iNuType][iNuFlav]->GetNbinsX() << std::endl;
+
1497 std::cerr << "Expected:" << nSecondaryBinsX << std::endl;
+
1498 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1499 throw;
+
1500 }
+
1501
+ +
1503 std::cerr << HistName << " has different number of Y bins:" << vecHist[iNuType][iNuFlav]->GetNbinsY() << std::endl;
+
1504 std::cerr << "Expected:" << nSecondaryBinsY << std::endl;
+
1505 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1506 throw;
+
1507 }
+
1508 }
+
1509 }
+
1510
+ + +
1513
+
1514 int index = 0;
+
1515 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1516 for(int iNuFlav=0;iNuFlav<nNuFlav;iNuFlav++) {
+ + +
1519 double Total = 0.;
+
1520
+ +
1522 double dP_dh = vecHist[iNuType][iNuFlav]->GetBinContent(iSecondaryBinsX+1,iSecondaryBinsY+1,iProductionHeight+1); //Taken from MTuple
+
1523 //double dP_dh = (1.0/(double)nProductionHeightAveragingBins)/vecHist[iNuType][iNuFlav]->GetZaxis()->GetBinWidth(iProductionHeight+1); //Flat Probability
+
1524
+
1525 double dh = vecHist[iNuType][iNuFlav]->GetZaxis()->GetBinWidth(iProductionHeight+1);
+
1526
+ + +
1529
+
1530 index += 1;
+
1531 }
+
1532
+
1533 if (fabs(Total-1.) > 1e-6) {
+
1534 std::cerr << "Probabilities integrated over production height do not sum to 1" << std::endl;
+
1535 std::cerr << "Total:" << Total << std::endl;
+ +
1537 std::cout << "iProductionHeight:" << iProductionHeight << " | dP_dh:" << vecHist[iNuType][iNuFlav]->GetBinContent(iSecondaryBinsX+1,iSecondaryBinsY+1,iProductionHeight+1) << std::endl;
+
1538 }
+
1539 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1540 throw;
+
1541 }
+
1542 }
+
1543 }
+
1544 }
+
1545 }
+
1546
+ + + +
1550 std::cerr << "Invalid Production height bin edges found in TH3Ds from File:" << ProductionHeightFileName << std::endl;
+
1551 std::cerr << "Expected:" << std::endl;
+ +
1553 std::cerr << ProductionHeightBinEdges[jBin] << ", ";
+
1554 }
+
1555 std::cerr << std::endl;
+
1556 std::cerr << "Got:" << std::endl;
+ +
1558 std::cerr << vecHist[0][0]->GetZaxis()->GetBinLowEdge(jBin) << ", ";
+
1559 }
+
1560 std::cerr << std::endl;
+
1561 throw;
+
1562 }
+
1563 }
+
1564
+
1565 File->Close();
+
1566
+
1567 /*
+
1568 propagator->SetNumberOfProductionHeightBinsForAveraging(nProductionHeightAveragingBins);
+
1569 propagator->setProductionHeightList(ProductionHeightProbabilities,ProductionHeightBinEdges);
+
1570 */
+
1571}
+
+
1572
+ +
1582
+
+ +
1584 switch (ArrayConfig) {
+
1585 case 0:
+
1586 std::cout << "Using standard Oscillator configuration where a secondary bin only has one contribution" << std::endl;
+
1587 break;
+
1588 case 1:
+
1589 std::cout << "Using ManyContrib Oscillator configuration where a secondary bin has many contributions weighted by area" << std::endl;
+
1590 break;
+
1591 default:
+
1592 std::cout << "Unknown Oscillator Config:" << ArrayConfig << std::endl;
+
1593 throw;
+
1594 }
+
1595}
+
+
1596
+
+ +
1598 bool ApplyChanges = false;
+
1599 if (ArrayConfig_ != ArrayConfig) {ApplyChanges = true;}
+
1600
+ + +
1603
+
1604 if (ApplyChanges) {
+
1605 DeleteArrays();
+
1606 ResizeArrays();
+
1607 FillArrays();
+
1608 }
+
1609
+
1610}
+
+
1611
+
+ +
1613 std::cout << "\n" << "Initialising oscillograms with ";
+
1614 if (IsLinear) {
+
1615 std::cout << "Linear Binning:" << std::endl;
+
1616 } else {
+
1617 std::cout << "Logarithmic Binning:" << std::endl;
+
1618 }
+
1619
+
1620 std::cout << "---------------------------------------------------------" << std::endl;
+
1621 std::cout << std::setw(16) << "nCoarseCosz:" << " | " << std::setw(16) <<nCoarseCosz << std::endl;
+
1622 std::cout << std::setw(16) << "lCoarseCosz:" << " | " << std::setw(16) <<lCoarseCosz << std::endl;
+
1623 std::cout << std::setw(16) << "hCoarseCosz:" << " | " << std::setw(16) <<hCoarseCosz << std::endl;
+
1624 std::cout << std::endl;
+
1625 std::cout << std::setw(16) << "nCoarseEnergy:" << " | " << std::setw(16) <<nCoarseEnergy << std::endl;
+
1626 std::cout << std::setw(16) << "lCoarseEnergy:" << " | " << std::setw(16) <<lCoarseEnergy << std::endl;
+
1627 std::cout << std::setw(16) << "hCoarseEnergy:" << " | " << std::setw(16) <<hFineCosz << std::endl;
+
1628 std::cout << std::endl;
+
1629 std::cout << std::setw(16) << "nFineCosz:" << " | " << std::setw(16) <<nFineCosz << std::endl;
+
1630 std::cout << std::setw(16) << "nFineEnergy:" << " | " << std::setw(16) <<nFineEnergy << std::endl;
+
1631 std::cout << std::endl;
+
1632}
+
+
1633
+
+ +
1635
+
1636 switch (Switcher) {
+
1637 case 0:
+
1638 return nCoarseCosz;
+
1639 case 1:
+
1640 return nCoarseEnergy;
+
1641 case 2:
+
1642 if (useFineBinsPerBin) {
+
1643 return nFineCosz/nCoarseCosz;
+
1644 } else {
+
1645 return nFineCosz;
+
1646 }
+
1647 case 3:
+
1648 if (useFineBinsPerBin) {
+ +
1650 } else {
+
1651 return nFineEnergy;
+
1652 }
+
1653 default:
+
1654 std::cerr << "Unknown option given to Ocillator::GetOscillogramNBins :" << Switcher << std::endl;
+
1655 throw;
+
1656 }
+
1657
+
1658 return -1;
+
1659}
+
+
1660
+
+
1661std::vector<double> Oscillator::linspace(double Emin, double Emax, int nDiv){
+
1662 if (nDiv==0) {
+
1663 std::cout << "Requested linear spacing distribution with 0 divisions" << std::endl;
+
1664 throw;
+
1665 }
+
1666
+
1667 std::vector<double> linpoints(nDiv+1, 0.0);
+
1668
+
1669 double step_lin = (Emax - Emin)/double(nDiv);
+
1670
+
1671 double EE = Emin;
+
1672
+
1673 for (int i=0; i<nDiv; i++) {
+
1674 if (fabs(EE)<1e-6) {EE = 0.;}
+
1675
+
1676 linpoints[i] = EE;
+
1677 EE += step_lin;
+
1678 }
+
1679
+
1680 linpoints[nDiv] = Emax;
+
1681
+
1682 return linpoints;
+
1683}
+
+
1684
+
+
1685std::vector<double> Oscillator::logspace(double Emin, double Emax, int nDiv){
+
1686 if (nDiv==0) {
+
1687 std::cout << "Requested log spacing distribution with 0 divisions" << std::endl;
+
1688 throw;
+
1689 }
+
1690
+
1691 std::vector<double> logpoints(nDiv+1, 0.0);
+
1692 logpoints[0]=Emin;
+
1693
+
1694 if (Emin == 0.) {
+
1695 Emin = 0.01;
+
1696 }
+
1697
+
1698 double Emin_log,Emax_log;
+
1699 Emin_log = log10(Emin);
+
1700 Emax_log = log10(Emax);
+
1701
+
1702 double step_log = (Emax_log - Emin_log)/double(nDiv);
+
1703
+
1704 double EE = Emin_log+step_log;
+
1705
+
1706 for (int i=1; i<nDiv; i++) {
+
1707 logpoints[i] = pow(10.,EE);
+
1708 EE += step_log;
+
1709 }
+
1710
+ +
1712
+
1713 return logpoints;
+
1714}
+
+
1715
+
+
1716std::vector<double> Oscillator::ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector<double> CoarseBinning) {
+
1717
+
1718 std::vector<double> ReturnVec;
+
1719 int nCoarse = (int)CoarseBinning.size()-1;
+ +
1721
+
1722 for (int iCoarseBin=0;iCoarseBin<nCoarse;iCoarseBin++) {
+ +
1724
+ +
1726 ReturnVec.push_back(tmpVec[iFineBin]);
+
1727 }
+
1728 }
+
1729 ReturnVec.push_back(CoarseBinning[nCoarse]);
+
1730
+
1731 return ReturnVec;
+
1732}
+
+ +
double FLOAT_T
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
double fineCoarseRatioEnergy
+ +
void FillPrimaryOscillogram(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+ +
void RebinOscillogram(int Switcher, std::vector< double > NewBinning)
+ +
std::vector< std::vector< ProbType > > OscChannels
+ + +
void SetOscillatorConfig(int ArrayConfig_=0)
+
std::vector< double > logspace(double Emin, double Emax, int nDiv)
+ +
std::vector< double > PrimaryXBinEdges
+ +
std::unique_ptr< AtmosCpuPropagator< FLOAT_T > > propagator
+
int nProductionHeightAveragingBins
+ + +
void SaveOscillogramsToFile(TString FileName)
+
std::vector< double > ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector< double > CoarseBinning)
+ + +
std::vector< FLOAT_T > SecondaryXBinEvalPoints
+
std::vector< std::vector< std::vector< TH2D * > > > hPrimaryOscillogram
+ +
int GetOscillogramNBins(int Switcher)
+
void FillOscillogram(double *oscpar, double prodH, double Yp_Val=0.468)
+ +
void InitOscillogram(TH2D *PrimaryHistTemplate, TH2D *SecondaryHistTemplate)
+ + + + +
std::vector< TString > NeutrinoTypes_Names
+
double lProductionHeightRange
+
std::vector< FLOAT_T > PrimaryXBinEvalPoints
+ + +
bool UseProductionHeightAveraging
+ + +
bool isAlreadyCalculated(double *oscpar, double prodH, double Yp_Val)
+
double fineCoarseRatioCosz
+ + +
std::vector< double > PrimaryYBinEdges
+
std::vector< FLOAT_T > PrimaryYBinEvalPoints
+ + + +
unsigned int nPrimaryHists
+
std::vector< std::vector< int > > PrimaryBinContrib_Bin
+ + + +
double ** hPrimaryOscillogram_Arr
+
std::string InputFileName
+
std::vector< std::vector< double > > PrimaryBinContrib_Weight
+ + + + +
double hProductionHeightRange
+ +
std::vector< FLOAT_T > chemicalComposition_Nom
+ + +
void FillArrays_ManyContrib_Area()
+
std::vector< FLOAT_T > ProductionHeightBinEdges
+
std::string SecondaryBinningTemplateName
+
std::vector< double > SecondaryYBinEdges
+
bool IsValidBox(Box Box1)
+
void ResizeOscillogram(bool CoarseChanged, bool FineChanged)
+ +
TString EarthDensityFile
+
std::vector< TH2D * > ReturnOscillogramArray(int fPrimary)
+
void PrintBox(Box Box1)
+
void SaveParams(double *oscpar, double prodH, double Yp_Val)
+
std::vector< double > linspace(double Emin, double Emax, int nDiv)
+
double * hPrimaryCounter_Arr
+ +
std::vector< std::vector< TString > > OscChannels_Names
+
int NeutrinoFlavourToIndex(int val)
+ +
TString ProductionHeightFileName
+ +
void Reset(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+ +
double ReturnProb(double NeutrinoEnergy, double Cosz, int InitialFlavour, int FinalFlavour)
+
std::vector< std::vector< std::vector< TH2D * > > > hSecondaryOscillogram
+
const double * retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)
+ +
Oscillator(std::string ConfigName)
+ + + + +
void FillSecondaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
std::vector< FLOAT_T > SecondaryYBinEvalPoints
+ + + +
void SetProductionHeightArray()
+
std::vector< NeutrinoType > NeutrinoTypes
+
std::string PrimaryBinningTemplateName
+ +
std::vector< double > SecondaryXBinEdges
+
void SetProductionHeightBinEdges()
+ + +
void FillPrimaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+ +
double FractionOverlapped(Box Box1, Box Box2)
+
int NeutrinoSignToIndex(int val)
+ + + +
+ + + + diff --git a/OscClass__CUDAProb3_8h.html b/OscClass__CUDAProb3_8h.html new file mode 100644 index 00000000..62890998 --- /dev/null +++ b/OscClass__CUDAProb3_8h.html @@ -0,0 +1,136 @@ + + + + + + + +MaCh3: /github/workspace/OscClass/OscClass_CUDAProb3.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
OscClass_CUDAProb3.h File Reference
+
+
+
#include "TH2D.h"
+#include "TH3D.h"
+#include "TFile.h"
+#include "TStopwatch.h"
+#include <cmath>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <memory>
+#include "manager/manager.h"
+#include "beamcudapropagator.cuh"
+#include "atmoscudapropagator.cuh"
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  Corner
 
struct  Box
 
class  Oscillator
 
+ + + +

+Typedefs

using FLOAT_T = double
 
+

Typedef Documentation

+ +

◆ FLOAT_T

+ +
+
+ + + + +
using FLOAT_T = double
+
+ +

Definition at line 24 of file OscClass_CUDAProb3.h.

+ +
+
+
+ + + + diff --git a/OscClass__CUDAProb3_8h_source.html b/OscClass__CUDAProb3_8h_source.html new file mode 100644 index 00000000..a30a0ca1 --- /dev/null +++ b/OscClass__CUDAProb3_8h_source.html @@ -0,0 +1,492 @@ + + + + + + + +MaCh3: /github/workspace/OscClass/OscClass_CUDAProb3.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OscClass_CUDAProb3.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "TH2D.h"
+
4#include "TH3D.h"
+
5#include "TFile.h"
+
6#include "TStopwatch.h"
+
7
+
8#include <cmath>
+
9#include <iostream>
+
10#include <iomanip>
+
11#include <vector>
+
12#include <memory>
+
13
+
14#include "manager/manager.h"
+
15
+
16//Propagator includes
+
17#ifdef USE_PROB3
+
18 #include "BargerPropagator.h"
+
19#else
+
20 #include "beamcudapropagator.cuh"
+
21 #include "atmoscudapropagator.cuh"
+
22#endif
+
23
+ +
25//using FLOAT_T = float;
+
26using namespace cudaprob3; // namespace of the propagators
+
27
+
+
28struct Corner{
+
29 double x;
+
30 double y;
+
31};
+
+
32
+
+
33struct Box{
+ + +
36};
+
+
37
+
+ +
39 public:
+
40 Oscillator(std::string ConfigName);
+
41
+ +
43
+
44 void FillOscillogram(double* oscpar, double prodH, double Yp_Val=0.468);
+
45 double ReturnProb(double NeutrinoEnergy, double Cosz, int InitialFlavour, int FinalFlavour);
+
46
+
47 void RebinOscillogram(int Switcher, std::vector<double> NewBinning);
+
48
+
49 //DB Setters
+ + +
52
+
53 //DB Getters
+
54 std::vector<double> ReturnSecondaryXBinEdges() {return SecondaryXBinEdges;}
+
55 std::vector<double> ReturnSecondaryYBinEdges() {return SecondaryYBinEdges;}
+
56
+
57 std::vector< std::vector< std::vector<TH2D*> > > ReturnPrimaryOscillogram() {return hPrimaryOscillogram;}
+
58 std::vector< std::vector< std::vector<TH2D*> > > ReturnSecondaryOscillogram() {return hSecondaryOscillogram;}
+
59 std::vector<TH2D*> ReturnOscillogramArray(int fPrimary);
+
60
+
61 bool isLinear() {return IsLinear;}
+ +
63
+
64 const double* retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ);
+
65
+ +
67
+
68 //DB Console output
+
69 void PrintBinning();
+ +
71
+
72 void SaveOscillogramsToFile(TString FileName);
+
73
+
74 private:
+
75 //########################################################################################################################
+
76 //Functions
+
77
+
78 void isUsingGPU();
+
79
+ + +
82 void DefineMiscValues();
+
83
+
84 void ResizeArrays();
+ +
86
+
87 void DeletePropagator();
+
88 void DeleteArrays();
+
89 void DeleteOscillogram();
+
90
+
91 void FillArrays();
+ + +
94
+ +
96 void InitPropagator();
+ +
98 void DeleteHistograms();
+
99
+ +
101
+ + + +
105
+
106 bool isAlreadyCalculated(double* oscpar, double prodH, double Yp_Val);
+
107 void SaveParams(double* oscpar, double prodH, double Yp_Val);
+
108 void ResetSavedParams();
+
109
+
110 void PrintBox(Box Box1);
+
111 bool IsValidBox(Box Box1);
+ +
113
+
+
114 inline int NeutrinoIndexToSign(int val) {
+
115 return 2*val-1;
+
116 }
+
+
117
+
+
118 inline int NeutrinoIndexToFlavour(int val) {
+
119 return val+1;
+
120 }
+
+
121
+
+
122 inline int NeutrinoSignToIndex(int val) {
+
123 return (val<0) ? 0 : 1;
+
124 }
+
+
125
+
+
126 inline int NeutrinoFlavourToIndex(int val) {
+
127 return (abs(val)-1);
+
128 }
+
+
129
+ + +
132
+
133 std::vector<double> linspace(double Emin, double Emax, int nDiv);
+
134 std::vector<double> logspace(double Emin, double Emax, int nDiv);
+
135
+
136 std::vector<double> ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector<double> CoarseBinning);
+
137
+
138 //########################################################################################################################
+
139 //Variables
+
140
+ + +
143
+
144 std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> propagator;
+
145
+
146 unsigned int nPrimaryHists;
+ +
148
+ +
150
+ + + +
154
+ +
156
+
157 std::vector< std::vector<int> > PrimaryBinContrib_Bin;
+
158 std::vector< std::vector<double> > PrimaryBinContrib_Weight;
+
159
+
160 std::vector<double> PrimaryXBinEdges;
+
161 std::vector<double> PrimaryYBinEdges;
+
162
+
163 std::vector<double> SecondaryXBinEdges;
+
164 std::vector<double> SecondaryYBinEdges;
+
165
+
166 std::vector<FLOAT_T> PrimaryXBinEvalPoints;
+
167 std::vector<FLOAT_T> PrimaryYBinEvalPoints;
+
168
+
169 std::vector<FLOAT_T> SecondaryXBinEvalPoints;
+
170 std::vector<FLOAT_T> SecondaryYBinEvalPoints;
+
171
+
172 std::vector<NeutrinoType> NeutrinoTypes;
+
173 std::vector<TString> NeutrinoTypes_Names;
+
174
+
175 std::vector< std::vector<TString> > OscChannels_Names;
+
176 std::vector< std::vector<ProbType> > OscChannels;
+
177
+ + +
180
+
181 // Number of layers from propagator
+ +
183
+ + + +
187
+ + +
190
+ + +
193
+ + + +
197
+ + + +
201
+ + + +
205
+
206 double lFineCosz;
+
207 double hFineCosz;
+ +
209
+
210 std::vector< std::vector< std::vector<TH2D*> > > hPrimaryOscillogram;
+
211 std::vector< std::vector< std::vector<TH2D*> > > hSecondaryOscillogram;
+ + +
214
+
215 double fprodH;
+
216 double fYp_Val;
+
217 double foscpar[6];
+
218 double fBinning[4];
+
219
+ +
221
+ + + + +
226
+
227 std::string InputFileName;
+ + +
230
+ + + + +
235
+ +
237
+ + +
240
+ + + + +
245
+
246 std::vector<FLOAT_T> ProductionHeightBinEdges;
+
247 std::vector<FLOAT_T> chemicalComposition_Nom;
+
248};
+
+
double FLOAT_T
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + + +
double fineCoarseRatioEnergy
+ +
void FillPrimaryOscillogram(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
TString SecondaryHistKey
+ +
void RebinOscillogram(int Switcher, std::vector< double > NewBinning)
+ +
std::vector< std::vector< ProbType > > OscChannels
+ + +
void SetOscillatorConfig(int ArrayConfig_=0)
+
std::vector< double > logspace(double Emin, double Emax, int nDiv)
+ +
std::vector< double > PrimaryXBinEdges
+ +
std::unique_ptr< AtmosCpuPropagator< FLOAT_T > > propagator
+
int nProductionHeightAveragingBins
+ +
std::vector< std::vector< std::vector< TH2D * > > > ReturnSecondaryOscillogram()
+ +
void SaveOscillogramsToFile(TString FileName)
+
std::vector< double > ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector< double > CoarseBinning)
+ + +
std::vector< FLOAT_T > SecondaryXBinEvalPoints
+
std::vector< std::vector< std::vector< TH2D * > > > hPrimaryOscillogram
+ +
int GetOscillogramNBins(int Switcher)
+
void FillOscillogram(double *oscpar, double prodH, double Yp_Val=0.468)
+ +
void InitOscillogram(TH2D *PrimaryHistTemplate, TH2D *SecondaryHistTemplate)
+ + + + +
std::vector< TString > NeutrinoTypes_Names
+
double lProductionHeightRange
+
std::vector< FLOAT_T > PrimaryXBinEvalPoints
+ + +
bool UseProductionHeightAveraging
+ + +
bool isAlreadyCalculated(double *oscpar, double prodH, double Yp_Val)
+
double fineCoarseRatioCosz
+
std::vector< std::vector< std::vector< TH2D * > > > ReturnPrimaryOscillogram()
+ + +
std::vector< double > PrimaryYBinEdges
+
std::vector< FLOAT_T > PrimaryYBinEvalPoints
+ +
int NeutrinoIndexToSign(int val)
+ + +
unsigned int nPrimaryHists
+
std::vector< std::vector< int > > PrimaryBinContrib_Bin
+
std::vector< FLOAT_T > ReturnProductionHeightBinEdges()
+ + + +
double ** hPrimaryOscillogram_Arr
+
std::string InputFileName
+
std::vector< std::vector< double > > PrimaryBinContrib_Weight
+ + + + + +
std::vector< double > ReturnSecondaryXBinEdges()
+
double hProductionHeightRange
+ +
std::vector< FLOAT_T > chemicalComposition_Nom
+ + +
void FillArrays_ManyContrib_Area()
+
std::vector< FLOAT_T > ProductionHeightBinEdges
+
std::string SecondaryBinningTemplateName
+
TString TemplateInputFileName
+
std::vector< double > SecondaryYBinEdges
+
bool IsValidBox(Box Box1)
+
void ResizeOscillogram(bool CoarseChanged, bool FineChanged)
+ +
TString EarthDensityFile
+
std::vector< TH2D * > ReturnOscillogramArray(int fPrimary)
+
void PrintBox(Box Box1)
+
void SaveParams(double *oscpar, double prodH, double Yp_Val)
+
std::vector< double > linspace(double Emin, double Emax, int nDiv)
+
double * hPrimaryCounter_Arr
+ +
std::vector< std::vector< TString > > OscChannels_Names
+
int NeutrinoFlavourToIndex(int val)
+ +
TString ProductionHeightFileName
+ +
void Reset(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
void SetFillHistograms(bool fFillHistograms_=true)
+
int NeutrinoIndexToFlavour(int val)
+ +
double ReturnProb(double NeutrinoEnergy, double Cosz, int InitialFlavour, int FinalFlavour)
+
std::vector< std::vector< std::vector< TH2D * > > > hSecondaryOscillogram
+
const double * retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)
+ + + +
TH2D * ReturnPrimaryBinning()
+ + +
void FillSecondaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
std::vector< FLOAT_T > SecondaryYBinEvalPoints
+ +
std::vector< double > ReturnSecondaryYBinEdges()
+ + +
void SetProductionHeightArray()
+
std::vector< NeutrinoType > NeutrinoTypes
+
std::string PrimaryBinningTemplateName
+ +
std::vector< double > SecondaryXBinEdges
+
void SetProductionHeightBinEdges()
+ + +
void FillPrimaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+ +
double FractionOverlapped(Box Box1, Box Box2)
+
int NeutrinoSignToIndex(int val)
+ + + +
Corner UR
+
Corner BL
+ + + +
+ + + + diff --git a/PSO_8cpp.html b/PSO_8cpp.html new file mode 100644 index 00000000..8e331824 --- /dev/null +++ b/PSO_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/PSO.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PSO.cpp File Reference
+
+
+
#include "PSO.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/PSO_8cpp_source.html b/PSO_8cpp_source.html new file mode 100644 index 00000000..d8462203 --- /dev/null +++ b/PSO_8cpp_source.html @@ -0,0 +1,724 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/PSO.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PSO.cpp
+
+
+Go to the documentation of this file.
1#include "PSO.h"
+
2
+
+ +
4
+
5 fConstriction = fitMan->raw()["General"]["PSO"]["Constriction"].as<double>();
+
6 fInertia = fitMan->raw()["General"]["PSO"]["Inertia"].as<double>()*fConstriction;
+
7 fOne = fitMan->raw()["General"]["PSO"]["One"].as<double>()*fConstriction;
+
8 fTwo = fitMan->raw()["General"]["PSO"]["Two"].as<double>()*fConstriction;
+
9 fParticles = fitMan->raw()["General"]["PSO"]["Particles"].as<int>();
+
10 fIterations = fitMan->raw()["General"]["PSO"]["Iterations"].as<int>();
+
11 fConvergence = fitMan->raw()["General"]["PSO"]["Convergence"].as<double>();
+
12
+
13 fDim = 0;
+
14
+ +
16 {
+
17 fDim = fitMan->raw()["General"]["PSO"]["TestLikelihoodDim"].as<int>();
+
18 }
+
19}
+
+
20
+
+ +
22
+
23 PrepareFit();
+
24
+
25 if(fTestLikelihood){
+
26 outTree->Branch("nParts", &fParticles, "nParts/I");
+
27 for(int i = 0; i < fDim; ++i){
+
28 par = new double[fParticles];
+
29 paramlist.push_back(par);
+
30 outTree->Branch(Form("Parameter_%d", i), paramlist[i], Form("Parameter_%d[nParts]/D",i));
+
31 }
+
32// vel = new double[fParticles];
+
33 outTree->Branch("vel", vel, "vel[nParts]/D");
+
34 }
+
35
+
36 init();
+
37 run();
+ +
39 return;
+
40}
+
+
41
+
42
+
+
43void PSO::init(){
+
44
+
45 fBestValue = 1234567890.0;
+
46
+
47 //KS: For none PCA this will be eqaul to normal parameters
+
48 //const int NparsPSOFull = NPars;
+
49 //const int NparsPSO = NParsPCA;
+
50
+
51 std::cout << "Preparing PSO" << std::endl;
+
52
+
53 // Initialise bounds on parameters
+ +
55 for (int i = 0; i < fDim; i++){
+
56 // Test function ranges
+
57 ranges_min.push_back(-5);
+
58 ranges_max.push_back(5);
+
59 fixed.push_back(0);
+
60 }
+
61 }
+
62 else{
+
63 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it){
+
64 if(!(*it)->IsPCA())
+
65 {
+
66 fDim += (*it)->getSize();
+
67 for(int i = 0; i < (*it)->getSize(); ++i)
+
68 {
+
69 double curr = (*it)->getParInit(i);
+
70 double lim = 10.0*(*it)->getDiagonalError(i);
+
71 double low = (*it)->GetLowerBound(i);
+
72 double high = (*it)->GetUpperBound(i);
+
73 if(low > curr - lim) ranges_min.push_back(low);
+
74 else ranges_min.push_back(curr - lim);
+
75 if(high < curr + lim) ranges_min.push_back(high);
+
76 else ranges_min.push_back(curr + lim);
+
77 prior.push_back(curr);
+
78
+
79 if((*it)->isParameterFixed(i)){
+
80 fixed.push_back(1);
+
81 }
+
82 else{
+
83 fixed.push_back(0);
+
84 }
+
85 }
+
86 }
+
87 else
+
88 {
+
89 fDim += (*it)->getNpars();
+
90 for(int i = 0; i < (*it)->getNpars(); ++i)
+
91 {
+
92 ranges_min.push_back(-100.0);
+
93 ranges_max.push_back(100.0);
+
94 prior.push_back((*it)->getParInit(i));
+
95 if((*it)->isParameterFixedPCA(i)){
+
96 fixed.push_back(1);
+
97 }
+
98 else{
+
99 fixed.push_back(0);
+
100 }
+
101 }
+
102 }
+
103 }
+
104 }
+
105
+
106 std::cout << "Printing Minimums and Maximums of Variables to be minimised" << std::endl;
+
107 for (int i =0; i<fDim; i++){
+
108 std::cout << "Variable "<< i<<" :" << ranges_min[i] << ", "<< ranges_max[i] << std::endl;
+
109 }
+
110
+
111 // Initialise particle positions
+
112 for (int i = 0; i < fParticles; ++i){
+
113 std::vector<double> init_position;
+
114 std::vector<double> init_velocity;
+
115
+
116 //Initialising in +/- 5sigma of prior value from BANFF interface
+
117 for (int j=0; j<fDim; ++j){
+
118 if(fixed[j]){
+
119 init_position.push_back(prior[j]);
+
120 init_velocity.push_back(0.0);
+
121 }
+
122 else{
+
123 double dist = fabs(ranges_max[j]-ranges_min[j]);
+
124 //Initialise to random position uniform in space
+
125 init_position.push_back(ranges_min[j] + random->Rndm()*dist);
+
126 //Initialise velocity to random position uniform in space
+
127 init_velocity.push_back((2.0*random->Rndm()-1.0));//*dist);
+
128 }
+
129 }
+
130
+ +
132 new_particle->set_personal_best_position(init_position);
+ +
134 new_particle->set_personal_best_value(new_value);
+
135 new_particle->set_value(new_value);
+
136 system.push_back(new_particle);
+
137 if(new_value < fBestValue){
+ + +
140 }
+
141 }
+
142}
+
+
143
+
+
144std::vector<std::vector<double> > PSO::bisection(std::vector<double>position,double minimum, double range, double precision){
+
145 std::vector<std::vector<double>> uncertainties_list;
+
146 for (unsigned int i = 0; i< position.size(); ++i){
+
147 std::cout << i << std::endl;
+
148 std::vector<double> uncertainties;
+
149 std::vector<double> new_position = position; new_position[i] = position[i]-range;
+
150 double val_1 = CalcChi(new_position)-minimum-1.0;
+
151 while (val_1*-1.0> 0.0){
+
152 new_position[i] -= range;
+ +
154 }
+
155 std::vector<double> bisect_position = position; bisect_position[i] = bisect_position[i] - (position[i]-new_position[i])/2;
+
156 std::vector<std::vector<double>> position_list{new_position,bisect_position,position};
+
157 double val_2 = CalcChi(bisect_position)-minimum-1.0;
+
158 std::vector<double> value_list{val_1,val_2, -1.0};
+
159 double res = 1.0;
+
160 while (res > precision){
+
161 if (value_list[0] * value_list[1] < 0){
+ + + +
165 value_list[2] = value_list[1];
+
166 value_list[1] = new_val;
+ +
168 res = abs(position[2]-position[0]);
+
169 }
+
170 else{
+
171 std::vector<double> new_bisect_position = position_list[1];new_bisect_position[i] += (position_list[2][i]-position_list[1][i])/2;
+ + +
174 value_list[0] = value_list[1];
+
175 value_list[1] = new_val;
+ + +
178 }
+
179 }
+
180 //do the same thing for position uncertainty
+
181 std::vector<double> new_position_p = position; new_position_p[i] = position[i]+range;
+ +
183 while (val_1_p * -1.0 > 0.0){
+ + +
186 }
+
187 std::vector<double> bisect_position_p = position; bisect_position_p[i] = bisect_position_p[i] += (new_position_p[i]-position[i])/2;
+
188 std::vector<std::vector<double>> position_list_p{position,bisect_position_p,new_position_p};
+ +
190 std::vector<double> value_list_p{-1.0,val_2_p, val_1_p};
+
191 double res_p = 1.0;
+
192 while (res_p > precision){
+
193 if (value_list_p[0] * value_list_p[1] < 0){
+ + + + + + +
200 res = abs(position[2]-position[0]);
+ +
202 //std::cout << "Pos midpoint is " << position_list_p[1][i] << std::endl;
+
203 }
+
204 else{
+ + + + + + + +
212 //std::cout << "Pos midpoint is " << position_list_p[1][i] << std::endl;
+
213 }
+
214 }
+
215 uncertainties_list.push_back({abs(position[i]-position_list[1][i]),abs(position[i]-position_list_p[1][i])});
+
216 std::cout << "Uncertainty finished for d = "<< i << std::endl;
+
217 std::cout << setprecision(10)<< "LLR values for ± positive and negative uncertainties are " << CalcChi(position_list[1]) << " and " << CalcChi(position_list_p[1]) << std::endl;
+
218 }
+
219 return uncertainties_list;
+
220}
+
+
221
+
+
222std::vector<std::vector<double>> PSO::calc_uncertainty(std::vector<double>position,double minimum) {
+
223 std::vector<double> pos_uncertainty(position.size());
+
224 std::vector<double> neg_uncertainty(position.size());
+
225 int num = 200;
+
226 std::vector<double> pos = position;
+
227 for (unsigned int i = 0; i < position.size(); ++i) {
+
228
+
229 double curr_ival = pos[i];
+
230
+
231 double neg_stop = position[i] - 5e-2;
+
232 double pos_stop = position[i] + 5e-2;
+
233 double start = position[i];
+
234 std::vector<double> x(num);
+
235 std::vector<double> y(num);
+
236 double step = (start-neg_stop) / (num - 1);
+
237 double value = start;
+
238 for (int j = 0; j < num; ++j) {
+
239 pos[i] = value;
+
240 double LLR = CalcChi(position) - minimum - 1.0;
+
241 x[j] = value;
+
242 y[j] = LLR;
+
243 value -= step;
+
244 }
+
245 pos[i] = curr_ival;
+
246
+
247 int closest_index = 0;
+
248 double closest_value = abs(y[0]); // Initialize with the first element
+
249 for (unsigned int i = 1; i < y.size(); ++i) {
+
250 double abs_y = abs(y[i]);
+
251 if (abs_y < closest_value) {
+ + +
254 }
+
255 }
+ +
257 std::cout << "Neg" << std::endl;
+
258 x.assign(num, 0);
+
259 y.assign(num, 0);
+
260 step = (pos_stop-start) / (num - 1);
+
261 value = start;
+
262 for (int j = 0; j < num; ++j) {
+
263 pos[i] = value;
+
264 double LLR = CalcChi(position) - minimum - 1.0;
+
265 x[j] = value;
+
266 y[j] = LLR;
+
267 value += step;
+
268 }
+
269 pos[i] = curr_ival;
+
270 closest_index = 0;
+
271 closest_value = abs(y[0]); // Initialize with the first element
+
272 for (unsigned int i = 1; i < y.size(); ++i) {
+
273 double abs_y = abs(y[i]);
+
274 if (abs_y < closest_value) {
+ + +
277 }
+
278 }
+ +
280 }
+
281 std::vector<std::vector<double>> res{neg_uncertainty,pos_uncertainty};
+
282 return res;
+
283}
+
+
284
+
+
285void PSO::uncertainty_check(std::vector<double> previous_pos){
+
286 std::vector<std::vector<double >> x_list;
+
287 std::vector<std::vector<double >> y_list;
+
288 std::vector<double> position = previous_pos;
+
289 int num = 5000;
+
290 for (unsigned int i = 0;i<previous_pos.size();++i){
+
291 double curr_ival = position[i];
+
292 double start = previous_pos[i] - 1e-1;
+
293 double stop = previous_pos[i] + 1e-1;
+
294 std::vector<double> x(num);
+
295 std::vector<double> y(num);
+
296 double step = (stop - start) / (num - 1);
+
297 double value = start;
+
298 // std::cout << "result for fDim " << 1 << std::endl;
+
299 for (int j =0;j< num; ++j){
+
300 position[i] = value;
+
301 double LLR = CalcChi(position);
+
302 x[j] = value;
+
303 y[j] = LLR;
+
304 value +=step;
+
305 }
+
306 position[i] = curr_ival;
+
307 std::cout << " " << std::endl;
+
308 std::cout << "For fDim" << i+1 << " x list is " ;
+
309 for (unsigned int k= 0;k<x.size(); ++k){
+
310 std::cout << x[k] << " , " ;
+
311 } std::cout << " " << std::endl;
+
312 std::cout << " " << std::endl;
+
313 std::cout << "For fDim" << i+1 << " y list is " ;
+
314 for (unsigned int k= 0;k<x.size(); ++k){
+
315 std::cout << y[k] << " , " ;
+
316 } std::cout << " " << std::endl;
+
317 std::cout << " " <<std::endl;
+
318 }
+
319}
+
+
320
+
+ +
322
+
323 std::vector<double> total_pos(fDim,0.0);
+
324
+
325 for (int i = 0; i < fParticles; ++i) {
+
326
+
327 std::vector<double> part1 = vector_multiply(system[i]->get_velocity(), fInertia);
+
328 std::vector<double> part2 = vector_multiply(vector_subtract(system[i]->get_personal_best_position(), system[i]->get_position()), (fOne * random->Rndm()));
+
329 std::vector<double> part3 = vector_multiply(vector_subtract(get_best_particle()->get_personal_best_position(), system[i]->get_position()),(fTwo * random->Rndm()));
+
330 std::vector<double> new_velocity = three_vector_addition(part1, part2, part3);
+
331 std::vector<double> new_pos = vector_add(system[i]->get_position(), new_velocity);
+
332 transform(total_pos.begin(), total_pos.end(), new_pos.begin(), total_pos.begin(),[](double x, double y) {return x+y;});
+
333
+
334 for (int j = 0; j < fDim; ++j) {
+
335 // Check if out of bounds and reflect if so
+
336 if(ranges_min[j] > new_pos[j]){
+
337 new_pos[j] = ranges_min[j];
+
338 }
+
339 else if(new_pos[j] > ranges_max[j]) {
+
340 new_pos[j] = ranges_max[j];
+
341 }
+
342 // If parameter fixed don't update it
+
343 if(fixed[j]) new_pos[j] = system[i]->get_position()[j];
+
344 }
+
345
+
346 if(fTestLikelihood){
+
347 double velo = 0.0;
+
348 for (int j = 0; j < fDim; ++j) {
+
349 paramlist[j][i] = new_pos[j];
+ +
351 }
+
352 vel[i] = sqrt(velo);
+
353 }
+
354
+
355 system[i]->set_velocity(new_velocity);
+
356 system[i]->set_position(new_pos);
+
357 double new_value = CalcChi(new_pos);
+
358 if(new_value <= system[i]->get_personal_best_value()) {
+
359 system[i]->set_personal_best_value(new_value);
+
360 system[i]->set_personal_best_position(new_pos);
+
361 if(new_value < fBestValue){
+ + +
364 }
+
365 }
+
366 }
+
367
+
368 std::vector<double> best_pos = get_best_particle()->get_personal_best_position();
+
369 std::vector<double> result(best_pos.size(), 0.0);
+
370 transform(total_pos.begin(), total_pos.end(), total_pos.begin(), [=](double val){return val/fParticles;});
+
371 transform(total_pos.begin(),total_pos.end(),best_pos.begin(),result.begin(),[](double x, double y) {return x-y;});
+
372
+
373 double mean_dist_sq = 0;
+
374 for (int i = 0; i<fDim; i++){
+ +
376 }
+
377
+
378 return mean_dist_sq;
+
379}
+
+
380
+
+
381void PSO::run() {
+
382
+
383 double mean_dist_sq = 0;
+
384
+
385 int iter = 0;
+
386 for(int i = 0; i < fIterations; ++i, ++iter){
+ +
388 //double meanVel = std::accumulate(vel, vel + fParticles, 0) / fParticles;
+
389
+
390 // Weight inertia randomly but scaled by total distance of swarm from global minimum - proxy for total velocity
+
391 // fWeight = ((random->Rndm()+1.0)*0.5)*(10.0/meanVel);
+
392
+ +
394
+
395 outTree->Fill();
+
396 // Auto save the output
+
397 if (step % auto_save == 0) outTree->AutoSave();
+
398 step++;
+
399 accCount++;
+
400
+
401 if (i%100 == 0){
+
402 std::cout << "Mean Dist Sq = " << mean_dist_sq <<std::endl;
+
403 std::cout << "Current LLR = " << fBestValue << std::endl;
+
404 std::cout << "Position = " <<std::endl;
+
405 for (int j = 0; j< fDim; ++j){
+
406 std::cout << " Dim " << j << " = " << setprecision(10) << get_best_particle()->get_personal_best_position()[j] << std::endl;
+
407 }
+
408
+
409 }
+
410 if(fConvergence > 0.0){
+ +
412 break;
+
413 }
+
414 }
+
415 }
+
416 std::cout << "Finished after " << iter <<" runs out of "<< fIterations << std::endl;
+
417 std::cout << "Mean Dist " << mean_dist_sq <<std::endl;
+
418 std::cout << "Best LLR " << get_best_particle()->get_personal_best_value() << std::endl;
+
419
+
420 uncertainties = bisection(get_best_particle()->get_personal_best_position(),get_best_particle()->get_personal_best_value(),0.5,0.005);
+
421 std::cout << "Position for Global Minimum = "<<std::endl;
+
422 for (int i = 0; i< fDim; ++i){
+
423 std::cout << " Dim " << i << " = " << setprecision(10) << get_best_particle()->get_personal_best_position()[i] << " +" << uncertainties[i][1] << ", -" << uncertainties[i][0] << std::endl;
+
424 }
+
425}
+
+
426
+
+ +
428
+
429 outputFile->cd();
+
430
+ + +
433
+
434 for(int i = 0; i < fDim; ++i)
+
435 {
+
436 (*PSOParValue)(i) = 0;
+
437 (*PSOParError)(i) = 0;
+
438 }
+
439
+
440 std::vector<double> minimum = get_best_particle()->get_personal_best_position();
+
441
+
442 int ParCounter = 0;
+
443
+
444 if(fTestLikelihood){
+
445 for(int i = 0; i < fDim; ++i){
+
446 (*PSOParValue)(i) = minimum[i];
+
447 (*PSOParError)(i) = (uncertainties[i][0]+uncertainties[i][1])/2.0;
+
448 }
+
449 }
+
450 else{
+
451 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
452 {
+
453 if(!(*it)->IsPCA())
+
454 {
+
455 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
456 {
+
457 double ParVal = minimum[ParCounter];
+
458 //KS: Basically apply mirroring for parameters out of bounds
+
459 (*PSOParValue)(ParCounter) = ParVal;
+
460 (*PSOParError)(ParCounter) = (uncertainties[ParCounter][0]+uncertainties[ParCounter][1])/2.0;
+
461 //KS: For fixed params HESS will not calcuate error so we need to pass prior error
+
462 if((*it)->isParameterFixed(i))
+
463 {
+
464 (*PSOParError)(ParCounter) = (*it)->getDiagonalError(i);
+
465 }
+
466 }
+
467 }
+
468 else
+
469 {
+
470 //KS: We need to convert parameters from PCA to normal base
+
471 TVectorD ParVals((*it)->getSize());
+
472 TVectorD ParVals_PCA((*it)->getNpars());
+
473
+
474 TVectorD ErrorVals((*it)->getSize());
+
475 TVectorD ErrorVals_PCA((*it)->getNpars());
+
476
+
477 //First save them
+
478 //KS: This code is super convoluted as MaCh3 can store separate matrices while PSO has one matrix. In future this will be simplified, keep it like this for now.
+
479 const int StartVal = ParCounter;
+
480 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
481 {
+ + +
484 }
+
485 ParVals = ((*it)->getTransferMatrix())*ParVals_PCA;
+
486 ErrorVals = ((*it)->getTransferMatrix())*ErrorVals_PCA;
+
487
+ +
489 //KS: Now after going from PCA to normal let';s save it
+
490 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
491 {
+
492 (*PSOParValue)(ParCounter) = ParVals(i);
+
493 (*PSOParError)(ParCounter) = std::fabs(ErrorVals(i));
+
494 //int ParCounterMatrix = StartVal;
+
495 //If fixed take prior
+
496 if((*it)->isParameterFixedPCA(i))
+
497 {
+
498 (*PSOParError)(ParCounter) = (*it)->getDiagonalError(i);
+
499 }
+
500 }
+
501 }
+
502 }
+
503 }
+
504
+
505 PSOParValue->Write("PSOParValue");
+
506 PSOParError->Write("PSOParError");
+
507 delete PSOParValue;
+
508 delete PSOParError;
+
509 // Save all the output
+
510 SaveOutput();
+
511}
+
+
512
+
513
+
514
+
515// *******************
+
+
516double PSO::CalcChi2(const double* x) {
+
517// *******************
+
518
+ +
520 {
+
521 return rastriginFunc(x);
+
522 }
+
523 else
+
524 {
+
525 return LikelihoodFit::CalcChi2(x);
+
526 }
+
527}
+
+
528
+
529
+
530// *************************
+
+
531double PSO::rastriginFunc(const double* x) {
+
532// *************************
+
533
+
534 stepClock->Start();
+
535
+
536 //Search range: [-5.12, 5.12]
+
537 const double A = 10.0;
+
538 double sum = 0.0;
+
539 for (int i = 0; i < fDim; ++i) {
+
540 sum += x[i] * x[i] - A * cos(2.0 * 3.14 * x[i]);
+
541 }
+
542 double llh = A * fDim + sum;
+
543
+
544 accProb = 1;
+
545
+
546 stepClock->Stop();
+
547 stepTime = stepClock->RealTime();
+
548
+
549 return llh;
+
550}
+
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
unsigned int step
current state
Definition FitterBase.h:71
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
bool fTestLikelihood
Necessary for some fitting algorithms like PSO.
Definition FitterBase.h:120
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+ +
void PrepareFit()
prepare output and perform sanity checks
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
std::vector< double > vector_add(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:105
+
PSO(manager *const fitMan)
Definition PSO.cpp:3
+
std::vector< double > vector_subtract(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:110
+
std::vector< double > ranges_max
Definition PSO.h:140
+
double fConstriction
Definition PSO.h:148
+
void init()
Definition PSO.cpp:43
+
std::vector< double > vector_multiply(std::vector< double > velocity, double mul)
Definition PSO.h:100
+
double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
Definition PSO.cpp:516
+
std::vector< double > three_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3)
Definition PSO.h:115
+
double fTwo
Definition PSO.h:145
+
std::vector< bool > fixed
Definition PSO.h:139
+
double fInertia
Definition PSO.h:143
+
particle * get_best_particle()
Definition PSO.h:82
+
int fParticles
Definition PSO.h:151
+
double fOne
Definition PSO.h:144
+
int fIterations
Definition PSO.h:147
+
void uncertainty_check(std::vector< double > previous_pos)
Definition PSO.cpp:285
+
void set_best_particle(particle *n)
Definition PSO.h:85
+
std::vector< double * > paramlist
Definition PSO.h:153
+
std::vector< particle * > system
Definition PSO.h:142
+
double vel[kMaxParticles]
Definition PSO.h:154
+
double fConvergence
Definition PSO.h:146
+
double CalcChi(std::vector< double > x)
Definition PSO.h:128
+
double fBestValue
Definition PSO.h:137
+
std::vector< std::vector< double > > uncertainties
Definition PSO.h:149
+
std::vector< double > ranges_min
Definition PSO.h:141
+
double * par
Definition PSO.h:155
+
int fDim
Definition PSO.h:157
+
std::vector< std::vector< double > > calc_uncertainty(std::vector< double >position, double minimum)
Definition PSO.cpp:222
+
void run()
Definition PSO.cpp:381
+
void WriteOutput()
Definition PSO.cpp:427
+
std::vector< std::vector< double > > bisection(std::vector< double >position, double minimum, double range, double precision)
Definition PSO.cpp:144
+
double swarmIterate()
Definition PSO.cpp:321
+
double rastriginFunc(const double *x)
Definition PSO.cpp:531
+
std::vector< double > prior
Definition PSO.h:138
+
void runMCMC() override
Implementation of fitting algorithm.
Definition PSO.cpp:21
+ +
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
Definition PSO.h:13
+
std::vector< double > get_personal_best_position()
Definition PSO.h:35
+
double get_personal_best_value()
Definition PSO.h:43
+
+ + + + diff --git a/PSO_8h.html b/PSO_8h.html new file mode 100644 index 00000000..c0aa3226 --- /dev/null +++ b/PSO_8h.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/PSO.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
PSO.h File Reference
+
+
+
#include <algorithm>
+#include <functional>
+#include <numeric>
+#include "LikelihoodFit.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  particle
 
class  PSO
 
+
+ + + + diff --git a/PSO_8h_source.html b/PSO_8h_source.html new file mode 100644 index 00000000..6e0c44de --- /dev/null +++ b/PSO_8h_source.html @@ -0,0 +1,345 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/PSO.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PSO.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2//
+
3// Created by Emily Ip on 24/2/2023.
+
4//
+
5//
+
6// Created by Emily Ip on 26/1/2023.
+
7//
+
8#include <algorithm>
+
9#include <functional>
+
10#include <numeric>
+
11#include "LikelihoodFit.h"
+
12
+
+ +
18 public:
+
19
+ +
21 particle(std::vector<double> position, std::vector<double> velocity) : position(position), velocity(velocity){};
+
22
+
+
23 void set_position(std::vector<double> new_position) {
+ +
25 };
+
+
26
+
+
27 std::vector<double> get_position() {
+
28 return position;
+
29 };
+
+
30
+
+
31 void set_personal_best_position(std::vector<double> new_pos){
+ +
33 };
+
+
34
+
+
35 std::vector<double> get_personal_best_position(){
+ +
37 };
+
+
38
+ +
42
+
+ + +
45 };
+
+
46
+
+
47 std::vector<double> get_velocity(){
+
48 return velocity;
+
49 };
+
+
50
+
+
51 void set_velocity(std::vector<double> new_velocity){
+ +
53 };
+
+
54
+
+
55 double get_value(){
+
56 return curr_value;
+
57 };
+
+
+
58 void set_value(double val){
+ +
60 };
+
+
61
+
62 private:
+
63 std::vector<double> position;
+
64 std::vector<double> velocity;
+ +
66 double curr_value;
+
67 std::vector<double> personal_best_position;
+
68
+
69
+
70};
+
+
71
+
+
72class PSO : public LikelihoodFit {
+
78 public:
+
79
+
80 PSO(manager * const fitMan);
+
81
+
+ +
83 return best_particle;
+
84 }
+
+
+ + +
87 }
+
+
88
+
89 std::vector<std::vector<double>> bisection(std::vector<double>position,double minimum, double range, double precision);
+
90 std::vector<std::vector<double>> calc_uncertainty(std::vector<double>position,double minimum);
+
91 void init();
+
92 void uncertainty_check(std::vector<double> previous_pos);
+
93 void run();
+
94 void WriteOutput();
+
95 void runMCMC() override;
+
96 double CalcChi2(const double* x);
+
97 double rastriginFunc(const double* x);
+
98 double swarmIterate();
+
99
+
+
100 std::vector<double> vector_multiply(std::vector<double> velocity, double mul){
+
101 transform(velocity.begin(),velocity.end(),velocity.begin(),std::bind1st(std::multiplies<double>(),mul));
+
102 return velocity;
+
103 };
+
+
104
+
+
105 std::vector<double> vector_add(std::vector<double> v1, std::vector<double> v2){
+
106 std::vector<double> v3;
+
107 transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), plus<double>());
+
108 return v3;
+
109 };
+
+
+
110 std::vector<double> vector_subtract(std::vector<double> v1, std::vector<double> v2){
+
111 std::vector<double> v3 ;
+
112 transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), minus<double>());
+
113 return v3;
+
114 };
+
+
+
115 std::vector<double> three_vector_addition(std::vector<double> vec1, std::vector<double> vec2,std::vector<double> vec3){
+
116 for (size_t i = 0; i < vec1.size(); ++i) {
+
117 vec1[i] += vec2[i] + vec3[i];
+
118 }
+
119 return vec1;
+
120 };
+
+
+
121 std::vector<double> four_vector_addition(std::vector<double> vec1, std::vector<double> vec2,std::vector<double> vec3,std::vector<double> vec4){
+
122 for (size_t i = 0; i < vec1.size(); ++i) {
+
123 vec1[i] += vec2[i] + vec3[i] + vec4[i];
+
124 }
+
125 return vec1;
+
126 };
+
+
127
+
+
128 double CalcChi(std::vector<double> x){
+
129 double* a = &x[0];
+
130 return CalcChi2(a);
+
131 };
+
+
132
+
133 inline std::string GetName()const {return "PSO";};
+
134
+
135 private:
+ + +
138 std::vector<double> prior;
+
139 std::vector<bool> fixed;
+
140 std::vector<double> ranges_max;
+
141 std::vector<double> ranges_min;
+
142 std::vector<particle*> system;
+
143 double fInertia;
+
144 double fOne;
+
145 double fTwo;
+ + + +
149 std::vector<std::vector<double> > uncertainties;
+
150
+ +
152 static const int kMaxParticles = 10000;
+
153 std::vector<double*> paramlist;
+ +
155 double* par;
+
156
+
157 int fDim;
+
158};
+
+
159
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+ +
Definition PSO.h:72
+
std::vector< double > vector_add(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:105
+
static const int kMaxParticles
Definition PSO.h:152
+
std::vector< double > vector_subtract(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:110
+
std::vector< double > ranges_max
Definition PSO.h:140
+
double fConstriction
Definition PSO.h:148
+
void init()
Definition PSO.cpp:43
+
std::vector< double > vector_multiply(std::vector< double > velocity, double mul)
Definition PSO.h:100
+
double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
Definition PSO.cpp:516
+
std::vector< double > three_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3)
Definition PSO.h:115
+
double fTwo
Definition PSO.h:145
+
std::vector< bool > fixed
Definition PSO.h:139
+
std::string GetName() const
Get name of class.
Definition PSO.h:133
+
double fInertia
Definition PSO.h:143
+
particle * get_best_particle()
Definition PSO.h:82
+
int fParticles
Definition PSO.h:151
+
double fOne
Definition PSO.h:144
+
int fIterations
Definition PSO.h:147
+
void uncertainty_check(std::vector< double > previous_pos)
Definition PSO.cpp:285
+
particle * best_particle
Definition PSO.h:136
+
void set_best_particle(particle *n)
Definition PSO.h:85
+
std::vector< double * > paramlist
Definition PSO.h:153
+
std::vector< particle * > system
Definition PSO.h:142
+
double vel[kMaxParticles]
Definition PSO.h:154
+
std::vector< double > four_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3, std::vector< double > vec4)
Definition PSO.h:121
+
double fConvergence
Definition PSO.h:146
+
double CalcChi(std::vector< double > x)
Definition PSO.h:128
+
double fBestValue
Definition PSO.h:137
+
std::vector< std::vector< double > > uncertainties
Definition PSO.h:149
+
std::vector< double > ranges_min
Definition PSO.h:141
+
double * par
Definition PSO.h:155
+
int fDim
Definition PSO.h:157
+
std::vector< std::vector< double > > calc_uncertainty(std::vector< double >position, double minimum)
Definition PSO.cpp:222
+
void run()
Definition PSO.cpp:381
+
void WriteOutput()
Definition PSO.cpp:427
+
std::vector< std::vector< double > > bisection(std::vector< double >position, double minimum, double range, double precision)
Definition PSO.cpp:144
+
double swarmIterate()
Definition PSO.cpp:321
+
double rastriginFunc(const double *x)
Definition PSO.cpp:531
+
std::vector< double > prior
Definition PSO.h:138
+
void runMCMC() override
Implementation of fitting algorithm.
Definition PSO.cpp:21
+ +
Definition PSO.h:13
+
std::vector< double > position
Definition PSO.h:63
+
particle()
Definition PSO.h:20
+
double curr_value
Definition PSO.h:66
+
std::vector< double > get_personal_best_position()
Definition PSO.h:35
+
double get_personal_best_value()
Definition PSO.h:43
+
void set_personal_best_position(std::vector< double > new_pos)
Definition PSO.h:31
+
std::vector< double > velocity
Definition PSO.h:64
+
std::vector< double > get_position()
Definition PSO.h:27
+
std::vector< double > personal_best_position
Definition PSO.h:67
+
void set_personal_best_value(double new_val)
Definition PSO.h:39
+
double get_value()
Definition PSO.h:55
+
void set_value(double val)
Definition PSO.h:58
+
std::vector< double > get_velocity()
Definition PSO.h:47
+
particle(std::vector< double > position, std::vector< double > velocity)
Definition PSO.h:21
+
void set_velocity(std::vector< double > new_velocity)
Definition PSO.h:51
+
double personal_best_value
Definition PSO.h:65
+
void set_position(std::vector< double > new_position)
Definition PSO.h:23
+
+ + + + diff --git a/PlotLLH_8cpp.html b/PlotLLH_8cpp.html new file mode 100644 index 00000000..a196cf0c --- /dev/null +++ b/PlotLLH_8cpp.html @@ -0,0 +1,1457 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/PlotLLH.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
PlotLLH.cpp File Reference
+
+
+
#include <iostream>
+#include <algorithm>
+#include <iomanip>
+#include "TFile.h"
+#include "TCanvas.h"
+#include "TH1D.h"
+#include "TLegend.h"
+#include "TKey.h"
+#include "TColor.h"
+#include "TStyle.h"
+#include "THStack.h"
+#include "TLatex.h"
+#include "TGraph.h"
+#include "TLine.h"
+#include "TROOT.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + +

+Functions

void parseFileLabels (std::string labelString, std::vector< std::string > &labelVec)
 
bool getGUNDAMParamName (std::string mach3ParamName, TDirectoryFile *llhDir, std::string &gundamName)
 
bool getParameterHist (TFile *file, TH1D *retHist, std::string mach3ParamName, std::string directory="sam", std::string directoryPath="Sample_LLH", bool printNames=false)
 
void set_plot_style ()
 
std::string prettify_name (std::string fullName)
 
void getSplitSampleStack (TFile *file, std::vector< std::string > sampleVector, std::string parameterName, TH1D LLH_allSams, std::vector< Double_t > &cumSums, std::vector< bool > &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_sam=0.00001)
 
int PlotLLH ()
 
int main (int argc, char **argv)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

std::vector< std::stringExtraFileNames
 
std::vector< std::stringFileLabels
 
std::vector< std::stringFileLabels_default
 
std::string PDFName = "LLHScan"
 
std::string Mach3LLHFileName
 
std::string extraDrawOptions = ""
 
bool splitBySample
 
bool plotRatios
 
bool drawGrid
 
double ratioPlotSplit = 0.3
 
double yTitleOffset = 1.25
 
double sampleLabelThreshold = 0.0275
 
int lineWidth = 3
 
bool totalOnSplitPlots = false
 
bool sameAxis = true
 
std::string NOT_FOUND_STR = "__PARAM_NAME_NOT_FOUND__"
 
std::vector< std::stringnonSampleDirNames
 
std::string scanDirPrefix = "sam"
 
std::string scanDirPath = "Sample_LLH"
 
double ratioLabelScaling = (1.0/ratioPlotSplit - 1.0)
 
+

Function Documentation

+ +

◆ getGUNDAMParamName()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool getGUNDAMParamName (std::string mach3ParamName,
TDirectoryFilellhDir,
std::stringgundamName 
)
+
+ +

Definition at line 74 of file PlotLLH.cpp.

+
74 {
+
75 // try to find the right branch by looking for the mach3 name in the gundam file
+
76
+ + +
79 TKey* key = (TKey*)keyObj;
+
80 std::string testString = key->GetName();
+
81
+
82 if(testString.find(mach3ParamName + "_TGraph") != std::string::npos){
+ +
84
+
85 break;
+
86 }
+
87
+
88 // special case for EB_dial
+
89 else if(mach3ParamName.find("EB_dial") != std::string::npos){
+
90 std::string mach3ParamName_reduced = std::string(mach3ParamName);
+
91 mach3ParamName_reduced.replace(mach3ParamName_reduced.find("EB_dial"), std::string("EB_dial").size(), std::string("EB_bin"));
+
92
+
93 if(testString.find(mach3ParamName_reduced + "_TGraph") != std::string::npos){
+ +
95
+
96 break;
+
97 }
+
98 }
+
99
+
100 else {
+
101 // if we didnt find it, try again with potential extra bits of string removed
+
102 std::vector<std::string> mach3OnlyLabels = {"NDS_"};
+
103 for(std::string extraBit: mach3OnlyLabels){
+
104 std::string mach3ParamName_reduced = std::string(mach3ParamName);
+
105 if(mach3ParamName_reduced.find(extraBit) != std::string::npos)
+ +
107 else
+
108 continue;
+
109
+
110 if(testString.find(mach3ParamName_reduced + "_TGraph") != std::string::npos){
+ +
112
+
113 break;
+
114 }
+
115 }
+
116 }
+
117 }
+
118
+
119 return !(gundamName == NOT_FOUND_STR); // true if found, false if not
+
120}
+
std::string NOT_FOUND_STR
Definition PlotLLH.cpp:42
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ getParameterHist()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool getParameterHist (TFilefile,
TH1DretHist,
std::string mach3ParamName,
std::string directory = "sam",
std::string directoryPath = "Sample_LLH",
bool printNames = false 
)
+
+ +

Definition at line 122 of file PlotLLH.cpp.

+
122 { // default to sample directory
+
123 // check whats in the file to determine which fitter it cam from
+
124 TDirectoryFile *sampleLLHDir = (TDirectoryFile*)file->Get("Sample_LLH");
+
125 TDirectoryFile *FitterEngine = (TDirectoryFile*)file->Get("FitterEngine");
+
126
+
127 if(sampleLLHDir != NULL){ // this is a mach3 LLH scan
+
128 TH1D *Hist;
+
129
+
130 // see if we recognise the directory as a non sample one
+
131 bool recognisedDir = false;
+ +
133
+
134 if(recognisedDir){
+ +
136 Hist = (TH1D*)LLHDir->Get(Form("%s_%s", mach3ParamName.c_str(), directory.c_str()));
+
137
+
138 if(!Hist){ // might be an SK LLH scan
+
139 std::cout<<Form("%s_%s", directory.c_str(), mach3ParamName.c_str())<<std::endl;
+
140 Hist = (TH1D*)LLHDir->Get(Form("%s_%s", directory.c_str(), mach3ParamName.c_str()));
+
141 }
+
142 }
+
143
+
144 else{ // assume directory for a specific sample
+
145 TDirectoryFile *dir = (TDirectoryFile*)file->Get(Form("%s_LLH", directory.c_str()));
+
146 Hist = (TH1D*)dir->Get(Form("%s%s", mach3ParamName.c_str(), directory.c_str()));
+
147 }
+
148
+
149 // if we havent found it by now, give up
+
150 if(!Hist) return false;
+
151
+
152 *retHist = TH1D(*Hist);
+
153 }
+
154
+
155 else if(FitterEngine != NULL){ // this is a gundam LLH scan
+ +
157 TDirectoryFile *scan = (TDirectoryFile*)postFit->Get("scan");
+
158
+
159 // get the llh folder from the correct directory
+ +
161 if(directory == "sam") llh = (TDirectoryFile*)scan->Get("llhStat");
+
162 else if (directory == "full") llh = (TDirectoryFile*)scan->Get("llh");
+
163 else if (directory == "xs") llh = (TDirectoryFile*)scan->Get("llhPenalty");
+
164 else{
+
165 std::cerr<<"ERROR: unknown directory option: "<<directory<<std::endl;
+
166 throw;
+
167 }
+
168
+
169 std::string gundamName;
+ +
171 if(printNames)std::cout << std::setw(40) << mach3ParamName << " | "<< std::setw(40) << gundamName << std::endl;
+
172
+
173 if(!found) return false; // stop here if we couldnt find an equivalent parameter
+
174
+
175 TKey *paramKey = llh->FindKey(gundamName.c_str());
+
176 std::cout<<gundamName<<std::endl;
+
177
+
178 TGraph *paramGraph = (TGraph *)paramKey->ReadObj();
+
179
+
180 // fill the hist from the graph that we loaded
+
181 for(int idx =0; idx <= retHist->GetNbinsX(); idx++){
+
182 retHist->SetBinContent(idx, paramGraph->Eval(retHist->GetBinCenter(idx)));
+
183 }
+
184 }
+
185
+
186 else {
+
187 std::cerr<<"ERROR: Hey, really sorry but I'm not smart enough just now to read from the file you provided: "<<file->GetName()<<std::endl;
+
188 std::cerr<<" I omly know about MaCh3 and gundam files just now but You can teach me about yours if you like by adding the code to parse it here: "<<std::endl;
+
189 std::cerr<<" "<<__FILE__<<":"<<__LINE__<<std::endl;
+
190 throw;
+
191 }
+
192
+
193 return true;
+
194}
+
std::vector< std::string > nonSampleDirNames
Definition PlotLLH.cpp:45
+
bool getGUNDAMParamName(std::string mach3ParamName, TDirectoryFile *llhDir, std::string &gundamName)
Definition PlotLLH.cpp:74
+
+
+
+ +

◆ getSplitSampleStack()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void getSplitSampleStack (TFilefile,
std::vector< std::stringsampleVector,
std::string parameterName,
TH1D LLH_allSams,
std::vector< Double_t > & cumSums,
std::vector< bool > & drawLabel,
THStacksampleStack,
TLegendsplitSamplesLegend,
float baselineLLH_sam = 0.00001 
)
+
+ +

Definition at line 235 of file PlotLLH.cpp.

+
235 {
+
236 float LLH_sam_integ = LLH_allSams.Integral();
+
237 float cumSum = 0.0;
+
238 int nBins = LLH_allSams.GetNbinsX();
+
239
+
240 for(uint i=0; i < sampleVector.size(); i++){
+
241 std::string sampName = sampleVector[i];
+
242
+
243 TH1D *LLH_indivSam = new TH1D(Form("%s_%s_%s", parameterName.c_str(), sampName.c_str(), file->GetName()), "",
+
244 nBins, LLH_allSams.GetBinLowEdge(1), LLH_allSams.GetBinLowEdge(nBins+1));
+
245
+
246 getParameterHist(file, LLH_indivSam, parameterName, sampName, sampName); // NB: This will only work if the file is a mach3 file
+
247
+
248 LLH_indivSam->SetStats(0);
+
249 LLH_indivSam->SetLineColor(TColor::GetColorPalette(floor((float)i * TColor::GetNumberOfColors()/ (float)sampleVector.size())));
+
250 LLH_indivSam->SetFillColor(TColor::GetColorPalette(floor((float)i * TColor::GetNumberOfColors()/ (float)sampleVector.size())));
+ + +
253
+
254 cumSum += LLH_indivSam->GetBinContent(nBins);
+
255
+
256 cumSums.push_back(cumSum);
+
257
+
258 if((LLH_indivSam->Integral()/ LLH_sam_integ > sampleLabelThreshold) && (LLH_indivSam->Integral() / baselineLLH_sam > sampleLabelThreshold) ){ //dont draw a label if the likelihood contribution is less than threshold%
+
259 drawLabel.push_back(true);
+
260 }
+
261 else drawLabel.push_back(false);
+
262 }
+
263
+
264 return;
+
265}
+ +
double sampleLabelThreshold
Definition PlotLLH.cpp:37
+
bool getParameterHist(TFile *file, TH1D *retHist, std::string mach3ParamName, std::string directory="sam", std::string directoryPath="Sample_LLH", bool printNames=false)
Definition PlotLLH.cpp:122
+
std::string prettify_name(std::string fullName)
Definition PlotLLH.cpp:213
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char ** argv 
)
+
+ +

Definition at line 639 of file PlotLLH.cpp.

+
640{
+ +
642
+
643 // parse the inputs
+
644 int c;
+
645 while ((c = getopt(argc, argv, "o:i:l:d:srg"))!= -1) {
+
646 if (c < 0)
+
647 break;
+
648 switch (c) {
+
649 case 'o': {
+
650 PDFName = optarg;
+
651 break;
+
652 }
+
653 case 'i': {
+ +
655 FileLabels_default.push_back(optarg);
+
656 break;
+
657 }
+
658 case 's': {
+
659 splitBySample=true;
+
660 break;
+
661 }
+
662 case 'r': {
+
663 plotRatios = true;
+
664 break;
+
665 }
+
666 case 'g': {
+
667 drawGrid = true;
+
668 break;
+
669 }
+
670 case 'l': {
+ +
672 std::cout<<"INFO: Specified file labels {";
+
673 for(std::string label: FileLabels)std::cout<<label<<", ";
+
674 std::cout<<"}"<<std::endl;
+
675 break;
+
676 }
+
677 case 'd': {
+ +
679 break;
+
680 }
+
681 }
+
682 }
+
683
+
684 std::cout<<std::endl<<"LLH files to compare to mach3 scan: \n{";
+
685 // optind is for the extra arguments that are not parsed by the program
+
686 for(; optind < argc; optind++){
+
687 if(Mach3LLHFileName == ""){ //didnt provide an explicit input file, just take the first on the list
+ +
689 FileLabels_default.push_back(argv[optind]);
+
690 continue;
+
691 }
+
692
+
693 ExtraFileNames.push_back(argv[optind]);
+
694 std::cout<<argv[optind]<<", ";
+
695 FileLabels_default.push_back(argv[optind]);
+
696 }
+
697 std::cout<<"}"<<std::endl<<std::endl;
+
698
+
699 std::cout << "Now plotting LLH scan "<< std::endl;
+
700 if(splitBySample) std::cout<<"Splitting by sample"<<std::endl;
+
701
+
702 if(plotRatios && ExtraFileNames.size() == 0){
+
703 std::cerr<<"ERROR: you specified -r <plotRatios> = true but didnt specify any files to compare against, was this a mistake?"<<std::endl;
+
704 throw;
+
705 }
+
706
+
707 if(FileLabels.size() == 0){
+
708 std::cout<<"INFO: No file labels specified, will just use the file names"<<std::endl;
+ +
710 }
+
711
+
712 if((FileLabels.size() != 0) &&(FileLabels.size() != 1+ ExtraFileNames.size())){
+
713 std::cerr<<"ERROR: hmmm, you gave me "<< FileLabels.size() << " labels but "<< ExtraFileNames.size() +1<<" files"<<std::endl;
+
714 std::cerr<<" that doesn\'t seem right to me, did you forget a file? or a label maybe?"<<std::endl;
+
715 throw;
+
716 }
+
717
+
718 return PlotLLH();
+
719}
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
bool plotRatios
Definition PlotLLH.cpp:31
+
void parseFileLabels(std::string labelString, std::vector< std::string > &labelVec)
Definition PlotLLH.cpp:63
+
bool drawGrid
Definition PlotLLH.cpp:32
+
std::string extraDrawOptions
Definition PlotLLH.cpp:28
+
int PlotLLH()
Definition PlotLLH.cpp:268
+
std::string Mach3LLHFileName
Definition PlotLLH.cpp:27
+
std::vector< std::string > FileLabels
Definition PlotLLH.cpp:24
+
std::vector< std::string > ExtraFileNames
Definition PlotLLH.cpp:23
+
std::string PDFName
Definition PlotLLH.cpp:26
+
bool splitBySample
Definition PlotLLH.cpp:30
+
std::vector< std::string > FileLabels_default
Definition PlotLLH.cpp:25
+
+
+
+ +

◆ parseFileLabels()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void parseFileLabels (std::string labelString,
std::vector< std::string > & labelVec 
)
+
+ +

Definition at line 63 of file PlotLLH.cpp.

+
63 {
+
64 int end = labelString.find(";");
+
65 while (end != -1) { // Loop until no delimiter is left in the string.
+
66 labelVec.push_back(labelString.substr(0, end));
+
67 labelString.erase(labelString.begin(), labelString.begin() + end + 1);
+
68 end = labelString.find(";");
+
69 }
+
70 labelVec.push_back(labelString.substr(0, end));
+
71}
+
+
+
+ +

◆ PlotLLH()

+ +
+
+ + + + + + + +
int PlotLLH ()
+
+ +

Definition at line 268 of file PlotLLH.cpp.

+
268 {
+
269 // open the additional files
+
270 std::vector<TFile *> ExtraCompFiles(ExtraFileNames.size());
+ + +
273 }
+
274
+
275 //gStyle->SetPalette(1);
+ +
277
+
278 TFile* file1 = new TFile(Mach3LLHFileName.c_str(),"READ");
+
279
+
280 // get the names of the directories
+
281 TList *dirListFull = file1->GetListOfKeys();
+
282
+
283 //EM: get the names of the samples from the file
+
284 std::vector<std::string> sampleDirList; // the names of the directories for each sample
+
285 std::vector<std::string> sampleList; // the names of the samples
+
286
+
287 // get the names of the parameters from the Sample_LLH directory
+ +
289 std::vector<std::string> paramList;
+
290
+
291 std::cout<<"found parameters:"<<std::endl;
+
292 TList *paramKeys = sampleDir->GetListOfKeys();
+
293 for(int i=0; i < paramKeys->GetSize(); i++){
+
294 std::string paramName = ((TKey*)paramKeys->At(i))->GetName();
+
295
+
296 // pop out the _sam at the end of the name
+
297 std::string removeString = std::string(Form("_%s", scanDirPrefix.c_str()));
+
298 if(paramName.find(removeString) != std::string::npos){
+
299 paramName.erase(paramName.find(removeString), removeString.length());
+
300 }
+
301
+
302 // and just in case this is an SK scan
+
303 removeString = std::string(Form("%s_", scanDirPrefix.c_str()));
+
304 if(paramName.find(removeString) != std::string::npos){
+
305 paramName.erase(paramName.find(removeString), removeString.length());
+
306 }
+
307
+
308 std::cout<<"\t"<<paramName<<std::endl;
+
309 paramList.push_back(paramName);
+
310 }
+
311
+
312 if(splitBySample){
+
313 std::cout<<"Found samples: "<<std::endl;
+
314 for(int i=0; i < dirListFull->GetSize(); i++)
+
315 {
+
316 std::string dirName = ((TKey*)dirListFull->At(i))->GetName();
+
317 if (!(std::find(nonSampleDirNames.begin(), nonSampleDirNames.end(), dirName) != nonSampleDirNames.end()))
+
318 {
+
319 std::cout<<"\t"<<dirName<<" : ";
+
320 sampleDirList.push_back(dirName);
+
321
+
322 // pop out the _LLH at the end of the directory name
+
323 std::string removeString = "_LLH";
+
324 dirName.erase(dirName.find(removeString), dirName.length());
+
325 std::cout<<"\t"<<dirName<<std::endl;
+
326 sampleList.push_back(dirName);
+
327 }
+
328 }
+
329
+
330 if(sampleDirList.size()==0){
+
331 std::cout<<"found no sample directories, if you want to split the LLH by sample you neet to run LLH scan with LLH_SCAN_BY_SAMPLE = true option in your config file"<<std::endl;
+
332 return -1;
+
333 }
+
334 }
+
335
+
336 TCanvas *blankCanv = new TCanvas("blankCanv","",1024,1024);
+
337 TCanvas *splitSampBlankCanv = new TCanvas("splitSampBlankCanv","",1024 * (1 + ExtraFileNames.size()),1024);
+
338 blankCanv->SaveAs(Form("%s.pdf[", PDFName.c_str()));
+
339 if(splitBySample)splitSampBlankCanv->SaveAs(Form("%s_bySample.pdf[", PDFName.c_str()));
+
340
+
341 // loop over the spline parameters
+
342 for(std::string paramName : paramList){
+
343 std::cout<<"working on parameter "<<paramName<<std::endl;
+
344 // ###############################################################
+
345 // First lets do just the straight up likelihoods from all samples
+
346 // ###############################################################
+
347
+
348 // make the canvas and other plotting stuff
+
349 TCanvas* allSamplesCanv = new TCanvas("AllSampCanv","",1024,1024);
+
350 TLegend* legend = new TLegend(0.3,0.6,0.7,0.8);
+
351 THStack *compStack = new THStack(Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()), Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()));
+
352 THStack *ratioCompStack = new THStack(Form("%s_sam_ratio", paramName.c_str()), "");
+
353
+
354 // split the canvas if plotting ratios
+ +
356 if(plotRatios){
+
357 AllSamplesPad = new TPad("AllSampPad", "AllSampPad", 0.0, ratioPlotSplit, 1.0, 1.0);
+
358 AllSamplesPad->SetBottomMargin(0.0);
+
359 AllSamplesRatioPad = new TPad("AllSampRatioPad", "AllSampRatioPad", 0.0, 0.0 , 1.0, ratioPlotSplit);
+
360 AllSamplesRatioPad->SetTopMargin(0.0);
+
361 AllSamplesRatioPad->SetBottomMargin(0.3);
+
362 }
+
363 else{
+
364 AllSamplesPad = new TPad("AllSampPad", "AllSampPad", 0.0, 0.0 ,1.0, 1.0);
+
365 AllSamplesRatioPad = new TPad("AllSampRatioPad", "AllSampRatioPad",0.0 ,0.0 , 0.0, 0.0);
+
366 }
+
367
+
368 // get the sample reweight hist from the main file
+
369 TH1D *LLH_sam;
+
370 LLH_sam = (TH1D*)sampleDir->Get(Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()));
+
371
+
372 // maybe SK
+
373 if(!LLH_sam)LLH_sam = (TH1D*)sampleDir->Get(Form("%s_%s", scanDirPrefix.c_str(), paramName.c_str()));
+
374
+
375 if(!LLH_sam){
+
376 std::cerr<<"ERROR: failed to find the LLH scan hist in "<<scanDirPath<<std::endl;
+
377 throw;
+
378 }
+
379
+
380
+
381 LLH_sam->SetStats(0);
+
382 LLH_sam->SetLineColor(kBlack);
+
383 compStack->Add(LLH_sam);
+
384 legend->AddEntry(LLH_sam,FileLabels[0].c_str(),"l");
+
385
+
386 int nBins = LLH_sam->GetNbinsX();
+
387
+
388 // go through the other files
+ +
390 // first get the corresponding histogram from the comparisson file
+ +
392
+
393 TH1D *compHist = new TH1D(Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
394 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
395 TH1D *divHist = new TH1D(Form("%s_%s_div", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s_div", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
396 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
397
+ +
399 std::cout<<"WARNING: didnt find equivalent of parameter "<< paramName<<" in file "<<compFile->GetName()<<" wont be included in the comparisson plot"<<std::endl;
+
400 continue;
+
401 }
+
402
+
403 // make them look different to each other
+
404 compHist->SetLineColor(TColor::GetColorPalette(floor((float)extraFileIdx * TColor::GetNumberOfColors()/ (float)(ExtraFileNames.size() +1))));
+
405 compHist->SetLineStyle(2+ extraFileIdx %9);
+
406 compHist->SetLineWidth(lineWidth);
+
407
+
408 if(plotRatios){
+
409 // get the ratio hist
+
410 divHist->Divide(compHist, LLH_sam);
+
411 divHist->SetLineColor(TColor::GetColorPalette(floor((float)extraFileIdx * TColor::GetNumberOfColors()/ (float)(ExtraFileNames.size() +1))));
+
412 divHist->SetLineStyle(2+ extraFileIdx %9);
+
413 divHist->SetLineWidth(lineWidth);
+ +
415 }
+
416
+
417 // add it to the comparisson hstack and legend
+
418 compStack->Add(compHist);
+
419 legend->AddEntry(compHist, FileLabels[1 + extraFileIdx].c_str(), "l");
+
420 }
+
421
+
422 // draw the log likelihoods
+
423 allSamplesCanv->cd();
+
424 allSamplesCanv->Draw();
+
425 AllSamplesPad->Draw();
+
426 AllSamplesPad->cd();
+
427 if(drawGrid)AllSamplesPad->SetGrid();
+
428 compStack->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
429 if(!plotRatios)compStack->GetXaxis()->SetTitle("Parameter Variation");
+
430 compStack->GetYaxis()->SetTitle(Form("-2LLH_{%s}", scanDirPrefix.c_str()));
+
431 compStack->GetYaxis()->SetTitleOffset(yTitleOffset);
+
432 legend->Draw();
+
433
+
434 // add the ratio plot if specified
+
435 if(plotRatios){
+
436 allSamplesCanv->cd();
+
437 AllSamplesRatioPad->Draw();
+
438 AllSamplesRatioPad->cd();
+
439 if(drawGrid)AllSamplesRatioPad->SetGrid();
+
440
+
441 // do this so 1.0 is in the middle of the plot vertically
+
442 double stackMax, stackMin;
+
443 stackMax = ratioCompStack->GetMaximum("NOSTACK");
+
444 stackMin = ratioCompStack->GetMinimum("NOSTACK");
+
445
+
446 double stackLim = std::max(std::abs(1.0 - stackMax), std::abs(1.0 - stackMin));
+
447
+
448 ratioCompStack->SetMinimum(1.0 - 1.05 * stackLim);
+
449 ratioCompStack->SetMaximum(1.0 + 1.05 * stackLim);
+
450
+
451 // draw it
+
452 ratioCompStack->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
453
+
454 // make it look a bit nicer
+
455 ratioCompStack->GetXaxis()->SetLabelSize(ratioLabelScaling * compStack->GetXaxis()->GetLabelSize());
+
456 ratioCompStack->GetXaxis()->SetTitleSize(ratioLabelScaling * compStack->GetXaxis()->GetLabelSize());
+
457 ratioCompStack->GetXaxis()->SetTitle("Parameter Variation");
+
458
+
459 ratioCompStack->GetYaxis()->SetLabelSize(ratioLabelScaling * compStack->GetYaxis()->GetLabelSize());
+
460 ratioCompStack->GetYaxis()->SetTitleSize(ratioLabelScaling * compStack->GetYaxis()->GetLabelSize());
+
461 ratioCompStack->GetYaxis()->SetTitleOffset(yTitleOffset);
+
462 ratioCompStack->GetYaxis()->SetTitle("Parameter Variation");
+
463 ratioCompStack->GetYaxis()->SetNdivisions(5,2,0);
+
464
+
465 // add horizontal line at 1 for reference
+
466 TLine line = TLine();
+
467 line.SetLineColor(kBlack);
+
468 line.SetLineWidth(lineWidth);
+
469 line.DrawLine(LLH_sam->GetBinLowEdge(1), 1.0, LLH_sam->GetBinLowEdge(nBins+1), 1.0);
+
470
+
471 }
+
472
+
473 // save to the output file
+
474 allSamplesCanv->SaveAs(Form("%s.pdf", PDFName.c_str()));
+
475
+
476
+
477 if(splitBySample){
+
478 // #########################################
+
479 // ## now lets make plots split by sample ##
+
480 // #########################################
+
481
+
482 // split up the canvas so can have side by side plots, one for each file
+
483 TCanvas* splitSamplesCanv = new TCanvas("splitSampCanv","",4096 * (1 + ExtraFileNames.size()), 4096);
+
484 splitSamplesCanv->Divide(1 + ExtraFileNames.size());
+
485 splitSamplesCanv->Draw();
+
486
+
487 THStack *baseSplitSamplesStack = new THStack(paramName.c_str(), Form("%s - %s", paramName.c_str(), FileLabels[0].c_str()));
+
488 TLegend* baseSplitSamplesLegend = new TLegend(0.37,0.475,0.63,0.9);
+
489
+
490 splitSamplesCanv->cd(1)->SetGrid();
+
491
+
492 std::vector<Double_t> cumSums;
+
493 std::vector<bool> drawLabel;
+
494
+ +
496
+ +
498
+ +
500 LLH_sam->SetLineWidth(1); // undo SetLineWidth that was done above
+
501 LLH_sam->Draw(Form("same%s", extraDrawOptions.c_str()));
+
502 baseSplitSamplesLegend->AddEntry(LLH_sam, "All Samples", "l");
+
503 }
+
504
+ +
506
+
507 TLatex *label = new TLatex;
+
508 // format the label
+
509 label->SetTextAlign(11);
+
510 label->SetTextAngle(-55);
+
511 label->SetTextSize(0.012);
+
512
+
513 // need to draw the labels after other stuff or they dont show up
+
514 for(uint i=0; i < sampleDirList.size(); i++){
+
515 std::string sampName = sampleList[i];
+
516 if(!drawLabel[i])continue;
+
517 label->DrawLatex(LLH_sam->GetBinLowEdge(nBins+1), cumSums[i], Form("#leftarrow%s", prettify_name(sampName).c_str()) );
+
518 }
+
519
+
520
+
521 // now we plot the comparisson file plots
+ + +
524
+
525 // split the canvas if plotting ratios
+ +
527 if(plotRatios){
+
528 splitSamplesPad = new TPad("splitSampPad", "splitSampPad", 0.0, ratioPlotSplit, 1.0, 1.0);
+
529 splitSamplesPad->SetBottomMargin(0.0);
+
530 splitSamplesRatioPad = new TPad("splitSampRatioPad", "splitSampRatioPad", 0.0, 0.0 , 1.0, ratioPlotSplit);
+
531 splitSamplesRatioPad->SetTopMargin(0.0);
+
532 splitSamplesRatioPad->SetBottomMargin(0.3);
+
533 }
+
534 else{
+
535 splitSamplesPad = new TPad("splitSampPad", "splitSampPad", 0.0, 0.0 ,1.0, 1.0);
+
536 splitSamplesRatioPad = new TPad("splitSampRatioPad", "splitSampRatioPad",0.0 ,0.0 , 0.0, 0.0);
+
537 }
+
538
+
539 std::vector<Double_t> cumSums;
+
540 std::vector<bool> drawLabel;
+
541
+
542 THStack *splitSamplesStack = new THStack(paramName.c_str(), Form("%s - %s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()));
+
543 TLegend *splitSamplesLegend = new TLegend(0.37,0.475,0.63,0.9);
+
544
+ +
546 TH1D *compLLH_sam = new TH1D(Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
547 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
548
+ +
550 std::cout<<"WARNING: didnt find equivalent of parameter "<< paramName<<" in file "<<compFile->GetName()<<" wont be included in the split sample comparisson plot"<<std::endl;
+
551 continue;
+
552 }
+
553
+
554 // if on the same y axis, also check that the contribution of the sample compared to the baseline LLH integral is above the threshold
+
555 // otherwise the labels might get very crowded if the comparisson LLH is much smaller than the baseline one
+ + +
558
+
559 // go to the pad for the histograms
+
560 if(drawGrid)splitSamplesPad->SetGrid();
+
561 splitSamplesPad->Draw();
+
562 splitSamplesPad->cd();
+
563
+
564 splitSamplesStack->Draw(extraDrawOptions.c_str());
+
565 splitSamplesStack->GetXaxis()->SetTitle("Parameter Variation");
+
566 splitSamplesStack->GetYaxis()->SetTitle("-2LLH_{sam}");
+
567 if(sameAxis)splitSamplesStack->SetMaximum(baseSplitSamplesStack->GetMaximum());
+
568
+ +
570 compLLH_sam->Draw(Form("same%s", extraDrawOptions.c_str()));
+
571 compLLH_sam->SetLineColor(kBlack);
+
572 splitSamplesLegend->AddEntry(compLLH_sam, "All Samples", "l");
+
573 }
+
574 splitSamplesLegend->Draw();
+
575
+
576 // need to draw the labels after other stuff or they dont show up
+
577 for(uint i=0; i < sampleDirList.size(); i++){
+
578 std::string sampName = sampleList[i];
+
579 if(!drawLabel[i])continue;
+
580
+
581 label->DrawLatex(compLLH_sam->GetBinLowEdge(compLLH_sam->GetNbinsX()+1), cumSums[i], Form("#leftarrow%s", prettify_name(sampName).c_str()) );
+
582 }
+
583
+
584 if(plotRatios){
+ +
586 if(drawGrid)splitSamplesRatioPad->SetGrid();
+
587 splitSamplesRatioPad->Draw();
+ +
589
+ +
591
+ +
593 TList *compHistList = splitSamplesStack->GetHists();
+
594
+
595 if(baselineHistList->GetEntries() != compHistList->GetEntries()){
+
596 std::cout<<"WARNING: Number of samples in file "<<compFile->GetName()<<" is not the same as in the baseline file, "<<file1->GetName()<<std::endl;
+
597 std::cout<<" Cannot do direct comparisson of the contributions to make the ratio plot, will skip."<<std::endl;
+
598 continue;
+
599 }
+
600
+
601 for(int sampleIdx = 0; sampleIdx < baselineHistList->GetEntries(); sampleIdx++){
+
602 TH1D *divHist = new TH1D(Form("%s_%s_splitDiv", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s_splitDiv", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
603 compLLH_sam->GetNbinsX(), compLLH_sam->GetBinLowEdge(1), compLLH_sam->GetBinLowEdge(nBins+1));
+ + +
606 divHist->SetLineColor(((TH1D*)compHistList->At(sampleIdx))->GetLineColor());
+
607 }
+
608
+
609 splitSamplesStackRatios->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
610
+
611 splitSamplesStackRatios->GetXaxis()->SetLabelSize(ratioLabelScaling * splitSamplesStack->GetXaxis()->GetLabelSize());
+
612 splitSamplesStackRatios->GetXaxis()->SetTitleSize(ratioLabelScaling * splitSamplesStack->GetXaxis()->GetLabelSize());
+
613 splitSamplesStackRatios->GetXaxis()->SetTitle("Parameter Variation");
+
614
+
615 splitSamplesStackRatios->GetYaxis()->SetLabelSize(ratioLabelScaling * splitSamplesStack->GetYaxis()->GetLabelSize());
+
616 splitSamplesStackRatios->GetYaxis()->SetTitleSize(ratioLabelScaling * splitSamplesStack->GetYaxis()->GetLabelSize());
+
617 splitSamplesStackRatios->GetYaxis()->SetNdivisions(5,2,0);
+
618
+
619 }
+
620 }
+
621
+
622 splitSamplesCanv->SaveAs(Form("%s_bySample.pdf", PDFName.c_str()));
+
623
+ + +
626 }
+
627
+
628 //delete sampleCanv;
+
629 delete compStack;
+
630 delete allSamplesCanv;
+
631 }
+
632
+
633 blankCanv->SaveAs(Form("%s.pdf]", PDFName.c_str()));
+
634 if(splitBySample)splitSampBlankCanv->SaveAs(Form("%s_bySample.pdf]", PDFName.c_str()));
+
635
+
636 return 0;
+
637}
+
bool sameAxis
Definition PlotLLH.cpp:40
+
double ratioLabelScaling
Definition PlotLLH.cpp:61
+
void set_plot_style()
Definition PlotLLH.cpp:197
+
std::string scanDirPrefix
Definition PlotLLH.cpp:57
+
std::string scanDirPath
Definition PlotLLH.cpp:58
+
double ratioPlotSplit
Definition PlotLLH.cpp:35
+
bool totalOnSplitPlots
Definition PlotLLH.cpp:39
+
int lineWidth
Definition PlotLLH.cpp:38
+
double yTitleOffset
Definition PlotLLH.cpp:36
+
void getSplitSampleStack(TFile *file, std::vector< std::string > sampleVector, std::string parameterName, TH1D LLH_allSams, std::vector< Double_t > &cumSums, std::vector< bool > &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_sam=0.00001)
Definition PlotLLH.cpp:235
+
+
+
+ +

◆ prettify_name()

+ +
+
+ + + + + + + + +
std::string prettify_name (std::string fullName)
+
+ +

Definition at line 213 of file PlotLLH.cpp.

+
213 {
+
214 std::string newName = fullName;
+
215
+
216 std::string numu = "#nu_{#mu}";
+
217 std::string numuBar = "#bar{#nu}_{#mu}";
+
218 std::string pi = "#pi";
+
219 std::string gamma = "#gamma";
+
220 std::string nuBar = "#bar{#nu}";
+
221 std::string boldP = "#bf{P}";
+
222
+
223 if(newName.find("anti-numu") <= newName.length())newName.replace(newName.find("anti-numu"), 9, numuBar);
+
224 if(newName.find("numu") <= newName.length())newName.replace(newName.find("numu"), 4, numu);
+
225 if(newName.find("NuMu") <= newName.length())newName.replace(newName.find("NuMu"), 4, numu);
+
226 if(newName.find("photon") <= newName.length())newName.replace(newName.find("photon"), 6, gamma);
+
227 if(newName.find("AntiNu") <= newName.length())newName.replace(newName.find("AntiNu"), 6, nuBar);
+
228 if(newName.find("protons") <= newName.length())newName.replace(newName.find("protons"), 7, boldP);
+
229
+
230 if(newName.find("Mode") <= newName.length())newName.erase(newName.find("Mode"), 4);
+
231
+
232 return newName;
+
233}
+
+
+
+ +

◆ set_plot_style()

+ +
+
+ + + + + + + +
void set_plot_style ()
+
+ +

Definition at line 197 of file PlotLLH.cpp.

+
198{
+
199 //EM: define the colour palette taken from https://www.color-hex.com/color-palette/49436
+
200 const Int_t NCont = 255;
+
201
+
202 const Int_t NRGBs = 4;
+
203 Double_t stops[NRGBs] = { 0.0 , 0.25 , 0.5 , 0.75 }; //, 1.00 };
+
204 Double_t red[NRGBs] = { 213.0/256.0, 204.0/256.0, 0.0 , 240.0/256.0}; //, 0.0 };
+
205 Double_t green[NRGBs] = { 94.0/256.0 , 121.0/256.0, 114.0/256.0, 228.0/256.0}; //, 158.0/256.0 };
+
206 Double_t blue[NRGBs] = { 0.0 , 167.0/256.0, 178.0/256.0, 66.0/256.0 }; //, 115.0/256.0 };
+
207
+
208 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
+
209 gStyle->SetNumberContours(NCont);
+
210}
+
+
+
+

Variable Documentation

+ +

◆ drawGrid

+ +
+
+ + + + +
bool drawGrid
+
+ +

Definition at line 32 of file PlotLLH.cpp.

+ +
+
+ +

◆ extraDrawOptions

+ +
+
+ + + + +
std::string extraDrawOptions = ""
+
+ +

Definition at line 28 of file PlotLLH.cpp.

+ +
+
+ +

◆ ExtraFileNames

+ +
+
+ + + + +
std::vector<std::string> ExtraFileNames
+
+ +

Definition at line 23 of file PlotLLH.cpp.

+ +
+
+ +

◆ FileLabels

+ +
+
+ + + + +
std::vector<std::string> FileLabels
+
+ +

Definition at line 24 of file PlotLLH.cpp.

+ +
+
+ +

◆ FileLabels_default

+ +
+
+ + + + +
std::vector<std::string> FileLabels_default
+
+ +

Definition at line 25 of file PlotLLH.cpp.

+ +
+
+ +

◆ lineWidth

+ +
+
+ + + + +
int lineWidth = 3
+
+ +

Definition at line 38 of file PlotLLH.cpp.

+ +
+
+ +

◆ Mach3LLHFileName

+ +
+
+ + + + +
std::string Mach3LLHFileName
+
+ +

Definition at line 27 of file PlotLLH.cpp.

+ +
+
+ +

◆ nonSampleDirNames

+ +
+
+ + + + +
std::vector<std::string> nonSampleDirNames
+
+Initial value:
= {
+
"Sample_LLH", "Total_LLH",
+
"XSec_LLH", "ND280_LLH",
+
"Xsec_LLH", "SK_LLH"
+
}
+
+

Definition at line 45 of file PlotLLH.cpp.

+
45 {
+
46 "Sample_LLH", "Total_LLH", // General
+
47 "XSec_LLH", "ND280_LLH", // ND Specific
+
48 "Xsec_LLH", "SK_LLH" // SK Specific
+
49 };
+
+
+
+ +

◆ NOT_FOUND_STR

+ +
+
+ + + + +
std::string NOT_FOUND_STR = "__PARAM_NAME_NOT_FOUND__"
+
+ +

Definition at line 42 of file PlotLLH.cpp.

+ +
+
+ +

◆ PDFName

+ +
+
+ + + + +
std::string PDFName = "LLHScan"
+
+ +

Definition at line 26 of file PlotLLH.cpp.

+ +
+
+ +

◆ plotRatios

+ +
+
+ + + + +
bool plotRatios
+
+ +

Definition at line 31 of file PlotLLH.cpp.

+ +
+
+ +

◆ ratioLabelScaling

+ +
+
+ + + + +
double ratioLabelScaling = (1.0/ratioPlotSplit - 1.0)
+
+ +

Definition at line 61 of file PlotLLH.cpp.

+ +
+
+ +

◆ ratioPlotSplit

+ +
+
+ + + + +
double ratioPlotSplit = 0.3
+
+ +

Definition at line 35 of file PlotLLH.cpp.

+ +
+
+ +

◆ sameAxis

+ +
+
+ + + + +
bool sameAxis = true
+
+ +

Definition at line 40 of file PlotLLH.cpp.

+ +
+
+ +

◆ sampleLabelThreshold

+ +
+
+ + + + +
double sampleLabelThreshold = 0.0275
+
+ +

Definition at line 37 of file PlotLLH.cpp.

+ +
+
+ +

◆ scanDirPath

+ +
+
+ + + + +
std::string scanDirPath = "Sample_LLH"
+
+ +

Definition at line 58 of file PlotLLH.cpp.

+ +
+
+ +

◆ scanDirPrefix

+ +
+
+ + + + +
std::string scanDirPrefix = "sam"
+
+ +

Definition at line 57 of file PlotLLH.cpp.

+ +
+
+ +

◆ splitBySample

+ +
+
+ + + + +
bool splitBySample
+
+ +

Definition at line 30 of file PlotLLH.cpp.

+ +
+
+ +

◆ totalOnSplitPlots

+ +
+
+ + + + +
bool totalOnSplitPlots = false
+
+ +

Definition at line 39 of file PlotLLH.cpp.

+ +
+
+ +

◆ yTitleOffset

+ +
+
+ + + + +
double yTitleOffset = 1.25
+
+ +

Definition at line 36 of file PlotLLH.cpp.

+ +
+
+
+ + + + diff --git a/PlotLLH_8cpp_source.html b/PlotLLH_8cpp_source.html new file mode 100644 index 00000000..a575be6b --- /dev/null +++ b/PlotLLH_8cpp_source.html @@ -0,0 +1,862 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/PlotLLH.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PlotLLH.cpp
+
+
+Go to the documentation of this file.
1// C++
+
2#include <iostream>
+
3#include <algorithm>
+
4#include <iomanip>
+
5
+
6// ROOT
+
7#include "TFile.h"
+
8#include "TCanvas.h"
+
9#include "TH1D.h"
+
10#include "TLegend.h"
+
11#include "TKey.h"
+
12#include "TLegend.h"
+
13#include "TColor.h"
+
14#include "TStyle.h"
+
15#include "THStack.h"
+
16#include "TLatex.h"
+
17#include "TGraph.h"
+
18#include "TLine.h"
+
19#include "TROOT.h"
+
20
+
21#include "manager/manager.h"
+
22
+
23std::vector<std::string> ExtraFileNames;
+
24std::vector<std::string> FileLabels;
+
25std::vector<std::string> FileLabels_default;
+
26std::string PDFName = "LLHScan";
+
27std::string Mach3LLHFileName;
+
28std::string extraDrawOptions = "";
+
29
+ + + +
33
+
34// some options for the plots
+
35double ratioPlotSplit = 0.3;
+
36double yTitleOffset = 1.25;
+
37double sampleLabelThreshold = 0.0275;
+
38int lineWidth = 3;
+
39bool totalOnSplitPlots = false;
+
40bool sameAxis = true;
+
41
+
42std::string NOT_FOUND_STR = "__PARAM_NAME_NOT_FOUND__";
+
43
+
44// these directories are not considered when looking for LLH broken down by sample
+
+
45std::vector<std::string> nonSampleDirNames = {
+
46 "Sample_LLH", "Total_LLH", // General
+
47 "XSec_LLH", "ND280_LLH", // ND Specific
+
48 "Xsec_LLH", "SK_LLH" // SK Specific
+
49 };
+
+
50
+
51//EM: the corresponding pre/ post fixes for those directories are:
+
52// "sam", "full", // General
+
53// "xs", "nd", // ND Specific
+
54// "xs", "sk" // SK Specific
+
55
+
56//EM: this is the directory that will be used for the base comparisson, maybe make this a command line option in future
+
57std::string scanDirPrefix = "sam";
+
58std::string scanDirPath = "Sample_LLH";
+
59
+
60// scale the ratio plot labels by this much to make them same size as the normal plot
+
61double ratioLabelScaling = (1.0/ratioPlotSplit - 1.0);
+
62
+
+
63void parseFileLabels(std::string labelString, std::vector<std::string> &labelVec){
+
64 int end = labelString.find(";");
+
65 while (end != -1) { // Loop until no delimiter is left in the string.
+
66 labelVec.push_back(labelString.substr(0, end));
+
67 labelString.erase(labelString.begin(), labelString.begin() + end + 1);
+
68 end = labelString.find(";");
+
69 }
+
70 labelVec.push_back(labelString.substr(0, end));
+
71}
+
+
72
+
73
+
+ +
75 // try to find the right branch by looking for the mach3 name in the gundam file
+
76
+ +
78 for (TObject *keyObj: *llhDir->GetListOfKeys()) {
+
79 TKey* key = (TKey*)keyObj;
+
80 std::string testString = key->GetName();
+
81
+
82 if(testString.find(mach3ParamName + "_TGraph") != std::string::npos){
+ +
84
+
85 break;
+
86 }
+
87
+
88 // special case for EB_dial
+
89 else if(mach3ParamName.find("EB_dial") != std::string::npos){
+
90 std::string mach3ParamName_reduced = std::string(mach3ParamName);
+
91 mach3ParamName_reduced.replace(mach3ParamName_reduced.find("EB_dial"), std::string("EB_dial").size(), std::string("EB_bin"));
+
92
+
93 if(testString.find(mach3ParamName_reduced + "_TGraph") != std::string::npos){
+ +
95
+
96 break;
+
97 }
+
98 }
+
99
+
100 else {
+
101 // if we didnt find it, try again with potential extra bits of string removed
+
102 std::vector<std::string> mach3OnlyLabels = {"NDS_"};
+
103 for(std::string extraBit: mach3OnlyLabels){
+
104 std::string mach3ParamName_reduced = std::string(mach3ParamName);
+
105 if(mach3ParamName_reduced.find(extraBit) != std::string::npos)
+ +
107 else
+
108 continue;
+
109
+
110 if(testString.find(mach3ParamName_reduced + "_TGraph") != std::string::npos){
+ +
112
+
113 break;
+
114 }
+
115 }
+
116 }
+
117 }
+
118
+
119 return !(gundamName == NOT_FOUND_STR); // true if found, false if not
+
120}
+
+
121
+
+
122bool getParameterHist(TFile *file, TH1D *retHist, std::string mach3ParamName, std::string directory = "sam", std::string directoryPath = "Sample_LLH", bool printNames=false){ // default to sample directory
+
123 // check whats in the file to determine which fitter it cam from
+
124 TDirectoryFile *sampleLLHDir = (TDirectoryFile*)file->Get("Sample_LLH");
+
125 TDirectoryFile *FitterEngine = (TDirectoryFile*)file->Get("FitterEngine");
+
126
+
127 if(sampleLLHDir != NULL){ // this is a mach3 LLH scan
+
128 TH1D *Hist;
+
129
+
130 // see if we recognise the directory as a non sample one
+
131 bool recognisedDir = false;
+
132 for(std::string compStr: nonSampleDirNames) if(compStr == directoryPath) recognisedDir=true;
+
133
+
134 if(recognisedDir){
+ +
136 Hist = (TH1D*)LLHDir->Get(Form("%s_%s", mach3ParamName.c_str(), directory.c_str()));
+
137
+
138 if(!Hist){ // might be an SK LLH scan
+
139 std::cout<<Form("%s_%s", directory.c_str(), mach3ParamName.c_str())<<std::endl;
+
140 Hist = (TH1D*)LLHDir->Get(Form("%s_%s", directory.c_str(), mach3ParamName.c_str()));
+
141 }
+
142 }
+
143
+
144 else{ // assume directory for a specific sample
+
145 TDirectoryFile *dir = (TDirectoryFile*)file->Get(Form("%s_LLH", directory.c_str()));
+
146 Hist = (TH1D*)dir->Get(Form("%s%s", mach3ParamName.c_str(), directory.c_str()));
+
147 }
+
148
+
149 // if we havent found it by now, give up
+
150 if(!Hist) return false;
+
151
+
152 *retHist = TH1D(*Hist);
+
153 }
+
154
+
155 else if(FitterEngine != NULL){ // this is a gundam LLH scan
+ +
157 TDirectoryFile *scan = (TDirectoryFile*)postFit->Get("scan");
+
158
+
159 // get the llh folder from the correct directory
+ +
161 if(directory == "sam") llh = (TDirectoryFile*)scan->Get("llhStat");
+
162 else if (directory == "full") llh = (TDirectoryFile*)scan->Get("llh");
+
163 else if (directory == "xs") llh = (TDirectoryFile*)scan->Get("llhPenalty");
+
164 else{
+
165 std::cerr<<"ERROR: unknown directory option: "<<directory<<std::endl;
+
166 throw;
+
167 }
+
168
+
169 std::string gundamName;
+ +
171 if(printNames)std::cout << std::setw(40) << mach3ParamName << " | "<< std::setw(40) << gundamName << std::endl;
+
172
+
173 if(!found) return false; // stop here if we couldnt find an equivalent parameter
+
174
+
175 TKey *paramKey = llh->FindKey(gundamName.c_str());
+
176 std::cout<<gundamName<<std::endl;
+
177
+
178 TGraph *paramGraph = (TGraph *)paramKey->ReadObj();
+
179
+
180 // fill the hist from the graph that we loaded
+
181 for(int idx =0; idx <= retHist->GetNbinsX(); idx++){
+
182 retHist->SetBinContent(idx, paramGraph->Eval(retHist->GetBinCenter(idx)));
+
183 }
+
184 }
+
185
+
186 else {
+
187 std::cerr<<"ERROR: Hey, really sorry but I'm not smart enough just now to read from the file you provided: "<<file->GetName()<<std::endl;
+
188 std::cerr<<" I omly know about MaCh3 and gundam files just now but You can teach me about yours if you like by adding the code to parse it here: "<<std::endl;
+
189 std::cerr<<" "<<__FILE__<<":"<<__LINE__<<std::endl;
+
190 throw;
+
191 }
+
192
+
193 return true;
+
194}
+
+
195
+
196
+
+ +
198{
+
199 //EM: define the colour palette taken from https://www.color-hex.com/color-palette/49436
+
200 const Int_t NCont = 255;
+
201
+
202 const Int_t NRGBs = 4;
+
203 Double_t stops[NRGBs] = { 0.0 , 0.25 , 0.5 , 0.75 }; //, 1.00 };
+
204 Double_t red[NRGBs] = { 213.0/256.0, 204.0/256.0, 0.0 , 240.0/256.0}; //, 0.0 };
+
205 Double_t green[NRGBs] = { 94.0/256.0 , 121.0/256.0, 114.0/256.0, 228.0/256.0}; //, 158.0/256.0 };
+
206 Double_t blue[NRGBs] = { 0.0 , 167.0/256.0, 178.0/256.0, 66.0/256.0 }; //, 115.0/256.0 };
+
207
+
208 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
+
209 gStyle->SetNumberContours(NCont);
+
210}
+
+
211
+
212
+
+
213std::string prettify_name(std::string fullName){
+
214 std::string newName = fullName;
+
215
+
216 std::string numu = "#nu_{#mu}";
+
217 std::string numuBar = "#bar{#nu}_{#mu}";
+
218 std::string pi = "#pi";
+
219 std::string gamma = "#gamma";
+
220 std::string nuBar = "#bar{#nu}";
+
221 std::string boldP = "#bf{P}";
+
222
+
223 if(newName.find("anti-numu") <= newName.length())newName.replace(newName.find("anti-numu"), 9, numuBar);
+
224 if(newName.find("numu") <= newName.length())newName.replace(newName.find("numu"), 4, numu);
+
225 if(newName.find("NuMu") <= newName.length())newName.replace(newName.find("NuMu"), 4, numu);
+
226 if(newName.find("photon") <= newName.length())newName.replace(newName.find("photon"), 6, gamma);
+
227 if(newName.find("AntiNu") <= newName.length())newName.replace(newName.find("AntiNu"), 6, nuBar);
+
228 if(newName.find("protons") <= newName.length())newName.replace(newName.find("protons"), 7, boldP);
+
229
+
230 if(newName.find("Mode") <= newName.length())newName.erase(newName.find("Mode"), 4);
+
231
+
232 return newName;
+
233}
+
+
234
+
+
235void getSplitSampleStack(TFile *file, std::vector<std::string> sampleVector, std::string parameterName, TH1D LLH_allSams, std::vector<Double_t> &cumSums, std::vector<bool> &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_sam = 0.00001){
+
236 float LLH_sam_integ = LLH_allSams.Integral();
+
237 float cumSum = 0.0;
+
238 int nBins = LLH_allSams.GetNbinsX();
+
239
+
240 for(uint i=0; i < sampleVector.size(); i++){
+
241 std::string sampName = sampleVector[i];
+
242
+
243 TH1D *LLH_indivSam = new TH1D(Form("%s_%s_%s", parameterName.c_str(), sampName.c_str(), file->GetName()), "",
+
244 nBins, LLH_allSams.GetBinLowEdge(1), LLH_allSams.GetBinLowEdge(nBins+1));
+
245
+
246 getParameterHist(file, LLH_indivSam, parameterName, sampName, sampName); // NB: This will only work if the file is a mach3 file
+
247
+
248 LLH_indivSam->SetStats(0);
+
249 LLH_indivSam->SetLineColor(TColor::GetColorPalette(floor((float)i * TColor::GetNumberOfColors()/ (float)sampleVector.size())));
+
250 LLH_indivSam->SetFillColor(TColor::GetColorPalette(floor((float)i * TColor::GetNumberOfColors()/ (float)sampleVector.size())));
+ + +
253
+
254 cumSum += LLH_indivSam->GetBinContent(nBins);
+
255
+
256 cumSums.push_back(cumSum);
+
257
+
258 if((LLH_indivSam->Integral()/ LLH_sam_integ > sampleLabelThreshold) && (LLH_indivSam->Integral() / baselineLLH_sam > sampleLabelThreshold) ){ //dont draw a label if the likelihood contribution is less than threshold%
+
259 drawLabel.push_back(true);
+
260 }
+
261 else drawLabel.push_back(false);
+
262 }
+
263
+
264 return;
+
265}
+
+
266
+
267
+
+ +
269 // open the additional files
+
270 std::vector<TFile *> ExtraCompFiles(ExtraFileNames.size());
+ + +
273 }
+
274
+
275 //gStyle->SetPalette(1);
+ +
277
+
278 TFile* file1 = new TFile(Mach3LLHFileName.c_str(),"READ");
+
279
+
280 // get the names of the directories
+
281 TList *dirListFull = file1->GetListOfKeys();
+
282
+
283 //EM: get the names of the samples from the file
+
284 std::vector<std::string> sampleDirList; // the names of the directories for each sample
+
285 std::vector<std::string> sampleList; // the names of the samples
+
286
+
287 // get the names of the parameters from the Sample_LLH directory
+ +
289 std::vector<std::string> paramList;
+
290
+
291 std::cout<<"found parameters:"<<std::endl;
+
292 TList *paramKeys = sampleDir->GetListOfKeys();
+
293 for(int i=0; i < paramKeys->GetSize(); i++){
+
294 std::string paramName = ((TKey*)paramKeys->At(i))->GetName();
+
295
+
296 // pop out the _sam at the end of the name
+
297 std::string removeString = std::string(Form("_%s", scanDirPrefix.c_str()));
+
298 if(paramName.find(removeString) != std::string::npos){
+
299 paramName.erase(paramName.find(removeString), removeString.length());
+
300 }
+
301
+
302 // and just in case this is an SK scan
+
303 removeString = std::string(Form("%s_", scanDirPrefix.c_str()));
+
304 if(paramName.find(removeString) != std::string::npos){
+
305 paramName.erase(paramName.find(removeString), removeString.length());
+
306 }
+
307
+
308 std::cout<<"\t"<<paramName<<std::endl;
+
309 paramList.push_back(paramName);
+
310 }
+
311
+
312 if(splitBySample){
+
313 std::cout<<"Found samples: "<<std::endl;
+
314 for(int i=0; i < dirListFull->GetSize(); i++)
+
315 {
+
316 std::string dirName = ((TKey*)dirListFull->At(i))->GetName();
+
317 if (!(std::find(nonSampleDirNames.begin(), nonSampleDirNames.end(), dirName) != nonSampleDirNames.end()))
+
318 {
+
319 std::cout<<"\t"<<dirName<<" : ";
+
320 sampleDirList.push_back(dirName);
+
321
+
322 // pop out the _LLH at the end of the directory name
+
323 std::string removeString = "_LLH";
+
324 dirName.erase(dirName.find(removeString), dirName.length());
+
325 std::cout<<"\t"<<dirName<<std::endl;
+
326 sampleList.push_back(dirName);
+
327 }
+
328 }
+
329
+
330 if(sampleDirList.size()==0){
+
331 std::cout<<"found no sample directories, if you want to split the LLH by sample you neet to run LLH scan with LLH_SCAN_BY_SAMPLE = true option in your config file"<<std::endl;
+
332 return -1;
+
333 }
+
334 }
+
335
+
336 TCanvas *blankCanv = new TCanvas("blankCanv","",1024,1024);
+
337 TCanvas *splitSampBlankCanv = new TCanvas("splitSampBlankCanv","",1024 * (1 + ExtraFileNames.size()),1024);
+
338 blankCanv->SaveAs(Form("%s.pdf[", PDFName.c_str()));
+
339 if(splitBySample)splitSampBlankCanv->SaveAs(Form("%s_bySample.pdf[", PDFName.c_str()));
+
340
+
341 // loop over the spline parameters
+
342 for(std::string paramName : paramList){
+
343 std::cout<<"working on parameter "<<paramName<<std::endl;
+
344 // ###############################################################
+
345 // First lets do just the straight up likelihoods from all samples
+
346 // ###############################################################
+
347
+
348 // make the canvas and other plotting stuff
+
349 TCanvas* allSamplesCanv = new TCanvas("AllSampCanv","",1024,1024);
+
350 TLegend* legend = new TLegend(0.3,0.6,0.7,0.8);
+
351 THStack *compStack = new THStack(Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()), Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()));
+
352 THStack *ratioCompStack = new THStack(Form("%s_sam_ratio", paramName.c_str()), "");
+
353
+
354 // split the canvas if plotting ratios
+ +
356 if(plotRatios){
+
357 AllSamplesPad = new TPad("AllSampPad", "AllSampPad", 0.0, ratioPlotSplit, 1.0, 1.0);
+
358 AllSamplesPad->SetBottomMargin(0.0);
+
359 AllSamplesRatioPad = new TPad("AllSampRatioPad", "AllSampRatioPad", 0.0, 0.0 , 1.0, ratioPlotSplit);
+
360 AllSamplesRatioPad->SetTopMargin(0.0);
+
361 AllSamplesRatioPad->SetBottomMargin(0.3);
+
362 }
+
363 else{
+
364 AllSamplesPad = new TPad("AllSampPad", "AllSampPad", 0.0, 0.0 ,1.0, 1.0);
+
365 AllSamplesRatioPad = new TPad("AllSampRatioPad", "AllSampRatioPad",0.0 ,0.0 , 0.0, 0.0);
+
366 }
+
367
+
368 // get the sample reweight hist from the main file
+
369 TH1D *LLH_sam;
+
370 LLH_sam = (TH1D*)sampleDir->Get(Form("%s_%s", paramName.c_str(), scanDirPrefix.c_str()));
+
371
+
372 // maybe SK
+
373 if(!LLH_sam)LLH_sam = (TH1D*)sampleDir->Get(Form("%s_%s", scanDirPrefix.c_str(), paramName.c_str()));
+
374
+
375 if(!LLH_sam){
+
376 std::cerr<<"ERROR: failed to find the LLH scan hist in "<<scanDirPath<<std::endl;
+
377 throw;
+
378 }
+
379
+
380
+
381 LLH_sam->SetStats(0);
+
382 LLH_sam->SetLineColor(kBlack);
+
383 compStack->Add(LLH_sam);
+
384 legend->AddEntry(LLH_sam,FileLabels[0].c_str(),"l");
+
385
+
386 int nBins = LLH_sam->GetNbinsX();
+
387
+
388 // go through the other files
+ +
390 // first get the corresponding histogram from the comparisson file
+ +
392
+
393 TH1D *compHist = new TH1D(Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
394 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
395 TH1D *divHist = new TH1D(Form("%s_%s_div", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s_div", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
396 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
397
+ +
399 std::cout<<"WARNING: didnt find equivalent of parameter "<< paramName<<" in file "<<compFile->GetName()<<" wont be included in the comparisson plot"<<std::endl;
+
400 continue;
+
401 }
+
402
+
403 // make them look different to each other
+
404 compHist->SetLineColor(TColor::GetColorPalette(floor((float)extraFileIdx * TColor::GetNumberOfColors()/ (float)(ExtraFileNames.size() +1))));
+
405 compHist->SetLineStyle(2+ extraFileIdx %9);
+
406 compHist->SetLineWidth(lineWidth);
+
407
+
408 if(plotRatios){
+
409 // get the ratio hist
+
410 divHist->Divide(compHist, LLH_sam);
+
411 divHist->SetLineColor(TColor::GetColorPalette(floor((float)extraFileIdx * TColor::GetNumberOfColors()/ (float)(ExtraFileNames.size() +1))));
+
412 divHist->SetLineStyle(2+ extraFileIdx %9);
+
413 divHist->SetLineWidth(lineWidth);
+ +
415 }
+
416
+
417 // add it to the comparisson hstack and legend
+
418 compStack->Add(compHist);
+
419 legend->AddEntry(compHist, FileLabels[1 + extraFileIdx].c_str(), "l");
+
420 }
+
421
+
422 // draw the log likelihoods
+
423 allSamplesCanv->cd();
+
424 allSamplesCanv->Draw();
+
425 AllSamplesPad->Draw();
+
426 AllSamplesPad->cd();
+
427 if(drawGrid)AllSamplesPad->SetGrid();
+
428 compStack->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
429 if(!plotRatios)compStack->GetXaxis()->SetTitle("Parameter Variation");
+
430 compStack->GetYaxis()->SetTitle(Form("-2LLH_{%s}", scanDirPrefix.c_str()));
+
431 compStack->GetYaxis()->SetTitleOffset(yTitleOffset);
+
432 legend->Draw();
+
433
+
434 // add the ratio plot if specified
+
435 if(plotRatios){
+
436 allSamplesCanv->cd();
+
437 AllSamplesRatioPad->Draw();
+
438 AllSamplesRatioPad->cd();
+
439 if(drawGrid)AllSamplesRatioPad->SetGrid();
+
440
+
441 // do this so 1.0 is in the middle of the plot vertically
+
442 double stackMax, stackMin;
+
443 stackMax = ratioCompStack->GetMaximum("NOSTACK");
+
444 stackMin = ratioCompStack->GetMinimum("NOSTACK");
+
445
+
446 double stackLim = std::max(std::abs(1.0 - stackMax), std::abs(1.0 - stackMin));
+
447
+
448 ratioCompStack->SetMinimum(1.0 - 1.05 * stackLim);
+
449 ratioCompStack->SetMaximum(1.0 + 1.05 * stackLim);
+
450
+
451 // draw it
+
452 ratioCompStack->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
453
+
454 // make it look a bit nicer
+
455 ratioCompStack->GetXaxis()->SetLabelSize(ratioLabelScaling * compStack->GetXaxis()->GetLabelSize());
+
456 ratioCompStack->GetXaxis()->SetTitleSize(ratioLabelScaling * compStack->GetXaxis()->GetLabelSize());
+
457 ratioCompStack->GetXaxis()->SetTitle("Parameter Variation");
+
458
+
459 ratioCompStack->GetYaxis()->SetLabelSize(ratioLabelScaling * compStack->GetYaxis()->GetLabelSize());
+
460 ratioCompStack->GetYaxis()->SetTitleSize(ratioLabelScaling * compStack->GetYaxis()->GetLabelSize());
+
461 ratioCompStack->GetYaxis()->SetTitleOffset(yTitleOffset);
+
462 ratioCompStack->GetYaxis()->SetTitle("Parameter Variation");
+
463 ratioCompStack->GetYaxis()->SetNdivisions(5,2,0);
+
464
+
465 // add horizontal line at 1 for reference
+
466 TLine line = TLine();
+
467 line.SetLineColor(kBlack);
+
468 line.SetLineWidth(lineWidth);
+
469 line.DrawLine(LLH_sam->GetBinLowEdge(1), 1.0, LLH_sam->GetBinLowEdge(nBins+1), 1.0);
+
470
+
471 }
+
472
+
473 // save to the output file
+
474 allSamplesCanv->SaveAs(Form("%s.pdf", PDFName.c_str()));
+
475
+
476
+
477 if(splitBySample){
+
478 // #########################################
+
479 // ## now lets make plots split by sample ##
+
480 // #########################################
+
481
+
482 // split up the canvas so can have side by side plots, one for each file
+
483 TCanvas* splitSamplesCanv = new TCanvas("splitSampCanv","",4096 * (1 + ExtraFileNames.size()), 4096);
+
484 splitSamplesCanv->Divide(1 + ExtraFileNames.size());
+
485 splitSamplesCanv->Draw();
+
486
+
487 THStack *baseSplitSamplesStack = new THStack(paramName.c_str(), Form("%s - %s", paramName.c_str(), FileLabels[0].c_str()));
+
488 TLegend* baseSplitSamplesLegend = new TLegend(0.37,0.475,0.63,0.9);
+
489
+
490 splitSamplesCanv->cd(1)->SetGrid();
+
491
+
492 std::vector<Double_t> cumSums;
+
493 std::vector<bool> drawLabel;
+
494
+ +
496
+ +
498
+ +
500 LLH_sam->SetLineWidth(1); // undo SetLineWidth that was done above
+
501 LLH_sam->Draw(Form("same%s", extraDrawOptions.c_str()));
+
502 baseSplitSamplesLegend->AddEntry(LLH_sam, "All Samples", "l");
+
503 }
+
504
+ +
506
+
507 TLatex *label = new TLatex;
+
508 // format the label
+
509 label->SetTextAlign(11);
+
510 label->SetTextAngle(-55);
+
511 label->SetTextSize(0.012);
+
512
+
513 // need to draw the labels after other stuff or they dont show up
+
514 for(uint i=0; i < sampleDirList.size(); i++){
+
515 std::string sampName = sampleList[i];
+
516 if(!drawLabel[i])continue;
+
517 label->DrawLatex(LLH_sam->GetBinLowEdge(nBins+1), cumSums[i], Form("#leftarrow%s", prettify_name(sampName).c_str()) );
+
518 }
+
519
+
520
+
521 // now we plot the comparisson file plots
+ + +
524
+
525 // split the canvas if plotting ratios
+ +
527 if(plotRatios){
+
528 splitSamplesPad = new TPad("splitSampPad", "splitSampPad", 0.0, ratioPlotSplit, 1.0, 1.0);
+
529 splitSamplesPad->SetBottomMargin(0.0);
+
530 splitSamplesRatioPad = new TPad("splitSampRatioPad", "splitSampRatioPad", 0.0, 0.0 , 1.0, ratioPlotSplit);
+
531 splitSamplesRatioPad->SetTopMargin(0.0);
+
532 splitSamplesRatioPad->SetBottomMargin(0.3);
+
533 }
+
534 else{
+
535 splitSamplesPad = new TPad("splitSampPad", "splitSampPad", 0.0, 0.0 ,1.0, 1.0);
+
536 splitSamplesRatioPad = new TPad("splitSampRatioPad", "splitSampRatioPad",0.0 ,0.0 , 0.0, 0.0);
+
537 }
+
538
+
539 std::vector<Double_t> cumSums;
+
540 std::vector<bool> drawLabel;
+
541
+
542 THStack *splitSamplesStack = new THStack(paramName.c_str(), Form("%s - %s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()));
+
543 TLegend *splitSamplesLegend = new TLegend(0.37,0.475,0.63,0.9);
+
544
+ +
546 TH1D *compLLH_sam = new TH1D(Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
547 nBins, LLH_sam->GetBinLowEdge(1), LLH_sam->GetBinLowEdge(nBins+1));
+
548
+ +
550 std::cout<<"WARNING: didnt find equivalent of parameter "<< paramName<<" in file "<<compFile->GetName()<<" wont be included in the split sample comparisson plot"<<std::endl;
+
551 continue;
+
552 }
+
553
+
554 // if on the same y axis, also check that the contribution of the sample compared to the baseline LLH integral is above the threshold
+
555 // otherwise the labels might get very crowded if the comparisson LLH is much smaller than the baseline one
+ + +
558
+
559 // go to the pad for the histograms
+
560 if(drawGrid)splitSamplesPad->SetGrid();
+
561 splitSamplesPad->Draw();
+
562 splitSamplesPad->cd();
+
563
+
564 splitSamplesStack->Draw(extraDrawOptions.c_str());
+
565 splitSamplesStack->GetXaxis()->SetTitle("Parameter Variation");
+
566 splitSamplesStack->GetYaxis()->SetTitle("-2LLH_{sam}");
+
567 if(sameAxis)splitSamplesStack->SetMaximum(baseSplitSamplesStack->GetMaximum());
+
568
+ +
570 compLLH_sam->Draw(Form("same%s", extraDrawOptions.c_str()));
+
571 compLLH_sam->SetLineColor(kBlack);
+
572 splitSamplesLegend->AddEntry(compLLH_sam, "All Samples", "l");
+
573 }
+
574 splitSamplesLegend->Draw();
+
575
+
576 // need to draw the labels after other stuff or they dont show up
+
577 for(uint i=0; i < sampleDirList.size(); i++){
+
578 std::string sampName = sampleList[i];
+
579 if(!drawLabel[i])continue;
+
580
+
581 label->DrawLatex(compLLH_sam->GetBinLowEdge(compLLH_sam->GetNbinsX()+1), cumSums[i], Form("#leftarrow%s", prettify_name(sampName).c_str()) );
+
582 }
+
583
+
584 if(plotRatios){
+ +
586 if(drawGrid)splitSamplesRatioPad->SetGrid();
+
587 splitSamplesRatioPad->Draw();
+ +
589
+ +
591
+ +
593 TList *compHistList = splitSamplesStack->GetHists();
+
594
+
595 if(baselineHistList->GetEntries() != compHistList->GetEntries()){
+
596 std::cout<<"WARNING: Number of samples in file "<<compFile->GetName()<<" is not the same as in the baseline file, "<<file1->GetName()<<std::endl;
+
597 std::cout<<" Cannot do direct comparisson of the contributions to make the ratio plot, will skip."<<std::endl;
+
598 continue;
+
599 }
+
600
+
601 for(int sampleIdx = 0; sampleIdx < baselineHistList->GetEntries(); sampleIdx++){
+
602 TH1D *divHist = new TH1D(Form("%s_%s_splitDiv", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()), Form("%s_%s_splitDiv", paramName.c_str(), FileLabels[extraFileIdx+1].c_str()),
+
603 compLLH_sam->GetNbinsX(), compLLH_sam->GetBinLowEdge(1), compLLH_sam->GetBinLowEdge(nBins+1));
+ + +
606 divHist->SetLineColor(((TH1D*)compHistList->At(sampleIdx))->GetLineColor());
+
607 }
+
608
+
609 splitSamplesStackRatios->Draw(Form("NOSTACK%s", extraDrawOptions.c_str()));
+
610
+
611 splitSamplesStackRatios->GetXaxis()->SetLabelSize(ratioLabelScaling * splitSamplesStack->GetXaxis()->GetLabelSize());
+
612 splitSamplesStackRatios->GetXaxis()->SetTitleSize(ratioLabelScaling * splitSamplesStack->GetXaxis()->GetLabelSize());
+
613 splitSamplesStackRatios->GetXaxis()->SetTitle("Parameter Variation");
+
614
+
615 splitSamplesStackRatios->GetYaxis()->SetLabelSize(ratioLabelScaling * splitSamplesStack->GetYaxis()->GetLabelSize());
+
616 splitSamplesStackRatios->GetYaxis()->SetTitleSize(ratioLabelScaling * splitSamplesStack->GetYaxis()->GetLabelSize());
+
617 splitSamplesStackRatios->GetYaxis()->SetNdivisions(5,2,0);
+
618
+
619 }
+
620 }
+
621
+
622 splitSamplesCanv->SaveAs(Form("%s_bySample.pdf", PDFName.c_str()));
+
623
+ + +
626 }
+
627
+
628 //delete sampleCanv;
+
629 delete compStack;
+
630 delete allSamplesCanv;
+
631 }
+
632
+
633 blankCanv->SaveAs(Form("%s.pdf]", PDFName.c_str()));
+
634 if(splitBySample)splitSampBlankCanv->SaveAs(Form("%s_bySample.pdf]", PDFName.c_str()));
+
635
+
636 return 0;
+
637}
+
+
638
+
+
639int main(int argc, char **argv)
+
640{
+ +
642
+
643 // parse the inputs
+
644 int c;
+
645 while ((c = getopt(argc, argv, "o:i:l:d:srg"))!= -1) {
+
646 if (c < 0)
+
647 break;
+
648 switch (c) {
+
649 case 'o': {
+
650 PDFName = optarg;
+
651 break;
+
652 }
+
653 case 'i': {
+ +
655 FileLabels_default.push_back(optarg);
+
656 break;
+
657 }
+
658 case 's': {
+
659 splitBySample=true;
+
660 break;
+
661 }
+
662 case 'r': {
+
663 plotRatios = true;
+
664 break;
+
665 }
+
666 case 'g': {
+
667 drawGrid = true;
+
668 break;
+
669 }
+
670 case 'l': {
+ +
672 std::cout<<"INFO: Specified file labels {";
+
673 for(std::string label: FileLabels)std::cout<<label<<", ";
+
674 std::cout<<"}"<<std::endl;
+
675 break;
+
676 }
+
677 case 'd': {
+ +
679 break;
+
680 }
+
681 }
+
682 }
+
683
+
684 std::cout<<std::endl<<"LLH files to compare to mach3 scan: \n{";
+
685 // optind is for the extra arguments that are not parsed by the program
+
686 for(; optind < argc; optind++){
+
687 if(Mach3LLHFileName == ""){ //didnt provide an explicit input file, just take the first on the list
+ +
689 FileLabels_default.push_back(argv[optind]);
+
690 continue;
+
691 }
+
692
+
693 ExtraFileNames.push_back(argv[optind]);
+
694 std::cout<<argv[optind]<<", ";
+
695 FileLabels_default.push_back(argv[optind]);
+
696 }
+
697 std::cout<<"}"<<std::endl<<std::endl;
+
698
+
699 std::cout << "Now plotting LLH scan "<< std::endl;
+
700 if(splitBySample) std::cout<<"Splitting by sample"<<std::endl;
+
701
+
702 if(plotRatios && ExtraFileNames.size() == 0){
+
703 std::cerr<<"ERROR: you specified -r <plotRatios> = true but didnt specify any files to compare against, was this a mistake?"<<std::endl;
+
704 throw;
+
705 }
+
706
+
707 if(FileLabels.size() == 0){
+
708 std::cout<<"INFO: No file labels specified, will just use the file names"<<std::endl;
+ +
710 }
+
711
+
712 if((FileLabels.size() != 0) &&(FileLabels.size() != 1+ ExtraFileNames.size())){
+
713 std::cerr<<"ERROR: hmmm, you gave me "<< FileLabels.size() << " labels but "<< ExtraFileNames.size() +1<<" files"<<std::endl;
+
714 std::cerr<<" that doesn\'t seem right to me, did you forget a file? or a label maybe?"<<std::endl;
+
715 throw;
+
716 }
+
717
+
718 return PlotLLH();
+
719}
+
+
720
+ +
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
bool plotRatios
Definition PlotLLH.cpp:31
+
bool sameAxis
Definition PlotLLH.cpp:40
+
double ratioLabelScaling
Definition PlotLLH.cpp:61
+
void parseFileLabels(std::string labelString, std::vector< std::string > &labelVec)
Definition PlotLLH.cpp:63
+
void set_plot_style()
Definition PlotLLH.cpp:197
+
bool drawGrid
Definition PlotLLH.cpp:32
+
std::string extraDrawOptions
Definition PlotLLH.cpp:28
+
std::string scanDirPrefix
Definition PlotLLH.cpp:57
+
int main(int argc, char **argv)
Definition PlotLLH.cpp:639
+
std::string scanDirPath
Definition PlotLLH.cpp:58
+
double ratioPlotSplit
Definition PlotLLH.cpp:35
+
double sampleLabelThreshold
Definition PlotLLH.cpp:37
+
std::vector< std::string > nonSampleDirNames
Definition PlotLLH.cpp:45
+
std::string NOT_FOUND_STR
Definition PlotLLH.cpp:42
+
int PlotLLH()
Definition PlotLLH.cpp:268
+
bool totalOnSplitPlots
Definition PlotLLH.cpp:39
+
std::string Mach3LLHFileName
Definition PlotLLH.cpp:27
+
std::vector< std::string > FileLabels
Definition PlotLLH.cpp:24
+
int lineWidth
Definition PlotLLH.cpp:38
+
std::vector< std::string > ExtraFileNames
Definition PlotLLH.cpp:23
+
double yTitleOffset
Definition PlotLLH.cpp:36
+
bool getParameterHist(TFile *file, TH1D *retHist, std::string mach3ParamName, std::string directory="sam", std::string directoryPath="Sample_LLH", bool printNames=false)
Definition PlotLLH.cpp:122
+
std::string PDFName
Definition PlotLLH.cpp:26
+
void getSplitSampleStack(TFile *file, std::vector< std::string > sampleVector, std::string parameterName, TH1D LLH_allSams, std::vector< Double_t > &cumSums, std::vector< bool > &drawLabel, THStack *sampleStack, TLegend *splitSamplesLegend, float baselineLLH_sam=0.00001)
Definition PlotLLH.cpp:235
+
bool getGUNDAMParamName(std::string mach3ParamName, TDirectoryFile *llhDir, std::string &gundamName)
Definition PlotLLH.cpp:74
+
bool splitBySample
Definition PlotLLH.cpp:30
+
std::string prettify_name(std::string fullName)
Definition PlotLLH.cpp:213
+
std::vector< std::string > FileLabels_default
Definition PlotLLH.cpp:25
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+ + + + diff --git a/ProcessMCMC_8cpp.html b/ProcessMCMC_8cpp.html new file mode 100644 index 00000000..7737a80c --- /dev/null +++ b/ProcessMCMC_8cpp.html @@ -0,0 +1,1231 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/ProcessMCMC.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ProcessMCMC.cpp File Reference
+
+
+
#include "mcmc/MCMCProcessor.h"
+#include "samplePDF/Structs.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void ProcessMCMC (std::string inputFile)
 
void MultipleProcessMCMC ()
 
void CalcBayesFactor (MCMCProcessor *Processor)
 
void CalcSavageDickey (MCMCProcessor *Processor)
 
void CalcBipolarPlot (MCMCProcessor *Processor)
 
void GetTrianglePlot (MCMCProcessor *Processor)
 
void DiagnoseCovarianceMatrix (MCMCProcessor *Processor, std::string inputFile)
 
void ReweightPrior (MCMCProcessor *Processor)
 
TH2DTMatrixIntoTH2D (TMatrixDSym *Matrix, std::string title)
 
void KolmogorovSmirnovTest (MCMCProcessor **Processor, TCanvas *Posterior, TString canvasname)
 
int main (int argc, char *argv[])
 
+ + + + + + + + + +

+Variables

int nFiles
 
std::vector< std::stringFileNames
 
std::vector< std::stringTitleNames
 
std::string config
 
+

Function Documentation

+ +

◆ CalcBayesFactor()

+ +
+
+ + + + + +
+ + + + + + + + +
void CalcBayesFactor (MCMCProcessorProcessor)
+
+inline
+
+ +

Definition at line 305 of file ProcessMCMC.cpp.

+
306{
+
307 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
308 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
309
+
310 std::vector<std::string> ParNames;
+
311 std::vector<std::vector<double>> Model1Bounds;
+
312 std::vector<std::vector<double>> Model2Bounds;
+
313 std::vector<std::vector<std::string>> ModelNames;
+
314 for (const auto& dg : Settings["BayesFactor"])
+
315 {
+
316 ParNames.push_back(dg[0].as<std::string>());
+
317 ModelNames.push_back(dg[1].as<std::vector<std::string>>());
+
318 Model1Bounds.push_back(dg[2].as<std::vector<double>>());
+
319 Model2Bounds.push_back(dg[3].as<std::vector<double>>());
+
320 }
+
321
+ +
323 return;
+
324}
+
std::string config
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ CalcBipolarPlot()

+ +
+
+ + + + + +
+ + + + + + + + +
void CalcBipolarPlot (MCMCProcessorProcessor)
+
+inline
+
+ +

Definition at line 347 of file ProcessMCMC.cpp.

+
348{
+
349 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
350 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
351
+
352 std::vector<std::string> ParNames;
+
353
+
354 for (const auto& d : Settings["BipolarPlot"])
+
355 {
+
356 ParNames.push_back(d[0].as<std::string>());
+
357 }
+
358 Processor->GetPolarPlot(ParNames);
+
359 return;
+
360}
+
+
+
+ +

◆ CalcSavageDickey()

+ +
+
+ + + + + +
+ + + + + + + + +
void CalcSavageDickey (MCMCProcessorProcessor)
+
+inline
+
+ +

Definition at line 326 of file ProcessMCMC.cpp.

+
327{
+
328 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
329 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
330
+
331 std::vector<std::string> ParNames;
+
332 std::vector<double> EvaluationPoint;
+
333 std::vector<std::vector<double>> Bounds;
+
334
+
335 for (const auto& d : Settings["SavageDickey"])
+
336 {
+
337 ParNames.push_back(d[0].as<std::string>());
+
338 EvaluationPoint.push_back(d[1].as<double>());
+
339 Bounds.push_back(d[2].as<std::vector<double>>());
+
340 }
+
341
+
342 Processor->GetSavageDickey(ParNames, EvaluationPoint, Bounds);
+
343 return;
+
344}
+
+
+
+ +

◆ DiagnoseCovarianceMatrix()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void DiagnoseCovarianceMatrix (MCMCProcessorProcessor,
std::string inputFile 
)
+
+inline
+
+ +

Definition at line 379 of file ProcessMCMC.cpp.

+
380{
+
381 //Turn of plots from Processor
+
382 Processor->SetPrintToPDF(false);
+
383 // Open a TCanvas to write the posterior onto
+
384 TCanvas* Canvas = new TCanvas("Canvas", "Canvas", 0, 0, 1024, 1024);
+
385 Canvas->SetGrid();
+
386 gStyle->SetOptStat(0);
+
387 gStyle->SetOptTitle(0);
+
388 Canvas->SetTickx();
+
389 Canvas->SetTicky();
+
390 Canvas->SetBottomMargin(0.1);
+
391 Canvas->SetTopMargin(0.05);
+
392 Canvas->SetRightMargin(0.15);
+
393 Canvas->SetLeftMargin(0.10);
+
394
+
395 //KS: Fancy colots
+
396 const int NRGBs = 10;
+
397 TColor::InitializeColors();
+
398 Double_t stops[NRGBs] = { 0.00, 0.10, 0.25, 0.35, 0.50, 0.60, 0.65, 0.75, 0.90, 1.00 };
+
399 Double_t red[NRGBs] = { 0.50, 1.00, 1.00, 0.25, 0.00, 0.10, 0.50, 1.00, 0.75, 0.55 };
+
400 Double_t green[NRGBs] = { 0.00, 0.25, 1.00, 0.25, 0.00, 0.60, 0.90, 1.00, 0.75, 0.75 };
+
401 Double_t blue[NRGBs] = { 0.00, 0.25, 1.00, 1.00, 0.50, 0.60, 0.90, 1.00, 0.05, 0.05 };
+
402 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, 255);
+
403 gStyle->SetNumberContours(255);
+
404
+
405 std::string OutName = inputFile;
+
406 OutName = OutName.substr(0, OutName.find(".root"));
+
407 Canvas->Print(Form("Correlation_%s.pdf[", OutName.c_str()), "pdf");
+
408 Canvas->Print(Form("Covariance_%s.pdf[", OutName.c_str()), "pdf");
+
409
+
410 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
411 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
412
+
413 const int entries = Processor->GetnSteps();
+
414 const int NIntervals = GetFromManager<int>(Settings["NIntervals"], 5);
+
415 const int IntervalsSize = entries/NIntervals;
+
416 //We start with burn from 0 (no burn in at all)
+
417 int BurnIn = 0;
+
418 std::cout<<"Diagnosing matirces with entries="<< entries<<", NIntervals="<<NIntervals<<" and IntervalsSize="<<IntervalsSize<<std::endl;
+
419
+
420 TMatrixDSym *Covariance = nullptr;
+
421 TMatrixDSym *Correlation = nullptr;
+
422
+
423 TH2D *CovariancePreviousHist = nullptr;
+
424 TH2D *CorrelationPreviousHist = nullptr;
+
425
+
426 TH2D *CovarianceHist = nullptr;
+
427 TH2D *CorrelationHist = nullptr;
+
428
+
429 //KS: Get first covariances, we need two for comparison...
+
430 Processor->SetStepCut(BurnIn);
+
431 Processor->GetCovariance(Covariance, Correlation);
+
432
+
433 CovariancePreviousHist = TMatrixIntoTH2D(Covariance, "Covariance");
+
434 CorrelationPreviousHist = TMatrixIntoTH2D(Correlation, "Correlation");
+
435
+
436 delete Covariance;
+
437 Covariance = nullptr;
+
438 delete Correlation;
+
439 Correlation = nullptr;
+
440
+
441 //KS: Loop over alls dsired cuts
+
442 for(int i = 1; i < NIntervals; ++i)
+
443 {
+ +
445 Processor->SetStepCut(BurnIn);
+
446 Processor->GetCovariance(Covariance, Correlation);
+
447 Processor->ResetHistograms();
+
448
+
449 CovarianceHist = TMatrixIntoTH2D(Covariance, "Covariance");
+
450 CorrelationHist = TMatrixIntoTH2D(Correlation, "Correlation");
+
451
+
452 TH2D *CovarianceDiff = (TH2D*)CovarianceHist->Clone("Covariance_Ratio");
+
453 TH2D *CorrelationDiff = (TH2D*)CorrelationHist->Clone("Correlation_Ratio");
+
454
+
455 //KS: Bit messy but quite often covariance is 0 is divided by 0 is problemiatic so
+
456 #ifdef MULTITHREAD
+
457 #pragma omp parallel for
+
458 #endif
+
459 for (int j = 1; j < CovarianceDiff->GetXaxis()->GetNbins()+1; ++j)
+
460 {
+
461 for (int i = 1; i < CovarianceDiff->GetYaxis()->GetNbins()+1; ++i)
+
462 {
+
463 if( std::fabs (CovarianceDiff->GetBinContent(j, i)) < 1.e-5 && std::fabs (CovariancePreviousHist->GetBinContent(j, i)) < 1.e-5)
+
464 {
+
465 CovarianceDiff->SetBinContent(j, i, __UNDEF__);
+
466 CovariancePreviousHist->SetBinContent(j, i, __UNDEF__);
+
467 }
+
468 if( std::fabs (CorrelationDiff->GetBinContent(j, i)) < 1.e-5 && std::fabs (CorrelationPreviousHist->GetBinContent(j, i)) < 1.e-5)
+
469 {
+
470 CorrelationDiff->SetBinContent(j, i, __UNDEF__);
+
471 CorrelationPreviousHist->SetBinContent(j, i, __UNDEF__);
+
472 }
+
473 }
+
474 }
+
475 //Divide matrices
+ + +
478
+
479 //Now it is time for fancy names etc.
+
480 for (int j = 0; j < CovarianceDiff->GetXaxis()->GetNbins(); ++j)
+
481 {
+
482 TString Title = "";
+
483 double Prior = 1.0;
+
484 double PriorError = 1.0;
+
485
+
486 Processor->GetNthParameter(j, Prior, PriorError, Title);
+
487
+
488 CovarianceDiff->GetXaxis()->SetBinLabel(j+1, Title);
+
489 CovarianceDiff->GetYaxis()->SetBinLabel(j+1, Title);
+
490 CorrelationDiff->GetXaxis()->SetBinLabel(j+1, Title);
+
491 CorrelationDiff->GetYaxis()->SetBinLabel(j+1, Title);
+
492 }
+
493 CovarianceDiff->GetXaxis()->SetLabelSize(0.015);
+
494 CovarianceDiff->GetYaxis()->SetLabelSize(0.015);
+
495 CorrelationDiff->GetXaxis()->SetLabelSize(0.015);
+
496 CorrelationDiff->GetYaxis()->SetLabelSize(0.015);
+
497
+
498 std::stringstream ss;
+
499 ss << "BCut_";
+
500 ss << BurnIn;
+
501 ss << "/";
+
502 ss << "BCut_";
+
503 ss << (i-1)*IntervalsSize;
+
504 std::string str = ss.str();
+
505
+
506 TString Title = "Cov " + str;
+
507 CovarianceDiff->GetZaxis()->SetTitle( Title );
+
508 Title = "Corr " + str;
+
509 CorrelationDiff->GetZaxis()->SetTitle(Title);
+
510
+
511 CovarianceDiff->SetMinimum(-2);
+
512 CovarianceDiff->SetMaximum(2);
+
513 CorrelationDiff->SetMinimum(-2);
+
514 CorrelationDiff->SetMaximum(2);
+
515
+
516 Canvas->cd();
+
517 CovarianceDiff->Draw("colz");
+
518 Canvas->Print(Form("Covariance_%s.pdf", OutName.c_str()), "pdf");
+
519
+
520 CorrelationDiff->Draw("colz");
+
521 Canvas->Print(Form("Correlation_%s.pdf", OutName.c_str()), "pdf");
+
522
+
523 //KS: Current hist become previous as we need it for further comparison
+ + + + +
528
+
529 delete CovarianceHist;
+
530 CovarianceHist = nullptr;
+
531 delete CorrelationHist;
+
532 CorrelationHist = nullptr;
+
533
+
534 delete CovarianceDiff;
+
535 delete CorrelationDiff;
+
536 delete Covariance;
+
537 Covariance = nullptr;
+
538 delete Correlation;
+
539 Correlation = nullptr;
+
540 }
+
541 Canvas->cd();
+
542 Canvas->Print(Form("Covariance_%s.pdf]", OutName.c_str()), "pdf");
+
543 Canvas->Print(Form("Correlation_%s.pdf]", OutName.c_str()), "pdf");
+
544
+
545 Processor->SetPrintToPDF(true);
+
546 if(Covariance != nullptr) delete Covariance;
+
547 if(Correlation != nullptr) delete Correlation;
+ + +
550 if(CovarianceHist != nullptr) delete CovarianceHist;
+
551 if(CorrelationHist != nullptr) delete CorrelationHist;
+
552 delete Canvas;
+
553}
+
#define __UNDEF__
+
TH2D * TMatrixIntoTH2D(TMatrixDSym *Matrix, std::string title)
+
+
+
+ +

◆ GetTrianglePlot()

+ +
+
+ + + + + +
+ + + + + + + + +
void GetTrianglePlot (MCMCProcessorProcessor)
+
+inline
+
+ +

Definition at line 363 of file ProcessMCMC.cpp.

+
363 {
+
364 std::cout<<std::endl;
+
365
+
366 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
367 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
368
+
369 for (const auto& dg : Settings["TrianglePlot"])
+
370 {
+
371 std::string ParName = dg[0].as<std::string>();
+
372
+
373 std::vector<std::string> NameVec = dg[1].as<std::vector<std::string>>();
+
374 Processor->MakeTrianglePlot(NameVec);
+
375 }
+
376}
+
+
+
+ +

◆ KolmogorovSmirnovTest()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void KolmogorovSmirnovTest (MCMCProcessor ** Processor,
TCanvasPosterior,
TString canvasname 
)
+
+inline
+
+ +

Definition at line 588 of file ProcessMCMC.cpp.

+
589{
+
590 const Color_t CumulativeColor[] = {kBlue-1, kRed, kGreen+2};
+ +
592
+
593 for(int i = 0; i < Processor[0]->GetNParams(); ++i)
+
594 {
+
595 // This holds the posterior density
+
596 TH1D **hpost = new TH1D*[nFiles];
+ +
598
+ +
600 double Prior = 1.0;
+
601 double PriorError = 1.0;
+
602
+
603 Processor[0]->GetNthParameter(i, Prior, PriorError, Title);
+
604
+
605 for (int ik = 0 ; ik < nFiles; ik++)
+
606 {
+
607 hpost[ik] = (TH1D*) (Processor[ik]->GetHpost(i))->Clone();
+
608 CumulativeDistribution[ik] = (TH1D*) (Processor[ik]->GetHpost(i))->Clone();
+
609 CumulativeDistribution[ik]->Fill(0., 0.);
+
610 CumulativeDistribution[ik]->Reset();
+
611 CumulativeDistribution[ik]->SetMaximum(1.);
+
612 TString TempTittle = Title+" Kolmogorov Smirnov";
+ +
614
+
615 TempTittle = Title+" Value";
+
616 CumulativeDistribution[ik]->GetXaxis()->SetTitle(TempTittle);
+
617 CumulativeDistribution[ik]->GetYaxis()->SetTitle("Cumulative Probability");
+
618
+
619 CumulativeDistribution[ik]->SetLineWidth(2);
+ + +
622 }
+
623 // Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
624 if(hpost[0]->GetMaximum() == hpost[0]->Integral()*1.5)
+
625 {
+
626 for (int ik = 0; ik < nFiles; ik++)
+
627 {
+
628 delete hpost[ik];
+ +
630 }
+
631 delete[] hpost;
+
632 delete[] CumulativeDistribution;
+
633 continue;
+
634 }
+
635
+
636 for (int ik = 0 ; ik < nFiles; ik++)
+
637 {
+
638 const int NumberOfBins = hpost[ik]->GetXaxis()->GetNbins();
+
639 double Cumulative = 0;
+
640 const double Integral = hpost[ik]->Integral();
+
641 for (int j = 1; j < NumberOfBins+1; ++j)
+
642 {
+
643 Cumulative += hpost[ik]->GetBinContent(j)/Integral;
+
644
+
645 CumulativeDistribution[ik]->SetBinContent(j, Cumulative);
+
646 }
+
647 //KS: Set overflow to 1 just in case
+
648 CumulativeDistribution[ik]->SetBinContent(NumberOfBins+1, 1.);
+
649 }
+
650
+
651 int* TestStatBin = new int[nFiles];
+
652 double* TestStatD = new double[nFiles];
+
653 TLine **LineD = new TLine*[nFiles];
+
654
+
655 for (int ik = 0 ; ik < nFiles; ik++) { TestStatBin[ik] = 0; TestStatD[ik] = -999;}
+
656
+
657 //Find KS statistic
+
658 for (int ik = 1 ; ik < nFiles; ik++)
+
659 {
+
660 const int NumberOfBins = CumulativeDistribution[0]->GetXaxis()->GetNbins();
+
661 for (int j = 1; j < NumberOfBins+1; ++j)
+
662 {
+
663 double BinValue = CumulativeDistribution[0]->GetBinCenter(j);
+ +
665 //KS: Calculate D statistic for this bin, only save it if it's bigger than previosly found value
+ +
667 if(TempDstat > TestStatD[ik])
+
668 {
+ +
670 TestStatBin[ik] = j;
+
671 }
+
672 }
+
673 }
+
674
+
675 for (int ik = 0 ; ik < nFiles; ik++)
+
676 {
+ +
678 LineD[ik]->SetLineColor(CumulativeColor[ik]);
+
679 LineD[ik]->SetLineWidth(2.0);
+
680 }
+
681 CumulativeDistribution[0]->Draw();
+
682 for (int ik = 0 ; ik < nFiles; ik++)
+ +
684
+
685 TLegend *leg = new TLegend(0.15, 0.7, 0.5, 0.90);
+
686 leg->SetTextSize(0.04);
+
687 for (int ik = 0; ik < nFiles; ik++)
+
688 leg->AddEntry(CumulativeDistribution[ik], TitleNames[ik].c_str(), "l");
+
689 for (int ik = 1; ik < nFiles; ik++)
+
690 leg->AddEntry(LineD[ik], Form("#Delta D = %.4f", TestStatD[ik]), "l");
+
691
+
692 leg->SetLineColor(0);
+
693 leg->SetLineStyle(0);
+
694 leg->SetFillColor(0);
+
695 leg->SetFillStyle(0);
+
696 leg->Draw("SAME");
+
697
+
698 for (int ik = 1; ik < nFiles; ik++)
+
699 LineD[ik]->Draw("sam");
+
700
+
701 Posterior->cd();
+
702 Posterior->Print(canvasname);
+
703
+
704 delete leg;
+
705 for (int ik = 0; ik < nFiles; ik++)
+
706 {
+
707 delete hpost[ik];
+ +
709 delete LineD[ik];
+
710 }
+
711 delete[] hpost;
+
712 delete[] CumulativeDistribution;
+
713 delete[] LineD;
+
714 delete[] TestStatBin;
+
715 delete[] TestStatD;
+
716 } //End loop over parameter
+
717}
+
std::vector< std::string > TitleNames
+
int nFiles
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 22 of file ProcessMCMC.cpp.

+
23{
+
24 nFiles = 0;
+
25 if (argc != 3 && argc !=6 && argc != 8)
+
26 {
+
27 std::cerr << "How to use: "<< argv[0] <<"<Config> <MCMM_ND_Output.root>" << std::endl;
+
28 exit(-1);
+
29 }
+
30
+
31 if (argc == 3)
+
32 {
+
33 std::cout << "Producing single fit output" << std::endl;
+
34 config = argv[1];
+
35 std::string filename = argv[2];
+ +
37 }
+
38 // If we want to compare two or more fits (e.g. binning changes or introducing new params/priors)
+
39 else if (argc == 6 || argc == 8)
+
40 {
+
41 std::cout << "Producing two fit comparison" << std::endl;
+
42 config = argv[1];
+
43
+
44 FileNames.push_back(argv[2]);
+
45 TitleNames.push_back(argv[3]);
+
46
+
47 FileNames.push_back(argv[4]);
+
48 TitleNames.push_back(argv[5]);
+
49 //KS: If there is third file add it
+
50 if(argc == 8)
+
51 {
+
52 FileNames.push_back(argv[6]);
+
53 TitleNames.push_back(argv[7]);
+
54 }
+
55
+ +
57 }
+
58
+
59 return 0;
+
60}
+
void MultipleProcessMCMC()
+
std::vector< std::string > FileNames
+
void ProcessMCMC(std::string inputFile)
+
+
+
+ +

◆ MultipleProcessMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void MultipleProcessMCMC ()
+
+inline
+
+ +

Definition at line 139 of file ProcessMCMC.cpp.

+
140{
+
141 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
142 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
143
+
144 const Color_t PosteriorColor[] = {kBlue-1, kRed, kGreen+2};
+
145 //const Style_t PosteriorStyle[] = {kSolid, kDashed, kDotted};
+
146 nFiles = FileNames.size();
+ + +
149 for (int ik = 0; ik < nFiles; ik++)
+
150 {
+
151 std::cout << "File for study: " << FileNames[ik] << std::endl;
+
152 // Make the processor
+
153 Processor[ik] = new MCMCProcessor(FileNames[ik], false);
+
154 Processor[ik]->SetOutputSuffix(("_" + std::to_string(ik)).c_str());
+
155
+
156 Processor[ik]->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["ExcludedTypes"], {""}));
+
157 Processor[ik]->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["ExcludedNames"], {""}));
+
158
+
159 //Apply additional cuts to 1D posterior
+
160 Processor[ik]->SetPosterior1DCut(GetFromManager<std::string>(Settings["Posterior1DCut"], ""));
+
161
+
162 Processor[ik]->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["PlotRelativeToPrior"], false));
+
163 Processor[ik]->SetFancyNames(GetFromManager<bool>(Settings["FancyNames"], true));
+
164 Processor[ik]->Initialise();
+
165 }
+
166 //KS: Multithreading here is very tempting but there are some issues with root that need to be resovled :(
+
167 for (int ik = 0; ik < nFiles; ik++)
+
168 {
+
169 // Make the postfit
+
170 Processor[ik]->MakePostfit();
+
171 Processor[ik]->DrawPostfit();
+
172 }
+
173
+
174 // Open a TCanvas to write the posterior onto
+
175 TCanvas* Posterior = new TCanvas("PosteriorMulti", "PosteriorMulti", 0, 0, 1024, 1024);
+
176 gStyle->SetOptStat(0);
+
177 gStyle->SetOptTitle(0);
+
178 Posterior->SetGrid();
+
179 Posterior->SetBottomMargin(0.1);
+
180 Posterior->SetTopMargin(0.05);
+
181 Posterior->SetRightMargin(0.03);
+
182 Posterior->SetLeftMargin(0.10);
+
183
+
184 FileNames[0] = FileNames[0].substr(0, FileNames[0].find(".root")-1);
+ +
186 for (int ik = 1; ik < nFiles; ik++)
+
187 {
+
188 while (FileNames[ik].find("/") != std::string::npos)
+
189 {
+
190 FileNames[ik] = FileNames[ik].substr(FileNames[ik].find("/")+1, FileNames[ik].find(".root")-1);
+
191 }
+ +
193 }
+
194
+
195 canvasname = canvasname +".pdf[";
+
196
+
197 Posterior->Print(canvasname);
+
198 // Once the pdf file is open no longer need to bracket
+
199 canvasname.ReplaceAll("[","");
+
200
+
201 for(int i = 0; i < Processor[0]->GetNParams(); ++i)
+
202 {
+
203 // This holds the posterior density
+
204 TH1D **hpost = new TH1D*[nFiles];
+
205 TLine **hpd = new TLine*[nFiles];
+
206 for (int ik = 0 ; ik < nFiles; ik++) hpost[ik] = (TH1D *) (Processor[ik]->GetHpost(i))->Clone();
+
207
+
208 // Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
209 if(hpost[0]->GetMaximum() == hpost[0]->Integral()*1.5)
+
210 {
+
211 for (int ik = 0; ik < nFiles; ik++)
+
212 delete hpost[ik];
+
213
+
214 delete[] hpost;
+
215 delete[] hpd;
+
216 continue;
+
217 }
+
218 for (int ik = 0; ik < nFiles; ik++)
+
219 {
+
220 RemoveFitter(hpost[ik], "Gauss");
+
221
+
222 // Set some nice colours
+
223 hpost[ik]->SetLineColor(PosteriorColor[ik]);
+
224 //hpost[ik]->SetLineStyle(PosteriorStyle[ik]);
+
225 hpost[ik]->SetLineWidth(2);
+
226
+
227 // Area normalise the distributions
+
228 hpost[ik]->Scale(1./hpost[ik]->Integral(), "width");
+
229 }
+ +
231 double Prior = 1.0;
+
232 double PriorError = 1.0;
+
233
+
234 Processor[0]->GetNthParameter(i, Prior, PriorError, Title);
+
235
+
236 // Now make the TLine for the Asimov
+
237 TLine *Asimov = new TLine(Prior, hpost[0]->GetMinimum(), Prior, hpost[0]->GetMaximum());
+
238 Asimov->SetLineColor(kRed-3);
+
239 Asimov->SetLineWidth(2);
+
240 Asimov->SetLineStyle(kDashed);
+
241
+
242 // Make a nice little TLegend
+
243 TLegend *leg = new TLegend(0.12, 0.7, 0.6, 0.97);
+
244 leg->SetTextSize(0.03);
+
245 leg->SetFillColor(0);
+
246 leg->SetFillStyle(0);
+
247 leg->SetLineColor(0);
+
248 leg->SetLineStyle(0);
+
249 TString asimovLeg = Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError);
+
250 leg->AddEntry(Asimov, asimovLeg, "l");
+
251
+
252 for (int ik = 0; ik < nFiles; ik++)
+
253 {
+
254 TString rebinLeg = Form("#splitline{%s}{#mu = %.2f, #sigma = %.2f}", TitleNames[ik].c_str(), hpost[ik]->GetMean(), hpost[ik]->GetRMS());
+
255 leg->AddEntry(hpost[ik], rebinLeg, "l");
+
256
+
257 hpd[ik] = new TLine(hpost[ik]->GetBinCenter(hpost[ik]->GetMaximumBin()), hpost[ik]->GetMinimum(), hpost[ik]->GetBinCenter(hpost[ik]->GetMaximumBin()), hpost[ik]->GetMaximum());
+
258 hpd[ik]->SetLineColor(hpost[ik]->GetLineColor());
+
259 hpd[ik]->SetLineWidth(2);
+
260 hpd[ik]->SetLineStyle(kSolid);
+
261 }
+
262
+
263 // Find the maximum value to nicley resize hist
+
264 double maximum = 0;
+
265 for (int ik = 0; ik < nFiles; ik++) maximum = std::max(maximum, hpost[ik]->GetMaximum());
+
266 for (int ik = 0; ik < nFiles; ik++) hpost[ik]->SetMaximum(1.3*maximum);
+
267
+
268 hpost[0]->Draw("hist");
+
269 for (int ik = 1; ik < nFiles; ik++) hpost[ik]->Draw("hist same");
+
270 Asimov->Draw("same");
+
271 for (int ik = 0; ik < nFiles; ik++) hpd[ik]->Draw("same");
+
272 leg->Draw("same");
+
273 Posterior->cd();
+
274 Posterior->Print(canvasname);
+
275
+
276 delete Asimov;
+
277 delete leg;
+
278 for (int ik = 0; ik < nFiles; ik++)
+
279 {
+
280 delete hpost[ik];
+
281 delete hpd[ik];
+
282 }
+
283 delete[] hpost;
+
284 delete[] hpd;
+
285 }//End loop over paramters
+
286
+
287 // Finally draw the parameter plot onto the PDF
+
288 // Close the .pdf file with all the posteriors
+
289 Posterior->cd();
+
290 Posterior->Clear();
+
291
+
292 if(GetFromManager<bool>(Settings["PerformKStest"], true)) KolmogorovSmirnovTest(Processor, Posterior, canvasname);
+
293
+
294 // Close the pdf file
+
295 std::cout << "Closing pdf " << canvasname << std::endl;
+
296 canvasname+="]";
+
297 Posterior->Print(canvasname);
+
298
+
299 delete Posterior;
+
300 for (int ik = 0; ik < nFiles; ik++) delete Processor[ik];
+
301 delete[] Processor;
+
302}
+
void KolmogorovSmirnovTest(MCMCProcessor **Processor, TCanvas *Posterior, TString canvasname)
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+ +
+
+
+ +

◆ ProcessMCMC()

+ +
+
+ + + + + +
+ + + + + + + + +
void ProcessMCMC (std::string inputFile)
+
+inline
+
+ +

Definition at line 62 of file ProcessMCMC.cpp.

+
63{
+
64 std::cout << "File for study: " << inputFile << " with config "<<config<<std::endl;
+
65
+
66 // Make the processor
+
67 MCMCProcessor* Processor = new MCMCProcessor(inputFile, false);
+
68
+
69 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
70 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
71
+
72 bool PlotCorr = GetFromManager<bool>(Settings["PlotCorr"], false);
+
73
+
74 Processor->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["ExcludedTypes"], {""}));
+
75 Processor->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["ExcludedNames"], {""}));
+
76 //Apply additional cuts to 1D posterior
+
77 Processor->SetPosterior1DCut(GetFromManager<std::string>(Settings["Posterior1DCut"], ""));
+
78
+
79 //KS: Settings how many credible regions you want, colors, etc., don't worry there are default values if nothing is passed
+
80 Processor->SetCredibleIntervals(GetFromManager<std::vector<double>>(Settings["CredibleIntervals"], {0.99, 0.90, 0.68}));
+
81 Processor->SetCredibleIntervalsColours(GetFromManager<std::vector<short int>>(Settings["CredibleIntervalsColours"], {436, 430, 422}));
+
82
+
83 Processor->SetCredibleRegions(GetFromManager<std::vector<double>>(Settings["CredibleRegions"], {0.99, 0.90, 0.68}));
+
84
+
85 Processor->SetCredibleRegionStyle(GetFromManager<std::vector<short int>>(Settings["CredibleRegionStyle"], {2, 1, 3}));
+
86
+
87 Processor->SetCredibleRegionColor(GetFromManager<std::vector<short int>>(Settings["CredibleRegionColor"], {413, 406, 416}));
+
88
+
89 Processor->SetCredibleInSigmas(GetFromManager<bool>(Settings["CredibleInSigmas"], false));
+
90
+
91 if(PlotCorr) Processor->SetOutputSuffix("_drawCorr");
+
92 //KS:Turn off plotting detector and some other setting, should be via some config
+
93 Processor->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["PlotRelativeToPrior"], false));
+
94 Processor->SetPrintToPDF(GetFromManager<bool>(Settings["PrintToPDF"], true));
+
95
+
96 //KS: Whether you want prior error bands for parameters with flat prior or not
+
97 Processor->SetPlotErrorForFlatPrior(GetFromManager<bool>(Settings["PlotErrorForFlatPrior"], true));
+
98 Processor->SetFancyNames(GetFromManager<bool>(Settings["FancyNames"], true));
+
99 Processor->SetPlotBinValue(GetFromManager<bool>(Settings["PlotBinValue"], false));
+
100 //KS: Plot only 2D posteriors with correlations greater than 0.2
+
101 Processor->SetPost2DPlotThreshold(GetFromManager<double>(Settings["Post2DPlotThreshold"], 0.2));
+
102
+
103 Processor->Initialise();
+
104
+
105 // Make the postfit
+
106 Processor->MakePostfit();
+
107 Processor->DrawPostfit();
+
108 //KS: Should set via config whether you want below or not
+
109 if(GetFromManager<bool>(Settings["MakeCredibleIntervals"], true)) Processor->MakeCredibleIntervals();
+
110 if(GetFromManager<bool>(Settings["CalcBayesFactor"], true)) CalcBayesFactor(Processor);
+
111 if(GetFromManager<bool>(Settings["CalcSavageDickey"], true)) CalcSavageDickey(Processor);
+
112 if(GetFromManager<bool>(Settings["CalcBipolarPlot"], false)) CalcBipolarPlot(Processor);
+
113
+
114 if(PlotCorr)
+
115 {
+
116 Processor->SetSmoothing(GetFromManager<bool>(Settings["Smoothing"], true));
+
117 // Make the covariance matrix
+
118 //We have different treatment for multithread
+
119//#ifdef MULTITHREAD
+
120 Processor->CacheSteps();
+
121 //KS: Since we cached let's make fancy violins :)
+
122 if(GetFromManager<bool>(Settings["MakeViolin"], true)) Processor->MakeViolin();
+
123 Processor->MakeCovariance_MP();
+
124//#else
+
125 //Processor->MakeCovariance();
+
126//#endif
+
127 Processor->DrawCovariance();
+
128 if(GetFromManager<bool>(Settings["MakeCredibleRegions"], false)) Processor->MakeCredibleRegions();
+
129 if(GetFromManager<bool>(Settings["GetTrianglePlot"], true)) GetTrianglePlot(Processor);
+
130
+
131 //KS: When creating covariance matrix longest time is spend on caching every step, since we already cached we can run some fancy covariance stability diagnostic
+
132 if(GetFromManager<bool>(Settings["DiagnoseCovarianceMatrix"], false)) DiagnoseCovarianceMatrix(Processor, inputFile);
+
133 }
+
134 if(GetFromManager<bool>(Settings["ReweightPrior"], false)) ReweightPrior(Processor);
+
135
+
136 delete Processor;
+
137}
+
void GetTrianglePlot(MCMCProcessor *Processor)
+
void DiagnoseCovarianceMatrix(MCMCProcessor *Processor, std::string inputFile)
+
void CalcBipolarPlot(MCMCProcessor *Processor)
+
void ReweightPrior(MCMCProcessor *Processor)
+
void CalcBayesFactor(MCMCProcessor *Processor)
+
void CalcSavageDickey(MCMCProcessor *Processor)
+
+
+
+ +

◆ ReweightPrior()

+ +
+
+ + + + + +
+ + + + + + + + +
void ReweightPrior (MCMCProcessorProcessor)
+
+inline
+
+ +

Definition at line 555 of file ProcessMCMC.cpp.

+
556{
+
557 std::cout<<std::endl;
+
558
+
559 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
560 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
561
+
562 const auto& Prior = Settings["PriorReweighting"];
+
563
+
564 std::vector<std::string> Names = Prior[0].as<std::vector<std::string>>();
+
565 std::vector<double> NewCentral = Prior[1].as<std::vector<double>>();
+
566 std::vector<double> NewError = Prior[2].as<std::vector<double>>();
+
567
+
568 Processor->ReweightPrior(Names, NewCentral, NewError);
+
569}
+
+
+
+ +

◆ TMatrixIntoTH2D()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
TH2D * TMatrixIntoTH2D (TMatrixDSymMatrix,
std::string title 
)
+
+inline
+
+ +

Definition at line 572 of file ProcessMCMC.cpp.

+
573{
+
574 TH2D* hMatrix = new TH2D(title.c_str(), title.c_str(), Matrix->GetNrows(), 0.0, Matrix->GetNrows(), Matrix->GetNcols(), 0.0, Matrix->GetNcols());
+
575 for(int i = 0; i < Matrix->GetNrows(); i++)
+
576 {
+
577 for(int j = 0; j < Matrix->GetNcols(); j++)
+
578 {
+
579 //KS: +1 becasue there is offset in histogram realtive to TMatrix
+
580 hMatrix->SetBinContent(i+1,j+1, (*Matrix)(i,j));
+
581 }
+
582 }
+
583
+
584 return hMatrix;
+
585}
+
+
+
+

Variable Documentation

+ +

◆ config

+ +
+
+ + + + +
std::string config
+
+ +

Definition at line 20 of file ProcessMCMC.cpp.

+ +
+
+ +

◆ FileNames

+ +
+
+ + + + +
std::vector<std::string> FileNames
+
+ +

Definition at line 18 of file ProcessMCMC.cpp.

+ +
+
+ +

◆ nFiles

+ +
+
+ + + + +
int nFiles
+
+ +

Definition at line 17 of file ProcessMCMC.cpp.

+ +
+
+ +

◆ TitleNames

+ +
+
+ + + + +
std::vector<std::string> TitleNames
+
+ +

Definition at line 19 of file ProcessMCMC.cpp.

+ +
+
+
+ + + + diff --git a/ProcessMCMC_8cpp_source.html b/ProcessMCMC_8cpp_source.html new file mode 100644 index 00000000..a5f1a5e7 --- /dev/null +++ b/ProcessMCMC_8cpp_source.html @@ -0,0 +1,853 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/ProcessMCMC.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ProcessMCMC.cpp
+
+
+Go to the documentation of this file.
+
2#include "samplePDF/Structs.h"
+
3
+
4#include "manager/manager.h"
+
5
+
6inline void ProcessMCMC(std::string inputFile);
+
7inline void MultipleProcessMCMC();
+ + + + +
12inline void DiagnoseCovarianceMatrix(MCMCProcessor* Processor, std::string inputFile);
+ +
14inline TH2D* TMatrixIntoTH2D(TMatrixDSym* Matrix, std::string title);
+ +
16
+ +
18std::vector <std::string> FileNames;
+
19std::vector <std::string> TitleNames;
+
20std::string config;
+
21
+
+
22int main(int argc, char *argv[])
+
23{
+
24 nFiles = 0;
+
25 if (argc != 3 && argc !=6 && argc != 8)
+
26 {
+
27 std::cerr << "How to use: "<< argv[0] <<"<Config> <MCMM_ND_Output.root>" << std::endl;
+
28 exit(-1);
+
29 }
+
30
+
31 if (argc == 3)
+
32 {
+
33 std::cout << "Producing single fit output" << std::endl;
+
34 config = argv[1];
+
35 std::string filename = argv[2];
+ +
37 }
+
38 // If we want to compare two or more fits (e.g. binning changes or introducing new params/priors)
+
39 else if (argc == 6 || argc == 8)
+
40 {
+
41 std::cout << "Producing two fit comparison" << std::endl;
+
42 config = argv[1];
+
43
+
44 FileNames.push_back(argv[2]);
+
45 TitleNames.push_back(argv[3]);
+
46
+
47 FileNames.push_back(argv[4]);
+
48 TitleNames.push_back(argv[5]);
+
49 //KS: If there is third file add it
+
50 if(argc == 8)
+
51 {
+
52 FileNames.push_back(argv[6]);
+
53 TitleNames.push_back(argv[7]);
+
54 }
+
55
+ +
57 }
+
58
+
59 return 0;
+
60}
+
+
61
+
+
62void ProcessMCMC(std::string inputFile)
+
63{
+
64 std::cout << "File for study: " << inputFile << " with config "<<config<<std::endl;
+
65
+
66 // Make the processor
+
67 MCMCProcessor* Processor = new MCMCProcessor(inputFile, false);
+
68
+
69 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
70 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
71
+
72 bool PlotCorr = GetFromManager<bool>(Settings["PlotCorr"], false);
+
73
+
74 Processor->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["ExcludedTypes"], {""}));
+
75 Processor->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["ExcludedNames"], {""}));
+
76 //Apply additional cuts to 1D posterior
+
77 Processor->SetPosterior1DCut(GetFromManager<std::string>(Settings["Posterior1DCut"], ""));
+
78
+
79 //KS: Settings how many credible regions you want, colors, etc., don't worry there are default values if nothing is passed
+
80 Processor->SetCredibleIntervals(GetFromManager<std::vector<double>>(Settings["CredibleIntervals"], {0.99, 0.90, 0.68}));
+
81 Processor->SetCredibleIntervalsColours(GetFromManager<std::vector<short int>>(Settings["CredibleIntervalsColours"], {436, 430, 422}));
+
82
+
83 Processor->SetCredibleRegions(GetFromManager<std::vector<double>>(Settings["CredibleRegions"], {0.99, 0.90, 0.68}));
+
84
+
85 Processor->SetCredibleRegionStyle(GetFromManager<std::vector<short int>>(Settings["CredibleRegionStyle"], {2, 1, 3}));
+
86
+
87 Processor->SetCredibleRegionColor(GetFromManager<std::vector<short int>>(Settings["CredibleRegionColor"], {413, 406, 416}));
+
88
+
89 Processor->SetCredibleInSigmas(GetFromManager<bool>(Settings["CredibleInSigmas"], false));
+
90
+
91 if(PlotCorr) Processor->SetOutputSuffix("_drawCorr");
+
92 //KS:Turn off plotting detector and some other setting, should be via some config
+
93 Processor->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["PlotRelativeToPrior"], false));
+
94 Processor->SetPrintToPDF(GetFromManager<bool>(Settings["PrintToPDF"], true));
+
95
+
96 //KS: Whether you want prior error bands for parameters with flat prior or not
+
97 Processor->SetPlotErrorForFlatPrior(GetFromManager<bool>(Settings["PlotErrorForFlatPrior"], true));
+
98 Processor->SetFancyNames(GetFromManager<bool>(Settings["FancyNames"], true));
+
99 Processor->SetPlotBinValue(GetFromManager<bool>(Settings["PlotBinValue"], false));
+
100 //KS: Plot only 2D posteriors with correlations greater than 0.2
+
101 Processor->SetPost2DPlotThreshold(GetFromManager<double>(Settings["Post2DPlotThreshold"], 0.2));
+
102
+
103 Processor->Initialise();
+
104
+
105 // Make the postfit
+
106 Processor->MakePostfit();
+
107 Processor->DrawPostfit();
+
108 //KS: Should set via config whether you want below or not
+
109 if(GetFromManager<bool>(Settings["MakeCredibleIntervals"], true)) Processor->MakeCredibleIntervals();
+
110 if(GetFromManager<bool>(Settings["CalcBayesFactor"], true)) CalcBayesFactor(Processor);
+
111 if(GetFromManager<bool>(Settings["CalcSavageDickey"], true)) CalcSavageDickey(Processor);
+
112 if(GetFromManager<bool>(Settings["CalcBipolarPlot"], false)) CalcBipolarPlot(Processor);
+
113
+
114 if(PlotCorr)
+
115 {
+
116 Processor->SetSmoothing(GetFromManager<bool>(Settings["Smoothing"], true));
+
117 // Make the covariance matrix
+
118 //We have different treatment for multithread
+
119//#ifdef MULTITHREAD
+
120 Processor->CacheSteps();
+
121 //KS: Since we cached let's make fancy violins :)
+
122 if(GetFromManager<bool>(Settings["MakeViolin"], true)) Processor->MakeViolin();
+
123 Processor->MakeCovariance_MP();
+
124//#else
+
125 //Processor->MakeCovariance();
+
126//#endif
+
127 Processor->DrawCovariance();
+
128 if(GetFromManager<bool>(Settings["MakeCredibleRegions"], false)) Processor->MakeCredibleRegions();
+
129 if(GetFromManager<bool>(Settings["GetTrianglePlot"], true)) GetTrianglePlot(Processor);
+
130
+
131 //KS: When creating covariance matrix longest time is spend on caching every step, since we already cached we can run some fancy covariance stability diagnostic
+
132 if(GetFromManager<bool>(Settings["DiagnoseCovarianceMatrix"], false)) DiagnoseCovarianceMatrix(Processor, inputFile);
+
133 }
+
134 if(GetFromManager<bool>(Settings["ReweightPrior"], false)) ReweightPrior(Processor);
+
135
+
136 delete Processor;
+
137}
+
+
138
+
+ +
140{
+
141 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
142 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
143
+
144 const Color_t PosteriorColor[] = {kBlue-1, kRed, kGreen+2};
+
145 //const Style_t PosteriorStyle[] = {kSolid, kDashed, kDotted};
+
146 nFiles = FileNames.size();
+ + +
149 for (int ik = 0; ik < nFiles; ik++)
+
150 {
+
151 std::cout << "File for study: " << FileNames[ik] << std::endl;
+
152 // Make the processor
+
153 Processor[ik] = new MCMCProcessor(FileNames[ik], false);
+
154 Processor[ik]->SetOutputSuffix(("_" + std::to_string(ik)).c_str());
+
155
+
156 Processor[ik]->SetExcludedTypes(GetFromManager<std::vector<std::string>>(Settings["ExcludedTypes"], {""}));
+
157 Processor[ik]->SetExcludedNames(GetFromManager<std::vector<std::string>>(Settings["ExcludedNames"], {""}));
+
158
+
159 //Apply additional cuts to 1D posterior
+
160 Processor[ik]->SetPosterior1DCut(GetFromManager<std::string>(Settings["Posterior1DCut"], ""));
+
161
+
162 Processor[ik]->SetPlotRelativeToPrior(GetFromManager<bool>(Settings["PlotRelativeToPrior"], false));
+
163 Processor[ik]->SetFancyNames(GetFromManager<bool>(Settings["FancyNames"], true));
+
164 Processor[ik]->Initialise();
+
165 }
+
166 //KS: Multithreading here is very tempting but there are some issues with root that need to be resovled :(
+
167 for (int ik = 0; ik < nFiles; ik++)
+
168 {
+
169 // Make the postfit
+
170 Processor[ik]->MakePostfit();
+
171 Processor[ik]->DrawPostfit();
+
172 }
+
173
+
174 // Open a TCanvas to write the posterior onto
+
175 TCanvas* Posterior = new TCanvas("PosteriorMulti", "PosteriorMulti", 0, 0, 1024, 1024);
+
176 gStyle->SetOptStat(0);
+
177 gStyle->SetOptTitle(0);
+
178 Posterior->SetGrid();
+
179 Posterior->SetBottomMargin(0.1);
+
180 Posterior->SetTopMargin(0.05);
+
181 Posterior->SetRightMargin(0.03);
+
182 Posterior->SetLeftMargin(0.10);
+
183
+
184 FileNames[0] = FileNames[0].substr(0, FileNames[0].find(".root")-1);
+ +
186 for (int ik = 1; ik < nFiles; ik++)
+
187 {
+
188 while (FileNames[ik].find("/") != std::string::npos)
+
189 {
+
190 FileNames[ik] = FileNames[ik].substr(FileNames[ik].find("/")+1, FileNames[ik].find(".root")-1);
+
191 }
+ +
193 }
+
194
+
195 canvasname = canvasname +".pdf[";
+
196
+
197 Posterior->Print(canvasname);
+
198 // Once the pdf file is open no longer need to bracket
+
199 canvasname.ReplaceAll("[","");
+
200
+
201 for(int i = 0; i < Processor[0]->GetNParams(); ++i)
+
202 {
+
203 // This holds the posterior density
+
204 TH1D **hpost = new TH1D*[nFiles];
+
205 TLine **hpd = new TLine*[nFiles];
+
206 for (int ik = 0 ; ik < nFiles; ik++) hpost[ik] = (TH1D *) (Processor[ik]->GetHpost(i))->Clone();
+
207
+
208 // Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
209 if(hpost[0]->GetMaximum() == hpost[0]->Integral()*1.5)
+
210 {
+
211 for (int ik = 0; ik < nFiles; ik++)
+
212 delete hpost[ik];
+
213
+
214 delete[] hpost;
+
215 delete[] hpd;
+
216 continue;
+
217 }
+
218 for (int ik = 0; ik < nFiles; ik++)
+
219 {
+
220 RemoveFitter(hpost[ik], "Gauss");
+
221
+
222 // Set some nice colours
+
223 hpost[ik]->SetLineColor(PosteriorColor[ik]);
+
224 //hpost[ik]->SetLineStyle(PosteriorStyle[ik]);
+
225 hpost[ik]->SetLineWidth(2);
+
226
+
227 // Area normalise the distributions
+
228 hpost[ik]->Scale(1./hpost[ik]->Integral(), "width");
+
229 }
+ +
231 double Prior = 1.0;
+
232 double PriorError = 1.0;
+
233
+
234 Processor[0]->GetNthParameter(i, Prior, PriorError, Title);
+
235
+
236 // Now make the TLine for the Asimov
+
237 TLine *Asimov = new TLine(Prior, hpost[0]->GetMinimum(), Prior, hpost[0]->GetMaximum());
+
238 Asimov->SetLineColor(kRed-3);
+
239 Asimov->SetLineWidth(2);
+
240 Asimov->SetLineStyle(kDashed);
+
241
+
242 // Make a nice little TLegend
+
243 TLegend *leg = new TLegend(0.12, 0.7, 0.6, 0.97);
+
244 leg->SetTextSize(0.03);
+
245 leg->SetFillColor(0);
+
246 leg->SetFillStyle(0);
+
247 leg->SetLineColor(0);
+
248 leg->SetLineStyle(0);
+
249 TString asimovLeg = Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError);
+
250 leg->AddEntry(Asimov, asimovLeg, "l");
+
251
+
252 for (int ik = 0; ik < nFiles; ik++)
+
253 {
+
254 TString rebinLeg = Form("#splitline{%s}{#mu = %.2f, #sigma = %.2f}", TitleNames[ik].c_str(), hpost[ik]->GetMean(), hpost[ik]->GetRMS());
+
255 leg->AddEntry(hpost[ik], rebinLeg, "l");
+
256
+
257 hpd[ik] = new TLine(hpost[ik]->GetBinCenter(hpost[ik]->GetMaximumBin()), hpost[ik]->GetMinimum(), hpost[ik]->GetBinCenter(hpost[ik]->GetMaximumBin()), hpost[ik]->GetMaximum());
+
258 hpd[ik]->SetLineColor(hpost[ik]->GetLineColor());
+
259 hpd[ik]->SetLineWidth(2);
+
260 hpd[ik]->SetLineStyle(kSolid);
+
261 }
+
262
+
263 // Find the maximum value to nicley resize hist
+
264 double maximum = 0;
+
265 for (int ik = 0; ik < nFiles; ik++) maximum = std::max(maximum, hpost[ik]->GetMaximum());
+
266 for (int ik = 0; ik < nFiles; ik++) hpost[ik]->SetMaximum(1.3*maximum);
+
267
+
268 hpost[0]->Draw("hist");
+
269 for (int ik = 1; ik < nFiles; ik++) hpost[ik]->Draw("hist same");
+
270 Asimov->Draw("same");
+
271 for (int ik = 0; ik < nFiles; ik++) hpd[ik]->Draw("same");
+
272 leg->Draw("same");
+
273 Posterior->cd();
+
274 Posterior->Print(canvasname);
+
275
+
276 delete Asimov;
+
277 delete leg;
+
278 for (int ik = 0; ik < nFiles; ik++)
+
279 {
+
280 delete hpost[ik];
+
281 delete hpd[ik];
+
282 }
+
283 delete[] hpost;
+
284 delete[] hpd;
+
285 }//End loop over paramters
+
286
+
287 // Finally draw the parameter plot onto the PDF
+
288 // Close the .pdf file with all the posteriors
+
289 Posterior->cd();
+
290 Posterior->Clear();
+
291
+
292 if(GetFromManager<bool>(Settings["PerformKStest"], true)) KolmogorovSmirnovTest(Processor, Posterior, canvasname);
+
293
+
294 // Close the pdf file
+
295 std::cout << "Closing pdf " << canvasname << std::endl;
+
296 canvasname+="]";
+
297 Posterior->Print(canvasname);
+
298
+
299 delete Posterior;
+
300 for (int ik = 0; ik < nFiles; ik++) delete Processor[ik];
+
301 delete[] Processor;
+
302}
+
+
303
+
304// KS: Calculate Bayes factor for a given hiphothesis, most onformative are those related to osc params. However, it make realtive easy interpreation for switch dials
+
+ +
306{
+
307 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
308 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
309
+
310 std::vector<std::string> ParNames;
+
311 std::vector<std::vector<double>> Model1Bounds;
+
312 std::vector<std::vector<double>> Model2Bounds;
+
313 std::vector<std::vector<std::string>> ModelNames;
+
314 for (const auto& dg : Settings["BayesFactor"])
+
315 {
+
316 ParNames.push_back(dg[0].as<std::string>());
+
317 ModelNames.push_back(dg[1].as<std::vector<std::string>>());
+
318 Model1Bounds.push_back(dg[2].as<std::vector<double>>());
+
319 Model2Bounds.push_back(dg[3].as<std::vector<double>>());
+
320 }
+
321
+ +
323 return;
+
324}
+
+
325
+
+ +
327{
+
328 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
329 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
330
+
331 std::vector<std::string> ParNames;
+
332 std::vector<double> EvaluationPoint;
+
333 std::vector<std::vector<double>> Bounds;
+
334
+
335 for (const auto& d : Settings["SavageDickey"])
+
336 {
+
337 ParNames.push_back(d[0].as<std::string>());
+
338 EvaluationPoint.push_back(d[1].as<double>());
+
339 Bounds.push_back(d[2].as<std::vector<double>>());
+
340 }
+
341
+
342 Processor->GetSavageDickey(ParNames, EvaluationPoint, Bounds);
+
343 return;
+
344}
+
+
345
+
346
+
+ +
348{
+
349 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
350 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
351
+
352 std::vector<std::string> ParNames;
+
353
+
354 for (const auto& d : Settings["BipolarPlot"])
+
355 {
+
356 ParNames.push_back(d[0].as<std::string>());
+
357 }
+
358 Processor->GetPolarPlot(ParNames);
+
359 return;
+
360}
+
+
361
+
362
+
+ +
364 std::cout<<std::endl;
+
365
+
366 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
367 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
368
+
369 for (const auto& dg : Settings["TrianglePlot"])
+
370 {
+
371 std::string ParName = dg[0].as<std::string>();
+
372
+
373 std::vector<std::string> NameVec = dg[1].as<std::vector<std::string>>();
+
374 Processor->MakeTrianglePlot(NameVec);
+
375 }
+
376}
+
+
377
+
378//KS: You validate stability of posterior covariance matrix, you set burn calc cov matrix increase burn calc again and compare. By performing such operation several hundred times we can check when matrix becomes stable
+
+ +
380{
+
381 //Turn of plots from Processor
+
382 Processor->SetPrintToPDF(false);
+
383 // Open a TCanvas to write the posterior onto
+
384 TCanvas* Canvas = new TCanvas("Canvas", "Canvas", 0, 0, 1024, 1024);
+
385 Canvas->SetGrid();
+
386 gStyle->SetOptStat(0);
+
387 gStyle->SetOptTitle(0);
+
388 Canvas->SetTickx();
+
389 Canvas->SetTicky();
+
390 Canvas->SetBottomMargin(0.1);
+
391 Canvas->SetTopMargin(0.05);
+
392 Canvas->SetRightMargin(0.15);
+
393 Canvas->SetLeftMargin(0.10);
+
394
+
395 //KS: Fancy colots
+
396 const int NRGBs = 10;
+
397 TColor::InitializeColors();
+
398 Double_t stops[NRGBs] = { 0.00, 0.10, 0.25, 0.35, 0.50, 0.60, 0.65, 0.75, 0.90, 1.00 };
+
399 Double_t red[NRGBs] = { 0.50, 1.00, 1.00, 0.25, 0.00, 0.10, 0.50, 1.00, 0.75, 0.55 };
+
400 Double_t green[NRGBs] = { 0.00, 0.25, 1.00, 0.25, 0.00, 0.60, 0.90, 1.00, 0.75, 0.75 };
+
401 Double_t blue[NRGBs] = { 0.00, 0.25, 1.00, 1.00, 0.50, 0.60, 0.90, 1.00, 0.05, 0.05 };
+
402 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, 255);
+
403 gStyle->SetNumberContours(255);
+
404
+
405 std::string OutName = inputFile;
+
406 OutName = OutName.substr(0, OutName.find(".root"));
+
407 Canvas->Print(Form("Correlation_%s.pdf[", OutName.c_str()), "pdf");
+
408 Canvas->Print(Form("Covariance_%s.pdf[", OutName.c_str()), "pdf");
+
409
+
410 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
411 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
412
+
413 const int entries = Processor->GetnSteps();
+
414 const int NIntervals = GetFromManager<int>(Settings["NIntervals"], 5);
+
415 const int IntervalsSize = entries/NIntervals;
+
416 //We start with burn from 0 (no burn in at all)
+
417 int BurnIn = 0;
+
418 std::cout<<"Diagnosing matirces with entries="<< entries<<", NIntervals="<<NIntervals<<" and IntervalsSize="<<IntervalsSize<<std::endl;
+
419
+
420 TMatrixDSym *Covariance = nullptr;
+
421 TMatrixDSym *Correlation = nullptr;
+
422
+
423 TH2D *CovariancePreviousHist = nullptr;
+
424 TH2D *CorrelationPreviousHist = nullptr;
+
425
+
426 TH2D *CovarianceHist = nullptr;
+
427 TH2D *CorrelationHist = nullptr;
+
428
+
429 //KS: Get first covariances, we need two for comparison...
+
430 Processor->SetStepCut(BurnIn);
+
431 Processor->GetCovariance(Covariance, Correlation);
+
432
+
433 CovariancePreviousHist = TMatrixIntoTH2D(Covariance, "Covariance");
+
434 CorrelationPreviousHist = TMatrixIntoTH2D(Correlation, "Correlation");
+
435
+
436 delete Covariance;
+
437 Covariance = nullptr;
+
438 delete Correlation;
+
439 Correlation = nullptr;
+
440
+
441 //KS: Loop over alls dsired cuts
+
442 for(int i = 1; i < NIntervals; ++i)
+
443 {
+ +
445 Processor->SetStepCut(BurnIn);
+
446 Processor->GetCovariance(Covariance, Correlation);
+
447 Processor->ResetHistograms();
+
448
+
449 CovarianceHist = TMatrixIntoTH2D(Covariance, "Covariance");
+
450 CorrelationHist = TMatrixIntoTH2D(Correlation, "Correlation");
+
451
+
452 TH2D *CovarianceDiff = (TH2D*)CovarianceHist->Clone("Covariance_Ratio");
+
453 TH2D *CorrelationDiff = (TH2D*)CorrelationHist->Clone("Correlation_Ratio");
+
454
+
455 //KS: Bit messy but quite often covariance is 0 is divided by 0 is problemiatic so
+
456 #ifdef MULTITHREAD
+
457 #pragma omp parallel for
+
458 #endif
+
459 for (int j = 1; j < CovarianceDiff->GetXaxis()->GetNbins()+1; ++j)
+
460 {
+
461 for (int i = 1; i < CovarianceDiff->GetYaxis()->GetNbins()+1; ++i)
+
462 {
+
463 if( std::fabs (CovarianceDiff->GetBinContent(j, i)) < 1.e-5 && std::fabs (CovariancePreviousHist->GetBinContent(j, i)) < 1.e-5)
+
464 {
+
465 CovarianceDiff->SetBinContent(j, i, __UNDEF__);
+
466 CovariancePreviousHist->SetBinContent(j, i, __UNDEF__);
+
467 }
+
468 if( std::fabs (CorrelationDiff->GetBinContent(j, i)) < 1.e-5 && std::fabs (CorrelationPreviousHist->GetBinContent(j, i)) < 1.e-5)
+
469 {
+
470 CorrelationDiff->SetBinContent(j, i, __UNDEF__);
+
471 CorrelationPreviousHist->SetBinContent(j, i, __UNDEF__);
+
472 }
+
473 }
+
474 }
+
475 //Divide matrices
+ + +
478
+
479 //Now it is time for fancy names etc.
+
480 for (int j = 0; j < CovarianceDiff->GetXaxis()->GetNbins(); ++j)
+
481 {
+
482 TString Title = "";
+
483 double Prior = 1.0;
+
484 double PriorError = 1.0;
+
485
+
486 Processor->GetNthParameter(j, Prior, PriorError, Title);
+
487
+
488 CovarianceDiff->GetXaxis()->SetBinLabel(j+1, Title);
+
489 CovarianceDiff->GetYaxis()->SetBinLabel(j+1, Title);
+
490 CorrelationDiff->GetXaxis()->SetBinLabel(j+1, Title);
+
491 CorrelationDiff->GetYaxis()->SetBinLabel(j+1, Title);
+
492 }
+
493 CovarianceDiff->GetXaxis()->SetLabelSize(0.015);
+
494 CovarianceDiff->GetYaxis()->SetLabelSize(0.015);
+
495 CorrelationDiff->GetXaxis()->SetLabelSize(0.015);
+
496 CorrelationDiff->GetYaxis()->SetLabelSize(0.015);
+
497
+
498 std::stringstream ss;
+
499 ss << "BCut_";
+
500 ss << BurnIn;
+
501 ss << "/";
+
502 ss << "BCut_";
+
503 ss << (i-1)*IntervalsSize;
+
504 std::string str = ss.str();
+
505
+
506 TString Title = "Cov " + str;
+
507 CovarianceDiff->GetZaxis()->SetTitle( Title );
+
508 Title = "Corr " + str;
+
509 CorrelationDiff->GetZaxis()->SetTitle(Title);
+
510
+
511 CovarianceDiff->SetMinimum(-2);
+
512 CovarianceDiff->SetMaximum(2);
+
513 CorrelationDiff->SetMinimum(-2);
+
514 CorrelationDiff->SetMaximum(2);
+
515
+
516 Canvas->cd();
+
517 CovarianceDiff->Draw("colz");
+
518 Canvas->Print(Form("Covariance_%s.pdf", OutName.c_str()), "pdf");
+
519
+
520 CorrelationDiff->Draw("colz");
+
521 Canvas->Print(Form("Correlation_%s.pdf", OutName.c_str()), "pdf");
+
522
+
523 //KS: Current hist become previous as we need it for further comparison
+ + + + +
528
+
529 delete CovarianceHist;
+
530 CovarianceHist = nullptr;
+
531 delete CorrelationHist;
+
532 CorrelationHist = nullptr;
+
533
+
534 delete CovarianceDiff;
+
535 delete CorrelationDiff;
+
536 delete Covariance;
+
537 Covariance = nullptr;
+
538 delete Correlation;
+
539 Correlation = nullptr;
+
540 }
+
541 Canvas->cd();
+
542 Canvas->Print(Form("Covariance_%s.pdf]", OutName.c_str()), "pdf");
+
543 Canvas->Print(Form("Correlation_%s.pdf]", OutName.c_str()), "pdf");
+
544
+
545 Processor->SetPrintToPDF(true);
+
546 if(Covariance != nullptr) delete Covariance;
+
547 if(Correlation != nullptr) delete Correlation;
+ + +
550 if(CovarianceHist != nullptr) delete CovarianceHist;
+
551 if(CorrelationHist != nullptr) delete CorrelationHist;
+
552 delete Canvas;
+
553}
+
+
554
+
+ +
556{
+
557 std::cout<<std::endl;
+
558
+
559 YAML::Node card_yaml = YAML::LoadFile(config.c_str());
+
560 YAML::Node Settings = card_yaml["ProcessMCMC"];
+
561
+
562 const auto& Prior = Settings["PriorReweighting"];
+
563
+
564 std::vector<std::string> Names = Prior[0].as<std::vector<std::string>>();
+
565 std::vector<double> NewCentral = Prior[1].as<std::vector<double>>();
+
566 std::vector<double> NewError = Prior[2].as<std::vector<double>>();
+
567
+
568 Processor->ReweightPrior(Names, NewCentral, NewError);
+
569}
+
+
570
+
571//KS: Convert TMatrix to TH2D, mostly usefull for making fancy plots
+
+ +
573{
+
574 TH2D* hMatrix = new TH2D(title.c_str(), title.c_str(), Matrix->GetNrows(), 0.0, Matrix->GetNrows(), Matrix->GetNcols(), 0.0, Matrix->GetNcols());
+
575 for(int i = 0; i < Matrix->GetNrows(); i++)
+
576 {
+
577 for(int j = 0; j < Matrix->GetNcols(); j++)
+
578 {
+
579 //KS: +1 becasue there is offset in histogram realtive to TMatrix
+
580 hMatrix->SetBinContent(i+1,j+1, (*Matrix)(i,j));
+
581 }
+
582 }
+
583
+
584 return hMatrix;
+
585}
+
+
586
+
587//KS: Perform KS test to check if two posteriors for the same parameter came from the same distribution
+
+ +
589{
+
590 const Color_t CumulativeColor[] = {kBlue-1, kRed, kGreen+2};
+ +
592
+
593 for(int i = 0; i < Processor[0]->GetNParams(); ++i)
+
594 {
+
595 // This holds the posterior density
+
596 TH1D **hpost = new TH1D*[nFiles];
+ +
598
+ +
600 double Prior = 1.0;
+
601 double PriorError = 1.0;
+
602
+
603 Processor[0]->GetNthParameter(i, Prior, PriorError, Title);
+
604
+
605 for (int ik = 0 ; ik < nFiles; ik++)
+
606 {
+
607 hpost[ik] = (TH1D*) (Processor[ik]->GetHpost(i))->Clone();
+
608 CumulativeDistribution[ik] = (TH1D*) (Processor[ik]->GetHpost(i))->Clone();
+
609 CumulativeDistribution[ik]->Fill(0., 0.);
+
610 CumulativeDistribution[ik]->Reset();
+
611 CumulativeDistribution[ik]->SetMaximum(1.);
+
612 TString TempTittle = Title+" Kolmogorov Smirnov";
+ +
614
+
615 TempTittle = Title+" Value";
+
616 CumulativeDistribution[ik]->GetXaxis()->SetTitle(TempTittle);
+
617 CumulativeDistribution[ik]->GetYaxis()->SetTitle("Cumulative Probability");
+
618
+
619 CumulativeDistribution[ik]->SetLineWidth(2);
+ + +
622 }
+
623 // Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
624 if(hpost[0]->GetMaximum() == hpost[0]->Integral()*1.5)
+
625 {
+
626 for (int ik = 0; ik < nFiles; ik++)
+
627 {
+
628 delete hpost[ik];
+ +
630 }
+
631 delete[] hpost;
+
632 delete[] CumulativeDistribution;
+
633 continue;
+
634 }
+
635
+
636 for (int ik = 0 ; ik < nFiles; ik++)
+
637 {
+
638 const int NumberOfBins = hpost[ik]->GetXaxis()->GetNbins();
+
639 double Cumulative = 0;
+
640 const double Integral = hpost[ik]->Integral();
+
641 for (int j = 1; j < NumberOfBins+1; ++j)
+
642 {
+
643 Cumulative += hpost[ik]->GetBinContent(j)/Integral;
+
644
+
645 CumulativeDistribution[ik]->SetBinContent(j, Cumulative);
+
646 }
+
647 //KS: Set overflow to 1 just in case
+
648 CumulativeDistribution[ik]->SetBinContent(NumberOfBins+1, 1.);
+
649 }
+
650
+
651 int* TestStatBin = new int[nFiles];
+
652 double* TestStatD = new double[nFiles];
+
653 TLine **LineD = new TLine*[nFiles];
+
654
+
655 for (int ik = 0 ; ik < nFiles; ik++) { TestStatBin[ik] = 0; TestStatD[ik] = -999;}
+
656
+
657 //Find KS statistic
+
658 for (int ik = 1 ; ik < nFiles; ik++)
+
659 {
+
660 const int NumberOfBins = CumulativeDistribution[0]->GetXaxis()->GetNbins();
+
661 for (int j = 1; j < NumberOfBins+1; ++j)
+
662 {
+
663 double BinValue = CumulativeDistribution[0]->GetBinCenter(j);
+ +
665 //KS: Calculate D statistic for this bin, only save it if it's bigger than previosly found value
+ +
667 if(TempDstat > TestStatD[ik])
+
668 {
+ +
670 TestStatBin[ik] = j;
+
671 }
+
672 }
+
673 }
+
674
+
675 for (int ik = 0 ; ik < nFiles; ik++)
+
676 {
+ +
678 LineD[ik]->SetLineColor(CumulativeColor[ik]);
+
679 LineD[ik]->SetLineWidth(2.0);
+
680 }
+
681 CumulativeDistribution[0]->Draw();
+
682 for (int ik = 0 ; ik < nFiles; ik++)
+ +
684
+
685 TLegend *leg = new TLegend(0.15, 0.7, 0.5, 0.90);
+
686 leg->SetTextSize(0.04);
+
687 for (int ik = 0; ik < nFiles; ik++)
+
688 leg->AddEntry(CumulativeDistribution[ik], TitleNames[ik].c_str(), "l");
+
689 for (int ik = 1; ik < nFiles; ik++)
+
690 leg->AddEntry(LineD[ik], Form("#Delta D = %.4f", TestStatD[ik]), "l");
+
691
+
692 leg->SetLineColor(0);
+
693 leg->SetLineStyle(0);
+
694 leg->SetFillColor(0);
+
695 leg->SetFillStyle(0);
+
696 leg->Draw("SAME");
+
697
+
698 for (int ik = 1; ik < nFiles; ik++)
+
699 LineD[ik]->Draw("sam");
+
700
+
701 Posterior->cd();
+
702 Posterior->Print(canvasname);
+
703
+
704 delete leg;
+
705 for (int ik = 0; ik < nFiles; ik++)
+
706 {
+
707 delete hpost[ik];
+ +
709 delete LineD[ik];
+
710 }
+
711 delete[] hpost;
+
712 delete[] CumulativeDistribution;
+
713 delete[] LineD;
+
714 delete[] TestStatBin;
+
715 delete[] TestStatD;
+
716 } //End loop over parameter
+
717}
+
+ +
#define __UNDEF__
+
void GetTrianglePlot(MCMCProcessor *Processor)
+
void DiagnoseCovarianceMatrix(MCMCProcessor *Processor, std::string inputFile)
+
int main(int argc, char *argv[])
+
std::string config
+
std::vector< std::string > TitleNames
+
void CalcBipolarPlot(MCMCProcessor *Processor)
+
int nFiles
+
void MultipleProcessMCMC()
+
std::vector< std::string > FileNames
+
void ReweightPrior(MCMCProcessor *Processor)
+
void ProcessMCMC(std::string inputFile)
+
TH2D * TMatrixIntoTH2D(TMatrixDSym *Matrix, std::string title)
+
void CalcBayesFactor(MCMCProcessor *Processor)
+
void KolmogorovSmirnovTest(MCMCProcessor **Processor, TCanvas *Posterior, TString canvasname)
+
void CalcSavageDickey(MCMCProcessor *Processor)
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
+ + + + diff --git a/README_8md.html b/README_8md.html new file mode 100644 index 00000000..6ab0c749 --- /dev/null +++ b/README_8md.html @@ -0,0 +1,83 @@ + + + + + + + +MaCh3: /github/workspace/README.md File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
/github/workspace/README.md File Reference
+
+
+
+ + + + diff --git a/RHat_8cpp.html b/RHat_8cpp.html new file mode 100644 index 00000000..c16e314e --- /dev/null +++ b/RHat_8cpp.html @@ -0,0 +1,1612 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/RHat.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
RHat.cpp File Reference
+
+
+
#include <iostream>
+#include <sstream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include <cmath>
+#include <math.h>
+#include "TObjArray.h"
+#include "TChain.h"
+#include "TFile.h"
+#include "TBranch.h"
+#include "TCanvas.h"
+#include "TLine.h"
+#include "TLegend.h"
+#include "TString.h"
+#include "TH1.h"
+#include "TRandom3.h"
+#include "TStopwatch.h"
+#include "TColor.h"
+#include "TStyle.h"
+#include "manager/manager.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + +

+Functions

void PrepareChains ()
 
void InitialiseArrays ()
 
void RunDiagnostic ()
 
void CalcRhat ()
 
void SaveResults ()
 
void DestroyArrays ()
 
double CalcMedian (double arr[], int size)
 
void CapVariable (double var, double cap)
 
int main (int argc, char *argv[])
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

int Ntoys
 
int Nchains
 
TChainChain
 
int nDraw
 
bool VERBOSE
 
std::vector< TStringBranchNames
 
std::vector< std::stringMCMCFile
 
std::vector< boolValidPar
 
double *** Draws
 
double ** Mean
 
double ** StandardDeviation
 
doubleMeanGlobal
 
doubleStandardDeviationGlobal
 
doubleBetweenChainVariance
 
doubleMarginalPosteriorVariance
 
doubleRHat
 
doubleEffectiveSampleSize
 
double *** DrawsFolded
 
doubleMedianArr
 
double ** MeanFolded
 
double ** StandardDeviationFolded
 
doubleMeanGlobalFolded
 
doubleStandardDeviationGlobalFolded
 
doubleBetweenChainVarianceFolded
 
doubleMarginalPosteriorVarianceFolded
 
doubleRHatFolded
 
doubleEffectiveSampleSizeFolded
 
+

Function Documentation

+ +

◆ CalcMedian()

+ +
+
+ + + + + + + + + + + + + + + + + + +
double CalcMedian (double arr[],
int size 
)
+
+ +

Definition at line 840 of file RHat.cpp.

+
840 {
+
841// *******************
+
842 std::sort(arr, arr+size);
+
843 if (size % 2 != 0)
+
844 return (double)arr[size/2];
+
845 return (double)(arr[(size-1)/2] + arr[size/2])/2.0;
+
846}
+
int size
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ CalcRhat()

+ +
+
+ + + + + + + +
void CalcRhat ()
+
+ +

Definition at line 436 of file RHat.cpp.

+
436 {
+
437// *******************
+
438
+
439 TStopwatch clock;
+
440 clock.Start();
+
441
+
442//KS: Start parallel region
+
443// If we would like to do this for thousands of chains we might consider using GPU for this
+
444#ifdef MULTITHREAD
+
445#pragma omp parallel
+
446{
+
447#endif
+
448
+
449 #ifdef MULTITHREAD
+
450 #pragma omp for collapse(2)
+
451 #endif
+
452 //KS: loop over chains and draws are independent so might as well collapse for sweet cache hits
+
453 //Calculate the mean for each parameter within each considered chain
+
454 for (int m = 0; m < Nchains; ++m)
+
455 {
+
456 for (int j = 0; j < nDraw; ++j)
+
457 {
+
458 for(int i = 0; i < Ntoys; i++)
+
459 {
+
460 Mean[m][j] += Draws[m][i][j];
+
461 MeanFolded[m][j] += DrawsFolded[m][i][j];
+
462 }
+
463 Mean[m][j] = Mean[m][j]/Ntoys;
+ +
465 }
+
466 }
+
467
+
468 #ifdef MULTITHREAD
+
469 #pragma omp for
+
470 #endif
+
471 //Calculate the mean for each parameter global means we include information from several chains
+
472 for (int j = 0; j < nDraw; ++j)
+
473 {
+
474 for (int m = 0; m < Nchains; ++m)
+
475 {
+
476 MeanGlobal[j] += Mean[m][j];
+ +
478 }
+ + +
481 }
+
482
+
483
+
484 #ifdef MULTITHREAD
+
485 #pragma omp for collapse(2)
+
486 #endif
+
487 //Calculate the standard deviation for each parameter within each considered chain
+
488 for (int m = 0; m < Nchains; ++m)
+
489 {
+
490 for (int j = 0; j < nDraw; ++j)
+
491 {
+
492 for(int i = 0; i < Ntoys; i++)
+
493 {
+
494 StandardDeviation[m][j] += (Draws[m][i][j] - Mean[m][j])*(Draws[m][i][j] - Mean[m][j]);
+ +
496 }
+ + +
499 }
+
500 }
+
501
+
502 #ifdef MULTITHREAD
+
503 #pragma omp for
+
504 #endif
+
505 //Calculate the standard deviation for each parameter combining information from all chains
+
506 for (int j = 0; j < nDraw; ++j)
+
507 {
+
508 for (int m = 0; m < Nchains; ++m)
+
509 {
+ + +
512 }
+ + +
515 }
+
516
+
517 #ifdef MULTITHREAD
+
518 #pragma omp for
+
519 #endif
+
520 for (int j = 0; j < nDraw; ++j)
+
521 {
+
522 //KS: This term only makes sense if we have at least 2 chains
+
523 if(Nchains == 1)
+
524 {
+ + +
527 }
+
528 else
+
529 {
+
530 for (int m = 0; m < Nchains; ++m)
+
531 {
+
532 BetweenChainVariance[j] += ( Mean[m][j] - MeanGlobal[j])*( Mean[m][j] - MeanGlobal[j]);
+ +
534 }
+ + +
537 }
+
538 }
+
539
+
540 #ifdef MULTITHREAD
+
541 #pragma omp for
+
542 #endif
+
543 for (int j = 0; j < nDraw; ++j)
+
544 {
+ + +
547 }
+
548
+
549 #ifdef MULTITHREAD
+
550 #pragma omp for
+
551 #endif
+
552 //Finally calculate our estimator
+
553 for (int j = 0; j < nDraw; ++j)
+
554 {
+ + +
557
+
558 //KS: For flat params values can be crazy so cap at 0
+
559 CapVariable(RHat[j], 0);
+ +
561 }
+
562
+
563 #ifdef MULTITHREAD
+
564 #pragma omp for
+
565 #endif
+
566 //KS: Additionaly calculates effective step size which is an estimate of the sample size required to achieve the same level of precision if that sample was a simple random sample.
+
567 for (int j = 0; j < nDraw; ++j)
+
568 {
+ + +
571
+
572 //KS: For flat params values can be crazy so cap at 0
+ + +
575 }
+
576 #ifdef MULTITHREAD
+
577 } //End parallel region
+
578 #endif
+
579
+
580 clock.Stop();
+
581 std::cout << "Finsihed calcaulting RHat, it took " << clock.RealTime() << "s to finish" << std::endl;
+
582}
+
int Nchains
Definition RHat.cpp:36
+
double * StandardDeviationGlobalFolded
Definition RHat.cpp:66
+
void CapVariable(double var, double cap)
Definition RHat.cpp:851
+
double * EffectiveSampleSizeFolded
Definition RHat.cpp:71
+
double * BetweenChainVarianceFolded
Definition RHat.cpp:68
+
double * MeanGlobal
Definition RHat.cpp:51
+
double ** MeanFolded
Definition RHat.cpp:62
+
double * BetweenChainVariance
Definition RHat.cpp:54
+
double * MeanGlobalFolded
Definition RHat.cpp:65
+
double ** StandardDeviation
Definition RHat.cpp:49
+
double * StandardDeviationGlobal
Definition RHat.cpp:52
+
double * MarginalPosteriorVariance
Definition RHat.cpp:55
+
double * RHatFolded
Definition RHat.cpp:70
+
double *** DrawsFolded
Definition RHat.cpp:59
+
double ** StandardDeviationFolded
Definition RHat.cpp:63
+
double *** Draws
Definition RHat.cpp:46
+
double * RHat
Definition RHat.cpp:56
+
double ** Mean
Definition RHat.cpp:48
+
int nDraw
Definition RHat.cpp:39
+
double * EffectiveSampleSize
Definition RHat.cpp:57
+
double * MarginalPosteriorVarianceFolded
Definition RHat.cpp:69
+
int Ntoys
Definition RHat.cpp:35
+
+
+
+ +

◆ CapVariable()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void CapVariable (double var,
double cap 
)
+
+ +

Definition at line 851 of file RHat.cpp.

+
851 {
+
852// *******************
+
853
+
854 if(std::isnan(var) || !std::isfinite(var)) var = cap;
+
855}
+
+
+
+ +

◆ DestroyArrays()

+ +
+
+ + + + + + + +
void DestroyArrays ()
+
+ +

Definition at line 794 of file RHat.cpp.

+
794 {
+
795// *******************
+
796
+
797 std::cout<<"Killing all arrays"<<std::endl;
+
798 delete[] MeanGlobal;
+ +
800 delete[] BetweenChainVariance;
+ +
802 delete[] RHat;
+
803 delete[] EffectiveSampleSize;
+
804
+
805 delete[] MeanGlobalFolded;
+ + + +
809 delete[] RHatFolded;
+ +
811
+
812 for(int m = 0; m < Nchains; m++)
+
813 {
+
814 for(int i = 0; i < Ntoys; i++)
+
815 {
+
816 delete[] Draws[m][i];
+
817 delete[] DrawsFolded[m][i];
+
818 }
+
819 delete[] Draws[m];
+
820 delete[] Mean[m];
+
821 delete[] StandardDeviation[m];
+
822
+
823 delete[] DrawsFolded[m];
+
824 delete[] MeanFolded[m];
+
825 delete[] StandardDeviationFolded[m];
+
826 }
+
827 delete[] Draws;
+
828 delete[] Mean;
+
829 delete[] StandardDeviation;
+
830
+
831 delete[] DrawsFolded;
+
832 delete[] MedianArr;
+
833 delete[] MeanFolded;
+ +
835}
+
double * MedianArr
Definition RHat.cpp:60
+
+
+
+ +

◆ InitialiseArrays()

+ +
+
+ + + + + + + +
void InitialiseArrays ()
+
+ +

Definition at line 365 of file RHat.cpp.

+
365 {
+
366// *******************
+
367
+
368 std::cout << "Initialising arrays " << std::endl;
+
369
+
370 Mean = new double*[Nchains]();
+
371 StandardDeviation = new double*[Nchains]();
+
372
+
373 MeanGlobal = new double[nDraw]();
+
374 StandardDeviationGlobal = new double[nDraw]();
+
375 BetweenChainVariance = new double[nDraw]();
+
376
+
377 MarginalPosteriorVariance = new double[nDraw]();
+
378 RHat = new double[nDraw]();
+
379 EffectiveSampleSize = new double[nDraw]();
+
380
+
381 MeanFolded = new double*[Nchains]();
+
382 StandardDeviationFolded = new double*[Nchains]();
+
383
+
384 MeanGlobalFolded = new double[nDraw]();
+
385 StandardDeviationGlobalFolded = new double[nDraw]();
+
386 BetweenChainVarianceFolded = new double[nDraw]();
+
387
+ +
389 RHatFolded = new double[nDraw]();
+
390 EffectiveSampleSizeFolded = new double[nDraw]();
+
391
+
392 for (int m = 0; m < Nchains; ++m)
+
393 {
+
394 Mean[m] = new double[nDraw]();
+
395 StandardDeviation[m] = new double[nDraw]();
+
396
+
397 MeanFolded[m] = new double[nDraw]();
+
398 StandardDeviationFolded[m] = new double[nDraw]();
+
399 for (int j = 0; j < nDraw; ++j)
+
400 {
+
401 Mean[m][j] = 0.;
+
402 StandardDeviation[m][j] = 0.;
+
403
+
404 MeanFolded[m][j] = 0.;
+ +
406 if(m == 0)
+
407 {
+
408 MeanGlobal[j] = 0.;
+ + + +
412 RHat[j] = 0.;
+ +
414
+
415 MeanGlobalFolded[j] = 0.;
+ + + +
419 RHatFolded[j] = 0.;
+ +
421 }
+
422 }
+
423 }
+
424}
+
+
+
+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
charargv[] 
)
+
+ +

Definition at line 86 of file RHat.cpp.

+
86 {
+
87// *******************
+
88
+ +
90
+
91 Draws = NULL;
+
92 Mean = NULL;
+ +
94
+ + +
97
+ + +
100 RHat = NULL;
+ +
102
+ +
104 MedianArr = NULL;
+ + +
107
+ + +
110
+ + + + +
115
+
116 VERBOSE = false;
+
117 Nchains = 0;
+
118
+
119 if (argc == 1 && argc == 2)
+
120 {
+
121 std::cerr << "Wrong arguments" << std::endl;
+
122 std::cerr << "./RHat Ntoys MCMCchain_1.root MCMCchain_2.root MCMCchain_3.root ... [how many you like]" << std::endl;
+
123 exit(-1);
+
124 }
+
125
+
126 Ntoys = atoi(argv[1]);
+
127
+
128 //KS Gelman suggests to diagnose on more than one chain
+
129 for (int i = 2; i < argc; i++)
+
130 {
+
131 MCMCFile.push_back(std::string(argv[i]));
+
132 std::cout<<"Adding file: "<<MCMCFile.back()<<std::endl;
+
133 Nchains++;
+
134 }
+
135
+
136 if(Ntoys < 1)
+
137 {
+
138 std::cerr << "You specified " << Ntoys << " specify larger greater than 0" << std::endl;
+
139 exit(-1);
+
140 }
+
141
+
142 if(Nchains == 1)
+
143 {
+
144 std::cout<<" Gelman is going to be sad :(. He suggested you should use more than one chain (at least 4). Code works fine for one chain, however, estimator might be biased."<<std::endl;
+
145 std::cout<<" Multiple chains are more likely to reveal multimodality and poor adaptation or mixing:"<<std::endl;
+
146 }
+
147 std::cout<<"Diagnosing "<<Nchains<<" chians, with "<<Ntoys<<" toys"<<std::endl;
+
148
+ +
150
+ +
152
+
153 //KS: Main function
+ +
155
+
156 SaveResults();
+
157
+ +
159
+
160 return 0;
+
161}
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
void SaveResults()
Definition RHat.cpp:586
+
void InitialiseArrays()
Definition RHat.cpp:365
+
void RunDiagnostic()
Definition RHat.cpp:427
+
std::vector< std::string > MCMCFile
Definition RHat.cpp:43
+
void DestroyArrays()
Definition RHat.cpp:794
+
void PrepareChains()
Definition RHat.cpp:165
+
bool VERBOSE
Definition RHat.cpp:41
+
+
+
+ +

◆ PrepareChains()

+ +
+
+ + + + + + + +
void PrepareChains ()
+
+ +

Definition at line 165 of file RHat.cpp.

+
165 {
+
166// *******************
+
167
+
168 TRandom3 *rnd = new TRandom3(0);
+
169
+
170 std::cout << "Generating " << Ntoys << std::endl;
+
171 TStopwatch clock;
+
172 clock.Start();
+
173
+
174 int *BurnIn = new int[Nchains]();
+
175 int *nEntries = new int[Nchains]();
+
176 int *nBranches = new int[Nchains]();
+
177
+
178 std::vector<int> step(Nchains);
+
179
+
180 Draws = new double**[Nchains]();
+
181 DrawsFolded = new double**[Nchains]();
+
182
+
183 // Open the Chain
+
184 //It is tempting to multithread here but unfortunately, ROOT files are not thread safe :(
+
185 for (int m = 0; m < Nchains; m++)
+
186 {
+
187 TChain* Chain = new TChain("posteriors");
+
188 Chain->Add(MCMCFile[m].c_str());
+
189
+
190 nEntries[m] = Chain->GetEntries();
+
191
+
192 // Set the step cut to be 20%
+
193 BurnIn[m] = nEntries[m]/5;
+
194
+
195 // Get the list of branches
+
196 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
197
+
198 // Get the number of branches
+
199 nBranches[m] = brlis->GetEntries();
+
200
+
201 if(m == 0) BranchNames.reserve(nBranches[m]);
+
202
+
203 // Set all the branches to off
+
204 Chain->SetBranchStatus("*", false);
+
205
+
206 // Loop over the number of branches
+
207 // Find the name and how many of each systematic we have
+
208 for (int i = 0; i < nBranches[m]; i++)
+
209 {
+
210 // Get the TBranch and its name
+
211 TBranch* br = (TBranch*)brlis->At(i);
+
212 TString bname = br->GetName();
+
213
+
214 // Read in the step
+
215 if (bname == "step") {
+
216 Chain->SetBranchStatus(bname, true);
+
217 Chain->SetBranchAddress(bname, &step[m]);
+
218 }
+
219 //Count all branches
+
220 else if (bname.BeginsWith("PCA_") || bname.BeginsWith("accProb") || bname.BeginsWith("stepTime") )
+
221 {
+
222 continue;
+
223 }
+
224 else
+
225 {
+
226 //KS: Save branch name only for one chain, we assume all chains have the same branches, otherwise this doesn't make sense either way
+
227 if(m == 0)
+
228 {
+
229 BranchNames.push_back(bname);
+
230 //KS: We calculate R Hat also for LogL, just in case, however we plot them separately
+
231 if(bname.BeginsWith("LogL"))
+
232 {
+
233 ValidPar.push_back(false);
+
234 }
+
235 else
+
236 {
+
237 ValidPar.push_back(true);
+
238 }
+
239 }
+
240 Chain->SetBranchStatus(bname, true);
+
241 if (VERBOSE) std::cout<<bname<<std::endl;
+
242 }
+
243 }
+
244
+
245 if(m == 0) nDraw = BranchNames.size();
+
246
+
247 //TN: Qualitatively faster sanity check, with the very same outcome (all chains have the same #branches)
+
248 if(m > 0)
+
249 {
+
250 if(nBranches[m] != nBranches[0])
+
251 {
+
252 std::cerr<<"Ups, something went wrong, chain "<<m<<" called "<< MCMCFile[m] <<" has "<<nBranches[m]<<" branches, while 0 called "<<MCMCFile[0]<<" has "<<nBranches[0]<<" branches"<<std::endl;
+
253 std::cerr<<"All chains should have the same number of branches"<<std::endl;
+
254 throw;
+
255 }
+
256 }
+
257
+
258
+
259 //TN: move the Draws here, so we need to iterate over every chain only once
+
260 Draws[m] = new double*[Ntoys]();
+
261 DrawsFolded[m] = new double*[Ntoys]();
+
262 for(int i = 0; i < Ntoys; i++)
+
263 {
+
264 Draws[m][i] = new double[nDraw]();
+
265 DrawsFolded[m][i] = new double[nDraw]();
+
266 for(int j = 0; j < nDraw; j++)
+
267 {
+
268 Draws[m][i][j] = 0.;
+
269 DrawsFolded[m][i][j] = 0.;
+
270 }
+
271 }
+
272
+
273 //TN: move looping over toys here, so we don't need to loop over chains more than once
+
274 if(BurnIn[m] >= nEntries[m])
+
275 {
+
276 std::cerr<<"You are running on a chain shorter than BurnIn cut"<<std::endl;
+
277 std::cerr<<"Number of entries "<<nEntries[m]<<" BurnIn cut "<<BurnIn<<std::endl;
+
278 std::cerr<<"You will run into the infinite loop"<<std::endl;
+
279 std::cerr<<"You can make a new chain or modify BurnIn cut"<<std::endl;
+
280 std::cerr<<"Find me here: "<<__FILE__ << ":" << __LINE__ << std::endl;
+
281 throw;
+
282 }
+
283
+
284 for (int i = 0; i < Ntoys; i++)
+
285 {
+
286 // Get a random entry after burn in
+
287 int entry = (int)(nEntries[m]*rnd->Rndm());
+
288
+
289 Chain->GetEntry(entry);
+
290
+
291 // If we have combined chains by hadd need to check the step in the chain
+
292 // Note, entry is not necessarily the same as the step due to merged ROOT files, so can't choose an entry in the range BurnIn - nEntries :(
+
293 if (step[m] < BurnIn[m])
+
294 {
+
295 i--;
+
296 continue;
+
297 }
+
298
+
299 // Output some info for the user
+
300 if (Ntoys > 10 && i % (Ntoys/10) == 0) {
+
301 std::cout << "On toy " << i << "/" << Ntoys << " (" << int(double(i)/double(Ntoys)*100.0) << "%)" << std::endl;
+
302 std::cout << " Getting random entry " << entry << std::endl;
+
303 }
+
304
+
305 // Set the branch addresses for params
+
306 for (int j = 0; j < nDraw; ++j)
+
307 {
+
308 Chain->SetBranchAddress(BranchNames[j].Data(), &Draws[m][i][j]);
+
309 }
+
310 Chain->GetEntry(entry);
+
311
+
312 }//end loop over toys
+
313
+
314 //TN: There, we now don't need to keep the chain in memory anymore
+
315 delete Chain;
+
316 }
+
317
+
318 //KS: Now prepare folded draws, quoting Gelman
+
319 //"We propose to report the maximum of rank normalized split-Rb and rank normalized folded-split-Rb for each parameter"
+
320 MedianArr = new double[nDraw]();
+
321 #ifdef MULTITHREAD
+
322 #pragma omp parallel for
+
323 #endif
+
324 for(int j = 0; j < nDraw; j++)
+
325 {
+
326 MedianArr[j] = 0.;
+
327 double* TempDraws = new double[Ntoys*Nchains]();
+
328 for(int m = 0; m < Nchains; m++)
+
329 {
+
330 for(int i = 0; i < Ntoys; i++)
+
331 {
+
332 const int im = i+m;
+
333 TempDraws[im] = Draws[m][i][j];
+
334 }
+
335 }
+ +
337 delete[] TempDraws;
+
338 }
+
339
+
340 #ifdef MULTITHREAD
+
341 #pragma omp parallel for collapse(3)
+
342 #endif
+
343 for(int m = 0; m < Nchains; m++)
+
344 {
+
345 for(int i = 0; i < Ntoys; i++)
+
346 {
+
347 for(int j = 0; j < nDraw; j++)
+
348 {
+
349 DrawsFolded[m][i][j] = std::fabs(Draws[m][i][j] - MedianArr[j]);
+
350 }
+
351 }
+
352 }
+
353 delete rnd;
+
354
+
355 delete[] BurnIn;
+
356 delete[] nEntries;
+
357 delete[] nBranches;
+
358
+
359 clock.Stop();
+
360 std::cout << "Finsihed producing Toys, it took " << clock.RealTime() << "s to finish" << std::endl;
+
361}
+
std::vector< bool > ValidPar
Definition RHat.cpp:44
+
std::vector< TString > BranchNames
Definition RHat.cpp:42
+
double CalcMedian(double arr[], int size)
Definition RHat.cpp:840
+
TChain * Chain
Definition RHat.cpp:38
+
+
+
+ +

◆ RunDiagnostic()

+ +
+
+ + + + + + + +
void RunDiagnostic ()
+
+ +

Definition at line 427 of file RHat.cpp.

+
427 {
+
428// *******************
+
429 CalcRhat();
+
430 //In case in future we expand this
+
431}
+
void CalcRhat()
Definition RHat.cpp:436
+
+
+
+ +

◆ SaveResults()

+ +
+
+ + + + + + + +
void SaveResults ()
+
+ +

Definition at line 586 of file RHat.cpp.

+
586 {
+
587// *******************
+
588 std::string NameTemp = "";
+
589 //KS: If we run over many many chains there is danger that name will be so absurdly long we run over systmat limit and job will be killed :(
+
590 if(Nchains < 5)
+
591 {
+
592 for (int i = 0; i < Nchains; i++)
+
593 {
+
594 std::string temp = MCMCFile[i];
+
595
+
596 while (temp.find(".root") != std::string::npos) {
+
597 temp = temp.substr(0, temp.find(".root"));
+
598 }
+
599
+
600 NameTemp = NameTemp + temp + "_";
+
601 }
+
602 }
+
603 else
+
604 {
+
605 NameTemp = std::to_string(Nchains) + "Chains" + "_";
+
606 }
+
607 NameTemp += "diag.root";
+
608
+
609 TFile* DiagFile = new TFile(NameTemp.c_str(), "recreate");
+
610
+
611 DiagFile->cd();
+
612
+
613 TH1D *StandardDeviationGlobalPlot = new TH1D("StandardDeviationGlobalPlot", "StandardDeviationGlobalPlot", 200, 0, 2);
+
614 TH1D *BetweenChainVariancePlot = new TH1D("BetweenChainVariancePlot", "BetweenChainVariancePlot", 200, 0, 2);
+
615 TH1D *MarginalPosteriorVariancePlot = new TH1D("MarginalPosteriorVariancePlot", "MarginalPosteriorVariancePlot", 200, 0, 2);
+
616 TH1D *RhatPlot = new TH1D("RhatPlot", "RhatPlot", 200, 0, 2);
+
617 TH1D *EffectiveSampleSizePlot = new TH1D("EffectiveSampleSizePlot", "EffectiveSampleSizePlot", 400, 0, 10000);
+
618
+
619 TH1D *StandardDeviationGlobalFoldedPlot = new TH1D("StandardDeviationGlobalFoldedPlot", "StandardDeviationGlobalFoldedPlot", 200, 0, 2);
+
620 TH1D *BetweenChainVarianceFoldedPlot = new TH1D("BetweenChainVarianceFoldedPlot", "BetweenChainVarianceFoldedPlot", 200, 0, 2);
+
621 TH1D *MarginalPosteriorVarianceFoldedPlot = new TH1D("MarginalPosteriorVarianceFoldedPlot", "MarginalPosteriorVarianceFoldedPlot", 200, 0, 2);
+
622 TH1D *RhatFoldedPlot = new TH1D("RhatFoldedPlot", "RhatFoldedPlot", 200, 0, 2);
+
623 TH1D *EffectiveSampleSizeFoldedPlot = new TH1D("EffectiveSampleSizeFoldedPlot", "EffectiveSampleSizeFoldedPlot", 400, 0, 10000);
+
624
+
625 TH1D *RhatLogPlot = new TH1D("RhatLogPlot", "RhatLogPlot", 200, 0, 2);
+
626 TH1D *RhatFoldedLogPlot = new TH1D("RhatFoldedLogPlot", "RhatFoldedLogPlot", 200, 0, 2);
+
627
+
628 int Criterium = 0;
+
629 int CiteriumFolded = 0;
+
630 for(int j = 0; j < nDraw; j++)
+
631 {
+
632 //KS: Fill only valid parameters
+
633 if(ValidPar[j])
+
634 {
+ + + +
638 RhatPlot->Fill(RHat[j]);
+ +
640 if(RHat[j] > 1.1) Criterium++;
+
641
+
642
+ + + + + +
648 if(RHatFolded[j] > 1.1) CiteriumFolded++;
+
649 }
+
650 else
+
651 {
+
652 RhatLogPlot->Fill(RHat[j]);
+ +
654 }
+
655 }
+
656 //KS: We set criterium of 1.1 based on Gelman et al. (2003) Bayesian Data Analysis
+
657 std::cout<<" Number of parameters which has R hat greater than 1.1 is "<<Criterium<<"("<<100*double(Criterium)/double(nDraw)<<"%) while for R hat folded "<<CiteriumFolded<<"("<<100*double(CiteriumFolded)/double(nDraw)<<"%)"<<std::endl;
+
658
+
659 for(int j = 0; j < nDraw; j++)
+
660 {
+
661 if( (RHat[j] > 1.1 || RHatFolded[j] > 1.1) && ValidPar[j])
+
662 {
+
663 std::cout<<"Parameter "<<BranchNames[j]<<" has R hat higher than 1.1"<<std::endl;
+
664 }
+
665 }
+ + + +
669 RhatPlot->Write();
+ +
671
+ + + +
675 RhatFoldedPlot->Write();
+ +
677
+
678 RhatLogPlot->Write();
+
679 RhatFoldedLogPlot->Write();
+
680
+
681 //KS: Now we make fancy canvases, consider some function to have less copy pasting
+
682 TCanvas *TempCanvas = new TCanvas("Canvas", "Canvas", 1024, 1024);
+
683 gStyle->SetOptStat(0);
+
684 TempCanvas->SetGridx();
+
685 TempCanvas->SetGridy();
+
686
+
687 // Random line to write useful information to TLegend
+
688 TLine *TempLine = new TLine(0 , 0, 0, 0);
+
689 TempLine->SetLineColor(kBlack);
+
690
+
691 RhatPlot->GetXaxis()->SetTitle("R hat");
+
692 RhatPlot->SetLineColor(kRed);
+
693 RhatPlot->SetFillColor(kRed);
+
694 RhatFoldedPlot->SetLineColor(kBlue);
+
695 RhatFoldedPlot->SetFillColor(kBlue);
+
696
+
697 TLegend *Legend = new TLegend(0.55, 0.6, 0.9, 0.9);
+
698 Legend->SetTextSize(0.04);
+
699 Legend->SetFillColor(0);
+
700 Legend->SetFillStyle(0);
+
701 Legend->SetLineWidth(0);
+
702 Legend->SetLineColor(0);
+
703
+
704 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
705 Legend->AddEntry(RhatPlot, "Rhat Gelman 2013", "l");
+
706 Legend->AddEntry(RhatFoldedPlot, "Rhat-Folded Gelman 2021", "l");
+
707
+
708 RhatPlot->Draw();
+
709 RhatFoldedPlot->Draw("same");
+
710 Legend->Draw("same");
+
711 TempCanvas->Write("Rhat");
+
712 delete Legend;
+
713 Legend = NULL;
+
714
+
715 //Now R hat for log L
+
716 RhatLogPlot->GetXaxis()->SetTitle("R hat for LogL");
+
717 RhatLogPlot->SetLineColor(kRed);
+
718 RhatLogPlot->SetFillColor(kRed);
+
719 RhatFoldedLogPlot->SetLineColor(kBlue);
+
720 RhatFoldedLogPlot->SetFillColor(kBlue);
+
721
+
722 Legend = new TLegend(0.55, 0.6, 0.9, 0.9);
+
723 Legend->SetTextSize(0.04);
+
724 Legend->SetFillColor(0);
+
725 Legend->SetFillStyle(0);
+
726 Legend->SetLineWidth(0);
+
727 Legend->SetLineColor(0);
+
728
+
729 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
730 Legend->AddEntry(RhatLogPlot, "Rhat Gelman 2013", "l");
+
731 Legend->AddEntry(RhatFoldedLogPlot, "Rhat-Folded Gelman 2021", "l");
+
732
+
733 RhatLogPlot->Draw();
+
734 RhatFoldedLogPlot->Draw("same");
+
735 Legend->Draw("same");
+
736 TempCanvas->Write("RhatLog");
+
737 delete Legend;
+
738 Legend = NULL;
+
739
+
740 //Now canvas for effective sample size
+
741 EffectiveSampleSizePlot->GetXaxis()->SetTitle("S_{eff, BDA2}");
+
742 EffectiveSampleSizePlot->SetLineColor(kRed);
+ +
744
+
745 Legend = new TLegend(0.45, 0.6, 0.9, 0.9);
+
746 Legend->SetTextSize(0.03);
+
747 Legend->SetFillColor(0);
+
748 Legend->SetFillStyle(0);
+
749 Legend->SetLineWidth(0);
+
750 Legend->SetLineColor(0);
+
751
+
752 const double Mean1 = EffectiveSampleSizePlot->GetMean();
+
753 const double RMS1 = EffectiveSampleSizePlot->GetRMS();
+
754 const double Mean2 = EffectiveSampleSizeFoldedPlot->GetMean();
+
755 const double RMS2 = EffectiveSampleSizeFoldedPlot->GetRMS();
+
756
+
757 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
758 Legend->AddEntry(EffectiveSampleSizePlot, Form("S_{eff, BDA2} #mu = %.2f, #sigma = %.2f",Mean1 ,RMS1), "l");
+
759 Legend->AddEntry(EffectiveSampleSizeFoldedPlot, Form("S_{eff, BDA2} Folded, #mu = %.2f, #sigma = %.2f",Mean2 ,RMS2), "l");
+
760
+ +
762 EffectiveSampleSizeFoldedPlot->Draw("same");
+
763 Legend->Draw("same");
+
764 TempCanvas->Write("EffectiveSampleSize");
+
765
+
766 //Fancy memory cleaning
+ + + +
770 delete RhatPlot;
+ +
772
+ + + +
776 delete RhatFoldedPlot;
+ +
778
+
779 delete Legend;
+
780 delete TempCanvas;
+
781 delete TempLine;
+
782
+
783 delete RhatLogPlot;
+
784 delete RhatFoldedLogPlot;
+
785
+
786 DiagFile->Close();
+
787 delete DiagFile;
+
788
+
789 std::cout<<"Finished and wrote results to "<<NameTemp<<std::endl;
+
790}
+
+
+
+

Variable Documentation

+ +

◆ BetweenChainVariance

+ +
+
+ + + + +
double* BetweenChainVariance
+
+ +

Definition at line 54 of file RHat.cpp.

+ +
+
+ +

◆ BetweenChainVarianceFolded

+ +
+
+ + + + +
double* BetweenChainVarianceFolded
+
+ +

Definition at line 68 of file RHat.cpp.

+ +
+
+ +

◆ BranchNames

+ +
+
+ + + + +
std::vector<TString> BranchNames
+
+ +

Definition at line 42 of file RHat.cpp.

+ +
+
+ +

◆ Chain

+ +
+
+ + + + +
TChain* Chain
+
+ +

Definition at line 38 of file RHat.cpp.

+ +
+
+ +

◆ Draws

+ +
+
+ + + + +
double*** Draws
+
+ +

Definition at line 46 of file RHat.cpp.

+ +
+
+ +

◆ DrawsFolded

+ +
+
+ + + + +
double*** DrawsFolded
+
+ +

Definition at line 59 of file RHat.cpp.

+ +
+
+ +

◆ EffectiveSampleSize

+ +
+
+ + + + +
double* EffectiveSampleSize
+
+ +

Definition at line 57 of file RHat.cpp.

+ +
+
+ +

◆ EffectiveSampleSizeFolded

+ +
+
+ + + + +
double* EffectiveSampleSizeFolded
+
+ +

Definition at line 71 of file RHat.cpp.

+ +
+
+ +

◆ MarginalPosteriorVariance

+ +
+
+ + + + +
double* MarginalPosteriorVariance
+
+ +

Definition at line 55 of file RHat.cpp.

+ +
+
+ +

◆ MarginalPosteriorVarianceFolded

+ +
+
+ + + + +
double* MarginalPosteriorVarianceFolded
+
+ +

Definition at line 69 of file RHat.cpp.

+ +
+
+ +

◆ MCMCFile

+ +
+
+ + + + +
std::vector<std::string> MCMCFile
+
+ +

Definition at line 43 of file RHat.cpp.

+ +
+
+ +

◆ Mean

+ +
+
+ + + + +
double** Mean
+
+ +

Definition at line 48 of file RHat.cpp.

+ +
+
+ +

◆ MeanFolded

+ +
+
+ + + + +
double** MeanFolded
+
+ +

Definition at line 62 of file RHat.cpp.

+ +
+
+ +

◆ MeanGlobal

+ +
+
+ + + + +
double* MeanGlobal
+
+ +

Definition at line 51 of file RHat.cpp.

+ +
+
+ +

◆ MeanGlobalFolded

+ +
+
+ + + + +
double* MeanGlobalFolded
+
+ +

Definition at line 65 of file RHat.cpp.

+ +
+
+ +

◆ MedianArr

+ +
+
+ + + + +
double* MedianArr
+
+ +

Definition at line 60 of file RHat.cpp.

+ +
+
+ +

◆ Nchains

+ +
+
+ + + + +
int Nchains
+
+ +

Definition at line 36 of file RHat.cpp.

+ +
+
+ +

◆ nDraw

+ +
+
+ + + + +
int nDraw
+
+ +

Definition at line 39 of file RHat.cpp.

+ +
+
+ +

◆ Ntoys

+ +
+
+ + + + +
int Ntoys
+
+ +

Definition at line 35 of file RHat.cpp.

+ +
+
+ +

◆ RHat

+ +
+
+ + + + +
double* RHat
+
+ +

Definition at line 56 of file RHat.cpp.

+ +
+
+ +

◆ RHatFolded

+ +
+
+ + + + +
double* RHatFolded
+
+ +

Definition at line 70 of file RHat.cpp.

+ +
+
+ +

◆ StandardDeviation

+ +
+
+ + + + +
double** StandardDeviation
+
+ +

Definition at line 49 of file RHat.cpp.

+ +
+
+ +

◆ StandardDeviationFolded

+ +
+
+ + + + +
double** StandardDeviationFolded
+
+ +

Definition at line 63 of file RHat.cpp.

+ +
+
+ +

◆ StandardDeviationGlobal

+ +
+
+ + + + +
double* StandardDeviationGlobal
+
+ +

Definition at line 52 of file RHat.cpp.

+ +
+
+ +

◆ StandardDeviationGlobalFolded

+ +
+
+ + + + +
double* StandardDeviationGlobalFolded
+
+ +

Definition at line 66 of file RHat.cpp.

+ +
+
+ +

◆ ValidPar

+ +
+
+ + + + +
std::vector<bool> ValidPar
+
+ +

Definition at line 44 of file RHat.cpp.

+ +
+
+ +

◆ VERBOSE

+ +
+
+ + + + +
bool VERBOSE
+
+ +

Definition at line 41 of file RHat.cpp.

+ +
+
+
+ + + + diff --git a/RHat_8cpp_source.html b/RHat_8cpp_source.html new file mode 100644 index 00000000..2ef3dde1 --- /dev/null +++ b/RHat_8cpp_source.html @@ -0,0 +1,1005 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics/RHat.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RHat.cpp
+
+
+Go to the documentation of this file.
1// C++ includes
+
2#include <iostream>
+
3#include <sstream>
+
4#include <iomanip>
+
5#include <vector>
+
6#include <algorithm>
+
7#include <cmath>
+
8#include <math.h>
+
9
+
10// ROOT includes
+
11#include "TObjArray.h"
+
12#include "TChain.h"
+
13#include "TFile.h"
+
14#include "TBranch.h"
+
15#include "TCanvas.h"
+
16#include "TLine.h"
+
17#include "TLegend.h"
+
18#include "TString.h"
+
19#include "TH1.h"
+
20#include "TRandom3.h"
+
21#include "TStopwatch.h"
+
22#include "TColor.h"
+
23#include "TStyle.h"
+
24
+
25#ifdef MULTITHREAD
+
26#include "omp.h"
+
27#endif
+
28
+
29#include "manager/manager.h"
+
30
+
31//KS: This exe is meant to calculate R hat estimator. For a well converged this distribution should be centred at one.
+
32//Based on Gelman et. al. arXiv:1903.08008v5
+
33
+
34// *******************
+ + +
37
+ + +
40
+ +
42std::vector<TString> BranchNames;
+
43std::vector<std::string> MCMCFile;
+
44std::vector<bool> ValidPar;
+
45
+
46double ***Draws;
+
47
+
48double** Mean;
+ +
50
+
51double* MeanGlobal;
+ +
53
+ + +
56double* RHat;
+ +
58
+
59double ***DrawsFolded;
+
60double* MedianArr;
+
61
+
62double** MeanFolded;
+ +
64
+ + +
67
+ + +
70double* RHatFolded;
+ +
72// *******************
+
73void PrepareChains();
+
74void InitialiseArrays();
+
75
+
76void RunDiagnostic();
+
77void CalcRhat();
+
78
+
79void SaveResults();
+
80void DestroyArrays();
+
81double CalcMedian(double arr[], int size);
+
82
+
83void CapVariable(double var, double cap);
+
84
+
85// *******************
+
+
86int main(int argc, char *argv[]) {
+
87// *******************
+
88
+ +
90
+
91 Draws = NULL;
+
92 Mean = NULL;
+ +
94
+ + +
97
+ + +
100 RHat = NULL;
+ +
102
+ +
104 MedianArr = NULL;
+ + +
107
+ + +
110
+ + + + +
115
+
116 VERBOSE = false;
+
117 Nchains = 0;
+
118
+
119 if (argc == 1 && argc == 2)
+
120 {
+
121 std::cerr << "Wrong arguments" << std::endl;
+
122 std::cerr << "./RHat Ntoys MCMCchain_1.root MCMCchain_2.root MCMCchain_3.root ... [how many you like]" << std::endl;
+
123 exit(-1);
+
124 }
+
125
+
126 Ntoys = atoi(argv[1]);
+
127
+
128 //KS Gelman suggests to diagnose on more than one chain
+
129 for (int i = 2; i < argc; i++)
+
130 {
+
131 MCMCFile.push_back(std::string(argv[i]));
+
132 std::cout<<"Adding file: "<<MCMCFile.back()<<std::endl;
+
133 Nchains++;
+
134 }
+
135
+
136 if(Ntoys < 1)
+
137 {
+
138 std::cerr << "You specified " << Ntoys << " specify larger greater than 0" << std::endl;
+
139 exit(-1);
+
140 }
+
141
+
142 if(Nchains == 1)
+
143 {
+
144 std::cout<<" Gelman is going to be sad :(. He suggested you should use more than one chain (at least 4). Code works fine for one chain, however, estimator might be biased."<<std::endl;
+
145 std::cout<<" Multiple chains are more likely to reveal multimodality and poor adaptation or mixing:"<<std::endl;
+
146 }
+
147 std::cout<<"Diagnosing "<<Nchains<<" chians, with "<<Ntoys<<" toys"<<std::endl;
+
148
+ +
150
+ +
152
+
153 //KS: Main function
+ +
155
+
156 SaveResults();
+
157
+ +
159
+
160 return 0;
+
161}
+
+
162
+
163// *******************
+
164// Load chain and prepare toys
+
+ +
166// *******************
+
167
+
168 TRandom3 *rnd = new TRandom3(0);
+
169
+
170 std::cout << "Generating " << Ntoys << std::endl;
+
171 TStopwatch clock;
+
172 clock.Start();
+
173
+
174 int *BurnIn = new int[Nchains]();
+
175 int *nEntries = new int[Nchains]();
+
176 int *nBranches = new int[Nchains]();
+
177
+
178 std::vector<int> step(Nchains);
+
179
+
180 Draws = new double**[Nchains]();
+
181 DrawsFolded = new double**[Nchains]();
+
182
+
183 // Open the Chain
+
184 //It is tempting to multithread here but unfortunately, ROOT files are not thread safe :(
+
185 for (int m = 0; m < Nchains; m++)
+
186 {
+
187 TChain* Chain = new TChain("posteriors");
+
188 Chain->Add(MCMCFile[m].c_str());
+
189
+
190 nEntries[m] = Chain->GetEntries();
+
191
+
192 // Set the step cut to be 20%
+
193 BurnIn[m] = nEntries[m]/5;
+
194
+
195 // Get the list of branches
+
196 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
197
+
198 // Get the number of branches
+
199 nBranches[m] = brlis->GetEntries();
+
200
+
201 if(m == 0) BranchNames.reserve(nBranches[m]);
+
202
+
203 // Set all the branches to off
+
204 Chain->SetBranchStatus("*", false);
+
205
+
206 // Loop over the number of branches
+
207 // Find the name and how many of each systematic we have
+
208 for (int i = 0; i < nBranches[m]; i++)
+
209 {
+
210 // Get the TBranch and its name
+
211 TBranch* br = (TBranch*)brlis->At(i);
+
212 TString bname = br->GetName();
+
213
+
214 // Read in the step
+
215 if (bname == "step") {
+
216 Chain->SetBranchStatus(bname, true);
+
217 Chain->SetBranchAddress(bname, &step[m]);
+
218 }
+
219 //Count all branches
+
220 else if (bname.BeginsWith("PCA_") || bname.BeginsWith("accProb") || bname.BeginsWith("stepTime") )
+
221 {
+
222 continue;
+
223 }
+
224 else
+
225 {
+
226 //KS: Save branch name only for one chain, we assume all chains have the same branches, otherwise this doesn't make sense either way
+
227 if(m == 0)
+
228 {
+
229 BranchNames.push_back(bname);
+
230 //KS: We calculate R Hat also for LogL, just in case, however we plot them separately
+
231 if(bname.BeginsWith("LogL"))
+
232 {
+
233 ValidPar.push_back(false);
+
234 }
+
235 else
+
236 {
+
237 ValidPar.push_back(true);
+
238 }
+
239 }
+
240 Chain->SetBranchStatus(bname, true);
+
241 if (VERBOSE) std::cout<<bname<<std::endl;
+
242 }
+
243 }
+
244
+
245 if(m == 0) nDraw = BranchNames.size();
+
246
+
247 //TN: Qualitatively faster sanity check, with the very same outcome (all chains have the same #branches)
+
248 if(m > 0)
+
249 {
+
250 if(nBranches[m] != nBranches[0])
+
251 {
+
252 std::cerr<<"Ups, something went wrong, chain "<<m<<" called "<< MCMCFile[m] <<" has "<<nBranches[m]<<" branches, while 0 called "<<MCMCFile[0]<<" has "<<nBranches[0]<<" branches"<<std::endl;
+
253 std::cerr<<"All chains should have the same number of branches"<<std::endl;
+
254 throw;
+
255 }
+
256 }
+
257
+
258
+
259 //TN: move the Draws here, so we need to iterate over every chain only once
+
260 Draws[m] = new double*[Ntoys]();
+
261 DrawsFolded[m] = new double*[Ntoys]();
+
262 for(int i = 0; i < Ntoys; i++)
+
263 {
+
264 Draws[m][i] = new double[nDraw]();
+
265 DrawsFolded[m][i] = new double[nDraw]();
+
266 for(int j = 0; j < nDraw; j++)
+
267 {
+
268 Draws[m][i][j] = 0.;
+
269 DrawsFolded[m][i][j] = 0.;
+
270 }
+
271 }
+
272
+
273 //TN: move looping over toys here, so we don't need to loop over chains more than once
+
274 if(BurnIn[m] >= nEntries[m])
+
275 {
+
276 std::cerr<<"You are running on a chain shorter than BurnIn cut"<<std::endl;
+
277 std::cerr<<"Number of entries "<<nEntries[m]<<" BurnIn cut "<<BurnIn<<std::endl;
+
278 std::cerr<<"You will run into the infinite loop"<<std::endl;
+
279 std::cerr<<"You can make a new chain or modify BurnIn cut"<<std::endl;
+
280 std::cerr<<"Find me here: "<<__FILE__ << ":" << __LINE__ << std::endl;
+
281 throw;
+
282 }
+
283
+
284 for (int i = 0; i < Ntoys; i++)
+
285 {
+
286 // Get a random entry after burn in
+
287 int entry = (int)(nEntries[m]*rnd->Rndm());
+
288
+
289 Chain->GetEntry(entry);
+
290
+
291 // If we have combined chains by hadd need to check the step in the chain
+
292 // Note, entry is not necessarily the same as the step due to merged ROOT files, so can't choose an entry in the range BurnIn - nEntries :(
+
293 if (step[m] < BurnIn[m])
+
294 {
+
295 i--;
+
296 continue;
+
297 }
+
298
+
299 // Output some info for the user
+
300 if (Ntoys > 10 && i % (Ntoys/10) == 0) {
+
301 std::cout << "On toy " << i << "/" << Ntoys << " (" << int(double(i)/double(Ntoys)*100.0) << "%)" << std::endl;
+
302 std::cout << " Getting random entry " << entry << std::endl;
+
303 }
+
304
+
305 // Set the branch addresses for params
+
306 for (int j = 0; j < nDraw; ++j)
+
307 {
+
308 Chain->SetBranchAddress(BranchNames[j].Data(), &Draws[m][i][j]);
+
309 }
+
310 Chain->GetEntry(entry);
+
311
+
312 }//end loop over toys
+
313
+
314 //TN: There, we now don't need to keep the chain in memory anymore
+
315 delete Chain;
+
316 }
+
317
+
318 //KS: Now prepare folded draws, quoting Gelman
+
319 //"We propose to report the maximum of rank normalized split-Rb and rank normalized folded-split-Rb for each parameter"
+
320 MedianArr = new double[nDraw]();
+
321 #ifdef MULTITHREAD
+
322 #pragma omp parallel for
+
323 #endif
+
324 for(int j = 0; j < nDraw; j++)
+
325 {
+
326 MedianArr[j] = 0.;
+
327 double* TempDraws = new double[Ntoys*Nchains]();
+
328 for(int m = 0; m < Nchains; m++)
+
329 {
+
330 for(int i = 0; i < Ntoys; i++)
+
331 {
+
332 const int im = i+m;
+
333 TempDraws[im] = Draws[m][i][j];
+
334 }
+
335 }
+ +
337 delete[] TempDraws;
+
338 }
+
339
+
340 #ifdef MULTITHREAD
+
341 #pragma omp parallel for collapse(3)
+
342 #endif
+
343 for(int m = 0; m < Nchains; m++)
+
344 {
+
345 for(int i = 0; i < Ntoys; i++)
+
346 {
+
347 for(int j = 0; j < nDraw; j++)
+
348 {
+
349 DrawsFolded[m][i][j] = std::fabs(Draws[m][i][j] - MedianArr[j]);
+
350 }
+
351 }
+
352 }
+
353 delete rnd;
+
354
+
355 delete[] BurnIn;
+
356 delete[] nEntries;
+
357 delete[] nBranches;
+
358
+
359 clock.Stop();
+
360 std::cout << "Finsihed producing Toys, it took " << clock.RealTime() << "s to finish" << std::endl;
+
361}
+
+
362
+
363// *******************
+
364// Create all arrays we are going to use later
+
+ +
366// *******************
+
367
+
368 std::cout << "Initialising arrays " << std::endl;
+
369
+
370 Mean = new double*[Nchains]();
+
371 StandardDeviation = new double*[Nchains]();
+
372
+
373 MeanGlobal = new double[nDraw]();
+
374 StandardDeviationGlobal = new double[nDraw]();
+
375 BetweenChainVariance = new double[nDraw]();
+
376
+
377 MarginalPosteriorVariance = new double[nDraw]();
+
378 RHat = new double[nDraw]();
+
379 EffectiveSampleSize = new double[nDraw]();
+
380
+
381 MeanFolded = new double*[Nchains]();
+
382 StandardDeviationFolded = new double*[Nchains]();
+
383
+
384 MeanGlobalFolded = new double[nDraw]();
+
385 StandardDeviationGlobalFolded = new double[nDraw]();
+
386 BetweenChainVarianceFolded = new double[nDraw]();
+
387
+ +
389 RHatFolded = new double[nDraw]();
+
390 EffectiveSampleSizeFolded = new double[nDraw]();
+
391
+
392 for (int m = 0; m < Nchains; ++m)
+
393 {
+
394 Mean[m] = new double[nDraw]();
+
395 StandardDeviation[m] = new double[nDraw]();
+
396
+
397 MeanFolded[m] = new double[nDraw]();
+
398 StandardDeviationFolded[m] = new double[nDraw]();
+
399 for (int j = 0; j < nDraw; ++j)
+
400 {
+
401 Mean[m][j] = 0.;
+
402 StandardDeviation[m][j] = 0.;
+
403
+
404 MeanFolded[m][j] = 0.;
+ +
406 if(m == 0)
+
407 {
+
408 MeanGlobal[j] = 0.;
+ + + +
412 RHat[j] = 0.;
+ +
414
+
415 MeanGlobalFolded[j] = 0.;
+ + + +
419 RHatFolded[j] = 0.;
+ +
421 }
+
422 }
+
423 }
+
424}
+
+
425
+
426// *******************
+
+ +
428// *******************
+
429 CalcRhat();
+
430 //In case in future we expand this
+
431}
+
+
432
+
433// *******************
+
434//KS: Based on Gelman et. al. arXiv:1903.08008v5
+
435// Probably most of it could be moved cleverly to MCMC Processor, keep it separate for now
+
+
436void CalcRhat() {
+
437// *******************
+
438
+
439 TStopwatch clock;
+
440 clock.Start();
+
441
+
442//KS: Start parallel region
+
443// If we would like to do this for thousands of chains we might consider using GPU for this
+
444#ifdef MULTITHREAD
+
445#pragma omp parallel
+
446{
+
447#endif
+
448
+
449 #ifdef MULTITHREAD
+
450 #pragma omp for collapse(2)
+
451 #endif
+
452 //KS: loop over chains and draws are independent so might as well collapse for sweet cache hits
+
453 //Calculate the mean for each parameter within each considered chain
+
454 for (int m = 0; m < Nchains; ++m)
+
455 {
+
456 for (int j = 0; j < nDraw; ++j)
+
457 {
+
458 for(int i = 0; i < Ntoys; i++)
+
459 {
+
460 Mean[m][j] += Draws[m][i][j];
+
461 MeanFolded[m][j] += DrawsFolded[m][i][j];
+
462 }
+
463 Mean[m][j] = Mean[m][j]/Ntoys;
+ +
465 }
+
466 }
+
467
+
468 #ifdef MULTITHREAD
+
469 #pragma omp for
+
470 #endif
+
471 //Calculate the mean for each parameter global means we include information from several chains
+
472 for (int j = 0; j < nDraw; ++j)
+
473 {
+
474 for (int m = 0; m < Nchains; ++m)
+
475 {
+
476 MeanGlobal[j] += Mean[m][j];
+ +
478 }
+ + +
481 }
+
482
+
483
+
484 #ifdef MULTITHREAD
+
485 #pragma omp for collapse(2)
+
486 #endif
+
487 //Calculate the standard deviation for each parameter within each considered chain
+
488 for (int m = 0; m < Nchains; ++m)
+
489 {
+
490 for (int j = 0; j < nDraw; ++j)
+
491 {
+
492 for(int i = 0; i < Ntoys; i++)
+
493 {
+
494 StandardDeviation[m][j] += (Draws[m][i][j] - Mean[m][j])*(Draws[m][i][j] - Mean[m][j]);
+ +
496 }
+ + +
499 }
+
500 }
+
501
+
502 #ifdef MULTITHREAD
+
503 #pragma omp for
+
504 #endif
+
505 //Calculate the standard deviation for each parameter combining information from all chains
+
506 for (int j = 0; j < nDraw; ++j)
+
507 {
+
508 for (int m = 0; m < Nchains; ++m)
+
509 {
+ + +
512 }
+ + +
515 }
+
516
+
517 #ifdef MULTITHREAD
+
518 #pragma omp for
+
519 #endif
+
520 for (int j = 0; j < nDraw; ++j)
+
521 {
+
522 //KS: This term only makes sense if we have at least 2 chains
+
523 if(Nchains == 1)
+
524 {
+ + +
527 }
+
528 else
+
529 {
+
530 for (int m = 0; m < Nchains; ++m)
+
531 {
+
532 BetweenChainVariance[j] += ( Mean[m][j] - MeanGlobal[j])*( Mean[m][j] - MeanGlobal[j]);
+ +
534 }
+ + +
537 }
+
538 }
+
539
+
540 #ifdef MULTITHREAD
+
541 #pragma omp for
+
542 #endif
+
543 for (int j = 0; j < nDraw; ++j)
+
544 {
+ + +
547 }
+
548
+
549 #ifdef MULTITHREAD
+
550 #pragma omp for
+
551 #endif
+
552 //Finally calculate our estimator
+
553 for (int j = 0; j < nDraw; ++j)
+
554 {
+ + +
557
+
558 //KS: For flat params values can be crazy so cap at 0
+
559 CapVariable(RHat[j], 0);
+ +
561 }
+
562
+
563 #ifdef MULTITHREAD
+
564 #pragma omp for
+
565 #endif
+
566 //KS: Additionaly calculates effective step size which is an estimate of the sample size required to achieve the same level of precision if that sample was a simple random sample.
+
567 for (int j = 0; j < nDraw; ++j)
+
568 {
+ + +
571
+
572 //KS: For flat params values can be crazy so cap at 0
+ + +
575 }
+
576 #ifdef MULTITHREAD
+
577 } //End parallel region
+
578 #endif
+
579
+
580 clock.Stop();
+
581 std::cout << "Finsihed calcaulting RHat, it took " << clock.RealTime() << "s to finish" << std::endl;
+
582}
+
+
583
+
584
+
585// *******************
+
+ +
587// *******************
+
588 std::string NameTemp = "";
+
589 //KS: If we run over many many chains there is danger that name will be so absurdly long we run over systmat limit and job will be killed :(
+
590 if(Nchains < 5)
+
591 {
+
592 for (int i = 0; i < Nchains; i++)
+
593 {
+
594 std::string temp = MCMCFile[i];
+
595
+
596 while (temp.find(".root") != std::string::npos) {
+
597 temp = temp.substr(0, temp.find(".root"));
+
598 }
+
599
+
600 NameTemp = NameTemp + temp + "_";
+
601 }
+
602 }
+
603 else
+
604 {
+
605 NameTemp = std::to_string(Nchains) + "Chains" + "_";
+
606 }
+
607 NameTemp += "diag.root";
+
608
+
609 TFile* DiagFile = new TFile(NameTemp.c_str(), "recreate");
+
610
+
611 DiagFile->cd();
+
612
+
613 TH1D *StandardDeviationGlobalPlot = new TH1D("StandardDeviationGlobalPlot", "StandardDeviationGlobalPlot", 200, 0, 2);
+
614 TH1D *BetweenChainVariancePlot = new TH1D("BetweenChainVariancePlot", "BetweenChainVariancePlot", 200, 0, 2);
+
615 TH1D *MarginalPosteriorVariancePlot = new TH1D("MarginalPosteriorVariancePlot", "MarginalPosteriorVariancePlot", 200, 0, 2);
+
616 TH1D *RhatPlot = new TH1D("RhatPlot", "RhatPlot", 200, 0, 2);
+
617 TH1D *EffectiveSampleSizePlot = new TH1D("EffectiveSampleSizePlot", "EffectiveSampleSizePlot", 400, 0, 10000);
+
618
+
619 TH1D *StandardDeviationGlobalFoldedPlot = new TH1D("StandardDeviationGlobalFoldedPlot", "StandardDeviationGlobalFoldedPlot", 200, 0, 2);
+
620 TH1D *BetweenChainVarianceFoldedPlot = new TH1D("BetweenChainVarianceFoldedPlot", "BetweenChainVarianceFoldedPlot", 200, 0, 2);
+
621 TH1D *MarginalPosteriorVarianceFoldedPlot = new TH1D("MarginalPosteriorVarianceFoldedPlot", "MarginalPosteriorVarianceFoldedPlot", 200, 0, 2);
+
622 TH1D *RhatFoldedPlot = new TH1D("RhatFoldedPlot", "RhatFoldedPlot", 200, 0, 2);
+
623 TH1D *EffectiveSampleSizeFoldedPlot = new TH1D("EffectiveSampleSizeFoldedPlot", "EffectiveSampleSizeFoldedPlot", 400, 0, 10000);
+
624
+
625 TH1D *RhatLogPlot = new TH1D("RhatLogPlot", "RhatLogPlot", 200, 0, 2);
+
626 TH1D *RhatFoldedLogPlot = new TH1D("RhatFoldedLogPlot", "RhatFoldedLogPlot", 200, 0, 2);
+
627
+
628 int Criterium = 0;
+
629 int CiteriumFolded = 0;
+
630 for(int j = 0; j < nDraw; j++)
+
631 {
+
632 //KS: Fill only valid parameters
+
633 if(ValidPar[j])
+
634 {
+ + + +
638 RhatPlot->Fill(RHat[j]);
+ +
640 if(RHat[j] > 1.1) Criterium++;
+
641
+
642
+ + + + + +
648 if(RHatFolded[j] > 1.1) CiteriumFolded++;
+
649 }
+
650 else
+
651 {
+
652 RhatLogPlot->Fill(RHat[j]);
+ +
654 }
+
655 }
+
656 //KS: We set criterium of 1.1 based on Gelman et al. (2003) Bayesian Data Analysis
+
657 std::cout<<" Number of parameters which has R hat greater than 1.1 is "<<Criterium<<"("<<100*double(Criterium)/double(nDraw)<<"%) while for R hat folded "<<CiteriumFolded<<"("<<100*double(CiteriumFolded)/double(nDraw)<<"%)"<<std::endl;
+
658
+
659 for(int j = 0; j < nDraw; j++)
+
660 {
+
661 if( (RHat[j] > 1.1 || RHatFolded[j] > 1.1) && ValidPar[j])
+
662 {
+
663 std::cout<<"Parameter "<<BranchNames[j]<<" has R hat higher than 1.1"<<std::endl;
+
664 }
+
665 }
+ + + +
669 RhatPlot->Write();
+ +
671
+ + + +
675 RhatFoldedPlot->Write();
+ +
677
+
678 RhatLogPlot->Write();
+
679 RhatFoldedLogPlot->Write();
+
680
+
681 //KS: Now we make fancy canvases, consider some function to have less copy pasting
+
682 TCanvas *TempCanvas = new TCanvas("Canvas", "Canvas", 1024, 1024);
+
683 gStyle->SetOptStat(0);
+
684 TempCanvas->SetGridx();
+
685 TempCanvas->SetGridy();
+
686
+
687 // Random line to write useful information to TLegend
+
688 TLine *TempLine = new TLine(0 , 0, 0, 0);
+
689 TempLine->SetLineColor(kBlack);
+
690
+
691 RhatPlot->GetXaxis()->SetTitle("R hat");
+
692 RhatPlot->SetLineColor(kRed);
+
693 RhatPlot->SetFillColor(kRed);
+
694 RhatFoldedPlot->SetLineColor(kBlue);
+
695 RhatFoldedPlot->SetFillColor(kBlue);
+
696
+
697 TLegend *Legend = new TLegend(0.55, 0.6, 0.9, 0.9);
+
698 Legend->SetTextSize(0.04);
+
699 Legend->SetFillColor(0);
+
700 Legend->SetFillStyle(0);
+
701 Legend->SetLineWidth(0);
+
702 Legend->SetLineColor(0);
+
703
+
704 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
705 Legend->AddEntry(RhatPlot, "Rhat Gelman 2013", "l");
+
706 Legend->AddEntry(RhatFoldedPlot, "Rhat-Folded Gelman 2021", "l");
+
707
+
708 RhatPlot->Draw();
+
709 RhatFoldedPlot->Draw("same");
+
710 Legend->Draw("same");
+
711 TempCanvas->Write("Rhat");
+
712 delete Legend;
+
713 Legend = NULL;
+
714
+
715 //Now R hat for log L
+
716 RhatLogPlot->GetXaxis()->SetTitle("R hat for LogL");
+
717 RhatLogPlot->SetLineColor(kRed);
+
718 RhatLogPlot->SetFillColor(kRed);
+
719 RhatFoldedLogPlot->SetLineColor(kBlue);
+
720 RhatFoldedLogPlot->SetFillColor(kBlue);
+
721
+
722 Legend = new TLegend(0.55, 0.6, 0.9, 0.9);
+
723 Legend->SetTextSize(0.04);
+
724 Legend->SetFillColor(0);
+
725 Legend->SetFillStyle(0);
+
726 Legend->SetLineWidth(0);
+
727 Legend->SetLineColor(0);
+
728
+
729 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
730 Legend->AddEntry(RhatLogPlot, "Rhat Gelman 2013", "l");
+
731 Legend->AddEntry(RhatFoldedLogPlot, "Rhat-Folded Gelman 2021", "l");
+
732
+
733 RhatLogPlot->Draw();
+
734 RhatFoldedLogPlot->Draw("same");
+
735 Legend->Draw("same");
+
736 TempCanvas->Write("RhatLog");
+
737 delete Legend;
+
738 Legend = NULL;
+
739
+
740 //Now canvas for effective sample size
+
741 EffectiveSampleSizePlot->GetXaxis()->SetTitle("S_{eff, BDA2}");
+
742 EffectiveSampleSizePlot->SetLineColor(kRed);
+ +
744
+
745 Legend = new TLegend(0.45, 0.6, 0.9, 0.9);
+
746 Legend->SetTextSize(0.03);
+
747 Legend->SetFillColor(0);
+
748 Legend->SetFillStyle(0);
+
749 Legend->SetLineWidth(0);
+
750 Legend->SetLineColor(0);
+
751
+
752 const double Mean1 = EffectiveSampleSizePlot->GetMean();
+
753 const double RMS1 = EffectiveSampleSizePlot->GetRMS();
+
754 const double Mean2 = EffectiveSampleSizeFoldedPlot->GetMean();
+
755 const double RMS2 = EffectiveSampleSizeFoldedPlot->GetRMS();
+
756
+
757 Legend->AddEntry(TempLine, Form("Number of throws=%.0i, Number of chains=%.1i", Ntoys, Nchains), "");
+
758 Legend->AddEntry(EffectiveSampleSizePlot, Form("S_{eff, BDA2} #mu = %.2f, #sigma = %.2f",Mean1 ,RMS1), "l");
+
759 Legend->AddEntry(EffectiveSampleSizeFoldedPlot, Form("S_{eff, BDA2} Folded, #mu = %.2f, #sigma = %.2f",Mean2 ,RMS2), "l");
+
760
+ +
762 EffectiveSampleSizeFoldedPlot->Draw("same");
+
763 Legend->Draw("same");
+
764 TempCanvas->Write("EffectiveSampleSize");
+
765
+
766 //Fancy memory cleaning
+ + + +
770 delete RhatPlot;
+ +
772
+ + + +
776 delete RhatFoldedPlot;
+ +
778
+
779 delete Legend;
+
780 delete TempCanvas;
+
781 delete TempLine;
+
782
+
783 delete RhatLogPlot;
+
784 delete RhatFoldedLogPlot;
+
785
+
786 DiagFile->Close();
+
787 delete DiagFile;
+
788
+
789 std::cout<<"Finished and wrote results to "<<NameTemp<<std::endl;
+
790}
+
+
791
+
792// *******************
+
793//KS: Pseudo destructor
+
+ +
795// *******************
+
796
+
797 std::cout<<"Killing all arrays"<<std::endl;
+
798 delete[] MeanGlobal;
+ +
800 delete[] BetweenChainVariance;
+ +
802 delete[] RHat;
+
803 delete[] EffectiveSampleSize;
+
804
+
805 delete[] MeanGlobalFolded;
+ + + +
809 delete[] RHatFolded;
+ +
811
+
812 for(int m = 0; m < Nchains; m++)
+
813 {
+
814 for(int i = 0; i < Ntoys; i++)
+
815 {
+
816 delete[] Draws[m][i];
+
817 delete[] DrawsFolded[m][i];
+
818 }
+
819 delete[] Draws[m];
+
820 delete[] Mean[m];
+
821 delete[] StandardDeviation[m];
+
822
+
823 delete[] DrawsFolded[m];
+
824 delete[] MeanFolded[m];
+
825 delete[] StandardDeviationFolded[m];
+
826 }
+
827 delete[] Draws;
+
828 delete[] Mean;
+
829 delete[] StandardDeviation;
+
830
+
831 delete[] DrawsFolded;
+
832 delete[] MedianArr;
+
833 delete[] MeanFolded;
+ +
835}
+
+
836
+
837
+
838// *******************
+
839//calculate median
+
+
840double CalcMedian(double arr[], int size) {
+
841// *******************
+
842 std::sort(arr, arr+size);
+
843 if (size % 2 != 0)
+
844 return (double)arr[size/2];
+
845 return (double)(arr[(size-1)/2] + arr[size/2])/2.0;
+
846}
+
+
847
+
848
+
849// *******************
+
850//calculate median
+
+
851void CapVariable(double var, double cap) {
+
852// *******************
+
853
+
854 if(std::isnan(var) || !std::isfinite(var)) var = cap;
+
855}
+
+
int size
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
int main(int argc, char *argv[])
Definition RHat.cpp:86
+
void SaveResults()
Definition RHat.cpp:586
+
int Nchains
Definition RHat.cpp:36
+
double * StandardDeviationGlobalFolded
Definition RHat.cpp:66
+
void CapVariable(double var, double cap)
Definition RHat.cpp:851
+
double * EffectiveSampleSizeFolded
Definition RHat.cpp:71
+
double * BetweenChainVarianceFolded
Definition RHat.cpp:68
+
void InitialiseArrays()
Definition RHat.cpp:365
+
double * MeanGlobal
Definition RHat.cpp:51
+
double ** MeanFolded
Definition RHat.cpp:62
+
void RunDiagnostic()
Definition RHat.cpp:427
+
std::vector< bool > ValidPar
Definition RHat.cpp:44
+
double * BetweenChainVariance
Definition RHat.cpp:54
+
double * MeanGlobalFolded
Definition RHat.cpp:65
+
double ** StandardDeviation
Definition RHat.cpp:49
+
double * StandardDeviationGlobal
Definition RHat.cpp:52
+
double * MarginalPosteriorVariance
Definition RHat.cpp:55
+
double * RHatFolded
Definition RHat.cpp:70
+
double * MedianArr
Definition RHat.cpp:60
+
double *** DrawsFolded
Definition RHat.cpp:59
+
double ** StandardDeviationFolded
Definition RHat.cpp:63
+
std::vector< TString > BranchNames
Definition RHat.cpp:42
+
double *** Draws
Definition RHat.cpp:46
+
std::vector< std::string > MCMCFile
Definition RHat.cpp:43
+
double * RHat
Definition RHat.cpp:56
+
double ** Mean
Definition RHat.cpp:48
+
void DestroyArrays()
Definition RHat.cpp:794
+
void CalcRhat()
Definition RHat.cpp:436
+
double CalcMedian(double arr[], int size)
Definition RHat.cpp:840
+
int nDraw
Definition RHat.cpp:39
+
TChain * Chain
Definition RHat.cpp:38
+
double * EffectiveSampleSize
Definition RHat.cpp:57
+
void PrepareChains()
Definition RHat.cpp:165
+
double * MarginalPosteriorVarianceFolded
Definition RHat.cpp:69
+
bool VERBOSE
Definition RHat.cpp:41
+
int Ntoys
Definition RHat.cpp:35
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+ + + + diff --git a/ShiftFunctors_8h.html b/ShiftFunctors_8h.html new file mode 100644 index 00000000..93e82d83 --- /dev/null +++ b/ShiftFunctors_8h.html @@ -0,0 +1,102 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/ShiftFunctors.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ShiftFunctors.h File Reference
+
+
+
#include "samplePDFFDBase.h"
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  BaseFuncPar
 
class  SKEScale
 
class  EnergyScale
 
+
+ + + + diff --git a/ShiftFunctors_8h_source.html b/ShiftFunctors_8h_source.html new file mode 100644 index 00000000..5f8be5ad --- /dev/null +++ b/ShiftFunctors_8h_source.html @@ -0,0 +1,156 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/ShiftFunctors.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ShiftFunctors.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "samplePDFFDBase.h"
+
4
+
+ +
6 public:
+ + +
9 double ScaleUncertainty = 1.0;
+ +
11 double *Param_pos;
+
12 void setup();
+
13 std::vector<double> syst_pos;
+
14 //XsecNorms4 *XsecApplicationInfo;
+
15
+ +
17
+
18 virtual void Apply() =0;
+
19};
+
+
20
+
+
21class SKEScale : public BaseFuncPar{
+
22 protected:
+
23 //Have access to everything
+
24 //skmc_base *blah;
+
25
+
26 void Apply(){};
+
27};
+
+
28
+
+
29class EnergyScale : public BaseFuncPar{
+
30 public:
+ + +
33 void Apply(){};
+
34
+
35 protected:
+
36 int test;
+
37
+
38};
+
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
void SetUncertainty(double sigma)
+ +
void setup()
+
std::vector< double > syst_pos
+
virtual void Apply()=0
+
fdmc_base * blah
+
double ScaleUncertainty
+
double * Param_pos
+ + + + + + +
void Apply()
+ + +
+ + + + diff --git a/SplineMonolith_8cpp.html b/SplineMonolith_8cpp.html new file mode 100644 index 00000000..c02b2f35 --- /dev/null +++ b/SplineMonolith_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/splines/SplineMonolith.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SplineMonolith.cpp File Reference
+
+
+
#include "SplineMonolith.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/SplineMonolith_8cpp_source.html b/SplineMonolith_8cpp_source.html new file mode 100644 index 00000000..3b0c2500 --- /dev/null +++ b/SplineMonolith_8cpp_source.html @@ -0,0 +1,1990 @@ + + + + + + + +MaCh3: /github/workspace/splines/SplineMonolith.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SplineMonolith.cpp
+
+
+Go to the documentation of this file.
1#include "SplineMonolith.h"
+
2
+
3// All the functions that are declared extern here exist in splines/gpuSplineUtils.cu
+
4// They are the CUDA code which we use to do the GPU processing
+
5// For older style (Rich/Asher era) see git commit history previous to 27 Nov 2017
+
6
+
7#ifdef CUDA
+
8extern void InitGPU_SepMany(
+
9 float **gpu_coeff_x,
+
10 float **gpu_coeff_many,
+
11 float **gpu_weights,
+
12
+
13 short int** gpu_paramNo_arr,
+
14 unsigned int** gpu_nKnots_arr,
+ +
16 float **cpu_total_weights,
+
17 float **gpu_total_weights,
+
18 int n_events,
+
19 unsigned int** gpu_nParamPerEvent,
+
20#endif
+
21 unsigned int coeff_array_size,
+
22 unsigned int n_splines,
+
23 int Eve_size);
+
24
+
25extern void InitGPU_TF1(
+
26 float **gpu_coeff_many,
+
27 short int **gpu_paramNo_arr,
+
28 short int **gpu_nPoints_arr,
+
29 float **gpu_weights,
+
30
+ +
32 float **cpu_total_weights,
+
33 float **gpu_total_weights,
+
34 int n_events,
+
35 unsigned int** gpu_nParamPerEvent,
+
36#endif
+
37
+
38 unsigned int n_splines);
+
39
+
40extern void CopyToGPU_SepMany(
+
41 short int *gpu_paramNo_arr,
+
42 unsigned int *gpu_nKnots_arr,
+
43 float *gpu_x_array,
+
44 float *gpu_many_array,
+
45
+
46 std::vector<short int> cpu_paramNo_arr,
+
47 std::vector<unsigned int> cpu_nKnots_arr,
+
48 std::vector<float> cpu_x_array,
+
49 std::vector<float> cpu_coeff_many,
+ +
51 int n_events,
+
52 std::vector<unsigned int> cpu_nParamPerEvent,
+
53 unsigned int *gpu_nParamPerEvent,
+
54 #endif
+
55 int n_params,
+
56 unsigned int n_splines,
+
57 short int _max_knots,
+
58 unsigned int coeff_array_size);
+
59
+
60extern void CopyToGPU_TF1(
+
61 float *gpu_coeff_many,
+
62 short int *gpu_paramNo_arr,
+
63 short int *gpu_nPoints_arr,
+
64
+
65 std::vector<float> cpu_coeff_many,
+
66 std::vector<short int> cpu_paramNo_arr,
+
67 std::vector<short int> cpu_nPoints_arr,
+ +
69 int n_events,
+
70 std::vector<unsigned int> cpu_nParamPerEvent,
+
71 unsigned int *gpu_nParamPerEvent,
+
72#endif
+
73 int nParams,
+
74 unsigned int n_splines,
+
75 short int _max_knots);
+
76
+
77extern void RunGPU_SepMany(
+
78 const short int* gpu_paramNo_arr,
+
79 const unsigned int* gpu_nKnots_arr,
+
80
+
81 const float *gpu_coeff_many,
+
82
+
83 float* gpu_weights,
+ +
85 float* cpu_weights,
+
86#else
+
87 float* gpu_total_weights,
+
88 float* cpu_total_weights,
+
89#endif
+
90
+
91 float *vals,
+
92 short int *segment,
+
93 const unsigned int h_n_splines);
+
94
+
95extern void RunGPU_TF1(
+
96 const float *gpu_coeff_many,
+
97 const short int* gpu_paramNo_arr,
+
98 const short int* gpu_nPoints_arr,
+
99
+
100 float* gpu_weights,
+ +
102 float* cpu_weights,
+
103#else
+
104 float* gpu_total_weights,
+
105 float* cpu_total_weights,
+
106#endif
+
107
+
108 float *vals,
+
109 const unsigned int h_n_splines);
+
110
+
111
+
112extern void CleanupGPU_SepMany(
+
113 short int *gpu_paramNo_arr,
+
114 unsigned int *gpu_nKnots_arr,
+
115
+
116 float *gpu_x_array,
+
117 float *gpu_many_array,
+
118
+ +
120 float *gpu_total_weights,
+
121 unsigned int *gpu_nParamPerEvent,
+
122 float *cpu_total_weights,
+
123#endif
+
124 float *gpu_weights
+
125);
+
126
+
127extern void CleanupGPU_TF1(
+
128 float *gpu_coeffs,
+
129 short int *gpu_paramNo_arr,
+
130 short int *gpu_nPoints_arr,
+
131
+ +
133 float *gpu_total_weights,
+
134 float *cpu_total_weights,
+
135#endif
+
136float *gpu_weights
+
137);
+
138
+
139extern void InitGPU_Segments(short int **segment);
+
140extern void InitGPU_Vals(float **vals);
+
141extern void CleanupGPU_Segments(short int *segment, float *vals);
+
142#endif
+
143
+
144
+
145// *****************************************
+
146//Set everything to NULL or 0
+
+ +
148// *****************************************
+
149
+
150#ifdef CUDA
+
151 MACH3LOG_INFO("Using GPU version event by event monolith");
+
152#endif
+
153 //KS: If true it will save spline monolith into huge ROOT file
+
154 SaveSplineFile = false;
+
155
+
156 nKnots = 0;
+
157 NEvents = 0;
+
158 _max_knots = 0;
+
159 nParams = 0;
+
160 NSplines_total = 0;
+
161 NSplines_valid = 0;
+ +
163
+
164 index_cpu = NULL;
+ +
166 gpu_weights = nullptr;
+
167
+ +
169 gpu_total_weights = nullptr;
+
170 gpu_nParamPerEvent = nullptr;
+
171 gpu_nPoints_arr = nullptr;
+
172 gpu_paramNo_arr = nullptr;
+
173 gpu_nKnots_arr = nullptr;
+
174 gpu_coeff_x = nullptr;
+
175 gpu_coeff_many = nullptr;
+
176
+ +
178 segments = NULL;
+
179 vals = NULL;
+
180
+
181 return;
+
182}
+
+
183
+
184
+
185// *****************************************
+
186// Uses an x array and one combined yabd array
+
187// This should optimise cache hitting because we use the same yabd points once we've found the x point
+
188// So make these yabd points lay right next to each other in memory
+
+
189SMonolith::SMonolith(std::vector<std::vector<TSpline3*> > &MasterSpline) {
+
190 Initialise();
+
191 MACH3LOG_INFO("Using full TSpline3, about to reduce it and send to GPU");
+
192 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
193 std::vector<std::vector<TSpline3_red*> > ReducedSpline = ReduceTSpline3(MasterSpline);
+ +
195}
+
+
196
+
197// *****************************************
+
198// Constructor for the reduced TSpline3 object
+
+
199SMonolith::SMonolith(std::vector<std::vector<TSpline3_red*> > &MasterSpline) {
+
200// *****************************************
+
201 Initialise();
+
202 MACH3LOG_INFO("-- GPUING WITH {X} and {Y,B,C,D} arrays and master spline containing TSpline3_red");
+ +
204}
+
+
205
+
206// *****************************************
+
207// Uses a fifth order polynomial for most shape except 2p2h shape C/O which are two superimposed linear eq
+
208// Reduce first
+
+
209SMonolith::SMonolith(std::vector<std::vector<TF1*> > &MasterSpline) {
+
210// *****************************************
+
211 Initialise();
+
212 MACH3LOG_INFO("Using full TF1, about to reduce it and send to GPU");
+
213 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
214 std::vector<std::vector<TF1_red*> > ReducedSpline = ReduceTF1(MasterSpline);
+ +
216}
+
+
217
+
218// *****************************************
+
219// Uses a fifth order polynomial for most shape except 2p2h shape C/O which are two superimposed linear eq
+
220// Reduce first
+
+
221SMonolith::SMonolith(std::vector<std::vector<TF1_red*> > &MasterSpline) {
+
222// *****************************************
+
223 Initialise();
+
224 MACH3LOG_INFO("-- GPUING WITH TF1_red");
+
225 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+ +
227}
+
+
228
+
229
+
230// *****************************************
+
231// Load SplineFile
+
+
232SMonolith::SMonolith(std::string FileName) {
+
233// *****************************************
+
234 Initialise();
+
235 MACH3LOG_INFO("-- GPUING WITH {X} and {Y,B,C,D} arrays and master spline containing TSpline3_red");
+
236 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
237 LoadSplineFile(FileName);
+
238}
+
+
239
+
240// *****************************************
+
241// The shared initialiser from constructors of TSpline3 and TSpline3_red
+
+
242void SMonolith::PrepareForGPU(std::vector<std::vector<TSpline3_red*> > &MasterSpline) {
+
243// *****************************************
+
244
+
245 // Scan for the max number of knots, the number of events (number of splines), and number of parameters
+
246 int nSplines = 0;
+ +
248 MACH3LOG_INFO("Found {} events", NEvents);
+
249 MACH3LOG_INFO("Found {} knots at max", _max_knots);
+
250 MACH3LOG_INFO("Found {} parameters", nParams);
+
251 MACH3LOG_INFO("Found {} maximum number of splines in an event", nSplines);
+
252 MACH3LOG_INFO("Found total {} knots in all splines", nKnots);
+
253
+
254 // Can pass the spline segments to the GPU instead of the values
+
255 // Make these here and only refill them for each loop, avoiding unnecessary new/delete on each reconfigure
+
256 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
257#ifdef CUDA
+ + +
260#else
+
261 segments = new short int[nParams]();
+
262 vals = new float[nParams]();
+
263#endif
+
264
+
265 for (__int__ j = 0; j < nParams; j++)
+
266 {
+
267 segments[j] = 0;
+
268 vals[j] = -999;
+
269 }
+
270 // Total number of events in our Spline, read from TSpline3 entries
+
271 // Number of TSpline3 we have in total if each event had the maximal number of splines (nSplines written by ScanMasterSpline)
+ +
273 // Number of TSpline3 we have in total if each event has *EVERY* spline. Needed for some arrays
+ +
275
+
276 unsigned int event_size_max = _max_knots * nParams;
+
277 // Declare the {x}, {y,b,c,d} arrays for all possible splines which the event has
+
278 // We'll filter off the flat and "disabled" (e.g. CCQE event should not have MARES spline) ones in the next for loop, but need to declare these beasts here
+
279
+
280 // Declare the {y,b,c,d} for each knot
+
281 // float because GPU precision (could change to double, but will incur significant speed reduction on GPU unless you're very rich!)
+
282 cpu_coeff_many.resize(nKnots*_nCoeff_); // *4 because we store y,b,c,d parameters in this array
+
283 //KS: For x coeff we assume that for given dial (MAQE) spacing is identical, here we are sloppy and assume each dial has the same number of knots, not a big problem
+ +
285
+
286 // Set all the big arrays to -999 to keep us safe...
+
287#ifdef MULTITHREAD
+
288#pragma omp parallel for
+
289#endif
+
290 for (unsigned int j = 0; j < nKnots; j++) {
+
291 for (int k = 0; k < _nCoeff_; k++) {
+
292 cpu_coeff_many[j*_nCoeff_+k] = -999;
+
293 }
+
294 }
+
295
+
296 for (unsigned int j = 0; j < event_size_max; j++) {
+
297 cpu_coeff_x[j] = -999;
+
298 }
+
299 // Will hold what spline number a certain spline has
+
300 short int *paramNo_big = new short int[NSplines_total];
+
301 // Will hold map where given spline starts
+
302 unsigned int *knotNo_big = new unsigned int[NSplines_total];
+
303
+
304 // This holds the index of each spline
+ +
306 // This holds the total CPU weights that gets read in samplePDFND
+
307#ifdef Weight_On_SplineBySpline_Basis
+ +
309#else
+
310 //KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}
+ +
312 int ParamCounter = 0;
+
313 int ParamCounterGlobal = 0;
+
314 #ifdef MULTITHREAD
+
315 #pragma omp parallel for
+
316 #endif
+
317 for (unsigned int j = 0; j < 2*NSplines_total; j++) {
+
318 cpu_nParamPerEvent[j] = -1;
+
319 }
+
320#endif
+
321 // Set index array and number of points arrays to something silly, again to be safe...
+
322#ifdef MULTITHREAD
+
323#pragma omp parallel
+
324{
+
325//KS: Gain from nowait is minimal mostly done as I am learning how to better utilise OMP
+
326 #pragma omp for nowait
+
327#endif
+
328 for (unsigned int j = 0; j < NSplines_total_large; j++) {
+
329 index_cpu[j] = -1;
+
330 }
+
331
+
332 #ifdef MULTITHREAD
+
333 #pragma omp for
+
334 #endif
+
335 for (unsigned int j = 0; j < NSplines_total; j++) {
+
336 paramNo_big[j] = -1;
+
337 knotNo_big[j] = -1;
+
338 }
+
339#ifdef MULTITHREAD
+
340} //end parallel region
+
341#endif
+
342 // Temporary arrays to hold the coefficients for each spline
+
343 // We get one x, one y, one b,... for each point, so only need to be _max_knots big
+
344 //KS: Some params has less splines but this is all right main array will get proper number while this temp will be deleted
+
345 float *x_tmp = new float[_max_knots]();
+
346 float *many_tmp = new float[_max_knots*_nCoeff_]();
+
347 // Number of valid splines in total for our entire ensemble of events
+
348 NSplines_valid = 0;
+
349
+
350 std::vector<std::vector<TSpline3_red*> >::iterator OuterIt;
+
351 std::vector<TSpline3_red*>::iterator InnerIt;
+
352 // Count the number of events
+
353 unsigned int EventCounter = 0;
+
354 unsigned int KnotCounter = 0;
+
355 // Loop over events and extract the spline coefficients
+
356 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++EventCounter) {
+
357 // Structure of MasterSpline is std::vector<std::vector<TSpline3*>>
+
358 // A conventional iterator to count which parameter a given spline should be applied to
+
359 int ParamNumber = 0;
+
360 for (InnerIt = (*OuterIt).begin(); InnerIt != (*OuterIt).end(); ++InnerIt, ++ParamNumber) {
+
361 //KS: how much knots each spline has
+
362 int nPoints_tmp = 0;
+
363 // Get a pointer to the current spline for this event
+
364 TSpline3_red* CurrSpline = (*InnerIt);
+
365 // If NULL we don't have this spline for the event, so move to next spline
+
366 if (CurrSpline == NULL) continue;
+
367
+
368 // If the number of knots are greater than 2 the spline is not a dummy and we should extract coefficients to load onto the GPU
+ +
370
+
371 //KS: One knot means flat spline so ignore
+
372 if (nPoints_tmp == 1) continue;
+
373
+
374 (*InnerIt) = CurrSpline;
+
375 for (int j = 0; j < _max_knots; ++j) {
+ +
377 }
+
378 //KS: Contrary to X coeff we keep for other coeff only filled knots, there is no much gain for doing so for x coeff
+
379 for (int j = 0; j < nPoints_tmp; ++j) {
+
380 for (int k = 0; k < _nCoeff_; k++) {
+ +
382 }
+
383 }
+
384
+
385 // Set the parameter number for this spline
+ +
387 //KS: Fill map when each spline starts
+ +
389
+ +
391 // Set the index of the spline so we can tell apart from flat splines
+ +
393 #ifndef Weight_On_SplineBySpline_Basis
+
394 ParamCounter++;
+
395 #endif
+
396 // Increment the counter for the number of good splines we have
+ +
398 } // End the loop over the parameters in the MasterSpline
+
399 #ifndef Weight_On_SplineBySpline_Basis
+ + + +
403 ParamCounter = 0;
+
404 #endif
+
405 } // End the loop over the number of events
+
406 delete[] many_tmp;
+
407 delete[] x_tmp;
+
408
+
409 // Now that we have looped through all events we can make the number of splines smaller
+
410 // Going from number of events * number of points per spline * number of NIWG params to spln_counter (=valid splines)
+
411
+
412 MACH3LOG_INFO("Number of splines = {}", NSplines_valid);
+
413
+
414 // Make array with the number of points per spline (not per spline point!)
+ +
416 //KS: And array which tells where each spline stars in a big monolith array, sort of knot map
+ +
418
+
419#ifdef MULTITHREAD
+
420#pragma omp parallel for
+
421#endif
+
422 for (unsigned int i = 0; i < NSplines_valid; i++) {
+ + +
425 // Perform checks that all array entries have been changed from negative numbers and no number of points is greater than max knots, inputted by user
+
426 // Don't do this for the index array since some entries there should be -1 so we know what splines to include and not include in each event for loading onto the GPU
+
427 if (cpu_paramNo_arr[i] < 0) {
+
428 std::cerr << "***** NEGATIVE PARAMETER NUMBER!!! ***** \n" << "On spline " << i << " " << cpu_paramNo_arr[i] << std::endl;
+
429 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
430 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
431 throw;
+
432 }
+
433 }
+
434 delete[] paramNo_big;
+
435 delete[] knotNo_big;
+
436
+
437 int BadXCounter = 0;
+
438 for (unsigned int j = 0; j < event_size_max; j++) {
+
439 if (cpu_coeff_x[j] == -999) BadXCounter++;
+
440 // Perform checks that all entries have been modified from initial values
+
441 if (cpu_coeff_x[j] == -999 && BadXCounter < 5) {
+
442 MACH3LOG_WARN("***** BAD X !! *****");
+
443 MACH3LOG_WARN("Indicates some parameter doesn't have a single spline");
+
444 MACH3LOG_WARN("j = {}");
+
445 //throw;
+
446 }
+
447 if(BadXCounter == 5) MACH3LOG_WARN("There is more unutilised knots although I will stop spamming");
+
448 }
+
449 MACH3LOG_WARN("Found in total {} BAD X", BadXCounter);
+
450#ifdef Weight_On_SplineBySpline_Basis
+
451 // Make the array that holds all the returned weights from the GPU to pass to the CPU
+
452 cpu_weights_var = new float[NSplines_valid]();
+
453#else
+
454 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
455 #ifndef CUDA
+
456 cpu_total_weights = new float[NEvents]();
+
457 cpu_weights_var = new float[NSplines_valid]();
+
458 #endif
+
459#endif
+
460 // Print some info; could probably make this to a separate function
+
461 MACH3LOG_INFO("--- INITIALISED (X), (YBCD) ARRAYS ---");
+
462 MACH3LOG_INFO("{} events with {} splines", NEvents, NSplines_valid);
+
463 MACH3LOG_INFO("On average {:.2f} splines per event ({}/{})", float(NSplines_valid)/float(NEvents), NSplines_valid, NEvents);
+
464 MACH3LOG_INFO("Size of x array = {:.4f} MB", double(sizeof(float)*event_size_max)/1.E6);
+
465 MACH3LOG_INFO("Size of coefficient (y,b,c,d) array = {:.2f} MB", double(sizeof(float)*nKnots*_nCoeff_)/1.E6);
+
466 MACH3LOG_INFO("Size of parameter # array = {:.2f} MB", double(sizeof(short int)*NSplines_valid)/1.E6);
+
467
+ +
469
+ +
471}
+
+
472
+
473// *****************************************
+
474// Load SplineMonolith from ROOT file
+
+
475void SMonolith::LoadSplineFile(std::string FileName) {
+
476// *****************************************
+
477
+
478 #ifdef Weight_On_SplineBySpline_Basis
+
479 MACH3LOG_ERROR("Trying to load Monolith from file using weight by weight base, this is not supported right now, sorry");
+
480 throw;
+
481 #endif
+
482
+
483 if (std::getenv("MACH3") != NULL) {
+
484 FileName.insert(0, std::string(std::getenv("MACH3"))+"/");
+
485 }
+
486
+
487 TFile *SplineFile = new TFile(FileName.c_str(), "OPEN");
+
488 TTree *Settings = (TTree*)SplineFile->Get("Settings");
+
489 TTree *Monolith = (TTree*)SplineFile->Get("Monolith");
+
490 TTree *ParamInfo = (TTree*)SplineFile->Get("ParamInfo");
+
491 TTree *XKnots = (TTree*)SplineFile->Get("XKnots");
+
492 TTree *EventInfo = (TTree*)SplineFile->Get("EventInfo");
+
493 TTree *FastSplineInfoTree = (TTree*)SplineFile->Get("FastSplineInfoTree");
+
494
+
495 unsigned int NEvents_temp;
+
496 short int nParams_temp;
+
497 int _max_knots_temp;
+
498 unsigned int nKnots_temp;
+
499 unsigned int NSplines_valid_temp;
+
500
+
501 Settings->SetBranchAddress("NEvents", &NEvents_temp);
+
502 Settings->SetBranchAddress("nParams", &nParams_temp);
+
503 Settings->SetBranchAddress("_max_knots", &_max_knots_temp);
+
504 Settings->SetBranchAddress("nKnots", &nKnots_temp);
+
505 Settings->SetBranchAddress("NSplines_valid", &NSplines_valid_temp);
+
506
+
507 Settings->GetEntry(0);
+
508
+ + + + + +
514
+
515 unsigned int event_size_max = _max_knots * nParams;
+ +
517
+
518 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
519#ifdef CUDA
+ + +
522#else
+
523 segments = new short int[nParams]();
+
524 vals = new float[nParams]();
+
525#endif
+
526
+ + +
529 //KS: And array which tells where each spline stars in a big monolith array, sort of knot map
+ +
531
+
532 cpu_coeff_many.resize(nKnots*_nCoeff_); // *4 because we store y,b,c,d parameters in this array
+ +
534
+
535 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
536#ifndef CUDA
+
537 cpu_total_weights = new float[NEvents]();
+
538 cpu_weights_var = new float[NSplines_valid]();
+
539#endif
+
540
+
541 float coeff = 0.;
+
542 Monolith->SetBranchAddress("cpu_coeff_many", &coeff);
+
543 for(unsigned int i = 0; i < nKnots*_nCoeff_; i++)
+
544 {
+
545 Monolith->GetEntry(i);
+ +
547 }
+
548
+
549 short int paramNo_arr = 0;
+
550 unsigned int nKnots_arr = 0;
+
551 ParamInfo->SetBranchAddress("cpu_paramNo_arr", &paramNo_arr);
+
552 ParamInfo->SetBranchAddress("cpu_nKnots_arr", &nKnots_arr);
+
553 for(unsigned int i = 0; i < NSplines_valid; i++)
+
554 {
+
555 ParamInfo->GetEntry(i);
+ + +
558 }
+
559
+
560 float coeff_x = 0.;
+
561 XKnots->SetBranchAddress("cpu_coeff_x", &coeff_x);
+
562 for(unsigned int i = 0; i < event_size_max; i++)
+
563 {
+
564 XKnots->GetEntry(i);
+ +
566 }
+
567
+
568 unsigned int nParamPerEvent = 0;
+
569 EventInfo->SetBranchAddress("cpu_nParamPerEvent", &nParamPerEvent);
+
570 for(unsigned int i = 0; i < 2*NSplines_total; i++)
+
571 {
+
572 EventInfo->GetEntry(i);
+ +
574 }
+
575
+
576 __int__ nPoints = 0;
+
577 float xtemp[20];
+
578 FastSplineInfoTree->SetBranchAddress("nPts", &nPoints);
+
579 FastSplineInfoTree->SetBranchAddress("xPts", &xtemp);
+
580
+ +
582 for (__int__ i = 0; i < nParams; ++i) {
+
583 FastSplineInfoTree->GetEntry(i);
+
584 SplineInfoArray[i].nPts = -999;
+ + + +
588
+
589 // Fill the number of points
+
590 SplineInfoArray[i].nPts = nPoints;
+
591 if(nPoints == -999) continue;
+ +
593 for (__int__ k = 0; k < SplineInfoArray[i].nPts; ++k)
+
594 {
+ +
596 }
+
597 }
+
598
+
599 SplineFile->Close();
+
600 delete SplineFile;
+
601
+
602 // Print some info; could probably make this to a separate function
+
603 MACH3LOG_INFO("--- INITIALISED (X), (YBCD) ARRAYS ---");
+
604 MACH3LOG_INFO("{} events with {} splines", NEvents, NSplines_valid);
+
605 MACH3LOG_INFO("On average {:.2f} splines per event ({}/{})", float(NSplines_valid)/float(NEvents), NSplines_valid, NEvents);
+
606 MACH3LOG_INFO("Size of x array = {:.4f} MB", double(sizeof(float)*event_size_max)/1.E6);
+
607 MACH3LOG_INFO("Size of coefficient (y,b,c,d) array = {:.2f} MB", double(sizeof(float)*nKnots*_nCoeff_)/1.E6);
+
608 MACH3LOG_INFO("Size of parameter # array = {:.2f} MB", double(sizeof(short int)*NSplines_valid)/1.E6);
+
609
+ +
611}
+
+
612
+
613// *****************************************
+
614// Save SplineMonolith into ROOT file
+
+ +
616// *****************************************
+
617
+
618 std::string FileName = "inputs/SplineFile.root";
+
619 if (std::getenv("MACH3") != NULL) {
+
620 FileName.insert(0, std::string(std::getenv("MACH3"))+"/");
+
621 }
+
622
+
623 TFile *SplineFile = new TFile(FileName.c_str(), "recreate");
+
624 TTree *Settings = new TTree("Settings", "Settings");
+
625 TTree *Monolith = new TTree("Monolith", "Monolith");
+
626 TTree *ParamInfo = new TTree("ParamInfo", "ParamInfo");
+
627 TTree *XKnots = new TTree("XKnots", "XKnots");
+
628 TTree *EventInfo = new TTree("EventInfo", "EventInfo");
+
629 TTree *FastSplineInfoTree = new TTree("FastSplineInfoTree", "FastSplineInfoTree");
+
630
+
631 unsigned int NEvents_temp = NEvents;
+
632 short int nParams_temp = nParams;
+ +
634 unsigned int nKnots_temp = nKnots;
+
635 unsigned int NSplines_valid_temp = NSplines_valid;
+
636
+
637 Settings->Branch("NEvents", &NEvents_temp, "NEvents/i");
+
638 Settings->Branch("nParams", &nParams_temp, "nParams/S");
+
639 Settings->Branch("_max_knots", &_max_knots_temp, "_max_knots/I");
+
640 Settings->Branch("nKnots", &nKnots_temp, "nKnots/i");
+
641 Settings->Branch("NSplines_valid", &NSplines_valid_temp, "NSplines_valid/i");
+
642
+
643 Settings->Fill();
+
644
+
645 SplineFile->cd();
+
646 Settings->Write();
+
647
+
648 float coeff = 0.;
+
649 Monolith->Branch("cpu_coeff_many", &coeff, "cpu_coeff_many/F");
+
650 for(unsigned int i = 0; i < nKnots*_nCoeff_; i++)
+
651 {
+ +
653 Monolith->Fill();
+
654 }
+
655 SplineFile->cd();
+
656 Monolith->Write();
+
657
+
658 short int paramNo_arr = 0;
+
659 unsigned int nKnots_arr = 0;
+
660 ParamInfo->Branch("cpu_paramNo_arr", &paramNo_arr, "cpu_paramNo_arr/S");
+
661 ParamInfo->Branch("cpu_nKnots_arr", &nKnots_arr, "cpu_nKnots_arr/i");
+
662 for(unsigned int i = 0; i < NSplines_valid; i++)
+
663 {
+ + +
666
+
667 ParamInfo->Fill();
+
668 }
+
669 SplineFile->cd();
+
670 ParamInfo->Write();
+
671
+
672 unsigned int event_size_max = _max_knots * nParams;
+
673
+
674 float coeff_x = 0.;
+
675 XKnots->Branch("cpu_coeff_x", &coeff_x, "cpu_coeff_x/F");
+
676 for(unsigned int i = 0; i < event_size_max; i++)
+
677 {
+ +
679 XKnots->Fill();
+
680 }
+
681 SplineFile->cd();
+
682 XKnots->Write();
+
683
+
684 unsigned int nParamPerEvent = 0;
+
685 EventInfo->Branch("cpu_nParamPerEvent", &nParamPerEvent, "cpu_nParamPerEvent/i");
+
686 for(unsigned int i = 0; i < 2*NSplines_total; i++)
+
687 {
+ +
689
+
690 EventInfo->Fill();
+
691 }
+
692 SplineFile->cd();
+
693 EventInfo->Write();
+
694
+
695 __int__ nPoints = 0;
+
696 float xtemp[20];
+
697 FastSplineInfoTree->Branch("nPts", &nPoints, "nPts/I");
+
698 FastSplineInfoTree->Branch("xPts", xtemp, "xPts[nPts]/F");
+
699
+
700 for (__int__ i = 0; i < nParams; ++i)
+
701 {
+
702 nPoints = SplineInfoArray[i].nPts;
+
703
+
704 for (__int__ k = 0; k < SplineInfoArray[i].nPts; ++k)
+
705 {
+ +
707 }
+
708 FastSplineInfoTree->Fill();
+
709 }
+
710
+
711 SplineFile->cd();
+
712 FastSplineInfoTree->Write();
+
713
+
714 delete Settings;
+
715 delete Monolith;
+
716 delete ParamInfo;
+
717 delete XKnots;
+
718 delete EventInfo;
+
719 delete FastSplineInfoTree;
+
720 SplineFile->Close();
+
721 delete SplineFile;
+
722
+
723}
+
+
724
+
725// *****************************************
+
726// The shared initialiser from constructors of TSpline3 and TSpline3_red
+
+ +
728// *****************************************
+
729 #ifdef CUDA
+
730 unsigned int event_size_max = _max_knots * nParams;
+
731 MACH3LOG_INFO("Total size = {:.2f} MB memory on CPU to move to GPU",
+
732 (double(sizeof(float) * nKnots * _nCoeff_) + double(sizeof(float) * event_size_max) / 1.E6 +
+
733 double(sizeof(short int) * NSplines_valid)) / 1.E6);
+
734 MACH3LOG_INFO("GPU weight array (GPU->CPU every step) = {:.2f} MB", double(sizeof(float) * NSplines_valid) / 1.E6);
+
735 #ifndef Weight_On_SplineBySpline_Basis
+
736 MACH3LOG_INFO("Since you are running Total event weight mode then GPU weight array (GPU->CPU every step) = {:.2f} MB",
+
737 double(sizeof(float) * NEvents) / 1.E6);
+
738 #endif
+
739 MACH3LOG_INFO("Parameter value array (CPU->GPU every step) = {:.4f} MB", double(sizeof(float) * nParams) / 1.E6);
+
740
+
741
+
742 //CW: With the new set-up we have: 1 coefficient array of size coeff_array_size, all same size
+
743 // 1 coefficient array of size coeff_array_size*4, holding y,b,c,d in order (y11,b11,c11,d11; y12,b12,c12,d12;...) where ynm is n = spline number, m = spline point. Should really make array so that order is (y11,b11,c11,d11; y21,b21,c21,d21;...) because it will optimise cache hits I think; try this if you have time
+
744 // return gpu_weights
+
745
+
746 // The gpu_XY arrays don't actually need initialising, since they are only placeholders for what we'll move onto the GPU. As long as we cudaMalloc the size of the arrays correctly there shouldn't be any problems
+
747 // Can probably make this a bit prettier but will do for now
+
748 // Could be a lot smaller of a function...
+ + + + +
753
+ + + + + +
759 NEvents,
+
760
+ +
762#endif
+
763 nKnots, // How many entries in coefficient array (*4 for the "many" array)
+
764 NSplines_valid, // What's the number of splines we have (also number of entries in gpu_nPoints_arr)
+
765 event_size_max //Knots times event number of unique splines
+
766);
+
767
+
768 // Move number of splines and spline size to constant GPU memory; every thread does not need a copy...
+
769 // The implementation lives in splines/gpuSplineUtils.cu
+
770 // The GPU splines don't actually need declaring but is good for demonstration, kind of
+
771 // fixed by passing const reference
+ + + + + +
777
+ + + + + +
783 NEvents,
+ + +
786#endif
+
787 nParams,
+ + +
790 nKnots);
+
791
+
792 // Delete all the coefficient arrays from the CPU once they are on the GPU
+
793 cpu_coeff_x.clear();
+
794 cpu_coeff_x.shrink_to_fit();
+
795 cpu_coeff_many.clear();
+
796 cpu_coeff_many.shrink_to_fit();
+
797 cpu_paramNo_arr.clear();
+
798 cpu_paramNo_arr.shrink_to_fit();
+
799 cpu_nKnots_arr.clear();
+
800 cpu_nKnots_arr.shrink_to_fit();
+
801 #ifndef Weight_On_SplineBySpline_Basis
+
802 cpu_nParamPerEvent.clear();
+
803 cpu_nParamPerEvent.shrink_to_fit();
+
804 #endif
+
805 MACH3LOG_INFO("Good GPU loading");
+
806#endif
+
807 return;
+
808}
+
+
809
+
810// *****************************************
+
811// The shared initialiser from constructors of TF1 and TF1_red
+
+
812void SMonolith::PrepareForGPU(std::vector<std::vector<TF1_red*> > &MasterSpline) {
+
813// *****************************************
+
814
+
815 // Scan for the max number of knots, the number of events (number of splines), and number of parameters
+ +
817 MACH3LOG_INFO("Found {} events", NEvents);
+
818 MACH3LOG_INFO("Found {} polynomial at max", _max_knots);
+
819 MACH3LOG_INFO("Found {} parameters", nParams);
+
820
+
821 // Can pass the spline segments to the GPU instead of the values
+
822 // Make these here and only refill them for each loop, avoiding unnecessary new/delete on each reconfigure
+
823 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
824#ifdef CUDA
+ +
826#else
+
827 vals = new float[nParams]();
+
828#endif
+
829 for (__int__ j = 0; j < nParams; j++)
+
830 {
+
831 vals[j] = -999;
+
832 }
+
833
+
834 // Every event maximally has nParams TF1s which we've saved
+ +
836
+
837 //CW: With TF1 we only save the coefficients and the order of the polynomial
+
838 // Makes most sense to have one large monolithic array, but then it becomes impossible to tell apart a coefficient from a "number of points". So have two arrays: one of coefficients and one of number of points
+
839 // Let's first assume all are of _max_knots size
+
840 short int *nPoints_big = new short int[NSplines_total];
+
841 float *coeffs_big = new float[NSplines_total*_nTF1Coeff_]; // *5 because we store a,b,c,d,e coefficients of fifth order polynomial in this array
+
842
+
843 // Set all the big arrays to -999 to keep us safe...
+
844#ifdef MULTITHREAD
+
845#pragma omp parallel for
+
846#endif
+
847 for (unsigned int j = 0; j < NSplines_total; j++) {
+
848 // 1 number of points for each spline
+
849 nPoints_big[j] = -999;
+
850 // 5 coefficients for each spline
+
851 for (int k = 0; k < _nTF1Coeff_; k++) {
+
852 coeffs_big[j*_nTF1Coeff_+k] = -999;
+
853 }
+
854 }
+
855
+
856 // Will hold what spline number a certain spline has
+
857 short int *paramNo_big = new short int[NSplines_total];
+
858
+
859 // This holds the index of each spline
+
860 index_cpu = new int[NSplines_total];
+
861#ifdef Weight_On_SplineBySpline_Basis
+
862 //This holds the CPU weights for EACH SPLINE that gets read in samplePDFND
+
863 cpu_weights = new float[NSplines_total];
+
864#else
+
865 //KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}
+ +
867 int ParamCounter = 0;
+
868 int ParamCounterGlobal = 0;
+
869 #ifdef MULTITHREAD
+
870 #pragma omp parallel for
+
871 #endif
+
872 for (unsigned int j = 0; j < 2*NSplines_total; j++) {
+
873 cpu_nParamPerEvent[j] = -1;
+
874 }
+
875#endif
+
876 // Set index array and number of points arrays to something silly, again to be safe...
+
877#ifdef MULTITHREAD
+
878#pragma omp parallel for
+
879#endif
+
880 for (unsigned int j = 0; j < NSplines_total; j++) {
+
881 index_cpu[j] = -1;
+
882 paramNo_big[j] = -1;
+
883 #ifndef Weight_On_SplineBySpline_Basis
+
884 cpu_nParamPerEvent[j*2] = -1;
+
885 cpu_nParamPerEvent[j*2+1] = -1;
+
886 #endif
+
887 }
+
888
+
889 // Temporary arrays to hold the coefficients for each spline
+
890 // We get one a,b,c,d,e for each spline so need 5
+
891 float *temp_coeffs = new float[_max_knots]();
+
892 NSplines_valid = 0;
+
893
+
894 std::vector<std::vector<TF1_red*> >::iterator OuterIt;
+
895 std::vector<TF1_red*>::iterator InnerIt;
+
896 unsigned int EventCounter = 0;
+
897 // Loop over events and extract the spline coefficients
+
898 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++EventCounter) {
+
899 // Structure of MasterSpline is std::vector<std::vector<TSpline3*>>
+
900 // A conventional iterator to count which parameter a given spline should be applied to
+
901 int ParamNumber = 0;
+
902 for (InnerIt = (*OuterIt).begin(); InnerIt != (*OuterIt).end(); ++InnerIt, ++ParamNumber) {
+
903 // Don't actually use this ever -- we give each spline the maximum number of points found in all splines
+
904 int nPoints_tmp = 0;
+
905 // Get a pointer to the current spline for this event
+
906 TF1_red* CurrSpline = (*InnerIt);
+
907 // If NULL we don't have this spline for the event, so move to next spline
+
908 if (CurrSpline == NULL) continue;
+
909
+
910 // If the number of knots are greater than 2 the spline is not a dummy and we should extract coefficients to load onto the GPU
+ +
912 (*InnerIt) = CurrSpline;
+
913 for (int j = 0; j < _max_knots; ++j) {
+ +
915 }
+
916 // Save the number of points for this spline
+ +
918
+
919 // Set the parameter number for this spline
+ +
921 // Set the index of the spline so we can tell apart from flat splines
+ +
923 // Increment the counter for the number of good splines we have
+ +
925 #ifndef Weight_On_SplineBySpline_Basis
+
926 ParamCounter++;
+
927 #endif
+
928 } // End the loop over the parameters in the MasterSpline
+
929 #ifndef Weight_On_SplineBySpline_Basis
+ + + +
933 ParamCounter = 0;
+
934 #endif
+
935 } // End the loop over the number of events
+
936 // Delete the temporary arrays
+
937 delete[] temp_coeffs;
+
938
+
939 // Now that we have looped through all events we can make the number of splines smaller
+
940 // Going from number of events * number of points per spline * number of NIWG params to spln_counter (=valid splines)
+
941 MACH3LOG_INFO("Number of splines = {}", NSplines_valid);
+
942
+
943 // Now declare the arrays for each point in the valid splines which the event actually has (i.e. include the splines that the event undergoes)
+
944 // Also make array with the number of points per spline (not per spline point!)
+
945 // float because GPU precision (could change to double, but will incur significant speed reduction on GPU unless you're very rich!)
+ +
947 cpu_coeff_many.resize(NSplines_valid*_nTF1Coeff_); // *5 because this array holds a,b,c,d,e parameters
+ +
949
+
950#ifdef MULTITHREAD
+
951#pragma omp parallel for
+
952#endif
+
953 for (unsigned int i = 0; i < NSplines_valid; i++) {
+ + +
956 for (unsigned int j = 0; j < _nTF1Coeff_; ++j) {
+ +
958 if (cpu_coeff_many[i*_nTF1Coeff_+j] == -999) {
+
959 std::cerr << "***** BAD COEFFICIENT OF POLY!!! ***** \n" << "On spline " << i << " = " << cpu_coeff_many[i*_nTF1Coeff_+j] << std::endl;
+
960 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
961 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
962 throw;
+
963 }
+
964 }
+
965
+
966 // Perform checks that all array entries have been changed from negative numbers and no number of points is greater than max knots, inputted by user
+
967 // Don't do this for the index array since some entries there should be -1 so we know what splines to include and not include in each event for loading onto the GPU
+
968 if (cpu_paramNo_arr[i] < 0) {
+
969 std::cerr << "***** NEGATIVE PARAMETER NUMBER!!! ***** \n" << "On spline " << i << " = " << cpu_paramNo_arr[i] << std::endl;
+
970 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
971 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
972 throw;
+
973 }
+
974
+
975 if (cpu_nPoints_arr[i] < 0) {
+
976 std::cerr << "***** NEGATIVE NUMBER OF POINTS!!! ***** \n" << "On spline " << i << " = " << cpu_nPoints_arr[i] << std::endl;
+
977 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
978 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
979 throw;
+
980 }
+
981 }
+
982 // Delete allocated memory
+
983 delete[] paramNo_big;
+
984 delete[] nPoints_big;
+
985 delete[] coeffs_big;
+
986
+
987 // Print some info; could probably make this to a separate function
+
988 MACH3LOG_INFO("--- INITIALISED TF1 ARRAYS ---");
+
989 std::cout << " " << NEvents << " events with " << NSplines_valid << " splines" << std::endl;
+
990
+
991 std::cout << " On average " << float(NSplines_valid)/float(NEvents) << " splines per event (" << NSplines_valid << "/" << NEvents << ")" << std::endl;
+
992 std::cout << " Size of coefficient {a,b,c,d,e} array = " << double(sizeof(float)*NSplines_valid*_nTF1Coeff_)/1.E6 << " MB" << std::endl;
+
993 std::cout << " Size of parameter # array = " << double(sizeof(short int)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
994 std::cout << " Size of polynomial type array = " << double(sizeof(short int)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
995
+
996 #ifdef Weight_On_SplineBySpline_Basis
+
997 // Make the array that holds all the returned weights from the GPU to pass to the CPU
+
998 cpu_weights_var = new float[NSplines_valid]();
+
999#else
+
1000 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
1001 #ifndef CUDA
+
1002 cpu_total_weights = new float[NEvents]();
+
1003 cpu_weights_var = new float[NSplines_valid]();
+
1004 #endif
+
1005#endif
+
1006
+ +
1008}
+
+
1009
+
1010
+
1011// *****************************************
+
1012// The shared initialiser from constructors of TF1 and TF1_red
+
+ +
1014// *****************************************
+
1015
+
1016#ifdef CUDA
+
1017 std::cout << " Total size = " << (double(sizeof(float)*NSplines_valid*_nTF1Coeff_)+double(2.0*sizeof(short int)*NSplines_valid))/1.E6 << " MB memory on CPU to move to GPU" << std::endl;
+
1018 std::cout << " GPU weight array (GPU->CPU every step) = " << double(sizeof(float)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
1019 std::cout << " Parameter value array (CPU->GPU every step) = " << double(sizeof(float)*nParams)/1.E6 << " MB" << std::endl;
+
1020 // With the new set-up we have: 1 coefficient array of size coeff_array_size, all same size
+
1021 // 1 coefficient array of size coeff_array_size*4, holding y,b,c,d in order (y11,b11,c11,d11; y12,b12,c12,d12;...) where ynm is n = spline number, m = spline point. Should really make array so that order is (y11,b11,c11,d11; y21,b21,c21,d21;...) because it will optimise cache hits I think; try this if you have time
+
1022 // return gpu_weights
+
1023
+
1024 // The gpu_XY arrays don't actually need initialising, since they are only placeholders for what we'll move onto the GPU. As long as we cudaMalloc the size of the arrays correctly there shouldn't be any problems
+
1025 // Can probably make this a bit prettier but will do for now
+
1026 // Could be a lot smaller of a function...
+ + + + +
1031
+
1032 &gpu_weights,
+
1033
+ + + +
1037 NEvents,
+ +
1039#endif
+
1040 NSplines_valid); // What's the number of splines we have (also number of entries in gpu_nPoints_arr)
+
1041
+
1042 // Move number of splines and spline size to constant GPU memory; every thread does not need a copy...
+
1043 // The implementation lives in splines/gpuSplineUtils.cu
+
1044 // The GPU splines don't actually need declaring but is good for demonstration, kind of
+
1045 // fixed by passing const reference
+ + + + +
1050
+ + + + +
1055 NEvents,
+ + +
1058#endif
+
1059 nParams,
+ +
1061 _max_knots);
+
1062
+
1063 // Delete all the coefficient arrays from the CPU once they are on the GPU
+
1064 cpu_coeff_many.clear();
+
1065 cpu_coeff_many.shrink_to_fit();
+
1066 cpu_nPoints_arr.clear();
+
1067 cpu_nPoints_arr.shrink_to_fit();
+
1068 cpu_paramNo_arr.clear();
+
1069 cpu_paramNo_arr.shrink_to_fit();
+
1070 #ifndef Weight_On_SplineBySpline_Basis
+
1071 cpu_nParamPerEvent.clear();
+
1072 cpu_nParamPerEvent.shrink_to_fit();
+
1073 #endif
+
1074 MACH3LOG_INFO("Good TF1 GPU loading");
+
1075#endif
+
1076
+
1077 return;
+
1078}
+
+
1079
+
1080// Need to specify template functions in header
+
1081// *****************************************
+
1082// Scan the master spline to get the maximum number of knots in any of the TSpline3*
+
+
1083void SMonolith::ScanMasterSpline(std::vector<std::vector<TSpline3_red*> > & MasterSpline, unsigned int &nEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots) {
+
1084// *****************************************
+
1085
+
1086 // Need to extract: the total number of events
+
1087 // number of parameters
+
1088 // maximum number of knots
+
1089 MaxPoints = 0;
+
1090 nEvents = 0;
+
1091 nParams = 0;
+
1092 nSplines = 0;
+
1093 nKnots = 0;
+
1094 std::vector<std::vector<TSpline3_red*> >::iterator OuterIt;
+
1095 std::vector<TSpline3_red*>::iterator InnerIt;
+
1096
+
1097 // Check the number of events
+
1098 nEvents = MasterSpline.size();
+
1099
+
1100 // Maximum number of splines one event can have (scan through and find this number)
+
1101 int nMaxSplines_PerEvent = 0;
+
1102
+
1103 //KS: We later check that each event has the same number of splines so this is fine
+
1104 nParams = MasterSpline[0].size();
+
1105 // Initialise
+ +
1107 for (__int__ i = 0; i < nParams; ++i) {
+
1108 SplineInfoArray[i].nPts = -999;
+ + + +
1112 }
+
1113
+
1114 unsigned int EventCounter = 0;
+
1115 // Loop over each parameter
+
1116 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt) {
+
1117 // Check that each event has each spline saved
+
1118 if (nParams > 0) {
+
1119 int TempSize = (*OuterIt).size();
+
1120 if (TempSize != nParams) {
+
1121 MACH3LOG_ERROR("Found {} parameters for event {}", TempSize, EventCounter);
+
1122 MACH3LOG_ERROR("but was expecting {} since that's what I found for the previous event", nParams);
+
1123 MACH3LOG_ERROR("Somehow this event has a different number of spline parameters... Please study further!");
+
1124 throw;
+
1125 }
+
1126 }
+
1127 nParams = (*OuterIt).size();
+
1128
+
1129 int nSplines_SingleEvent = 0;
+
1130 // Loop over each pointer
+
1131 int ij = 0;
+
1132 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ij++) {
+
1133 if ((*InnerIt) == NULL) continue;
+
1134 int nPoints = (*InnerIt)->GetNp();
+
1135 if (nPoints > MaxPoints) {
+
1136 MaxPoints = nPoints;
+
1137 }
+
1138 nKnots += nPoints;
+ +
1140
+
1141 // Fill the SplineInfoArray entries with information on each splinified parameter
+
1142 if (SplineInfoArray[ij].xPts == NULL)
+
1143 {
+
1144 // Fill the number of points
+
1145 SplineInfoArray[ij].nPts = (*InnerIt)->GetNp();
+
1146
+
1147 // Fill the x points
+ +
1149 for (__int__ k = 0; k < SplineInfoArray[ij].nPts; ++k)
+
1150 {
+
1151 __float__ xtemp = -999.99;
+
1152 __float__ ytemp = -999.99;
+
1153 (*InnerIt)->GetKnot(k, xtemp, ytemp);
+ +
1155 }
+
1156 }
+
1157 }
+
1158
+ +
1160 EventCounter++;
+
1161 }
+ +
1163
+
1164 int Counter = 0;
+
1165 //KS: Sanity check that everything was set correctly
+
1166 for (__int__ i = 0; i < nParams; ++i)
+
1167 {
+
1168 const __int__ nPoints = SplineInfoArray[i].nPts;
+ +
1170 if (nPoints == -999 || xArray == NULL) {
+
1171 Counter++;
+
1172 if(Counter < 5)
+
1173 {
+
1174 MACH3LOG_WARN("SplineInfoArray[{}] isn't set yet", i);
+
1175 }
+
1176 continue;
+
1177 //throw;
+
1178 }
+
1179 }
+
1180 MACH3LOG_WARN("In total SplineInfoArray for {} hasn't been initialised", Counter);
+
1181}
+
+
1182
+
1183// Need to specify template functions in header
+
1184// *****************************************
+
1185// Scan the master spline to get the maximum number of knots in any of the TSpline3*
+
+
1186void SMonolith::ScanMasterSpline(std::vector<std::vector<TF1_red*> > & MasterSpline, unsigned int &nEvents, int &MaxPoints, short int &nParams) {
+
1187// *****************************************
+
1188
+
1189 // Need to extract: the total number of events
+
1190 // number of parameters
+
1191 // maximum number of knots
+
1192 MaxPoints = 0;
+
1193 nEvents = 0;
+
1194 nParams = 0;
+
1195
+
1196 std::vector<std::vector<TF1_red*> >::iterator OuterIt;
+
1197 std::vector<TF1_red*>::iterator InnerIt;
+
1198
+
1199 // Check the number of events
+
1200 nEvents = MasterSpline.size();
+
1201
+
1202 unsigned int EventCounter = 0;
+
1203 // Loop over each parameter
+
1204 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt) {
+
1205 // Check that each event has each spline saved
+
1206 if (nParams > 0) {
+
1207 int TempSize = (*OuterIt).size();
+
1208 if (TempSize != nParams) {
+
1209 MACH3LOG_ERROR("Found {} parameters for event {}", TempSize, EventCounter);
+
1210 MACH3LOG_ERROR("but was expecting {} since that's what I found for the previous event", nParams);
+
1211 MACH3LOG_ERROR("Somehow this event has a different number of spline parameters... Please study further!");
+
1212 throw;
+
1213 }
+
1214 }
+
1215 nParams = (*OuterIt).size();
+
1216
+
1217 // Loop over each pointer
+
1218 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt) {
+
1219 if ((*InnerIt) == NULL) continue;
+
1220 int nPoints = (*InnerIt)->GetSize();
+
1221 if (nPoints > MaxPoints) {
+
1222 MaxPoints = nPoints;
+
1223 }
+
1224 }
+
1225 EventCounter++;
+
1226 }
+
1227}
+
+
1228
+
1229// *****************************************
+
1230// Destructor
+
1231// Cleans up the allocated GPU memory
+
+ +
1233// *****************************************
+
1234
+
1235#ifdef CUDA
+ + + +
1239
+ + +
1242
+ + + + +
1247 #endif
+
1248 gpu_weights);
+
1249
+
1250 //KS: Since we declared them using CUDA alloc we have to free memory using also cuda functions
+ +
1252#else
+
1253 if(segments != NULL) delete[] segments;
+
1254 if(vals != NULL) delete[] vals;
+
1255#endif
+
1256
+
1257 if(SplineInfoArray != NULL) delete[] SplineInfoArray;
+
1258
+ +
1260
+
1261#ifdef Weight_On_SplineBySpline_Basis
+
1262 if(cpu_weights != NULL) delete[] cpu_weights;
+
1263 if(cpu_weights_var != NULL) delete[] cpu_weights_var;
+
1264#endif
+
1265 if(index_cpu != NULL) delete[] index_cpu;
+
1266
+
1267 //KS: Those might be deleted or not depending on GPU/CPU TSpline3/TF1 DEBUG or not hence we check if not NULL
+
1268 cpu_coeff_x.clear();
+
1269 cpu_coeff_x.shrink_to_fit();
+
1270 cpu_coeff_many.clear();
+
1271 cpu_coeff_many.shrink_to_fit();
+
1272 cpu_paramNo_arr.clear();
+
1273 cpu_paramNo_arr.shrink_to_fit();
+
1274 cpu_nKnots_arr.clear();
+
1275 cpu_nKnots_arr.shrink_to_fit();
+
1276 #ifndef Weight_On_SplineBySpline_Basis
+
1277 cpu_nParamPerEvent.clear();
+
1278 cpu_nParamPerEvent.shrink_to_fit();
+
1279 #endif
+
1280 cpu_nPoints_arr.clear();
+
1281 cpu_nPoints_arr.shrink_to_fit();
+
1282}
+
+
1283
+
1284// *********************************
+
1285// Reduce the large TSpline3 vector to TSpline3_red
+
+
1286std::vector<std::vector<TSpline3_red*> > SMonolith::ReduceTSpline3(std::vector<std::vector<TSpline3*> > &MasterSpline) {
+
1287// *********************************
+
1288 std::vector<std::vector<TSpline3*> >::iterator OuterIt;
+
1289 std::vector<TSpline3*>::iterator InnerIt;
+
1290
+
1291 // The return vector
+
1292 std::vector<std::vector<TSpline3_red*> > ReducedVector;
+
1293 ReducedVector.reserve(MasterSpline.size());
+
1294
+
1295 // Loop over each parameter
+
1296 int OuterCounter = 0;
+
1297 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++OuterCounter) {
+
1298 // Make the temp vector
+
1299 std::vector<TSpline3_red*> TempVector;
+
1300 TempVector.reserve(OuterIt->size());
+
1301 int InnerCounter = 0;
+
1302 // Loop over each TSpline3 pointer
+
1303 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ++InnerCounter) {
+
1304 // Here's our delicious TSpline3 object
+
1305 TSpline3 *spline = (*InnerIt);
+
1306 // Now make the reduced TSpline3 pointer
+ +
1308 if (spline != NULL) {
+
1309 red = new TSpline3_red(spline);
+
1310 (*InnerIt) = spline;
+
1311 }
+
1312 // Push back onto new vector
+
1313 TempVector.push_back(red);
+
1314 } // End inner for loop
+
1315 ReducedVector.push_back(TempVector);
+
1316 } // End outer for loop
+
1317 // Now have the reduced vector
+
1318 return ReducedVector;
+
1319}
+
+
1320
+
1321// *********************************
+
1322// Reduce the large TF1 vector to a TF1_red
+
+
1323std::vector<std::vector<TF1_red*> > SMonolith::ReduceTF1(std::vector<std::vector<TF1*> > &MasterSpline) {
+
1324// *********************************
+
1325 std::vector<std::vector<TF1*> >::iterator OuterIt;
+
1326 std::vector<TF1*>::iterator InnerIt;
+
1327
+
1328 // The return vector
+
1329 std::vector<std::vector<TF1_red*> > ReducedVector;
+
1330 ReducedVector.reserve(MasterSpline.size());
+
1331
+
1332 // Loop over each parameter
+
1333 int OuterCounter = 0;
+
1334 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++OuterCounter) {
+
1335 // Make the temp vector
+
1336 std::vector<TF1_red*> TempVector;
+
1337 TempVector.reserve(OuterIt->size());
+
1338 int InnerCounter = 0;
+
1339 // Loop over each TSpline3 pointer
+
1340 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ++InnerCounter) {
+
1341 // Here's our delicious TSpline3 object
+
1342 TF1* spline = (*InnerIt);
+
1343 // Now make the reduced TSpline3 pointer (which deleted TSpline3)
+
1344 TF1_red* red = NULL;
+
1345 if (spline != NULL) {
+
1346 red = new TF1_red(spline);
+
1347 (*InnerIt) = spline;
+
1348 }
+
1349 // Push back onto new vector
+
1350 TempVector.push_back(red);
+
1351 } // End inner for loop
+
1352 ReducedVector.push_back(TempVector);
+
1353 } // End outer for loop
+
1354 // Now have the reduced vector
+
1355 return ReducedVector;
+
1356}
+
+
1357
+
1358// *****************************************
+
1359// Get the spline coefficients from the TSpline3 so that we can load ONLY these onto the GPU, not the whole TSpline3 object
+
1360// This loads up coefficients into two arrays: one x array and one yabcd array
+
1361// This should maximize our cache hits!
+
+
1362void SMonolith::getSplineCoeff_SepMany(TSpline3_red* &spl, int &nPoints, float *& xArray, float *& manyArray) {
+
1363// *****************************************
+
1364 // Initialise all arrays to 1.0
+
1365 for (int i = 0; i < _max_knots; ++i) {
+
1366 xArray[i] = 1.0;
+
1367 for (int j = 0; j < _nCoeff_; j++) {
+
1368 manyArray[i*_nCoeff_+j] = 1.0;
+
1369 }
+
1370 }
+
1371 // Get number of points in spline
+
1372 int Np = spl->GetNp();
+
1373 // If spline is flat, set number of knots to 1.0,
+
1374 // This is used later to expedite the calculations for flat splines
+
1375 // tmpArray[0] is number of knots
+
1376 if (isFlat(spl)) {
+
1377 nPoints = 1;
+
1378 } else {
+
1379 nPoints = Np;
+
1380 if (Np > _max_knots) {
+
1381 MACH3LOG_ERROR("Error, number of points is greater than saved {}", _max_knots);
+
1382 MACH3LOG_ERROR("This _WILL_ cause problems with GPU splines and _SHOULD_ be fixed!");
+
1383 MACH3LOG_ERROR("nPoints = {}, _max_knots = {}", nPoints, _max_knots);
+
1384 throw;
+
1385 }
+
1386 }
+
1387
+
1388 // The coefficients we're writing to
+
1389 __float__ x, y, b, c, d;
+
1390 // TSpline3 can only take doubles, not floats
+
1391 // But our GPU is slow with doubles, so need to cast to float
+
1392 for(int i = 0; i < Np; i++) {
+
1393 // Get the coefficients from the TSpline3 object
+
1394 spl->GetCoeff(i, x, y, b, c, d);
+
1395 // Write the arrays
+
1396 xArray[i] = float(x);
+
1397 manyArray[i*_nCoeff_] = float(y); // 4 because manyArray stores y,b,c,d
+
1398 manyArray[i*_nCoeff_+1] = float(b);
+
1399 manyArray[i*_nCoeff_+2] = float(c);
+
1400 manyArray[i*_nCoeff_+3] = float(d);
+
1401
+
1402 if((xArray[i] == -999) | (manyArray[i*_nCoeff_] == -999) | (manyArray[i*4+1] == -999) | (manyArray[i*_nCoeff_+2] == -999) | (manyArray[i*_nCoeff_+3] == -999)){
+
1403 std::cerr << "*********** Bad params in getSplineCoeff_SepMany() ************"<<std::endl;
+
1404 std::cerr << "pre cast to float (x, y, b, c, d) = "<<x<<", "<<y<<", "<<b<<", "<<c<<", "<<d<<std::endl;
+
1405 std::cerr << "post cast to float (x, y, b, c, d) = "<<xArray[i]<<", "<<manyArray[i*4]<<", "<<manyArray[i*4+1]<<", "<<manyArray[i*4+2]<<", "<<manyArray[i*_nCoeff_+3]<<std::endl;
+
1406 std::cerr << "This will cause problems when preparing for GPU"<<std::endl;
+
1407 std::cerr << "***************************************************************"<<std::endl;
+
1408 }
+
1409 }
+
1410 // The structure is now xarray ={x1,x2,x3}
+
1411 // manyArr ={y1,y2,y3, b1,b2,b3, c1,c2,c3, d1,d2,d3}
+
1412 #ifndef DEBUG
+
1413 delete spl;
+
1414 spl = NULL;
+
1415 #endif
+
1416}
+
+
1417
+
1418// *****************************************
+
1419// Get the spline coefficients from the TSpline3 so that we can load ONLY these onto the GPU, not the whole TSpline3 object
+
1420// This loads up coefficients into two arrays: one x array and one yabcd array
+
1421// This should maximize our cache hits!
+
+
1422void SMonolith::getTF1Coeff(TF1_red* &spl, int &nPoints, float *& coeffs) {
+
1423// *****************************************
+
1424
+
1425 // Initialise all arrays to 1.0
+
1426 for (int i = 0; i < _max_knots; ++i) {
+
1427 coeffs[i] = 0.0;
+
1428 }
+
1429
+
1430 // Get number of points in spline
+
1431 nPoints = spl->GetSize();
+
1432
+
1433 // TSpline3 can only take doubles, not floats
+
1434 // But our GPU is slow with doubles, so need to cast to float
+
1435 for (int i = 0; i < nPoints; i++) {
+
1436 coeffs[i] = spl->GetParameter(i);
+
1437 }
+
1438 // The structure is now coeffs = {a,b,c,d,e}
+
1439 delete spl;
+
1440 spl = NULL;
+
1441}
+
+
1442
+
1443// *****************************************
+
1444//CW: Check if the TSpline3 object is flat; if it is, we won't load it onto the GPU
+
+ +
1446// *****************************************
+
1447 int Np = spl->GetNp();
+
1448 __float__ x, y, b, c, d;
+
1449 // Go through spline segment parameters,
+
1450 // Get y values for each spline knot,
+
1451 // Every knot must evaluate to 1.0 to create a flat spline
+
1452 for(int i = 0; i < Np; i++) {
+
1453 spl->GetCoeff(i, x, y, b, c, d);
+
1454 if (y != 1) {
+
1455 return false;
+
1456 }
+
1457 }
+
1458 return true;
+
1459}
+
+
1460
+
1461
+
1462#ifdef CUDA
+
1463// *****************************************
+
1464// Tell the GPU to evaluate the weights
+
1465// Load up the two x,{y,b,c,d} arrays into memory and have GPU read them with more coalescence instead of one monolithic array
+
1466// This should be used when we're using separate x,y,a,b,c,d arrays
+
1467// Also pass the segments for the parameter along with their parameter values
+
1468// This avoids doing lots of binary searches on the GPU
+
1469void SMonolith::Evaluate() {
+
1470// *****************************************
+
1471
+
1472 // There's a parameter mapping that goes from spline parameter to a global parameter index
+
1473 // Find the spline segments
+ +
1475
+
1476 // The main call to the GPU
+ + + +
1480
+ +
1482
+
1483 gpu_weights,
+ + +
1486#else
+ + +
1489#endif
+
1490 vals,
+
1491 segments,
+ +
1493
+
1494 //KS: Normally it does nothing, in case you want to have weight for each spline it does the mapping, used mostly for debugging
+ +
1496}
+
1497#else
+
1498//If CUDA is not enabled do the same on CPU
+
1499// *****************************************
+
+ +
1501// *****************************************
+
1502
+
1503 // There's a parameter mapping that goes from spline parameter to a global parameter index
+
1504 // Find the spline segments
+ +
1506
+
1507 //KS: Huge MP loop over all valid splines
+ +
1509
+
1510 //KS: Huge MP loop over all events calculating total weight
+
1511 ModifyWeights();
+
1512
+
1513 return;
+
1514}
+
+
1515#endif
+
1516
+
1517// *************************
+
1518// CW: Only need to do the binary search once per parameter, not once per event!
+
1519// Takes down the number of binary searches from 1.2M to 17, ha!
+
1520// For ROOT version see root/hist/hist/src/TSpline3.cxx TSpline3::FindX(double)
+
+ +
1522// *************************
+
1523
+
1524 // Loop over the splines
+
1525 //KS: Tried multithreading here with 48 splines and it is faster with one thread, maybe in future multithreading will be worth revisiting
+
1526 for (__int__ i = 0; i < nParams; ++i)
+
1527 {
+
1528 const __int__ nPoints = SplineInfoArray[i].nPts;
+ +
1530
+
1531 // EM: if we have a parameter that has no response for any event (i.e. all splines have just one knot), then skip it and avoid a seg fault here
+
1532 // In principle, such parameters shouldn't really be included in the first place, but with new det syst splines this
+
1533 // could happen if say you were just running on one FHC run, then all RHC parameters would be flat and the code below would break.
+
1534 if(xArray == NULL) continue;
+
1535
+
1536 // Get the variation for this reconfigure for the ith parameter
+ +
1538 vals[i] = xvar;
+
1539
+
1540 // The segment we're interested in (klow in ROOT code)
+
1541 __int__ segment = 0;
+
1542 __int__ kHigh = nPoints-1;
+
1543 //KS: We expect new segment is very close to previous
+ +
1545
+
1546 //KS: It is quite probable the new segment is same as in previous step so try to avoid binary search
+ +
1548 // If the variation is below the lowest saved spline point
+
1549 else if (xvar <= xArray[0]) {
+
1550 segment = 0;
+
1551 // If the variation is above the highest saved spline point
+
1552 } else if (xvar >= xArray[nPoints-1]) {
+
1553 //CW: Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651
+
1554 segment = kHigh;
+
1555 // If the variation is between the maximum and minimum, perform a binary search
+
1556 } else {
+
1557 // The top point we've got
+
1558 __int__ kHalf = 0;
+
1559 // While there is still a difference in the points (we haven't yet found the segment)
+
1560 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
1561 while (kHigh - segment > 1) {
+
1562 // Increment the half-step
+
1563 kHalf = (segment + kHigh)/2;
+
1564 // If our variation is above the kHalf, set the segment to kHalf
+
1565 if (xvar > xArray[kHalf]) {
+
1566 segment = kHalf;
+
1567 // Else move kHigh down
+
1568 } else {
+
1569 kHigh = kHalf;
+
1570 }
+
1571 } // End the while: we've now done our binary search
+
1572 } // End the else: we've now found our point
+
1573
+
1574 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
1575
+
1576 //CW: This way we avoid doing 1.2M+ binary searches on the GPU
+
1577 // and literally just multiply lots of numbers together on the GPU without any algorithm
+
1578 // Update the values and which segment it belongs to
+ + +
1581
+
1582#ifdef DEBUG
+
1583 if (SplineInfoArray[i].xPts[segment] > xvar && segment != 0) {
+
1584 std::cerr << "Found a segment which is _ABOVE_ the variation!" << std::endl;
+
1585 std::cerr << "IT SHOULD ALWAYS BE BELOW! (except when segment 0)" << std::endl;
+
1586 std::cerr << "Spline: "<< i << std::endl;
+
1587
+
1588 std::cerr << "Found segment = " << segment << std::endl;
+
1589 std::cerr << "Doing variation = " << xvar << std::endl;
+
1590 std::cerr << "x in spline = " << SplineInfoArray[i].xPts[segment] << std::endl;
+
1591 for (__int__ j = 0; j < SplineInfoArray[j].nPts; ++j) {
+
1592 std::cerr << " " << j << " = " << SplineInfoArray[i].xPts[j] << std::endl;
+
1593 }
+
1594 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1595 throw;
+
1596 }
+
1597#endif
+
1598 } //end loop over params
+
1599}
+
+
1600
+
1601//*********************************************************
+
+ +
1603//*********************************************************
+
1604 #ifdef MULTITHREAD
+
1605 #pragma omp parallel for simd
+
1606 #endif
+
1607 for (unsigned int splineNum = 0; splineNum < NSplines_valid; ++splineNum)
+
1608 {
+
1609 //CW: Which Parameter we are accessing
+
1610 const short int Param = cpu_paramNo_arr[splineNum];
+
1611
+
1612 //CW: Avoids doing costly binary search on GPU
+
1613 const short int segment = segments[Param];
+
1614
+
1615 //KS: Segment for coeff_x is simply parameter*max knots + segment as each parameters has the same spacing
+
1616 const short int segment_X = Param*_max_knots+segment;
+
1617
+
1618 //KS: Find knot position in out monolithical structure
+ +
1620
+
1621 // We've read the segment straight from CPU and is saved in segment_gpu
+
1622 // polynomial parameters from the monolithic splineMonolith
+
1623 const float fY = cpu_coeff_many[CurrentKnotPos];
+
1624 const float fB = cpu_coeff_many[CurrentKnotPos+1];
+
1625 const float fC = cpu_coeff_many[CurrentKnotPos+2];
+
1626 const float fD = cpu_coeff_many[CurrentKnotPos+3];
+
1627 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
1628 const float dx = vals[Param] - cpu_coeff_x[segment_X];
+
1629
+
1630 //CW: Wooow, let's use some fancy intrinsic and pull down the processing time by <1% from normal multiplication! HURRAY
+
1631 cpu_weights_var[splineNum] = fmaf(dx, fmaf(dx, fmaf(dx, fD, fC), fB), fY);
+
1632 // Or for the more "easy to read" version:
+
1633 //cpu_weights_var[splineNum] = (fY+dx*(fB+dx*(fC+dx*fD)));
+
1634 }
+
1635 return;
+
1636}
+
+
1637
+
1638
+
1639#ifdef CUDA
+
1640// *****************************************
+
1641// Tell the GPU to evaluate the weights
+
1642// TF1 version
+ +
1644// *****************************************
+
1645
+
1646 // Feed the parameter variations
+
1647 for (__int__ i = 0; i < nParams; ++i) {
+
1648 // Update the values and which segment it belongs to
+ +
1650 }
+
1651
+
1652 RunGPU_TF1(
+ + + +
1656
+
1657 gpu_weights,
+ + +
1660#else
+ + +
1663#endif
+
1664 vals,
+ +
1666
+
1667 //KS: Normally it does nothing, in case you want to have weight for each spline it does the mapping, used mostly for debugging
+ +
1669}
+
1670#else
+
1671//If CUDA is not enabled do the same on CPU
+
1672// *****************************************
+
+ +
1674// *****************************************
+
1675
+
1676 // Feed the parameter variations
+
1677 for (__int__ i = 0; i < nParams; ++i) {
+
1678 // Update the values and which segment it belongs to
+ +
1680 }
+
1681
+
1682 //KS: Huge MP loop over all valid splines
+ +
1684
+
1685 //KS: Huge MP loop over all events calculating total weight
+
1686 ModifyWeights();
+
1687
+
1688 return;
+
1689}
+
+
1690#endif
+
1691
+
1692//*********************************************************
+
+ +
1694//*********************************************************
+
1695
+
1696 #ifdef MULTITHREAD
+
1697 #pragma omp parallel for
+
1698 #endif
+
1699 for (unsigned int splineNum = 0; splineNum < NSplines_valid; ++splineNum)
+
1700 {
+
1701 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
1702 const float x = vals[cpu_paramNo_arr[splineNum]];
+
1703
+
1704 // Read the coefficients
+
1705 const float a = cpu_coeff_many[splineNum*_max_knots];
+
1706 const float b = cpu_coeff_many[splineNum*_max_knots+1];
+
1707 const float c = cpu_coeff_many[splineNum*_max_knots+2];
+
1708 const float d = cpu_coeff_many[splineNum*_max_knots+3];
+
1709 const float e = cpu_coeff_many[splineNum*_max_knots+4];
+
1710
+
1711 // Match these with form in SetSplines
+
1712 // Might not be great to have this if statement: maybe split two kernels?
+
1713 if (gpu_nPoints_arr[splineNum] == 5) {
+
1714 cpu_weights_var[splineNum] = 1 + a*x + b*x*x + c*x*x*x + d*x*x*x*x + e*x*x*x*x*x;
+
1715 } else if (gpu_nPoints_arr[splineNum] == 2) {
+
1716 cpu_weights_var[splineNum] = (x<=0)*(1+a*x) + (x>0)*(1+b*x);
+
1717 } else {
+
1718 printf("Big problems, I found a nPoints array which is not 5 or 2 on GPU!\n");
+
1719 }
+
1720 }
+
1721 return;
+
1722}
+
+
1723
+
1724//*********************************************************
+
1725//KS: Calc total event weight on CPU
+
+ +
1727//*********************************************************
+
1728#ifndef Weight_On_SplineBySpline_Basis
+
1729 #ifdef MULTITHREAD
+
1730 #pragma omp parallel for
+
1731 #endif
+
1732 for (unsigned int EventNum = 0; EventNum < NEvents; ++EventNum)
+
1733 {
+
1734 float totalWeight = 1.0f; // Initialize total weight for each event
+
1735
+
1736 // Extract the parameters for the current event
+
1737 const unsigned int startIndex = cpu_nParamPerEvent[2 * EventNum + 1];
+
1738 const unsigned int numParams = cpu_nParamPerEvent[2 * EventNum];
+
1739
+
1740 // Compute total weight for the current event
+
1741 for (unsigned int id = 0; id < numParams; ++id)
+
1742 {
+ +
1744 }
+
1745
+
1746 // Store the total weight for the current event
+ +
1748 }
+
1749#else
+
1750 //KS: Name is confusing but what it does it make a nice mapping used for debugging
+ +
1752#endif
+
1753 return;
+
1754}
+
+
1755
+
1756//*********************************************************
+
1757//KS: Normally it does nothing, in case you want to have weight for each spline it does the mapping, used mostly for debugging
+
+ +
1759//*********************************************************
+
1760
+
1761#ifdef Weight_On_SplineBySpline_Basis
+
1762 // Multi-thread here because _numIndex is really quite large!
+
1763 #ifdef MULTITHREAD
+
1764 #pragma omp parallel for
+
1765 #endif
+
1766 for (unsigned int i = 0; i < NSplines_total; ++i) {
+
1767 if (index_cpu[i] >= 0) {
+ +
1769 } else {
+
1770 cpu_weights[i] = 1.;
+
1771 }
+
1772 }
+
1773#endif
+
1774 return;
+
1775}
+
+
std::vector< bool > isFlat
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+ +
#define _nCoeff_
+
#define _nTF1Coeff_
+
#define __int__
Definition Structs.h:14
+
#define __float__
Definition Structs.h:13
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
std::vector< unsigned int > cpu_nParamPerEvent
KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of ...
+
unsigned int * gpu_nKnots_arr
+
float * gpu_weights
+
std::vector< short int > cpu_nPoints_arr
+
SMonolith(std::vector< std::vector< TSpline3 * > > &MasterSpline)
Constructor.
+
short int * gpu_nPoints_arr
+
std::vector< short int > cpu_paramNo_arr
+
void CalcSplineWeights_TF1()
Same but TF1.
+
std::vector< std::vector< TSpline3_red * > > ReduceTSpline3(std::vector< std::vector< TSpline3 * > > &MasterSpline)
CW: Reduced the TSpline3 to TSpline3_red.
+
void PrepareForGPU_TSpline3()
+
float * gpu_coeff_x
+
std::vector< float > cpu_coeff_many
+
unsigned int NSplines_total
Number of total splines we can maximally have, if each event had the maximum number of splines found ...
+
float * gpu_total_weights
+
void Initialise()
KS: Set everything to null etc.
+
short int nParams
Number of NIWG parameters that have splines.
+
FastSplineInfo * SplineInfoArray
+
short int * segments
+
void PrepareForGPU(std::vector< std::vector< TSpline3_red * > > &MasterSpline)
CW: Prepare the TSpline3_red objects for the GPU.
+
void LoadSplineFile(std::string FileName)
KS: Load preprocessed spline file.
+
short int * gpu_paramNo_arr
+
void ModifyWeights_GPU()
Conversion from valid splines to all.
+
void PrepareSplineFile()
KS: Prepare spline file that can be used for fast loading.
+
std::vector< unsigned int > cpu_nKnots_arr
+
float * cpu_weights
The returned gpu weights, read by the GPU.
+
void getTF1Coeff(TF1_red *&spl, int &nPoints, float *&coeffs)
CW: Gets the polynomial coefficients for TF1.
+
std::vector< std::vector< TF1_red * > > ReduceTF1(std::vector< std::vector< TF1 * > > &MasterSpline)
CW: Reduced the TF1 to TF1_red.
+ +
bool SaveSplineFile
+
float * cpu_total_weights
KS: This holds the total CPU weights that gets read in samplePDFND.
+
float * cpu_weights_var
+
unsigned int NSplines_valid
Number of valid splines.
+
~SMonolith()
Destructor for SMonolith class.
+
int _max_knots
Max knots for production.
+
void PrepareForGPU_TF1()
+
unsigned int * gpu_nParamPerEvent
+
bool isFlat(TSpline3_red *&spl)
CW: Helper function used in the constructor, tests to see if the spline is flat.
+
unsigned int NEvents
Number of events.
+
void getSplineCoeff_SepMany(TSpline3_red *&spl, int &nPoints, float *&xArray, float *&manyArray)
CW: This loads up coefficients into two arrays: one x array and one yabcd array.
+
void Evaluate_TF1()
CW: Evaluate weights on the CPU/GPU.
+
float * gpu_coeff_many
+
void ScanMasterSpline(std::vector< std::vector< TSpline3_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots)
CW: Function to scan through the MasterSpline of TSpline3.
+
void Evaluate()
CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; proba...
+
void CalcSplineWeights()
CPU based code which eval weight for each spline.
+
void FindSplineSegment()
CW:Code used in step by step reweighting, Find Spline Segment for each param.
+
int * index_cpu
holds the index for good splines; don't do unsigned since starts with negative value!
+
unsigned int NSplines_total_large
Number of total splines if each event had every parameter's spline.
+
std::vector< float > cpu_coeff_x
+
std::vector< const double * > splineParsPointer
This holds pointer to parameter position which we later copy paste it to GPU.
+
unsigned int nKnots
Sum of all knots over all splines.
+
void ModifyWeights()
Calc total event weight.
+ + + + +
__float__ * xPts
Definition Structs.h:113
+
__int__ nPts
Definition Structs.h:110
+
const double * splineParsPointer
Definition Structs.h:120
+
__int__ CurrSegment
Definition Structs.h:117
+
+ + + + diff --git a/SplineMonolith_8h.html b/SplineMonolith_8h.html new file mode 100644 index 00000000..3fe6d3d6 --- /dev/null +++ b/SplineMonolith_8h.html @@ -0,0 +1,151 @@ + + + + + + + +MaCh3: /github/workspace/splines/SplineMonolith.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
SplineMonolith.h File Reference
+
+
+
#include <cstdlib>
+#include <iomanip>
+#include "TFile.h"
+#include "TH1F.h"
+#include "TKey.h"
+#include "TString.h"
+#include "TIterator.h"
+#include "TStopwatch.h"
+#include "TCanvas.h"
+#include "TStyle.h"
+#include "TTree.h"
+#include "samplePDF/Structs.h"
+#include "manager/MaCh3Logger.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  SMonolith
 
+ + + + + +

+Macros

#define _nCoeff_   4
 
#define _nTF1Coeff_   5
 
+

Macro Definition Documentation

+ +

◆ _nCoeff_

+ +
+
+ + + + +
#define _nCoeff_   4
+
+ +

Definition at line 27 of file SplineMonolith.h.

+ +
+
+ +

◆ _nTF1Coeff_

+ +
+
+ + + + +
#define _nTF1Coeff_   5
+
+ +

Definition at line 29 of file SplineMonolith.h.

+ +
+
+
+ + + + diff --git a/SplineMonolith_8h_source.html b/SplineMonolith_8h_source.html new file mode 100644 index 00000000..dd2f6493 --- /dev/null +++ b/SplineMonolith_8h_source.html @@ -0,0 +1,298 @@ + + + + + + + +MaCh3: /github/workspace/splines/SplineMonolith.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SplineMonolith.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// C++ includes
+
4#include <cstdlib>
+
5#include <iomanip>
+
6
+
7// ROOT include
+
8#include "TFile.h"
+
9#include "TH1F.h"
+
10#include "TKey.h"
+
11#include "TString.h"
+
12#include "TIterator.h"
+
13#include "TStopwatch.h"
+
14#include "TCanvas.h"
+
15#include "TStyle.h"
+
16#include "TTree.h"
+
17
+
18#ifdef MULTITHREAD
+
19#include "omp.h"
+
20#endif
+
21
+
22// MaCh3 includes
+
23#include "samplePDF/Structs.h"
+
24#include "manager/MaCh3Logger.h"
+
25
+
26//KS: We store coefficients {y,b,c,d} in one array one by one, this is only to define it once rather then insert "4" all over the code
+
27#define _nCoeff_ 4
+
28//KS: For TF1 we store at most 5 coefficients, we could make it more flexible but for now define it here to make future changes easier to track
+
29#define _nTF1Coeff_ 5
+
30
+
31
+
32#ifdef CUDA
+
33extern void SynchroniseSplines();
+
34#endif
+
35
+
36// Make template class so we can use TF1 and TSpline3
+
+
37class SMonolith {
+
38 public:
+
41 SMonolith(std::vector< std::vector<TSpline3*> > &MasterSpline);
+
44 SMonolith(std::vector< std::vector<TSpline3_red*> > &MasterSpline);
+
47 SMonolith(std::vector< std::vector<TF1*> > &MasterSpline);
+
50 SMonolith(std::vector< std::vector<TF1_red*> > &MasterSpline);
+
53 SMonolith(std::string FileName);
+
55 ~SMonolith();
+
56
+
58 void Evaluate();
+
59
+
61 void Evaluate_TF1();
+
62
+
+ +
65 {
+
66 #ifdef CUDA
+ +
68 #endif
+
69 return;
+
70 };
+
+
71
+
75 inline const float* retPointer(const int event) {return &cpu_total_weights[event];}
+
76
+
+
79 inline void setSplinePointers(std::vector< const double* > spline_ParsPointers) {
+ + +
82 };
+
+
83
+ + +
88
+
89 private:
+
91 inline void Initialise();
+
93 inline void ScanMasterSpline(std::vector<std::vector<TSpline3_red*> > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots);
+
95 inline void ScanMasterSpline(std::vector<std::vector<TF1_red*> > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams);
+
97 inline void PrepareForGPU(std::vector<std::vector<TSpline3_red*> > &MasterSpline);
+
98 inline void PrepareForGPU_TSpline3();
+
99
+
101 inline void PrepareForGPU(std::vector<std::vector<TF1_red*> > &MasterSpline);
+
102 inline void PrepareForGPU_TF1();
+
103
+
105 inline std::vector<std::vector<TSpline3_red*> > ReduceTSpline3(std::vector<std::vector<TSpline3*> > &MasterSpline);
+
107 inline std::vector<std::vector<TF1_red*> > ReduceTF1(std::vector<std::vector<TF1*> > &MasterSpline);
+
108
+
111 inline void getSplineCoeff_SepMany(TSpline3_red* &spl, int &nPoints, float *&xArray, float *&manyArray);
+
113 inline bool isFlat(TSpline3_red* &spl);
+
115 inline void getTF1Coeff(TF1_red* &spl, int &nPoints, float *&coeffs);
+
116
+
118 inline void FindSplineSegment();
+
120 inline void CalcSplineWeights();
+
122 inline void CalcSplineWeights_TF1();
+
124 inline void ModifyWeights();
+
126 inline void ModifyWeights_GPU();
+
127
+
129 inline void PrepareSplineFile();
+
131 inline void LoadSplineFile(std::string FileName);
+
132
+ +
136 // Segments store currently found segment while vals parameter values, they are not in FastSplineInfo as in case of GPU we need to copy paste it to GPU
+
137 short int *segments;
+
138 float *vals;
+
140 std::vector< const double* > splineParsPointer;
+
141
+
143 unsigned int NEvents;
+
145 short int nParams;
+ + +
150
+
152 unsigned int NSplines_valid;
+
154 unsigned int NSplines_total;
+
155
+ +
158
+
160 unsigned int nKnots;
+
161
+
162 // Just some pointers to memory that doesn't get allocated so we can access the GPU
+
163 // GPU arrays to hold monolith and weights
+ + +
166 // CPU arrays to hold monolith and weights
+ +
168
+
170 std::vector<unsigned int> cpu_nParamPerEvent;
+
171 unsigned int *gpu_nParamPerEvent;
+
172
+
173 // GPU arrays to hold number of points
+
174 std::vector<short int> cpu_nPoints_arr;
+
175 short int *gpu_nPoints_arr;
+
176 //KS: Consider merging paramNo and nKnots into one consecutive array
+
177 std::vector<short int> cpu_paramNo_arr;
+
178 short int *gpu_paramNo_arr;
+
179 //KS: Number of knots per spline
+
180 std::vector<unsigned int> cpu_nKnots_arr;
+
181 unsigned int *gpu_nKnots_arr;
+
182 //KS: GPU arrays to hold X coefficient
+
183 std::vector<float> cpu_coeff_x;
+ +
185 // GPU arrays to hold other coefficients
+
186 std::vector<float> cpu_coeff_many;
+ +
188
+ +
190};
+
+
std::vector< bool > isFlat
+ + +
#define __int__
Definition Structs.h:14
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
std::vector< unsigned int > cpu_nParamPerEvent
KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of ...
+
unsigned int * gpu_nKnots_arr
+
float * gpu_weights
+
std::vector< short int > cpu_nPoints_arr
+
short int * gpu_nPoints_arr
+
std::vector< short int > cpu_paramNo_arr
+
void CalcSplineWeights_TF1()
Same but TF1.
+
std::vector< std::vector< TSpline3_red * > > ReduceTSpline3(std::vector< std::vector< TSpline3 * > > &MasterSpline)
CW: Reduced the TSpline3 to TSpline3_red.
+
void PrepareForGPU_TSpline3()
+
float * gpu_coeff_x
+
std::vector< float > cpu_coeff_many
+
void setSplinePointers(std::vector< const double * > spline_ParsPointers)
KS: Set pointers to spline params.
+
unsigned int NSplines_total
Number of total splines we can maximally have, if each event had the maximum number of splines found ...
+
float * gpu_total_weights
+
void Initialise()
KS: Set everything to null etc.
+
short int nParams
Number of NIWG parameters that have splines.
+
FastSplineInfo * SplineInfoArray
+
const float * retPointer(const int event)
KS: Get pointer to total weight to make fit faster wrooom!
+
short int * segments
+
void PrepareForGPU(std::vector< std::vector< TSpline3_red * > > &MasterSpline)
CW: Prepare the TSpline3_red objects for the GPU.
+
void LoadSplineFile(std::string FileName)
KS: Load preprocessed spline file.
+
void SynchroniseMemTransfer()
KS: After calculations are done on GPU we copy memory to CPU. This operation is asynchronous meaning ...
+
short int * gpu_paramNo_arr
+
void ModifyWeights_GPU()
Conversion from valid splines to all.
+
void PrepareSplineFile()
KS: Prepare spline file that can be used for fast loading.
+
std::vector< unsigned int > cpu_nKnots_arr
+
float * cpu_weights
The returned gpu weights, read by the GPU.
+
void getTF1Coeff(TF1_red *&spl, int &nPoints, float *&coeffs)
CW: Gets the polynomial coefficients for TF1.
+
std::vector< std::vector< TF1_red * > > ReduceTF1(std::vector< std::vector< TF1 * > > &MasterSpline)
CW: Reduced the TF1 to TF1_red.
+ +
bool SaveSplineFile
+
float * cpu_total_weights
KS: This holds the total CPU weights that gets read in samplePDFND.
+
float * cpu_weights_var
+
unsigned int NSplines_valid
Number of valid splines.
+
~SMonolith()
Destructor for SMonolith class.
+
int _max_knots
Max knots for production.
+
void PrepareForGPU_TF1()
+
unsigned int * gpu_nParamPerEvent
+
unsigned int NEvents
Number of events.
+
void getSplineCoeff_SepMany(TSpline3_red *&spl, int &nPoints, float *&xArray, float *&manyArray)
CW: This loads up coefficients into two arrays: one x array and one yabcd array.
+
void Evaluate_TF1()
CW: Evaluate weights on the CPU/GPU.
+
float * gpu_coeff_many
+
void ScanMasterSpline(std::vector< std::vector< TSpline3_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots)
CW: Function to scan through the MasterSpline of TSpline3.
+
void Evaluate()
CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; proba...
+
void CalcSplineWeights()
CPU based code which eval weight for each spline.
+
void FindSplineSegment()
CW:Code used in step by step reweighting, Find Spline Segment for each param.
+
int * index_cpu
holds the index for good splines; don't do unsigned since starts with negative value!
+
unsigned int NSplines_total_large
Number of total splines if each event had every parameter's spline.
+
std::vector< float > cpu_coeff_x
+
std::vector< const double * > splineParsPointer
This holds pointer to parameter position which we later copy paste it to GPU.
+
unsigned int nKnots
Sum of all knots over all splines.
+
void ModifyWeights()
Calc total event weight.
+ + + +
+ + + + diff --git a/Structs_8cpp.html b/Structs_8cpp.html new file mode 100644 index 00000000..27c3b0ce --- /dev/null +++ b/Structs_8cpp.html @@ -0,0 +1,779 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/Structs.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
Structs.cpp File Reference
+
+
+
#include "Structs.h"
+#include "TList.h"
+#include "TObjArray.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

double MaCh3Utils::GetMassFromPDG (int PDG)
 
std::unordered_map< int, intMaCh3Utils::KnownDetIDsMap ({ {0, 1}, {1, 8}, {2, 16}, {3, 32}, {4, 64}, {5, 128}, {6, 256}, {7, 512}, })
 
void CheckTH2PolyFileVersion (TFile *file)
 
double OverflowIntegral (TH2Poly *poly)
 
double NoOverflowIntegral (TH2Poly *poly)
 
TH1DPolyProjectionX (TObject *poly, std::string TempName, std::vector< double > xbins, bool computeErrors)
 
TH1DPolyProjectionY (TObject *poly, std::string TempName, std::vector< double > ybins, bool computeErrors)
 
TH2PolyNormalisePoly (TH2Poly *Histogram)
 
TH2PolyPolyScaleWidth (TH2Poly *Histogram, double scale)
 
double PolyIntegralWidth (TH2Poly *Histogram)
 
void RemoveFitter (TH1D *hist, std::string name)
 
double returnCherenkovThresholdMomentum (int PDG)
 
double CalculateQ2 (double PLep, double PUpd, double EnuTrue, double InitialQ2)
 
double CalculateEnu (double PLep, double costh, double Eb, bool neutrino)
 
+ + + +

+Variables

int MaCh3Utils::nKnownDetIDs = KnownDetIDsMap.size()
 
+

Function Documentation

+ +

◆ CalculateEnu()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double CalculateEnu (double PLep,
double costh,
double Eb,
bool neutrino 
)
+
+ +

Definition at line 399 of file Structs.cpp.

+
399 {
+
400// ***************************************************************************
+
401
+
402 double mNeff = 0.93956536 - Eb / 1000.;
+
403 double mNoth = 0.93827203;
+
404
+
405 if (!neutrino) {
+
406 mNeff = 0.93827203 - Eb / 1000.;
+
407 mNoth = 0.93956536;
+
408 }
+
409
+
410 double mLep = 0.10565837;
+
411 double eLep = sqrt(PLep * PLep + mLep * mLep);
+
412
+
413 double Enu = (2 * mNeff * eLep - mLep * mLep + mNoth * mNoth - mNeff * mNeff) /(2 * (mNeff - eLep + PLep * costh));
+
414
+
415 return Enu;
+
416
+
417}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ CalculateQ2()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double CalculateQ2 (double PLep,
double PUpd,
double EnuTrue,
double InitialQ2 
)
+
+ +

Definition at line 378 of file Structs.cpp.

+
378 {
+
379// ***************************************************************************
+
380
+
381 const double MLep = 0.10565837;
+
382
+
383 // Caluclate muon energy
+
384 double ELep = sqrt((MLep*MLep)+(PLep*PLep));
+
385
+
386 double CosTh = (2*EnuTrue*ELep - MLep*MLep - InitialQ2)/(2*EnuTrue*PLep);
+
387
+
388 ELep = sqrt((MLep*MLep)+(PUpd*PUpd));
+
389
+
390 // Calculate the new Q2
+
391 double Q2Upd = -(MLep*MLep) + 2.0*EnuTrue*(ELep - PUpd*CosTh);
+
392
+
393 return Q2Upd - InitialQ2;
+
394}
+
+
+
+ +

◆ CheckTH2PolyFileVersion()

+ +
+
+ + + + + + + + +
void CheckTH2PolyFileVersion (TFilefile)
+
+ +

Definition at line 97 of file Structs.cpp.

+
97 {
+
98// **************************************************
+
99
+
100 int FileROOTVersion = file->GetVersion();
+ +
102
+
103 // Remove last digit from number
+
104 // till only one digit is left
+
105 while (MainFileROOTVersion >= 10)
+ +
107
+
108 std::string SystemROOTVersion = std::string(ROOT_RELEASE);
+ +
110
+ +
112 {
+
113 std::cerr<<"File was produced with: "<<FileROOTVersion<<" ROOT version"<<std::endl;
+
114 std::cerr<<"Found: "<<SystemROOTVersion<<" ROOT version in the system"<<std::endl;
+
115 std::cerr<<"For some docuemntation please visit me"<<std::endl;
+
116 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
117 throw;
+
118 }
+
119}
+
+
+
+ +

◆ NoOverflowIntegral()

+ +
+
+ + + + + + + + +
double NoOverflowIntegral (TH2Polypoly)
+
+ +

Definition at line 140 of file Structs.cpp.

+
140 {
+
141// **************************************************
+
142
+
143 double integral = 0;
+
144
+
145 for(int i=1; i < poly->GetNumberOfBins()+1; i++)
+
146 {
+
147 integral += poly->GetBinContent(i);
+
148 }
+
149
+
150 return integral;
+
151
+
152} // end function
+
+
+
+ +

◆ NormalisePoly()

+ +
+
+ + + + + + + + +
TH2Poly * NormalisePoly (TH2PolyHistogram)
+
+ +

Definition at line 298 of file Structs.cpp.

+
298 {
+
299// ****************
+
300
+
301 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+ + +
304 std::string title = std::string(HistCopy->GetName())+"_norm";
+
305 HistCopy->SetNameTitle(title.c_str(), title.c_str());
+
306
+
307 return HistCopy;
+
308}
+
TH2Poly * PolyScaleWidth(TH2Poly *Histogram, double scale)
Definition Structs.cpp:312
+
double PolyIntegralWidth(TH2Poly *Histogram)
Definition Structs.cpp:334
+
+
+
+ +

◆ OverflowIntegral()

+ +
+
+ + + + + + + + +
double OverflowIntegral (TH2Polypoly)
+
+ +

Definition at line 123 of file Structs.cpp.

+
123 {
+
124// **************************************************
+
125
+
126 double overflow = 0;
+
127 //TH2Polys have 9 overflow bins
+
128 for(int iOverflow = -1; iOverflow > -10; iOverflow--)
+
129 {
+
130 overflow+=poly->GetBinContent(iOverflow);
+
131 }
+ +
133
+
134 return IntegralUn;
+
135
+
136} // end function
+
double NoOverflowIntegral(TH2Poly *poly)
Definition Structs.cpp:140
+
+
+
+ +

◆ PolyIntegralWidth()

+ +
+
+ + + + + + + + +
double PolyIntegralWidth (TH2PolyHistogram)
+
+ +

Definition at line 334 of file Structs.cpp.

+
334 {
+
335// ****************
+
336
+
337 double integral = 0;
+
338 double xlow, xup, ylow, yup, area;
+
339
+
340 for(int i = 1; i < Histogram->GetNumberOfBins()+1; i++)
+
341 {
+
342 TH2PolyBin* bin = (TH2PolyBin*)Histogram->GetBins()->At(i-1);
+
343 xlow = bin->GetXMin();
+
344 xup = bin->GetXMax();
+
345 ylow = bin->GetYMin();
+
346 yup = bin->GetYMax();
+
347 area = (xup-xlow)*(yup-ylow);
+
348 integral += Histogram->GetBinContent(i)*area;
+
349 }
+
350
+
351 return integral;
+
352}
+
+
+
+ +

◆ PolyProjectionX()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TH1D * PolyProjectionX (TObjectpoly,
std::string TempName,
std::vector< doublexbins,
bool computeErrors 
)
+
+ +

Definition at line 156 of file Structs.cpp.

+
156 {
+
157// **************************************************
+
158
+
159 TH1D* hProjX = new TH1D((TempName+"_x").c_str(),(TempName+"_x").c_str(),xbins.size()-1,&xbins[0]);
+
160
+
161 //KS: Temp Histogram to store error, use double as this is thread safe
+
162 double *hProjX_Error = new double[hProjX->GetXaxis()->GetNbins()+1];
+
163 for (int i = 0; i <= hProjX->GetXaxis()->GetNbins(); ++i) {hProjX_Error[i] = 0;}
+
164 double xlow, xup, frac=0;
+
165
+
166 //loop over bins in the poly
+
167 for(int i = 0; i<((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
168 {
+
169 //get bin and its edges
+
170 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
171 xlow = bin->GetXMin();
+
172 xup = bin->GetXMax();
+
173
+
174 //Loop over projected bins, find fraction of poly bin in each
+
175 for(int dx = 0; dx < int(xbins.size()); dx++)
+
176 {
+
177 if(xbins[dx+1] <= xlow || xbins[dx] >= xup)
+
178 {
+
179 frac = 0;
+
180 }
+
181 else if(xbins[dx]<=xlow && xbins[dx+1] >= xup)
+
182 {
+
183 frac = 1;
+
184 }
+
185 else if(xbins[dx]<=xlow && xbins[dx+1] <= xup)
+
186 {
+
187 frac = (xbins[dx+1]-xlow)/(xup-xlow);
+
188 }
+
189 else if(xbins[dx]>=xlow && xbins[dx+1] >= xup)
+
190 {
+
191 frac = (xup-xbins[dx])/(xup-xlow);
+
192 }
+
193 else if(xbins[dx]>=xlow && xbins[dx+1] <= xup)
+
194 {
+
195 frac = (xbins[dx+1]-xbins[dx])/(xup-xlow);
+
196 }
+
197 else
+
198 {
+
199 frac=0;
+
200 }
+
201 hProjX->SetBinContent(dx+1,hProjX->GetBinContent(dx+1)+frac*bin->GetContent());
+
202 //KS: Follow ROOT implementation and sum up the variance
+
203 if(computeErrors)
+
204 {
+
205 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
206 //but numbering of GetBinError is differnt than GetBins...
+
207 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
209 }
+
210 }
+
211 }
+
212 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
213 if(computeErrors)
+
214 {
+
215 for (int i = 1; i <= hProjX->GetXaxis()->GetNbins(); ++i)
+
216 {
+
217 double Error = TMath::Sqrt(hProjX_Error[i]);
+
218 hProjX->SetBinError(i, Error);
+
219 }
+
220 }
+
221 delete[] hProjX_Error;
+
222 return hProjX;
+
223} // end project poly X function
+
+
+
+ +

◆ PolyProjectionY()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TH1D * PolyProjectionY (TObjectpoly,
std::string TempName,
std::vector< doubleybins,
bool computeErrors 
)
+
+ +

Definition at line 227 of file Structs.cpp.

+
227 {
+
228// **************************************************
+
229
+
230 TH1D* hProjY = new TH1D((TempName+"_y").c_str(),(TempName+"_y").c_str(),ybins.size()-1,&ybins[0]);
+
231 //KS: Temp Histogram to store error, use double as this is thread safe
+
232 double *hProjY_Error = new double[hProjY->GetXaxis()->GetNbins()+1];
+
233 for (int i = 0; i <= hProjY->GetXaxis()->GetNbins(); ++i) {hProjY_Error[i] = 0;}
+
234
+
235 double ylow, yup, frac=0;
+
236
+
237 //loop over bins in the poly
+
238 for(int i = 0; i < ((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
239 {
+
240 //get bin and its edges
+
241 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
242 ylow = bin->GetYMin();
+
243 yup = bin->GetYMax();
+
244
+
245 //Loop over projected bins, find fraction of poly bin in each
+
246 for(int dy = 0; dy < int(ybins.size()); dy++)
+
247 {
+
248 if(ybins[dy+1]<=ylow || ybins[dy] >= yup)
+
249 {
+
250 frac = 0;
+
251 }
+
252 else if(ybins[dy] <= ylow && ybins[dy+1] >= yup)
+
253 {
+
254 frac = 1;
+
255 }
+
256 else if(ybins[dy] <= ylow && ybins[dy+1] <= yup)
+
257 {
+
258 frac = (ybins[dy+1]-ylow)/(yup-ylow);
+
259 }
+
260 else if(ybins[dy] >= ylow && ybins[dy+1] >= yup)
+
261 {
+
262 frac = (yup-ybins[dy])/(yup-ylow);
+
263 }
+
264 else if(ybins[dy] >= ylow && ybins[dy+1] <= yup)
+
265 {
+
266 frac = (ybins[dy+1]-ybins[dy])/(yup-ylow);
+
267 }
+
268 else
+
269 {
+
270 frac=0;
+
271 }
+
272 hProjY->SetBinContent(dy+1,hProjY->GetBinContent(dy+1)+frac*bin->GetContent());
+
273 //KS: Follow ROOT implementation and sum up the variance
+
274 if(computeErrors)
+
275 {
+
276 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
277 //but numbering of GetBinError is differnt than GetBins...
+
278 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
280 }
+
281 }
+
282 }
+
283 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
284 if(computeErrors)
+
285 {
+
286 for (int i = 1; i <= hProjY->GetXaxis()->GetNbins(); ++i)
+
287 {
+
288 double Error = TMath::Sqrt(hProjY_Error[i]);
+
289 hProjY->SetBinError(i, Error);
+
290 }
+
291 }
+
292 delete[] hProjY_Error;
+
293 return hProjY;
+
294} // end project poly Y function
+
+
+
+ +

◆ PolyScaleWidth()

+ +
+
+ + + + + + + + + + + + + + + + + + +
TH2Poly * PolyScaleWidth (TH2PolyHistogram,
double scale 
)
+
+ +

Definition at line 312 of file Structs.cpp.

+
312 {
+
313// ****************
+
314
+
315 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+
316 double xlow, xup, ylow, yup, area;
+
317
+
318 for(int i = 1; i < HistCopy->GetNumberOfBins()+1; i++)
+
319 {
+
320 TH2PolyBin* bin = (TH2PolyBin*)HistCopy->GetBins()->At(i-1);
+
321 xlow = bin->GetXMin();
+
322 xup = bin->GetXMax();
+
323 ylow = bin->GetYMin();
+
324 yup = bin->GetYMax();
+
325 area = (xup-xlow)*(yup-ylow);
+
326 HistCopy->SetBinContent(i, Histogram->GetBinContent(i)/(area*scale));
+
327 }
+
328
+
329 return HistCopy;
+
330}
+
+
+
+ +

◆ RemoveFitter()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void RemoveFitter (TH1Dhist,
std::string name 
)
+
+ +

Definition at line 356 of file Structs.cpp.

+
356 {
+
357 // *********************
+
358
+
359 TList *listOfFunctions = hist->GetListOfFunctions();
+
360 TF1 *fitter = dynamic_cast<TF1*>(listOfFunctions->FindObject(name.c_str()));
+
361
+
362 listOfFunctions->Remove(fitter);
+
363 delete fitter;
+
364}
+
+
+
+ +

◆ returnCherenkovThresholdMomentum()

+ +
+
+ + + + + + + + +
double returnCherenkovThresholdMomentum (int PDG)
+
+ +

Definition at line 368 of file Structs.cpp.

+
368 {
+
369// ****************
+
370 double refractiveIndex = 1.334; //DB From https://github.com/fiTQun/fiTQun/blob/646cf9c8ba3d4f7400bcbbde029d5ca15513a3bf/fiTQun_shared.cc#L757
+ + +
373 return momentumThreshold;
+
374}
+
double GetMassFromPDG(int PDG)
Definition Structs.cpp:11
+
+
+
+
+ + + + diff --git a/Structs_8cpp_source.html b/Structs_8cpp_source.html new file mode 100644 index 00000000..f94fb764 --- /dev/null +++ b/Structs_8cpp_source.html @@ -0,0 +1,553 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/Structs.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Structs.cpp
+
+
+Go to the documentation of this file.
1#include "Structs.h"
+
2
+
3#include "TList.h"
+
4#include "TObjArray.h"
+
5
+
6namespace MaCh3Utils {
+
7
+
8 // *****************************
+
9 // Get the mass of a particle from the PDG
+
10 // In GeV, not MeV!
+
+
11 double GetMassFromPDG(int PDG) {
+
12 // *****************************
+
13
+
14 switch (abs(PDG)) {
+
15 case 11:
+
16 return 0.511E-3;
+
17 break;
+
18 case 13:
+
19 return 105.658E-3;
+
20 break;
+
21 case 15:
+
22 return 1.77682;
+
23 break;
+
24 case 22:
+
25 return 0.;
+
26 break;
+
27 case 211:
+
28 return 139.57E-3;
+
29 break;
+
30 case 111:
+
31 return 134.98E-3;
+
32 break;
+
33 case 2112:
+
34 return 939.565E-3;
+
35 break;
+
36 case 2212:
+
37 return 938.27E-3;
+
38 break;
+
39 //Oxygen nucleus
+
40 case 1000080160:
+
41 return 14.89926;
+
42 break;
+
43 //eta
+
44 case 221:
+
45 return 547.862E-3;
+
46 break;
+
47 //K^0 (s or l)
+
48 case 311:
+
49 case 130:
+
50 case 310:
+
51 return 497.611E-3;
+
52 break;
+
53 case 321:
+
54 return 493.677E-3;
+
55 break;
+
56 // Lamda baryon
+
57 case 3122:
+
58 return 1115.683E-3;
+
59 break;
+
60 case 12:
+
61 case 14:
+
62 case 16:
+
63 return 0.0;
+
64 break;
+
65 default:
+
66 std::cerr << "Haven't got a saved mass for PDG " << PDG << std::endl;
+
67 std::cerr << "Please implement me! " << __FILE__ << ":" << __LINE__ << std::endl;
+
68 throw;
+
69 } // End switch
+
70
+
71 std::cerr << "Warning, didn't catch a saved mass" << std::endl;
+
72 return 0;
+
73 }
+
+
74
+
75
+
76 //DB Anything added here must be of the form 2^X, where X is an integer
+
77 //
+
78 //DB Used to contain which DetIDs are supported
+
79 std::unordered_map<int,int>KnownDetIDsMap({
+
80 {0,1}, //ND
+
81 {1,8}, //FD
+
82 {2,16}, //SK1Rmu
+
83 {3,32}, //Nova
+
84 {4,64}, //Atm SubGeV e-like
+
85 {5,128}, //Atm SubGeV mu-like
+
86 {6,256}, //Atm MultiGeV e-like
+
87 {7,512}, //Atm MultiGeV mu-like
+
88 });
+
89
+ +
91
+
92}
+
93
+
94// **************************************************
+
95//KS: ROOT changes something with binning when moving from ROOT 5 to ROOT 6. If you open ROOT5 produced file with ROOT6 you will be missing 9 last bins
+
96// However if you use ROOT6 and have ROOT6 file exactly the same code will work. Something have changed with how TH2Poly bins are stored in TFile
+
+ +
98// **************************************************
+
99
+
100 int FileROOTVersion = file->GetVersion();
+ +
102
+
103 // Remove last digit from number
+
104 // till only one digit is left
+
105 while (MainFileROOTVersion >= 10)
+ +
107
+
108 std::string SystemROOTVersion = std::string(ROOT_RELEASE);
+ +
110
+ +
112 {
+
113 std::cerr<<"File was produced with: "<<FileROOTVersion<<" ROOT version"<<std::endl;
+
114 std::cerr<<"Found: "<<SystemROOTVersion<<" ROOT version in the system"<<std::endl;
+
115 std::cerr<<"For some docuemntation please visit me"<<std::endl;
+
116 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
117 throw;
+
118 }
+
119}
+
+
120
+
121// **************************************************
+
122//WP: Helper function for calculating unbinned Integral of TH2Poly i.e including overflow
+
+ +
124// **************************************************
+
125
+
126 double overflow = 0;
+
127 //TH2Polys have 9 overflow bins
+
128 for(int iOverflow = -1; iOverflow > -10; iOverflow--)
+
129 {
+
130 overflow+=poly->GetBinContent(iOverflow);
+
131 }
+ +
133
+
134 return IntegralUn;
+
135
+
136} // end function
+
+
137
+
138// **************************************************
+
139//WP: Helper function for calculating binned Integral of TH2Poly i.e not including overflow
+
+ +
141// **************************************************
+
142
+
143 double integral = 0;
+
144
+
145 for(int i=1; i < poly->GetNumberOfBins()+1; i++)
+
146 {
+
147 integral += poly->GetBinContent(i);
+
148 }
+
149
+
150 return integral;
+
151
+
152} // end function
+
+
153
+
154// **************************************************
+
155//WP: Helper function for projecting TH2Poly onto the X axis
+
+
156TH1D* PolyProjectionX(TObject* poly, std::string TempName, std::vector<double> xbins, bool computeErrors) {
+
157// **************************************************
+
158
+
159 TH1D* hProjX = new TH1D((TempName+"_x").c_str(),(TempName+"_x").c_str(),xbins.size()-1,&xbins[0]);
+
160
+
161 //KS: Temp Histogram to store error, use double as this is thread safe
+
162 double *hProjX_Error = new double[hProjX->GetXaxis()->GetNbins()+1];
+
163 for (int i = 0; i <= hProjX->GetXaxis()->GetNbins(); ++i) {hProjX_Error[i] = 0;}
+
164 double xlow, xup, frac=0;
+
165
+
166 //loop over bins in the poly
+
167 for(int i = 0; i<((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
168 {
+
169 //get bin and its edges
+
170 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
171 xlow = bin->GetXMin();
+
172 xup = bin->GetXMax();
+
173
+
174 //Loop over projected bins, find fraction of poly bin in each
+
175 for(int dx = 0; dx < int(xbins.size()); dx++)
+
176 {
+
177 if(xbins[dx+1] <= xlow || xbins[dx] >= xup)
+
178 {
+
179 frac = 0;
+
180 }
+
181 else if(xbins[dx]<=xlow && xbins[dx+1] >= xup)
+
182 {
+
183 frac = 1;
+
184 }
+
185 else if(xbins[dx]<=xlow && xbins[dx+1] <= xup)
+
186 {
+
187 frac = (xbins[dx+1]-xlow)/(xup-xlow);
+
188 }
+
189 else if(xbins[dx]>=xlow && xbins[dx+1] >= xup)
+
190 {
+
191 frac = (xup-xbins[dx])/(xup-xlow);
+
192 }
+
193 else if(xbins[dx]>=xlow && xbins[dx+1] <= xup)
+
194 {
+
195 frac = (xbins[dx+1]-xbins[dx])/(xup-xlow);
+
196 }
+
197 else
+
198 {
+
199 frac=0;
+
200 }
+
201 hProjX->SetBinContent(dx+1,hProjX->GetBinContent(dx+1)+frac*bin->GetContent());
+
202 //KS: Follow ROOT implementation and sum up the variance
+
203 if(computeErrors)
+
204 {
+
205 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
206 //but numbering of GetBinError is differnt than GetBins...
+
207 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
209 }
+
210 }
+
211 }
+
212 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
213 if(computeErrors)
+
214 {
+
215 for (int i = 1; i <= hProjX->GetXaxis()->GetNbins(); ++i)
+
216 {
+
217 double Error = TMath::Sqrt(hProjX_Error[i]);
+
218 hProjX->SetBinError(i, Error);
+
219 }
+
220 }
+
221 delete[] hProjX_Error;
+
222 return hProjX;
+
223} // end project poly X function
+
+
224
+
225// **************************************************
+
226//WP: Helper function for projecting TH2Poly onto the Y axis
+
+
227TH1D* PolyProjectionY(TObject* poly, std::string TempName, std::vector<double> ybins, bool computeErrors) {
+
228// **************************************************
+
229
+
230 TH1D* hProjY = new TH1D((TempName+"_y").c_str(),(TempName+"_y").c_str(),ybins.size()-1,&ybins[0]);
+
231 //KS: Temp Histogram to store error, use double as this is thread safe
+
232 double *hProjY_Error = new double[hProjY->GetXaxis()->GetNbins()+1];
+
233 for (int i = 0; i <= hProjY->GetXaxis()->GetNbins(); ++i) {hProjY_Error[i] = 0;}
+
234
+
235 double ylow, yup, frac=0;
+
236
+
237 //loop over bins in the poly
+
238 for(int i = 0; i < ((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
239 {
+
240 //get bin and its edges
+
241 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
242 ylow = bin->GetYMin();
+
243 yup = bin->GetYMax();
+
244
+
245 //Loop over projected bins, find fraction of poly bin in each
+
246 for(int dy = 0; dy < int(ybins.size()); dy++)
+
247 {
+
248 if(ybins[dy+1]<=ylow || ybins[dy] >= yup)
+
249 {
+
250 frac = 0;
+
251 }
+
252 else if(ybins[dy] <= ylow && ybins[dy+1] >= yup)
+
253 {
+
254 frac = 1;
+
255 }
+
256 else if(ybins[dy] <= ylow && ybins[dy+1] <= yup)
+
257 {
+
258 frac = (ybins[dy+1]-ylow)/(yup-ylow);
+
259 }
+
260 else if(ybins[dy] >= ylow && ybins[dy+1] >= yup)
+
261 {
+
262 frac = (yup-ybins[dy])/(yup-ylow);
+
263 }
+
264 else if(ybins[dy] >= ylow && ybins[dy+1] <= yup)
+
265 {
+
266 frac = (ybins[dy+1]-ybins[dy])/(yup-ylow);
+
267 }
+
268 else
+
269 {
+
270 frac=0;
+
271 }
+
272 hProjY->SetBinContent(dy+1,hProjY->GetBinContent(dy+1)+frac*bin->GetContent());
+
273 //KS: Follow ROOT implementation and sum up the variance
+
274 if(computeErrors)
+
275 {
+
276 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
277 //but numbering of GetBinError is differnt than GetBins...
+
278 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
280 }
+
281 }
+
282 }
+
283 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
284 if(computeErrors)
+
285 {
+
286 for (int i = 1; i <= hProjY->GetXaxis()->GetNbins(); ++i)
+
287 {
+
288 double Error = TMath::Sqrt(hProjY_Error[i]);
+
289 hProjY->SetBinError(i, Error);
+
290 }
+
291 }
+
292 delete[] hProjY_Error;
+
293 return hProjY;
+
294} // end project poly Y function
+
+
295
+
296// ****************
+
297//WP: Normalise a th2poly
+
+ +
299// ****************
+
300
+
301 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+ + +
304 std::string title = std::string(HistCopy->GetName())+"_norm";
+
305 HistCopy->SetNameTitle(title.c_str(), title.c_str());
+
306
+
307 return HistCopy;
+
308}
+
+
309
+
310// ****************
+
311//WP: Scale a TH2Poly and divide by bin width
+
+ +
313// ****************
+
314
+
315 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+
316 double xlow, xup, ylow, yup, area;
+
317
+
318 for(int i = 1; i < HistCopy->GetNumberOfBins()+1; i++)
+
319 {
+
320 TH2PolyBin* bin = (TH2PolyBin*)HistCopy->GetBins()->At(i-1);
+
321 xlow = bin->GetXMin();
+
322 xup = bin->GetXMax();
+
323 ylow = bin->GetYMin();
+
324 yup = bin->GetYMax();
+
325 area = (xup-xlow)*(yup-ylow);
+
326 HistCopy->SetBinContent(i, Histogram->GetBinContent(i)/(area*scale));
+
327 }
+
328
+
329 return HistCopy;
+
330}
+
+
331
+
332// ****************
+
333//WP: Integral of TH2Poly multiplied by bin width
+
+ +
335// ****************
+
336
+
337 double integral = 0;
+
338 double xlow, xup, ylow, yup, area;
+
339
+
340 for(int i = 1; i < Histogram->GetNumberOfBins()+1; i++)
+
341 {
+
342 TH2PolyBin* bin = (TH2PolyBin*)Histogram->GetBins()->At(i-1);
+
343 xlow = bin->GetXMin();
+
344 xup = bin->GetXMax();
+
345 ylow = bin->GetYMin();
+
346 yup = bin->GetYMax();
+
347 area = (xup-xlow)*(yup-ylow);
+
348 integral += Histogram->GetBinContent(i)*area;
+
349 }
+
350
+
351 return integral;
+
352}
+
+
353
+
354// *********************
+
355//KS: Remove fitted TF1 from hist to make comparison easier
+
+
356void RemoveFitter(TH1D* hist, std::string name) {
+
357 // *********************
+
358
+
359 TList *listOfFunctions = hist->GetListOfFunctions();
+
360 TF1 *fitter = dynamic_cast<TF1*>(listOfFunctions->FindObject(name.c_str()));
+
361
+
362 listOfFunctions->Remove(fitter);
+
363 delete fitter;
+
364}
+
+
365
+
366// ****************
+
367//DB Get the Cernekov momentum threshold in MeV
+
+ +
369// ****************
+
370 double refractiveIndex = 1.334; //DB From https://github.com/fiTQun/fiTQun/blob/646cf9c8ba3d4f7400bcbbde029d5ca15513a3bf/fiTQun_shared.cc#L757
+ + +
373 return momentumThreshold;
+
374}
+
+
375
+
376// **************************************************************************
+
377// Recalculate Q^2 after Eb shift. Takes in shifted lepton momentum, lepton angle, and true neutrino energy
+
+
378double CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2){
+
379// ***************************************************************************
+
380
+
381 const double MLep = 0.10565837;
+
382
+
383 // Caluclate muon energy
+
384 double ELep = sqrt((MLep*MLep)+(PLep*PLep));
+
385
+
386 double CosTh = (2*EnuTrue*ELep - MLep*MLep - InitialQ2)/(2*EnuTrue*PLep);
+
387
+
388 ELep = sqrt((MLep*MLep)+(PUpd*PUpd));
+
389
+
390 // Calculate the new Q2
+
391 double Q2Upd = -(MLep*MLep) + 2.0*EnuTrue*(ELep - PUpd*CosTh);
+
392
+
393 return Q2Upd - InitialQ2;
+
394}
+
+
395
+
396
+
397// **************************************************************************
+
398// Recalculate Enu after Eb shift. Takes in shifted lepton momentum, lepton angle, and binding energy change, and if nu/anu
+
+
399double CalculateEnu(double PLep, double costh, double Eb, bool neutrino){
+
400// ***************************************************************************
+
401
+
402 double mNeff = 0.93956536 - Eb / 1000.;
+
403 double mNoth = 0.93827203;
+
404
+
405 if (!neutrino) {
+
406 mNeff = 0.93827203 - Eb / 1000.;
+
407 mNoth = 0.93956536;
+
408 }
+
409
+
410 double mLep = 0.10565837;
+
411 double eLep = sqrt(PLep * PLep + mLep * mLep);
+
412
+
413 double Enu = (2 * mNeff * eLep - mLep * mLep + mNoth * mNoth - mNeff * mNeff) /(2 * (mNeff - eLep + PLep * costh));
+
414
+
415 return Enu;
+
416
+
417}
+
+
void CheckTH2PolyFileVersion(TFile *file)
Definition Structs.cpp:97
+
double OverflowIntegral(TH2Poly *poly)
Definition Structs.cpp:123
+
TH2Poly * PolyScaleWidth(TH2Poly *Histogram, double scale)
Definition Structs.cpp:312
+
double returnCherenkovThresholdMomentum(int PDG)
Definition Structs.cpp:368
+
double CalculateEnu(double PLep, double costh, double Eb, bool neutrino)
Definition Structs.cpp:399
+
double PolyIntegralWidth(TH2Poly *Histogram)
Definition Structs.cpp:334
+
double NoOverflowIntegral(TH2Poly *poly)
Definition Structs.cpp:140
+
TH1D * PolyProjectionX(TObject *poly, std::string TempName, std::vector< double > xbins, bool computeErrors)
Definition Structs.cpp:156
+
TH2Poly * NormalisePoly(TH2Poly *Histogram)
Definition Structs.cpp:298
+
double CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2)
Definition Structs.cpp:378
+
TH1D * PolyProjectionY(TObject *poly, std::string TempName, std::vector< double > ybins, bool computeErrors)
Definition Structs.cpp:227
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
int nKnownDetIDs
Definition Structs.cpp:90
+
double GetMassFromPDG(int PDG)
Definition Structs.cpp:11
+
std::unordered_map< int, int > KnownDetIDsMap
+
+ + + + diff --git a/Structs_8h.html b/Structs_8h.html new file mode 100644 index 00000000..3512d196 --- /dev/null +++ b/Structs_8h.html @@ -0,0 +1,1790 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/Structs.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
Structs.h File Reference
+
+
+
#include <sstream>
+#include <fstream>
+#include <iostream>
+#include <vector>
+#include <iomanip>
+#include "set"
+#include "TSpline.h"
+#include "TF1.h"
+#include "TLorentzVector.h"
+#include "TObjString.h"
+#include "unordered_map"
+#include "TH2Poly.h"
+#include "list"
+#include "TFile.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + +

+Classes

class  XsecNorms4
 
struct  FastSplineInfo
 
class  XSecStruct< T >
 
class  TF1_red
 
class  TSpline3_red
 
class  Truncated_Spline
 
class  MaCh3_Modes
 
+ + + +

+Namespaces

namespace  MaCh3Utils
 
+ + + + + + + + + + + + + + + + + +

+Macros

#define __float__   double
 
#define __int__   int
 
#define __unsigned_int__   unsigned int
 
#define __TH2PolyOverflowBins__   9
 
#define __BAD_DOUBLE__   -999.99
 
#define __BAD_INT__   -999
 
#define __TH2PolyOverflowBins__   9
 
#define __DEFAULT_RETURN_VAL__   -999999.123456
 
+ + + + + + + + + + + + + +

+Enumerations

enum  SplineInterpolation {
+  kTSpline3 +, kLinear +, kMonotonic +, kAkima +,
+  kSplineInterpolations +
+ }
 
enum  TargetMat {
+  kTarget_H = 1 +, kTarget_C = 12 +, kTarget_N = 14 +, kTarget_O = 16 +,
+  kTarget_Al = 27 +, kTarget_Ar = 40 +, kTarget_Ti = 48 +, kTarget_Fe = 56 +,
+  kTarget_Pb = 207 +
+ }
 
enum  NuPDG {
+  kNue = 12 +, kNumu = 14 +, kNutau = 16 +, kNueBar = -12 +,
+  kNumuBar = -14 +, kNutauBar = -16 +
+ }
 
enum  ProbNu {
+  kProbNue = 1 +, kProbNumu = 2 +, kProbNutau = 3 +, kProbNueBar = -1 +,
+  kProbNumuBar = -2 +, kProbNutauBar = -3 +
+ }
 
enum  TestStatistic {
+  kPoisson +, kBarlowBeeston +, kIceCube +, kPearson +,
+  kDembinskiAbdelmottele +, kNTestStatistics +
+ }
 
enum  CUDAProb_nu {
+  e_e = 0 +, e_m = 1 +, e_t = 2 +, m_e = 3 +,
+  m_m = 4 +, m_t = 5 +, t_e = 6 +, t_m = 7 +,
+  t_t = 8 +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T , size_t N>
std::vector< TMakeVector (const T(&data)[N])
 
constexpr unsigned int str2int (const char *str, int h=0)
 
std::string SplineInterpolation_ToString (SplineInterpolation i)
 
double MaCh3Utils::GetMassFromPDG (int PDG)
 
std::string TargetMat_ToString (TargetMat i)
 
int PDGToProbs (NuPDG pdg)
 
int ProbsToPDG (ProbNu NuType)
 
std::string TestStatistic_ToString (TestStatistic i)
 
double OverflowIntegral (TH2Poly *)
 
double NoOverflowIntegral (TH2Poly *)
 
TH1DPolyProjectionX (TObject *poly, std::string TempName, std::vector< double > xbins, bool computeErrors=false)
 
TH1DPolyProjectionY (TObject *poly, std::string TempName, std::vector< double > ybins, bool computeErrors=false)
 
TH2PolyNormalisePoly (TH2Poly *Histogram)
 
TH2PolyPolyScaleWidth (TH2Poly *Histogram, double scale)
 
double PolyIntegralWidth (TH2Poly *Histogram)
 
void CheckTH2PolyFileVersion (TFile *file)
 
void RemoveFitter (TH1D *hist, std::string name)
 
std::string file_exists (std::string filename)
 
double returnCherenkovThresholdMomentum (int PDG)
 
double CalculateQ2 (double PLep, double PUpd, double EnuTrue, double InitialQ2=0.0)
 
double CalculateEnu (double PLep, double cosTheta, double EB, bool neutrino)
 
CUDAProb_nu GetCUDAProbFlavour (int nu_i, int nu_f)
 
+ + + +

+Variables

std::unordered_map< int, intMaCh3Utils::KnownDetIDsMap
 
+

Macro Definition Documentation

+ +

◆ __BAD_DOUBLE__

+ +
+
+ + + + +
#define __BAD_DOUBLE__   -999.99
+
+ +

Definition at line 22 of file Structs.h.

+ +
+
+ +

◆ __BAD_INT__

+ +
+
+ + + + +
#define __BAD_INT__   -999
+
+ +

Definition at line 23 of file Structs.h.

+ +
+
+ +

◆ __DEFAULT_RETURN_VAL__

+ +
+
+ + + + +
#define __DEFAULT_RETURN_VAL__   -999999.123456
+
+ +

Definition at line 27 of file Structs.h.

+ +
+
+ +

◆ __float__

+ +
+
+ + + + +
#define __float__   double
+
+ +

Definition at line 13 of file Structs.h.

+ +
+
+ +

◆ __int__

+ +
+
+ + + + +
#define __int__   int
+
+ +

Definition at line 14 of file Structs.h.

+ +
+
+ +

◆ __TH2PolyOverflowBins__ [1/2]

+ +
+
+ + + + +
#define __TH2PolyOverflowBins__   9
+
+ +

Definition at line 19 of file Structs.h.

+ +
+
+ +

◆ __TH2PolyOverflowBins__ [2/2]

+ +
+
+ + + + +
#define __TH2PolyOverflowBins__   9
+
+ +

Definition at line 19 of file Structs.h.

+ +
+
+ +

◆ __unsigned_int__

+ +
+
+ + + + +
#define __unsigned_int__   unsigned int
+
+ +

Definition at line 15 of file Structs.h.

+ +
+
+

Enumeration Type Documentation

+ +

◆ CUDAProb_nu

+ +
+
+ + + + +
enum CUDAProb_nu
+
+ + + + + + + + + + +
Enumerator
e_e 
e_m 
e_t 
m_e 
m_m 
m_t 
t_e 
t_m 
t_t 
+ +

Definition at line 1096 of file Structs.h.

+
1096 {
+
1097 e_e = 0,
+
1098 e_m = 1,
+
1099 e_t = 2,
+
1100 m_e = 3,
+
1101 m_m = 4,
+
1102 m_t = 5,
+
1103 t_e = 6,
+
1104 t_m = 7,
+
1105 t_t = 8
+
1106};
+
@ e_t
Definition Structs.h:1099
+
@ m_m
Definition Structs.h:1101
+
@ t_t
Definition Structs.h:1105
+
@ e_m
Definition Structs.h:1098
+
@ m_e
Definition Structs.h:1100
+
@ t_e
Definition Structs.h:1103
+
@ e_e
Definition Structs.h:1097
+
@ t_m
Definition Structs.h:1104
+
@ m_t
Definition Structs.h:1102
+
+
+
+ +

◆ NuPDG

+ +
+
+ + + + +
enum NuPDG
+
+ + + + + + + +
Enumerator
kNue 
kNumu 
kNutau 
kNueBar 
kNumuBar 
kNutauBar 
+ +

Definition at line 913 of file Structs.h.

+
913 {
+
914// *****************
+
915 kNue = 12,
+
916 kNumu = 14,
+
917 kNutau = 16,
+
918 kNueBar = -12,
+
919 kNumuBar = -14,
+
920 kNutauBar = -16
+
921};
+
@ kNutauBar
Definition Structs.h:920
+
@ kNutau
Definition Structs.h:917
+
@ kNumuBar
Definition Structs.h:919
+
@ kNueBar
Definition Structs.h:918
+
@ kNue
Definition Structs.h:915
+
@ kNumu
Definition Structs.h:916
+
+
+
+ +

◆ ProbNu

+ +
+
+ + + + +
enum ProbNu
+
+ + + + + + + +
Enumerator
kProbNue 
kProbNumu 
kProbNutau 
kProbNueBar 
kProbNumuBar 
kProbNutauBar 
+ +

Definition at line 925 of file Structs.h.

+
925 {
+
926// *****************
+
927 kProbNue = 1,
+
928 kProbNumu = 2,
+
929 kProbNutau = 3,
+
930 kProbNueBar = -1,
+
931 kProbNumuBar = -2,
+
932 kProbNutauBar = -3
+
933};
+
@ kProbNutau
Definition Structs.h:929
+
@ kProbNutauBar
Definition Structs.h:932
+
@ kProbNumu
Definition Structs.h:928
+
@ kProbNue
Definition Structs.h:927
+
@ kProbNumuBar
Definition Structs.h:931
+
@ kProbNueBar
Definition Structs.h:930
+
+
+
+ +

◆ SplineInterpolation

+ +
+
+ + + + + + +
Enumerator
kTSpline3 
kLinear 
kMonotonic 
kAkima 
kSplineInterpolations 
+ +

Definition at line 307 of file Structs.h.

+
307 {
+
308 kTSpline3,
+
309 kLinear,
+ +
311 kAkima,
+
312 kSplineInterpolations //This only enumarates
+
313};
+
@ kTSpline3
Definition Structs.h:308
+
@ kMonotonic
Definition Structs.h:310
+
@ kSplineInterpolations
Definition Structs.h:312
+
@ kLinear
Definition Structs.h:309
+
@ kAkima
Definition Structs.h:311
+
+
+
+ +

◆ TargetMat

+ +
+
+ + + + +
enum TargetMat
+
+ + + + + + + + + + +
Enumerator
kTarget_H 
kTarget_C 
kTarget_N 
kTarget_O 
kTarget_Al 
kTarget_Ar 
kTarget_Ti 
kTarget_Fe 
kTarget_Pb 
+ +

Definition at line 859 of file Structs.h.

+
859 {
+
860// *****************
+
861 kTarget_H = 1,
+
862 kTarget_C = 12,
+
863 kTarget_N = 14,
+
864 kTarget_O = 16,
+
865 kTarget_Al = 27,
+
866 kTarget_Ar = 40,
+
867 kTarget_Ti = 48,
+
868 kTarget_Fe = 56,
+
869 kTarget_Pb = 207
+
870};
+
@ kTarget_Fe
Definition Structs.h:868
+
@ kTarget_C
Definition Structs.h:862
+
@ kTarget_Al
Definition Structs.h:865
+
@ kTarget_H
Definition Structs.h:861
+
@ kTarget_Ti
Definition Structs.h:867
+
@ kTarget_Ar
Definition Structs.h:866
+
@ kTarget_N
Definition Structs.h:863
+
@ kTarget_Pb
Definition Structs.h:869
+
@ kTarget_O
Definition Structs.h:864
+
+
+
+ +

◆ TestStatistic

+ +
+
+ + + + +
enum TestStatistic
+
+ + + + + + + +
Enumerator
kPoisson 
kBarlowBeeston 
kIceCube 
kPearson 
kDembinskiAbdelmottele 
kNTestStatistics 
+ +

Definition at line 1000 of file Structs.h.

+
1000 {
+
1001 kPoisson,
+ +
1003 kIceCube,
+
1004 kPearson,
+ +
1006 kNTestStatistics //This only enumarates statistic
+
1007};
+
@ kNTestStatistics
Definition Structs.h:1006
+
@ kPearson
Definition Structs.h:1004
+
@ kBarlowBeeston
Definition Structs.h:1002
+
@ kIceCube
Definition Structs.h:1003
+
@ kDembinskiAbdelmottele
Definition Structs.h:1005
+
@ kPoisson
Definition Structs.h:1001
+
+
+
+

Function Documentation

+ +

◆ CalculateEnu()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double CalculateEnu (double PLep,
double cosTheta,
double EB,
bool neutrino 
)
+
+ +

Definition at line 399 of file Structs.cpp.

+
399 {
+
400// ***************************************************************************
+
401
+
402 double mNeff = 0.93956536 - Eb / 1000.;
+
403 double mNoth = 0.93827203;
+
404
+
405 if (!neutrino) {
+
406 mNeff = 0.93827203 - Eb / 1000.;
+
407 mNoth = 0.93956536;
+
408 }
+
409
+
410 double mLep = 0.10565837;
+
411 double eLep = sqrt(PLep * PLep + mLep * mLep);
+
412
+
413 double Enu = (2 * mNeff * eLep - mLep * mLep + mNoth * mNoth - mNeff * mNeff) /(2 * (mNeff - eLep + PLep * costh));
+
414
+
415 return Enu;
+
416
+
417}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ CalculateQ2()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double CalculateQ2 (double PLep,
double PUpd,
double EnuTrue,
double InitialQ2 = 0.0 
)
+
+ +

Definition at line 378 of file Structs.cpp.

+
378 {
+
379// ***************************************************************************
+
380
+
381 const double MLep = 0.10565837;
+
382
+
383 // Caluclate muon energy
+
384 double ELep = sqrt((MLep*MLep)+(PLep*PLep));
+
385
+
386 double CosTh = (2*EnuTrue*ELep - MLep*MLep - InitialQ2)/(2*EnuTrue*PLep);
+
387
+
388 ELep = sqrt((MLep*MLep)+(PUpd*PUpd));
+
389
+
390 // Calculate the new Q2
+
391 double Q2Upd = -(MLep*MLep) + 2.0*EnuTrue*(ELep - PUpd*CosTh);
+
392
+
393 return Q2Upd - InitialQ2;
+
394}
+
+
+
+ +

◆ CheckTH2PolyFileVersion()

+ +
+
+ + + + + + + + +
void CheckTH2PolyFileVersion (TFilefile)
+
+ +

Definition at line 97 of file Structs.cpp.

+
97 {
+
98// **************************************************
+
99
+
100 int FileROOTVersion = file->GetVersion();
+ +
102
+
103 // Remove last digit from number
+
104 // till only one digit is left
+
105 while (MainFileROOTVersion >= 10)
+ +
107
+
108 std::string SystemROOTVersion = std::string(ROOT_RELEASE);
+ +
110
+ +
112 {
+
113 std::cerr<<"File was produced with: "<<FileROOTVersion<<" ROOT version"<<std::endl;
+
114 std::cerr<<"Found: "<<SystemROOTVersion<<" ROOT version in the system"<<std::endl;
+
115 std::cerr<<"For some docuemntation please visit me"<<std::endl;
+
116 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
117 throw;
+
118 }
+
119}
+
+
+
+ +

◆ file_exists()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string file_exists (std::string filename)
+
+inline
+
+ +

Definition at line 1077 of file Structs.h.

+
1077 {
+
1078 std::ifstream infile(filename.c_str());
+
1079 if (!infile.good()) {
+
1080 std::cerr << "*** ERROR ***" << std::endl;
+
1081 std::cerr << "File " << filename << " does not exist" << std::endl;
+
1082 std::cerr << "Please try again" << std::endl;
+
1083 std::cerr << "*************" << std::endl;
+
1084 throw;
+
1085 }
+
1086
+
1087 return filename;
+
1088}
+
+
+
+ +

◆ GetCUDAProbFlavour()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
CUDAProb_nu GetCUDAProbFlavour (int nu_i,
int nu_f 
)
+
+inline
+
+ +

Definition at line 1111 of file Structs.h.

+
1111 {
+
1112//*************************************************
+
1113
+
1114 switch (abs(nu_i)) {
+
1115 case 1:
+
1116 switch (abs(nu_f)) {
+
1117 case 1:
+
1118 return CUDAProb_nu::e_e;
+
1119 break;
+
1120 case 2:
+
1121 return CUDAProb_nu::e_m;
+
1122 break;
+
1123 case 3:
+
1124 return CUDAProb_nu::e_t;
+
1125 break;
+
1126 default:
+
1127 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1128 throw;
+
1129 }
+
1130 case 2:
+
1131 switch (abs(nu_f)) {
+
1132 case 1:
+
1133 return CUDAProb_nu::m_e;
+
1134 break;
+
1135 case 2:
+
1136 return CUDAProb_nu::m_m;
+
1137 break;
+
1138 case 3:
+
1139 return CUDAProb_nu::m_t;
+
1140 break;
+
1141 default:
+
1142 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1143 throw;
+
1144 }
+
1145 case 3:
+
1146 switch (abs(nu_f)) {
+
1147 case 1:
+
1148 return CUDAProb_nu::t_e;
+
1149 break;
+
1150 case 2:
+
1151 return CUDAProb_nu::t_m;
+
1152 break;
+
1153 case 3:
+
1154 return CUDAProb_nu::t_t;
+
1155 break;
+
1156 default:
+
1157 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1158 throw;
+
1159 }
+
1160 default:
+
1161 std::cout << "Unknow flavour " << nu_i << std::endl;
+
1162 throw;
+
1163 }
+
1164
+
1165}
+
+
+
+ +

◆ MakeVector()

+ +
+
+
+template<typename T , size_t N>
+ + + + + + + + +
std::vector< T > MakeVector (const T(&) data[N])
+
+ +

Definition at line 54 of file Structs.h.

+
54 {
+
55// *******************
+
56 return std::vector<T>(data, data+N);
+
57}
+
+
+
+ +

◆ NoOverflowIntegral()

+ +
+
+ + + + + + + + +
double NoOverflowIntegral (TH2Polypoly)
+
+ +

Definition at line 140 of file Structs.cpp.

+
140 {
+
141// **************************************************
+
142
+
143 double integral = 0;
+
144
+
145 for(int i=1; i < poly->GetNumberOfBins()+1; i++)
+
146 {
+
147 integral += poly->GetBinContent(i);
+
148 }
+
149
+
150 return integral;
+
151
+
152} // end function
+
+
+
+ +

◆ NormalisePoly()

+ +
+
+ + + + + + + + +
TH2Poly * NormalisePoly (TH2PolyHistogram)
+
+ +

Definition at line 298 of file Structs.cpp.

+
298 {
+
299// ****************
+
300
+
301 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+ + +
304 std::string title = std::string(HistCopy->GetName())+"_norm";
+
305 HistCopy->SetNameTitle(title.c_str(), title.c_str());
+
306
+
307 return HistCopy;
+
308}
+
TH2Poly * PolyScaleWidth(TH2Poly *Histogram, double scale)
Definition Structs.cpp:312
+
double PolyIntegralWidth(TH2Poly *Histogram)
Definition Structs.cpp:334
+
+
+
+ +

◆ OverflowIntegral()

+ +
+
+ + + + + + + + +
double OverflowIntegral (TH2Polypoly)
+
+ +

Definition at line 123 of file Structs.cpp.

+
123 {
+
124// **************************************************
+
125
+
126 double overflow = 0;
+
127 //TH2Polys have 9 overflow bins
+
128 for(int iOverflow = -1; iOverflow > -10; iOverflow--)
+
129 {
+
130 overflow+=poly->GetBinContent(iOverflow);
+
131 }
+ +
133
+
134 return IntegralUn;
+
135
+
136} // end function
+
double NoOverflowIntegral(TH2Poly *poly)
Definition Structs.cpp:140
+
+
+
+ +

◆ PDGToProbs()

+ +
+
+ + + + + +
+ + + + + + + + +
int PDGToProbs (NuPDG pdg)
+
+inline
+
+ +

Definition at line 937 of file Structs.h.

+
937 {
+
938
+
939 int ReturnProbNu = -999;
+
940
+
941 switch (pdg){
+
942 case kNue:
+ +
944 break;
+
945 case kNumu:
+ +
947 break;
+
948 case kNutau:
+ +
950 break;
+
951 case kNueBar:
+ +
953 break;
+
954 case kNumuBar:
+ +
956 break;
+
957 case kNutauBar:
+ +
959 break;
+
960 default:
+
961 std::cout << "Unrecognised pdg for the neutrino so can't map this to an int for Prob3++" << std::endl;
+
962 break;
+
963 }
+
964
+
965 return ReturnProbNu;
+
966}
+
+
+
+ +

◆ PolyIntegralWidth()

+ +
+
+ + + + + + + + +
double PolyIntegralWidth (TH2PolyHistogram)
+
+ +

Definition at line 334 of file Structs.cpp.

+
334 {
+
335// ****************
+
336
+
337 double integral = 0;
+
338 double xlow, xup, ylow, yup, area;
+
339
+
340 for(int i = 1; i < Histogram->GetNumberOfBins()+1; i++)
+
341 {
+
342 TH2PolyBin* bin = (TH2PolyBin*)Histogram->GetBins()->At(i-1);
+
343 xlow = bin->GetXMin();
+
344 xup = bin->GetXMax();
+
345 ylow = bin->GetYMin();
+
346 yup = bin->GetYMax();
+
347 area = (xup-xlow)*(yup-ylow);
+
348 integral += Histogram->GetBinContent(i)*area;
+
349 }
+
350
+
351 return integral;
+
352}
+
+
+
+ +

◆ PolyProjectionX()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TH1D * PolyProjectionX (TObjectpoly,
std::string TempName,
std::vector< doublexbins,
bool computeErrors = false 
)
+
+ +

Definition at line 156 of file Structs.cpp.

+
156 {
+
157// **************************************************
+
158
+
159 TH1D* hProjX = new TH1D((TempName+"_x").c_str(),(TempName+"_x").c_str(),xbins.size()-1,&xbins[0]);
+
160
+
161 //KS: Temp Histogram to store error, use double as this is thread safe
+
162 double *hProjX_Error = new double[hProjX->GetXaxis()->GetNbins()+1];
+
163 for (int i = 0; i <= hProjX->GetXaxis()->GetNbins(); ++i) {hProjX_Error[i] = 0;}
+
164 double xlow, xup, frac=0;
+
165
+
166 //loop over bins in the poly
+
167 for(int i = 0; i<((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
168 {
+
169 //get bin and its edges
+
170 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
171 xlow = bin->GetXMin();
+
172 xup = bin->GetXMax();
+
173
+
174 //Loop over projected bins, find fraction of poly bin in each
+
175 for(int dx = 0; dx < int(xbins.size()); dx++)
+
176 {
+
177 if(xbins[dx+1] <= xlow || xbins[dx] >= xup)
+
178 {
+
179 frac = 0;
+
180 }
+
181 else if(xbins[dx]<=xlow && xbins[dx+1] >= xup)
+
182 {
+
183 frac = 1;
+
184 }
+
185 else if(xbins[dx]<=xlow && xbins[dx+1] <= xup)
+
186 {
+
187 frac = (xbins[dx+1]-xlow)/(xup-xlow);
+
188 }
+
189 else if(xbins[dx]>=xlow && xbins[dx+1] >= xup)
+
190 {
+
191 frac = (xup-xbins[dx])/(xup-xlow);
+
192 }
+
193 else if(xbins[dx]>=xlow && xbins[dx+1] <= xup)
+
194 {
+
195 frac = (xbins[dx+1]-xbins[dx])/(xup-xlow);
+
196 }
+
197 else
+
198 {
+
199 frac=0;
+
200 }
+
201 hProjX->SetBinContent(dx+1,hProjX->GetBinContent(dx+1)+frac*bin->GetContent());
+
202 //KS: Follow ROOT implementation and sum up the variance
+
203 if(computeErrors)
+
204 {
+
205 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
206 //but numbering of GetBinError is differnt than GetBins...
+
207 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
209 }
+
210 }
+
211 }
+
212 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
213 if(computeErrors)
+
214 {
+
215 for (int i = 1; i <= hProjX->GetXaxis()->GetNbins(); ++i)
+
216 {
+
217 double Error = TMath::Sqrt(hProjX_Error[i]);
+
218 hProjX->SetBinError(i, Error);
+
219 }
+
220 }
+
221 delete[] hProjX_Error;
+
222 return hProjX;
+
223} // end project poly X function
+
+
+
+ +

◆ PolyProjectionY()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TH1D * PolyProjectionY (TObjectpoly,
std::string TempName,
std::vector< doubleybins,
bool computeErrors = false 
)
+
+ +

Definition at line 227 of file Structs.cpp.

+
227 {
+
228// **************************************************
+
229
+
230 TH1D* hProjY = new TH1D((TempName+"_y").c_str(),(TempName+"_y").c_str(),ybins.size()-1,&ybins[0]);
+
231 //KS: Temp Histogram to store error, use double as this is thread safe
+
232 double *hProjY_Error = new double[hProjY->GetXaxis()->GetNbins()+1];
+
233 for (int i = 0; i <= hProjY->GetXaxis()->GetNbins(); ++i) {hProjY_Error[i] = 0;}
+
234
+
235 double ylow, yup, frac=0;
+
236
+
237 //loop over bins in the poly
+
238 for(int i = 0; i < ((TH2Poly*)poly)->GetNumberOfBins(); i++)
+
239 {
+
240 //get bin and its edges
+
241 TH2PolyBin* bin = (TH2PolyBin*)((TH2Poly*)poly)->GetBins()->At(i);
+
242 ylow = bin->GetYMin();
+
243 yup = bin->GetYMax();
+
244
+
245 //Loop over projected bins, find fraction of poly bin in each
+
246 for(int dy = 0; dy < int(ybins.size()); dy++)
+
247 {
+
248 if(ybins[dy+1]<=ylow || ybins[dy] >= yup)
+
249 {
+
250 frac = 0;
+
251 }
+
252 else if(ybins[dy] <= ylow && ybins[dy+1] >= yup)
+
253 {
+
254 frac = 1;
+
255 }
+
256 else if(ybins[dy] <= ylow && ybins[dy+1] <= yup)
+
257 {
+
258 frac = (ybins[dy+1]-ylow)/(yup-ylow);
+
259 }
+
260 else if(ybins[dy] >= ylow && ybins[dy+1] >= yup)
+
261 {
+
262 frac = (yup-ybins[dy])/(yup-ylow);
+
263 }
+
264 else if(ybins[dy] >= ylow && ybins[dy+1] <= yup)
+
265 {
+
266 frac = (ybins[dy+1]-ybins[dy])/(yup-ylow);
+
267 }
+
268 else
+
269 {
+
270 frac=0;
+
271 }
+
272 hProjY->SetBinContent(dy+1,hProjY->GetBinContent(dy+1)+frac*bin->GetContent());
+
273 //KS: Follow ROOT implementation and sum up the variance
+
274 if(computeErrors)
+
275 {
+
276 //KS: TH2PolyBin doesn't have GetError so we have to use TH2Poly,
+
277 //but numbering of GetBinError is differnt than GetBins...
+
278 double Temp_Err = frac*((TH2Poly*)poly)->GetBinError(i+1) * frac*((TH2Poly*)poly)->GetBinError(i+1);
+ +
280 }
+
281 }
+
282 }
+
283 //KS: The error is sqrt(summed variance)) https://root.cern.ch/doc/master/TH2_8cxx_source.html#l02266
+
284 if(computeErrors)
+
285 {
+
286 for (int i = 1; i <= hProjY->GetXaxis()->GetNbins(); ++i)
+
287 {
+
288 double Error = TMath::Sqrt(hProjY_Error[i]);
+
289 hProjY->SetBinError(i, Error);
+
290 }
+
291 }
+
292 delete[] hProjY_Error;
+
293 return hProjY;
+
294} // end project poly Y function
+
+
+
+ +

◆ PolyScaleWidth()

+ +
+
+ + + + + + + + + + + + + + + + + + +
TH2Poly * PolyScaleWidth (TH2PolyHistogram,
double scale 
)
+
+ +

Definition at line 312 of file Structs.cpp.

+
312 {
+
313// ****************
+
314
+
315 TH2Poly* HistCopy = (TH2Poly*)(Histogram->Clone());
+
316 double xlow, xup, ylow, yup, area;
+
317
+
318 for(int i = 1; i < HistCopy->GetNumberOfBins()+1; i++)
+
319 {
+
320 TH2PolyBin* bin = (TH2PolyBin*)HistCopy->GetBins()->At(i-1);
+
321 xlow = bin->GetXMin();
+
322 xup = bin->GetXMax();
+
323 ylow = bin->GetYMin();
+
324 yup = bin->GetYMax();
+
325 area = (xup-xlow)*(yup-ylow);
+
326 HistCopy->SetBinContent(i, Histogram->GetBinContent(i)/(area*scale));
+
327 }
+
328
+
329 return HistCopy;
+
330}
+
+
+
+ +

◆ ProbsToPDG()

+ +
+
+ + + + + +
+ + + + + + + + +
int ProbsToPDG (ProbNu NuType)
+
+inline
+
+ +

Definition at line 968 of file Structs.h.

+
968 {
+
969
+
970 int ReturnNuPDG = -999;
+
971
+
972 switch (NuType){
+
973 case kProbNue:
+
974 ReturnNuPDG = static_cast<int>(kNue);
+
975 break;
+
976 case kProbNumu:
+
977 ReturnNuPDG = static_cast<int>(kNumu);
+
978 break;
+
979 case kProbNutau:
+
980 ReturnNuPDG = static_cast<int>(kNutau);
+
981 break;
+
982 case kProbNueBar:
+
983 ReturnNuPDG = static_cast<int>(kNueBar);
+
984 break;
+
985 case kProbNumuBar:
+
986 ReturnNuPDG = static_cast<int>(kNumuBar);
+
987 break;
+
988 case kProbNutauBar:
+
989 ReturnNuPDG = static_cast<int>(kNutauBar);
+
990 break;
+
991 default:
+
992 std::cout << "Unrecognised NuType for the neutrino so can't map this to a PDG code" << std::endl;
+
993 break;
+
994 }
+
995
+
996 return ReturnNuPDG;
+
997}
+
+
+
+ +

◆ RemoveFitter()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void RemoveFitter (TH1Dhist,
std::string name 
)
+
+ +

Definition at line 356 of file Structs.cpp.

+
356 {
+
357 // *********************
+
358
+
359 TList *listOfFunctions = hist->GetListOfFunctions();
+
360 TF1 *fitter = dynamic_cast<TF1*>(listOfFunctions->FindObject(name.c_str()));
+
361
+
362 listOfFunctions->Remove(fitter);
+
363 delete fitter;
+
364}
+
+
+
+ +

◆ returnCherenkovThresholdMomentum()

+ +
+
+ + + + + + + + +
double returnCherenkovThresholdMomentum (int PDG)
+
+ +

Definition at line 368 of file Structs.cpp.

+
368 {
+
369// ****************
+
370 double refractiveIndex = 1.334; //DB From https://github.com/fiTQun/fiTQun/blob/646cf9c8ba3d4f7400bcbbde029d5ca15513a3bf/fiTQun_shared.cc#L757
+ + +
373 return momentumThreshold;
+
374}
+
double GetMassFromPDG(int PDG)
Definition Structs.cpp:11
+
+
+
+ +

◆ SplineInterpolation_ToString()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string SplineInterpolation_ToString (SplineInterpolation i)
+
+inline
+
+ +

Definition at line 317 of file Structs.h.

+
317 {
+
318// **************************************************
+
319 std::string name = "";
+
320 switch(i) {
+
321 // TSpline3 (third order spline in ROOT)
+
322 case kTSpline3:
+
323 name = "TSpline3";
+
324 break;
+
325 case kLinear:
+
326 name = "Linear";
+
327 break;
+
328 case kMonotonic:
+
329 name = "Monotonic";
+
330 break;
+
331 // (Experimental) Akima_Spline (crd order spline which is allowed to be discontinuous in 2nd deriv)
+
332 case kAkima:
+
333 name = "Akima";
+
334 break;
+
335 default:
+
336 std::cerr << "UNKNOWN SPLINE INTERPOLATION SPECIFIED!" << std::endl;
+
337 std::cerr << "You gave " << i << std::endl;
+
338 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
339 throw;
+
340 }
+
341 return name;
+
342}
+
+
+
+ +

◆ str2int()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
constexpr unsigned int str2int (const charstr,
int h = 0 
)
+
+constexpr
+
+ +

Definition at line 61 of file Structs.h.

+
61 {
+
62// *******************
+
63 return !str[h] ? 5381 : (str2int(str, h+1) * 33) ^ str[h];
+
64}
+
constexpr unsigned int str2int(const char *str, int h=0)
Definition Structs.h:61
+
+
+
+ +

◆ TargetMat_ToString()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string TargetMat_ToString (TargetMat i)
+
+inline
+
+ +

Definition at line 874 of file Structs.h.

+
874 {
+
875// *****************
+
876 std::string name;
+
877
+
878 switch(i) {
+
879 case kTarget_H:
+
880 name = "Hydrogen";
+
881 break;
+
882 case kTarget_C:
+
883 name = "Carbon";
+
884 break;
+
885 case kTarget_N:
+
886 name = "Nitrogen";
+
887 break;
+
888 case kTarget_O:
+
889 name = "Oxygen";
+
890 break;
+
891 case kTarget_Al:
+
892 name = "Aluminium";
+
893 break;
+
894 case kTarget_Ti:
+
895 name = "Titanium";
+
896 break;
+
897 case kTarget_Fe:
+
898 name = "Iron";
+
899 break;
+
900 case kTarget_Pb:
+
901 name = "Lead";
+
902 break;
+
903 default:
+
904 name = "TargetMat_Undefined";
+
905 break;
+
906 }
+
907
+
908 return name;
+
909}
+
+
+
+ +

◆ TestStatistic_ToString()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string TestStatistic_ToString (TestStatistic i)
+
+inline
+
+ +

Definition at line 1011 of file Structs.h.

+
1011 {
+
1012// **************************************************
+
1013 std::string name = "";
+
1014
+
1015 switch(i) {
+
1016 case kPoisson:
+
1017 name = "Poisson";
+
1018 break;
+
1019 case kBarlowBeeston:
+
1020 name = "BarlowBeeston";
+
1021 break;
+
1022 case kIceCube:
+
1023 name = "IceCube";
+
1024 break;
+
1025 case kPearson:
+
1026 name = "Pearson";
+
1027 break;
+ +
1029 name = "DembinskiAbdelmottele";
+
1030 break;
+
1031 default:
+
1032 std::cerr << "UNKNOWN LIKELHOOD SPECIFIED TO ND280!" << std::endl;
+
1033 std::cerr << "You gave test-statistic " << i << std::endl;
+
1034 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1035 throw;
+
1036 }
+
1037 return name;
+
1038}
+
+
+
+
+ + + + diff --git a/Structs_8h_source.html b/Structs_8h_source.html new file mode 100644 index 00000000..16adeb4b --- /dev/null +++ b/Structs_8h_source.html @@ -0,0 +1,1514 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/Structs.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Structs.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// Run low or high memory versions of structs
+
4// N.B. for 64 bit systems sizeof(float) == sizeof(double) so not a huge effect
+
5//KS: Need more testing on FD
+
6//#define __LOW_MEMORY_STRUCTS__
+
7
+
8#ifdef __LOW_MEMORY_STRUCTS__
+
9#define __float__ float
+
10#define __int__ short int
+
11#define __unsigned_int__ unsigned short int
+
12#else
+
13#define __float__ double
+
14#define __int__ int
+
15#define __unsigned_int__ unsigned int
+
16#endif
+
17
+
18//
+
19#define __TH2PolyOverflowBins__ 9
+
20
+
21// Include some healthy defines for constructors
+
22#define __BAD_DOUBLE__ -999.99
+
23#define __BAD_INT__ -999
+
24
+
25#define __TH2PolyOverflowBins__ 9
+
26
+
27#define __DEFAULT_RETURN_VAL__ -999999.123456
+
28
+
29// C++ includes
+
30#include <sstream>
+
31#include <fstream>
+
32#include <iostream>
+
33#include <vector>
+
34#include <iomanip>
+
35
+
36// ROOT include
+
37#include "set"
+
38#include "TSpline.h"
+
39#include "TF1.h"
+
40#include "TLorentzVector.h"
+
41#include "TObjString.h"
+
42#include "unordered_map"
+
43#include "TH2Poly.h"
+
44#include "list"
+
45#include "TFile.h"
+
46
+
47#ifdef MULTITHREAD
+
48#include "omp.h"
+
49#endif
+
50
+
51// *******************
+
52// Template to make vector out of an array of any length
+
53template< typename T, size_t N >
+
+
54std::vector<T> MakeVector( const T (&data)[N] ) {
+
55// *******************
+
56 return std::vector<T>(data, data+N);
+
57}
+
+
58
+
59// *******************
+
60//KS: This is mad way of converting string to int. Why? To be able to use string with switch
+
+
61constexpr unsigned int str2int(const char* str, int h = 0) {
+
62// *******************
+
63 return !str[h] ? 5381 : (str2int(str, h+1) * 33) ^ str[h];
+
64}
+
+
65
+
66// *******************
+
67// ETA - new version of this for refactor
+
68// Normalisations for cross-section parameters
+
69// Carrier for whether you want to apply a systematic to an event or not
+
+ +
71 // *******************
+
72 public:
+
73 // Bins for normalisation parameter
+ +
75 // Name of parameters
+
76 std::string name;
+
77 // Mode which parameter applies to
+
78 std::vector<int> modes;
+
79 // Horn currents which parameter applies to
+
80 std::vector<int> horncurrents;
+
81 // PDG which parameter applies to
+
82 std::vector<int> pdgs;
+
83 // Preosc PDG which parameter applies to
+
84 std::vector<int> preoscpdgs;
+
85 // Targets which parameter applies to
+
86 std::vector<int> targets;
+
87 //Does this parameter have kinematic bounds
+ +
89 //Generic vector contain enum relating to a kinematic variable
+
90 //and lower and upper bounds. This can then be passed to IsEventSelected
+
91 std::vector< std::vector<double> > Selection;
+
92
+
93 //Generic vector containing the string of kinematic type
+
94 //This then needs to be converted to a kinematic type enum
+
95 //within a samplePDF daughter class
+
96 //The bounds for each kinematic variable are given in Selection
+
97 std::vector< std::string > KinematicVarStr;
+
98
+
99 // Parameter number of this normalisation in current systematic model
+
100 int index;
+
101};
+
+
102
+
103// *******************
+
104// Add a struct to hold info about the splinified xsec parameters
+
105// Used in ND280 code to accelerate CPU TSpline3 evaluation
+
106// Adaptable for SK
+
+ +
108// *******************
+
109 // Number of points in spline
+ +
111
+
112 // Array of the knots positions
+ +
114
+
115 // Array of what segment of spline we're currently interested in
+
116 // Gets updated once per MCMC iteration
+ +
118
+
119 // Array of the knots positions
+
120 const double* splineParsPointer;
+
121};
+
+
122
+
123// ********************************************
+
124// Generic xsec class
+
125// Can use TF1 or TSpline3 or TSpline5 here, tjoho
+
126template <class T>
+
+ +
128 // ********************************************
+
129 public:
+
130 // The light constructor
+
+ + +
133 Func.reserve(nParams);
+
134 for (int i = 0; i < nParams; ++i) {
+
135 Func[i] = NULL;
+
136 }
+
137 }
+
+
138
+
139 // The empty constructor
+
+ +
141 nParams = 0;
+
142 Func = NULL;
+
143 };
+
+
144
+
145 // The light destructor
+
+ +
147 for (int i = 0; i < nParams; ++i) {
+
148 if (Func[i]) delete Func[i];
+
149 }
+
150 }
+
+
151
+
152 // Get number of splines
+
153 inline __int__ GetNumberOfParams() { return nParams; }
+
154
+
155 // The Printer
+
+
156 inline void Print() {
+
157 std::cout << " Splines: " << std::endl;
+
158 for (int i = 0; i < nParams; ++i) {
+
159 if (!Func[i]) continue;
+
160 std::cout << " " << std::left << std::setw(25) << Func[i]->GetName() << std::endl;
+
161 }
+
162 }
+
+
163
+
164 // Set the number of splines for this event
+
+ + +
167 Func = new T[nParams];
+
168 }
+
+
169
+
170 // Get the function for the nth spline
+
171 inline T GetFunc(__int__ nSpline) { return Func[nSpline]; }
+
172 // Set the function for the nth spline
+ +
174 // Eval the current variation
+
+ +
176 // Some will be NULL, check this
+
177 if (Func[nSpline]) {
+
178 return Func[nSpline]->Eval(variation);
+
179 } else {
+
180 return 1.0;
+
181 }
+
182 }
+
+
183 private:
+
184 // Number of parameters
+ +
186 // The function
+ +
188};
+
+
189
+
190
+
191// ************************
+
192// A reduced TF1 class only
+
193// Only saves parameters for each TF1 and how many parameters each parameter set has
+
+
194class TF1_red {
+
195// ************************
+
196 public:
+
197 // Empty constructor
+
+ +
199 length = 0;
+
200 Par = NULL;
+
201 }
+
+
202
+
203 // Empty destructor
+
+ +
205 if (Par != NULL) {
+
206 delete[] Par;
+
207 Par = NULL;
+
208 }
+
209 }
+
+
210
+
211 // The useful constructor with deep copy
+
+ +
213 length = nSize;
+
214 for (int i = 0; i < length; ++i) {
+
215 Par[i] = Array[i];
+
216 }
+ +
218 }
+
+
219
+
220 // The TF1 constructor with deep copy
+
+
221 TF1_red(TF1* &Function, int Param = -1) {
+
222 Par = NULL;
+ +
224 }
+
+
225
+
226 // Get the number
+
+
227 inline std::string GetName() {
+
228 std::stringstream ss;
+
229 ss << ParamNo;
+
230 return ss.str();
+
231 }
+
+
232
+
233 // Set the function
+
+
234 inline void SetFunc(TF1* &Func, int Param = -1) {
+
235 length = Func->GetNpar();
+
236 if (Par != NULL) delete[] Par;
+
237 Par = new __float__[length];
+
238 for (int i = 0; i < length; ++i) {
+
239 Par[i] = Func->GetParameter(i);
+
240 }
+
241 ParamNo = Param;
+
242 delete Func;
+
243 Func = NULL;
+
244 }
+
+
245
+
246 // Evaluate a variation
+
+
247 inline double Eval(__float__ var) {
+
248 // If we have 5 parameters we're using a fifth order polynomial
+
249 if (length == 5) {
+
250 return 1+Par[0]*var+Par[1]*var*var+Par[2]*var*var*var+Par[3]*var*var*var*var+Par[4]*var*var*var*var*var;
+
251 // If we have 2 parameters we're using two linear equations
+
252 } else if (length == 2) {
+
253 return (var<=0)*(1+Par[0]*var)+(var>0)*(1+Par[1]*var);
+
254 } else {
+
255 std::cerr << "*** Error in reduced TF1 class!" << std::endl;
+
256 std::cerr << " Class only knows about 5th order polynomial and two superposed linear function" << std::endl;
+
257 std::cerr << " You have tried something else than this, which remains unimplemented" << std::endl;
+
258 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
259 throw;
+
260 }
+
261 }
+
+
262
+
263 // Set a parameter to a value
+
+ + +
266 }
+
+
267
+
268 // Get a parameter value
+
+ +
270 if (Parameter > length) {
+
271 std::cerr << "Error: you requested parameter number " << Parameter << " but length is " << length << " parameters" << std::endl;
+
272 throw;
+
273 return -999.999;
+
274 }
+
275 return Par[Parameter];
+
276 }
+
+
277
+
278 // Set the size
+
+
279 inline void SetSize(__int__ nSpline) {
+
280 length = nSpline;
+
281 Par = new __float__[length];
+
282 }
+
+
283 // Get the size
+
284 inline int GetSize() { return length; }
+
+
285 inline void Print() {
+
286 std::cout << "Printing TF1_red: " << std::endl;
+
287 std::cout << " ParamNo = " << ParamNo << std::endl;
+
288 std::cout << " Length = " << length << std::endl;
+
289 std::cout << " a = " << Par[0] << std::endl;
+
290 std::cout << " b = " << Par[1] << std::endl;
+
291 if (length == 5) {
+
292 std::cout << " c = " << Par[2] << std::endl;
+
293 std::cout << " d = " << Par[3] << std::endl;
+
294 std::cout << " e = " << Par[4] << std::endl;
+
295 }
+
296 }
+
+
297
+
298 private:
+
299 // The parameters
+ + +
302 // Save the parameter number this spline applies to
+ +
304};
+
+
305
+
306// Make an enum of the spline interpolation type
+ +
314
+
315// **************************************************
+
316// Convert a LLH type to a string
+
+ +
318// **************************************************
+
319 std::string name = "";
+
320 switch(i) {
+
321 // TSpline3 (third order spline in ROOT)
+
322 case kTSpline3:
+
323 name = "TSpline3";
+
324 break;
+
325 case kLinear:
+
326 name = "Linear";
+
327 break;
+
328 case kMonotonic:
+
329 name = "Monotonic";
+
330 break;
+
331 // (Experimental) Akima_Spline (crd order spline which is allowed to be discontinuous in 2nd deriv)
+
332 case kAkima:
+
333 name = "Akima";
+
334 break;
+
335 default:
+
336 std::cerr << "UNKNOWN SPLINE INTERPOLATION SPECIFIED!" << std::endl;
+
337 std::cerr << "You gave " << i << std::endl;
+
338 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
339 throw;
+
340 }
+
341 return name;
+
342}
+
+
343
+
344
+
345// ************************
+
346// Reduced TSpline3 class
+
+ +
348// ************************
+
349 public:
+
350 // Empty constructor
+
+ +
352 nPoints = 0;
+
353 Par = NULL;
+
354 XPos = NULL;
+
355 YResp = NULL;
+
356 }
+
+
357
+
358 // The constructor that takes a TSpline3 pointer and copies in to memory
+ +
365
+
366 // constructor taking parameters
+
+ +
368 nPoints = N;
+
369 ParamNo = parNo;
+
370 // std::cout<<"nPoints: "<<nPoints<<std::endl;
+
371 // Save the parameters for each knot
+
372 Par = new __float__*[nPoints];
+
373 // Save the positions of the knots
+
374 XPos = new __float__[nPoints];
+
375 // Save the y response at each knot
+
376 YResp = new __float__[nPoints];
+
377 for(int j=0; j<N; ++j){
+
378 Par[j] = new __float__[3];
+
379 Par[j][0] = P[j][0];
+
380 Par[j][1] = P[j][1];
+
381 Par[j][2] = P[j][2];
+
382 XPos[j] = X[j];
+
383 YResp[j] = Y[j];
+
384
+
385 if((Par[j][0] == -999) | (Par[j][1] ==-999) | (Par[j][2] ==-999) | (XPos[j] ==-999) | (YResp[j] ==-999)){
+
386 std::cerr<<"******************* Bad parameter values when construction TSpline3_red *********************" <<std::endl;
+
387 std::cerr<<"passed val (i, x, y, b, c, d): "<<j<<", "<<X[j]<<", "<<Y[j]<<", "<<P[j][0]<<", "<<P[j][1]<<", "<<P[j][2]<<std::endl;
+
388 std::cerr<<"set values (i, x, y, b, c, d): "<<j<<", "<<XPos[j]<<", "<<YResp[j]<<", "<<Par[j][0]<<", "<<Par[j][1]<<", "<<Par[j][2]<<std::endl;
+
389 std::cerr<<"*********************************************************************************************" <<std::endl;
+
390 }
+
391 }
+
392 }
+
+
393
+
+ +
395 nPoints = spline->GetNp();
+
396 ParamNo = Param;
+
397 if (Par != NULL) {
+
398 for (int i = 0; i < nPoints; ++i) {
+
399 delete[] Par[i];
+
400 Par[i] = NULL;
+
401 }
+
402 delete[] Par;
+
403 Par = NULL;
+
404 }
+
405 if (XPos != NULL) delete[] XPos;
+
406 if (YResp != NULL) delete[] YResp;
+
407 // Save the parameters for each knot
+
408 Par = new __float__*[nPoints];
+
409 // Save the positions of the knots
+
410 XPos = new __float__[nPoints];
+
411 // Save the y response at each knot
+
412 YResp = new __float__[nPoints];
+
413
+
414 //KS: Default TSpline3 ROOT implementation
+ +
416 {
+
417 for (int i = 0; i < nPoints; ++i) {
+
418 // 3 is the size of the TSpline3 coefficients
+
419 Par[i] = new __float__[3];
+
420 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
421 spline->GetCoeff(i, x, y, b, c, d);
+
422 XPos[i] = x;
+
423 YResp[i] = y;
+
424 Par[i][0] = b;
+
425 Par[i][1] = c;
+
426 Par[i][2] = d;
+
427 }
+
428 }
+
429 //CW: Reduce to use linear spline interpolation for certain parameters
+
430 // Not the most elegant way: use TSpline3 object but set coefficients to zero and recalculate spline points; the smart way (but more human intensive) would be to save memory here and simply not store the zeros at all
+
431 // Get which parameters should be linear from the fit manager
+
432 // Convert the spline number to global xsec parameter
+
433 // Loop over the splines points
+
434 else if(InterPolation == kLinear)
+
435 {
+
436 for (int k = 0; k < nPoints; ++k) {
+
437 // 3 is the size of the TSpline3 coefficients
+
438 Par[k] = new __float__[3];
+
439 Double_t x1, y1, b1, c1, d1, x2, y2, b2, c2, d2 = 0;
+
440 spline->GetCoeff(k, x1, y1, b1, c1, d1);
+
441 spline->GetCoeff(k+1, x2, y2, b2, c2, d2);
+
442 double tempb = (y2-y1)/(x2-x1);
+
443
+
444 XPos[k] = x1;
+
445 YResp[k] = y1;
+
446 Par[k][0] = tempb;
+
447 Par[k][1] = 0;
+
448 Par[k][2] = 0;
+
449 }
+
450 }
+
451 //EM: Akima spline is similar to regular cubic spline but is allowed to be discontinuous in 2nd derivative and coefficients in any segment
+
452 // only depend on th 2 nearest points on either side
+
453 else if(InterPolation == kAkima)
+
454 {
+
455 // get the knot values for the spline
+
456 for (int i = 0; i < nPoints; ++i) {
+
457 // 3 is the size of the TSpline3 coefficients
+
458 Par[i] = new __float__[3];
+
459
+
460 double x = -999.99, y = -999.99;
+
461 spline->GetKnot(i, x, y);
+
462
+
463 XPos[i] = x;
+
464 YResp[i] = y;
+
465 }
+
466
+
467 __float__* mvals = new __float__[nPoints + 3];
+
468 __float__* svals = new __float__[nPoints + 1];
+
469
+
470 for (int i = -2; i <= nPoints; ++i) {
+
471 // if segment is first or last or 2nd to first or last, needs to be dealt with slightly differently;
+
472 // need to estimate the values for additinal points which would lie outside of the spline
+
473 if(i ==-2){
+
474 mvals[i+2] = 3.0 * (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]) - 2.0*(YResp[2] - YResp[1]) / (XPos[2] - XPos[1]);
+
475 }
+
476 else if(i==-1){
+
477 mvals[i+2] = 2.0 * (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]) - (YResp[2] - YResp[1]) / (XPos[2] - XPos[1]);
+
478 }
+
479 else if(i==nPoints){
+
480 mvals[i+2] = 3.0 * (YResp[nPoints-1] - YResp[nPoints-2]) / (XPos[nPoints-1] - XPos[nPoints-2]) - 2.0*(YResp[nPoints-2] - YResp[nPoints-3]) / (XPos[nPoints-2] - XPos[nPoints-3]);
+
481 }
+
482 else if(i == nPoints - 1){
+
483 mvals[i+2] = 2.0 * (YResp[nPoints-1] - YResp[nPoints-2]) / (XPos[nPoints-1] - XPos[nPoints-2]) - (YResp[nPoints-2] - YResp[nPoints-3]) / (XPos[nPoints-2] - XPos[nPoints-3]);
+
484 }
+
485 //standard internal segment
+
486 else{
+
487 mvals[i+2] = (YResp[i+1] - YResp[i])/ (XPos[i+1] - XPos[i]);
+
488 }
+
489 }
+
490
+
491 for(int i =2; i<=nPoints+2; i++){
+
492 if (abs(mvals[i+1] - mvals[i]) + abs(mvals[i-1] - mvals[i-2]) != 0.0){
+
493 svals[i-2] = (abs(mvals[i+1] - mvals[i]) * mvals[i-1] + abs(mvals[i-1] - mvals[i-2]) *mvals[i]) / (abs(mvals[i+1] - mvals[i]) + abs(mvals[i-1] - mvals[i-2]));
+
494 }
+
495 else{svals[i-2] = mvals[i];}
+
496 }
+
497
+
498 // calculate the coefficients for the spline
+
499 for(int i = 0; i <nPoints; i++){
+
500 __float__ b, c, d = -999.999;
+
501
+
502 b = svals[i];
+
503 c = (3.0* (YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i]) -2.0 *svals[i] - svals[i +1]) /(XPos[i+1] - XPos[i]);
+
504 d = ((svals[i + 1] +svals[i]) - 2.0*(YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i])) / ((XPos[i+1] - XPos[i]) * (XPos[i+1] - XPos[i]));
+
505
+
506 Par[i][0] = b;
+
507 Par[i][1] = c;
+
508 Par[i][2] = d;
+
509 }
+
510
+
511 // check the input spline for linear segments, if there are any then overwrite the calculated coefficients
+
512 // this will pretty much only ever be the case if they are set to be linear in samplePDFND i.e. the user wants it to be linear
+
513 for(int i = 0; i <nPoints-1; i++){
+
514 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
515 spline->GetCoeff(i, x, y, b, c, d);
+
516
+
517 if((c == 0.0 && d == 0.0)){
+
518 Par[i][0] = b;
+
519 Par[i][1] = 0.0;
+
520 Par[i][2] = 0.0;
+
521 }
+
522 }
+
523 delete[] mvals;
+
524 delete[] svals;
+
525 }
+
526 //EM: Monotone spline is similar to regular cubic spline but enforce the condition that the interpolated value at any point
+
527 // must be between its two nearest knots, DOES NOT make the entire spline monotonic, only the segments
+
528 else if(InterPolation == kMonotonic)
+
529 {
+
530 // values of the secants at each point (for calculating monotone spline)
+ +
532 // values of the tangens at each point (for calculating monotone spline)
+ +
534
+
535 // get the knot values for the spline
+
536 for (int i = 0; i < nPoints; ++i) {
+
537 // 3 is the size of the TSpline3 coefficients
+
538 Par[i] = new __float__[3];
+
539
+
540 double x = -999.99, y = -999.99;
+
541 spline->GetKnot(i, x, y);
+
542
+
543 XPos[i] = x;
+
544 YResp[i] = y;
+
545
+
546 Tangents[i] = 0.0;
+
547 }
+
548
+
549 // deal with the case of two points (just do linear interpolation between them)
+
550 if (nPoints ==2){
+
551 Par[0][0] = (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]);
+
552 Par[0][1] = 0.0;
+
553 Par[0][2] = 0.0;
+
554 // extra "virtual" segment at end to make Par array shape fit with knot arrays shapes
+
555 Par[1][1] = 0.0;
+
556 Par[1][2] = 0.0;
+
557
+
558 return;
+
559 } // if nPoints !=2 do full monotonic spline treatment:
+
560
+
561 // first pass over knots to calculate the secants
+
562 for (int i = 0; i < nPoints-1; ++i) {
+
563 Secants[i] = (YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i]);
+
564 //std::cout<<"secant "<<i<<": "<<Secants[i]<<std::endl;
+
565 }
+
566
+
567 Tangents[0] = Secants[0];
+ +
569
+ + +
572
+
573 // second pass over knots to calculate tangents
+
574 for (int i = 1; i < nPoints-1; ++i) {
+
575 if ((Secants[i-1] >= 0.0 && Secants[i] >= 0.0) | (Secants[i-1] < 0.0 && Secants[i] < 0.0)){ //check for same sign
+
576 Tangents[i] = (Secants[i-1] + Secants[i]) /2.0;
+
577 }
+
578 }
+
579
+
580 // third pass over knots to rescale tangents
+
581 for (int i = 0; i < nPoints-1; ++i) {
+
582 if (Secants[i] == 0.0){
+
583 Tangents[i] = 0.0;
+
584 Tangents[i+1] = 0.0;
+
585 }
+
586
+
587 else{
+
588 alpha = Tangents[i] / Secants[i];
+
589 beta = Tangents[i+1] / Secants[i];
+
590
+
591 if (alpha <0.0){
+
592 Tangents[i] = 0.0;
+
593 }
+
594 if (beta < 0.0){
+
595 Tangents[i+1] = 0.0;
+
596 }
+
597
+
598 if (alpha * alpha + beta * beta >9.0){
+
599 __float__ tau = 3.0 / sqrt(alpha * alpha + beta * beta);
+
600 Tangents[i] = tau * alpha * Secants[i];
+
601 Tangents[i+1] = tau * beta * Secants[i];
+
602 }
+
603 }
+
604 } // finished rescaling tangents
+
605 // fourth pass over knots to calculate the coefficients for the spline
+ +
607 for(int i = 0; i <nPoints-1; i++){
+
608 __float__ b, c, d = -999.999;
+
609 dx = XPos[i+1] - XPos[i];
+
610
+
611 b = Tangents[i] * dx;
+
612 c = 3.0* (YResp[i+1] - YResp[i]) -2.0 *dx * Tangents[i] - dx * Tangents[i +1];
+
613 d = 2.0* (YResp[i] - YResp[i+1]) + dx * (Tangents[i] + Tangents[i+1]);
+
614
+
615 Par[i][0] = b / dx;
+
616 Par[i][1] = c / (dx * dx);
+
617 Par[i][2] = d / (dx * dx * dx);
+
618
+
619 if((Par[i][0] == -999) | (Par[i][1] == -999) | (Par[i][2] ==-999) | (Par[i][0] == -999.999) | (Par[i][1] == -999.999) | (Par[i][2] ==-999.999)){
+
620 std::cout<<"bad spline parameters for segment "<<i<<", will cause problems with GPU: (b, c, d) = "<<Par[i][0]<<", "<<Par[i][1]<<", "<<Par[i][2]<<std::endl;
+
621 }
+
622 //std::cout<<"b : "<<b<<std::endl;
+
623 //std::cout<<"dx: "<<dx<<", x_0: "<<XPos[i]<<", x_1: "<<XPos[i+1]<<std::endl;
+
624 //std::cout<<" "<<" , y_0: "<<YResp[i]<<", y_1: "<<YResp[i+1]<<std::endl;
+
625 }
+
626
+
627 // include params for final "segment" outside of the spline so that par array fits with x and y arrays,
+
628 // should never actually get used but if not set then the GPU code gets very angry
+
629 Par[nPoints-1][0] = 0.0;
+
630 Par[nPoints-1][1] = 0.0;
+
631 Par[nPoints-1][2] = 0.0;
+
632
+
633 // check the input spline for linear segments, if there are any then overwrite the calculated coefficients
+
634 // this will pretty much only ever be the case if they are set to be linear in samplePDFND i.e. the user wants it to be linear
+
635 for(int i = 0; i <nPoints-1; i++){
+
636 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
637 spline->GetCoeff(i, x, y, b, c, d);
+
638
+
639 if((c == 0.0 && d == 0.0)){
+
640 Par[i][0] = b;
+
641 Par[i][1] = 0.0;
+
642 Par[i][2] = 0.0;
+
643 }
+
644 }
+
645 delete[] Secants;
+
646 delete[] Tangents;
+
647 }
+
648
+
649 delete spline;
+
650 spline = NULL;
+
651 }
+
+
652
+
653 // Empty destructor
+
+ +
655 for (int i = 0; i < nPoints; ++i) {
+
656 if (Par[i] != NULL) {
+
657 delete[] Par[i];
+
658 }
+
659 }
+
660 delete[] Par;
+
661 delete[] XPos;
+
662 delete[] YResp;
+
663 Par = NULL;
+
664 XPos = YResp = NULL;
+
665 }
+
+
666
+
667 // Find the segment relevant to this variation in x
+
668 // See root/hist/hist/src/TSpline3::FindX(double) or samplePDFND....::FindSplineSegment
+
+
669 inline int FindX(double x) {
+
670 // The segment we're interested in (klow in ROOT code)
+
671 int segment = 0;
+
672 int kHigh = nPoints-1;
+
673 // If the variation is below the lowest saved spline point
+
674 if (x <= XPos[0]){
+
675 segment = 0;
+
676 // If the variation is above the highest saved spline point
+
677 } else if (x >= XPos[nPoints-1]) {
+
678 // Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651
+
679 segment = kHigh;
+
680 // If the variation is between the maximum and minimum, perform a binary search
+
681 } else {
+
682 // The top point we've got
+
683 int kHalf = 0;
+
684 // While there is still a difference in the points (we haven't yet found the segment)
+
685 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
686 while (kHigh - segment > 1) {
+
687 // Increment the half-step
+
688 kHalf = (segment + kHigh)/2;
+
689 // If our variation is above the kHalf, set the segment to kHalf
+
690 if (x > XPos[kHalf]) {
+
691 segment = kHalf;
+
692 // Else move kHigh down
+
693 } else {
+
694 kHigh = kHalf;
+
695 }
+
696 } // End the while: we've now done our binary search
+
697 } // End the else: we've now found our point
+
698 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
699 return segment;
+
700 }
+
+
701
+
702 // Evaluate the weight from a variation
+
+
703 inline double Eval(double var) {
+
704 // Get the segment for this variation
+
705 int segment = FindX(var);
+
706 // The get the coefficients for this variation
+
707 __float__ x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
708 GetCoeff(segment, x, y, b, c, d);
+
709 double dx = var - x;
+
710 // Evaluate the third order polynomial
+
711 double weight = y+dx*(b+dx*(c+d*dx));
+
712 return weight;
+
713 }
+
+
714
+
715 // Get the number of points
+
716 inline int GetNp() { return nPoints; }
+
717 // Get the ith knot's x and y position
+
+
718 inline void GetKnot(int i, __float__ &xtmp, __float__ &ytmp) {
+
719 xtmp = XPos[i];
+
720 ytmp = YResp[i];
+
721 }
+
+
722
+
723 // Get the coefficient of a given segment
+
+ +
725 b = Par[segment][0];
+
726 c = Par[segment][1];
+
727 d = Par[segment][2];
+
728 x = XPos[segment];
+
729 y = YResp[segment];
+
730 }
+
+
731
+
732 // Get the number
+
+
733 inline std::string GetName() {
+
734 std::stringstream ss;
+
735 ss << ParamNo;
+
736 return ss.str();
+
737 }
+
+
738
+
739 protected: //changed to protected from private so can be accessed by derived classes
+
740 // Number of points/knot in TSpline3
+ +
742 // Always uses a third order polynomial, so hard-code the number of coefficients in implementation
+ +
744 // Positions of each x for each knot
+ +
746 // y-value for each knot
+ +
748 // Parameter number (which parameter is this spline for)
+ +
750};
+
+
751
+
752// ************************
+
753// Truncated spline class
+
+ +
755// ************************
+
756// cubic spline which is flat (returns y_first or y_last) if x outside of knot range
+
757 public:
+
758 // Empty constructor
+
+ +
760 :TSpline3_red()
+
761 {
+
762 }
+
+
763
+
764 // The constructor that takes a TSpline3 pointer and copies in to memory
+
+ + +
767 {
+
768 }
+
+
769
+
770 // Empty destructor
+
+ +
772 {
+
773 }
+
+
774
+
775 // Find the segment relevant to this variation in x
+
776 // See root/hist/hist/src/TSpline3::FindX(double) or samplePDFND....::FindSplineSegment
+
+
777 inline int FindX(double x) {
+
778 // The segment we're interested in (klow in ROOT code)
+
779 int segment = 0;
+
780 int kHigh = nPoints-1;
+
781 // If the variation is below the lowest saved spline point
+
782 if (x <= XPos[0]){
+
783 segment = -1;
+
784 // If the variation is above the highest saved spline point
+
785 } else if (x >= XPos[nPoints-1]) {
+
786 segment = -2;
+
787 // If the variation is between the maximum and minimum, perform a binary search
+
788 } else {
+
789 // The top point we've got
+
790 int kHalf = 0;
+
791 // While there is still a difference in the points (we haven't yet found the segment)
+
792 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
793 while (kHigh - segment > 1) {
+
794 // Increment the half-step
+
795 kHalf = (segment + kHigh)/2;
+
796 // If our variation is above the kHalf, set the segment to kHalf
+
797 if (x > XPos[kHalf]) {
+
798 segment = kHalf;
+
799 // Else move kHigh down
+
800 } else {
+
801 kHigh = kHalf;
+
802 }
+
803 } // End the while: we've now done our binary search
+
804 } // End the else: we've now found our point
+
805 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
806 return segment;
+
807 }
+
+
808
+
809 // Evaluate the weight from a variation
+
+
810 inline double Eval(double var) {
+
811 // Get the segment for this variation
+
812 int segment = FindX(var);
+
813 // The get the coefficients for this variation
+
814 __float__ x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
815
+
816 if(segment >=0){
+
817 GetCoeff(segment, x, y, b, c, d);
+
818 }
+
819
+
820 // if var is outside of the defined range, set the coefficients to 0 so that Eval just returns the value at the end point of the spline
+
821 else if(segment == -1){
+
822 GetKnot(0, x, y);
+
823 b = 0.0;
+
824 c = 0.0;
+
825 d = 0.0;
+
826 }
+
827 else if(segment == -2){
+
828 GetKnot(nPoints-1, x, y);
+
829 b = 0.0;
+
830 c = 0.0;
+
831 d = 0.0;
+
832 }
+
833
+
834 double dx = var - x;
+
835 // Evaluate the third order polynomial
+
836 double weight = y+dx*(b+dx*(c+d*dx));
+
837 return weight;
+
838 }
+
+
839};
+
+
840
+
841
+
842// ***************************
+
843// A handy namespace for variables extraction
+
844namespace MaCh3Utils {
+
845 // ***************************
+
846
+
847 // ***************************
+
848 // Return mass for given PDG
+
849 double GetMassFromPDG(int PDG);
+
850 // ***************************
+
851
+
852 extern std::unordered_map<int,int> KnownDetIDsMap;
+
853 extern int nKnownDetIDs;
+
854
+
855} // end MaCh3Utils namespace
+
856
+
857// *****************
+
858// Enum to track the target material
+
+ +
860// *****************
+ + + + + + + + +
869 kTarget_Pb = 207
+ +
+
871
+
872// *****************
+
873// Converted the Target Mat to a string
+
+
874inline std::string TargetMat_ToString(TargetMat i) {
+
875// *****************
+
876 std::string name;
+
877
+
878 switch(i) {
+
879 case kTarget_H:
+
880 name = "Hydrogen";
+
881 break;
+
882 case kTarget_C:
+
883 name = "Carbon";
+
884 break;
+
885 case kTarget_N:
+
886 name = "Nitrogen";
+
887 break;
+
888 case kTarget_O:
+
889 name = "Oxygen";
+
890 break;
+
891 case kTarget_Al:
+
892 name = "Aluminium";
+
893 break;
+
894 case kTarget_Ti:
+
895 name = "Titanium";
+
896 break;
+
897 case kTarget_Fe:
+
898 name = "Iron";
+
899 break;
+
900 case kTarget_Pb:
+
901 name = "Lead";
+
902 break;
+
903 default:
+
904 name = "TargetMat_Undefined";
+
905 break;
+
906 }
+
907
+
908 return name;
+
909}
+
+
910
+
911// *****************
+
912// Enum to track the incoming neutrino species
+
+
913enum NuPDG {
+
914// *****************
+
915 kNue = 12,
+
916 kNumu = 14,
+
917 kNutau = 16,
+
918 kNueBar = -12,
+
919 kNumuBar = -14,
+
920 kNutauBar = -16
+ +
+
922
+
923// *****************
+
924// Enum to track neutrino species for Prob3
+
+
925enum ProbNu {
+
926// *****************
+ + + + + +
932 kProbNutauBar = -3
+ +
+
934
+
935//ETA - Probs3++ doesn't use the PDG codes for the neutrino type
+
936//so add in a small converter
+
+
937inline int PDGToProbs(NuPDG pdg){
+
938
+
939 int ReturnProbNu = -999;
+
940
+
941 switch (pdg){
+
942 case kNue:
+ +
944 break;
+
945 case kNumu:
+ +
947 break;
+
948 case kNutau:
+ +
950 break;
+
951 case kNueBar:
+ +
953 break;
+
954 case kNumuBar:
+ +
956 break;
+
957 case kNutauBar:
+ +
959 break;
+
960 default:
+
961 std::cout << "Unrecognised pdg for the neutrino so can't map this to an int for Prob3++" << std::endl;
+
962 break;
+
963 }
+
964
+
965 return ReturnProbNu;
+
966}
+
+
967
+
+ +
969
+
970 int ReturnNuPDG = -999;
+
971
+
972 switch (NuType){
+
973 case kProbNue:
+
974 ReturnNuPDG = static_cast<int>(kNue);
+
975 break;
+
976 case kProbNumu:
+
977 ReturnNuPDG = static_cast<int>(kNumu);
+
978 break;
+
979 case kProbNutau:
+
980 ReturnNuPDG = static_cast<int>(kNutau);
+
981 break;
+
982 case kProbNueBar:
+
983 ReturnNuPDG = static_cast<int>(kNueBar);
+
984 break;
+
985 case kProbNumuBar:
+
986 ReturnNuPDG = static_cast<int>(kNumuBar);
+
987 break;
+
988 case kProbNutauBar:
+
989 ReturnNuPDG = static_cast<int>(kNutauBar);
+
990 break;
+
991 default:
+
992 std::cout << "Unrecognised NuType for the neutrino so can't map this to a PDG code" << std::endl;
+
993 break;
+
994 }
+
995
+
996 return ReturnNuPDG;
+
997}
+
+
998
+
999// Make an enum of the test statistic that we're using
+ +
1008
+
1009// **************************************************
+
1010// Convert a LLH type to a string
+
+ +
1012// **************************************************
+
1013 std::string name = "";
+
1014
+
1015 switch(i) {
+
1016 case kPoisson:
+
1017 name = "Poisson";
+
1018 break;
+
1019 case kBarlowBeeston:
+
1020 name = "BarlowBeeston";
+
1021 break;
+
1022 case kIceCube:
+
1023 name = "IceCube";
+
1024 break;
+
1025 case kPearson:
+
1026 name = "Pearson";
+
1027 break;
+ +
1029 name = "DembinskiAbdelmottele";
+
1030 break;
+
1031 default:
+
1032 std::cerr << "UNKNOWN LIKELHOOD SPECIFIED TO ND280!" << std::endl;
+
1033 std::cerr << "You gave test-statistic " << i << std::endl;
+
1034 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1035 throw;
+
1036 }
+
1037 return name;
+
1038}
+
+
1039
+
1040// *******************
+
1041// Class containing information about interaction modes
+
+ +
1043 // *******************
+
1044 public:
+
1045 //KS: Getter for Modes, each experiment has to define it
+
1046 virtual int GetNModes();
+
1047 virtual std::string Mode_ToString(int i);
+
1048 virtual std::string Mode_ToFancyString(int i);
+
1049 virtual int Mode_ToSplineMode(int i);
+
1050};
+
+
1051
+
1052//WP: Helper function for calculating unbinned Integral of TH2Poly i.e including overflow
+
1053double OverflowIntegral(TH2Poly*);
+
1054
+
1055//WP: Helper function for calculating binned Integral of TH2Poly i.e not including overflow
+ +
1057
+
1058//WP: Poly Projectors
+
1059TH1D* PolyProjectionX(TObject* poly, std::string TempName, std::vector<double> xbins, bool computeErrors = false);
+
1060TH1D* PolyProjectionY(TObject* poly, std::string TempName, std::vector<double> ybins, bool computeErrors = false);
+
1061
+
1062//WP: Helper to Normalise histograms
+ +
1064
+
1065//WP: Helper to scale th2poly analogous to th2d scale with option "width"
+ +
1067//WP: Helper to calc integral of th2poly analogous to th2d integra; with option "width"
+ +
1069
+
1070//KS: Sanity check for TH2Poly
+ +
1072
+
1073//KS: Remove fitted TF1 from hist to make comparison easier
+
1074void RemoveFitter(TH1D* hist, std::string name);
+
1075
+
1076// Helper to check if files exist or not
+
+
1077inline std::string file_exists(std::string filename) {
+
1078 std::ifstream infile(filename.c_str());
+
1079 if (!infile.good()) {
+
1080 std::cerr << "*** ERROR ***" << std::endl;
+
1081 std::cerr << "File " << filename << " does not exist" << std::endl;
+
1082 std::cerr << "Please try again" << std::endl;
+
1083 std::cerr << "*************" << std::endl;
+
1084 throw;
+
1085 }
+
1086
+
1087 return filename;
+
1088}
+
+
1089//DB Get the Cernekov momentum threshold in MeV
+ +
1091
+
1092double CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2 = 0.0);
+
1093double CalculateEnu(double PLep, double cosTheta, double EB, bool neutrino);
+
1094
+
1095
+
+ +
1097 e_e = 0,
+
1098 e_m = 1,
+
1099 e_t = 2,
+
1100 m_e = 3,
+
1101 m_m = 4,
+
1102 m_t = 5,
+
1103 t_e = 6,
+
1104 t_m = 7,
+
1105 t_t = 8
+ +
+
1107
+
1108
+
1109// ************************************************
+
1110// Get CUDAProb3 flavour from intital and final states
+
+ +
1112//*************************************************
+
1113
+
1114 switch (abs(nu_i)) {
+
1115 case 1:
+
1116 switch (abs(nu_f)) {
+
1117 case 1:
+
1118 return CUDAProb_nu::e_e;
+
1119 break;
+
1120 case 2:
+
1121 return CUDAProb_nu::e_m;
+
1122 break;
+
1123 case 3:
+
1124 return CUDAProb_nu::e_t;
+
1125 break;
+
1126 default:
+
1127 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1128 throw;
+
1129 }
+
1130 case 2:
+
1131 switch (abs(nu_f)) {
+
1132 case 1:
+
1133 return CUDAProb_nu::m_e;
+
1134 break;
+
1135 case 2:
+
1136 return CUDAProb_nu::m_m;
+
1137 break;
+
1138 case 3:
+
1139 return CUDAProb_nu::m_t;
+
1140 break;
+
1141 default:
+
1142 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1143 throw;
+
1144 }
+
1145 case 3:
+
1146 switch (abs(nu_f)) {
+
1147 case 1:
+
1148 return CUDAProb_nu::t_e;
+
1149 break;
+
1150 case 2:
+
1151 return CUDAProb_nu::t_m;
+
1152 break;
+
1153 case 3:
+
1154 return CUDAProb_nu::t_t;
+
1155 break;
+
1156 default:
+
1157 std::cout << "Unknow flavour " << nu_f << std::endl;
+
1158 throw;
+
1159 }
+
1160 default:
+
1161 std::cout << "Unknow flavour " << nu_i << std::endl;
+
1162 throw;
+
1163 }
+
1164
+
1165}
+
+
double CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2=0.0)
Definition Structs.cpp:378
+
NuPDG
Definition Structs.h:913
+
@ kNutauBar
Definition Structs.h:920
+
@ kNutau
Definition Structs.h:917
+
@ kNumuBar
Definition Structs.h:919
+
@ kNueBar
Definition Structs.h:918
+
@ kNue
Definition Structs.h:915
+
@ kNumu
Definition Structs.h:916
+
CUDAProb_nu GetCUDAProbFlavour(int nu_i, int nu_f)
Definition Structs.h:1111
+
void CheckTH2PolyFileVersion(TFile *file)
Definition Structs.cpp:97
+
std::string SplineInterpolation_ToString(SplineInterpolation i)
Definition Structs.h:317
+
double CalculateEnu(double PLep, double cosTheta, double EB, bool neutrino)
Definition Structs.cpp:399
+
double NoOverflowIntegral(TH2Poly *)
Definition Structs.cpp:140
+
ProbNu
Definition Structs.h:925
+
@ kProbNutau
Definition Structs.h:929
+
@ kProbNutauBar
Definition Structs.h:932
+
@ kProbNumu
Definition Structs.h:928
+
@ kProbNue
Definition Structs.h:927
+
@ kProbNumuBar
Definition Structs.h:931
+
@ kProbNueBar
Definition Structs.h:930
+
int ProbsToPDG(ProbNu NuType)
Definition Structs.h:968
+
TH2Poly * PolyScaleWidth(TH2Poly *Histogram, double scale)
Definition Structs.cpp:312
+
SplineInterpolation
Definition Structs.h:307
+
@ kTSpline3
Definition Structs.h:308
+
@ kMonotonic
Definition Structs.h:310
+
@ kSplineInterpolations
Definition Structs.h:312
+
@ kLinear
Definition Structs.h:309
+
@ kAkima
Definition Structs.h:311
+
std::vector< T > MakeVector(const T(&data)[N])
Definition Structs.h:54
+
double returnCherenkovThresholdMomentum(int PDG)
Definition Structs.cpp:368
+
TargetMat
Definition Structs.h:859
+
@ kTarget_Fe
Definition Structs.h:868
+
@ kTarget_C
Definition Structs.h:862
+
@ kTarget_Al
Definition Structs.h:865
+
@ kTarget_H
Definition Structs.h:861
+
@ kTarget_Ti
Definition Structs.h:867
+
@ kTarget_Ar
Definition Structs.h:866
+
@ kTarget_N
Definition Structs.h:863
+
@ kTarget_Pb
Definition Structs.h:869
+
@ kTarget_O
Definition Structs.h:864
+
TH1D * PolyProjectionX(TObject *poly, std::string TempName, std::vector< double > xbins, bool computeErrors=false)
Definition Structs.cpp:156
+
#define __int__
Definition Structs.h:14
+
int PDGToProbs(NuPDG pdg)
Definition Structs.h:937
+
#define __float__
Definition Structs.h:13
+
double PolyIntegralWidth(TH2Poly *Histogram)
Definition Structs.cpp:334
+
TestStatistic
Definition Structs.h:1000
+
@ kNTestStatistics
Definition Structs.h:1006
+
@ kPearson
Definition Structs.h:1004
+
@ kBarlowBeeston
Definition Structs.h:1002
+
@ kIceCube
Definition Structs.h:1003
+
@ kDembinskiAbdelmottele
Definition Structs.h:1005
+
@ kPoisson
Definition Structs.h:1001
+
constexpr unsigned int str2int(const char *str, int h=0)
Definition Structs.h:61
+
CUDAProb_nu
Definition Structs.h:1096
+
@ e_t
Definition Structs.h:1099
+
@ m_m
Definition Structs.h:1101
+
@ t_t
Definition Structs.h:1105
+
@ e_m
Definition Structs.h:1098
+
@ m_e
Definition Structs.h:1100
+
@ t_e
Definition Structs.h:1103
+
@ e_e
Definition Structs.h:1097
+
@ t_m
Definition Structs.h:1104
+
@ m_t
Definition Structs.h:1102
+
TH2Poly * NormalisePoly(TH2Poly *Histogram)
Definition Structs.cpp:298
+
std::string TargetMat_ToString(TargetMat i)
Definition Structs.h:874
+
TH1D * PolyProjectionY(TObject *poly, std::string TempName, std::vector< double > ybins, bool computeErrors=false)
Definition Structs.cpp:227
+
double OverflowIntegral(TH2Poly *)
Definition Structs.cpp:123
+
std::string file_exists(std::string filename)
Definition Structs.h:1077
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+
std::string TestStatistic_ToString(TestStatistic i)
Definition Structs.h:1011
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
virtual std::string Mode_ToString(int i)
+
virtual std::string Mode_ToFancyString(int i)
+
virtual int GetNModes()
+
virtual int Mode_ToSplineMode(int i)
+ +
void SetSize(__int__ nSpline)
Definition Structs.h:279
+
~TF1_red()
Definition Structs.h:204
+
__float__ * Par
Definition Structs.h:300
+
double GetParameter(__int__ Parameter)
Definition Structs.h:269
+
TF1_red()
Definition Structs.h:198
+
double Eval(__float__ var)
Definition Structs.h:247
+
void Print()
Definition Structs.h:285
+
TF1_red(__int__ nSize, __float__ *Array, __int__ Parameter)
Definition Structs.h:212
+
std::string GetName()
Definition Structs.h:227
+
void SetFunc(TF1 *&Func, int Param=-1)
Definition Structs.h:234
+
TF1_red(TF1 *&Function, int Param=-1)
Definition Structs.h:221
+
void SetParameter(__int__ Parameter, __float__ Value)
Definition Structs.h:264
+
__int__ ParamNo
Definition Structs.h:303
+
int GetSize()
Definition Structs.h:284
+
__int__ length
Definition Structs.h:301
+ +
__int__ ParamNo
Definition Structs.h:749
+
TSpline3_red(__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)
Definition Structs.h:367
+ +
__int__ nPoints
Definition Structs.h:741
+
int FindX(double x)
Definition Structs.h:669
+
__float__ ** Par
Definition Structs.h:743
+
TSpline3_red(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
Definition Structs.h:359
+
void SetFunc(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
Definition Structs.h:394
+
std::string GetName()
Definition Structs.h:733
+
double Eval(double var)
Definition Structs.h:703
+
void GetCoeff(int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)
Definition Structs.h:724
+
int GetNp()
Definition Structs.h:716
+
__float__ * XPos
Definition Structs.h:745
+
void GetKnot(int i, __float__ &xtmp, __float__ &ytmp)
Definition Structs.h:718
+
__float__ * YResp
Definition Structs.h:747
+ + +
int FindX(double x)
Definition Structs.h:777
+ +
Truncated_Spline(TSpline3 *&spline, int Param=-1)
Definition Structs.h:765
+ +
double Eval(double var)
Definition Structs.h:810
+ +
__int__ GetNumberOfParams()
Definition Structs.h:153
+
__int__ nParams
Definition Structs.h:185
+
void Print()
Definition Structs.h:156
+
T GetFunc(__int__ nSpline)
Definition Structs.h:171
+
void SetSplineNumber(__int__ NumberOfSplines)
Definition Structs.h:165
+
void SetFunc(__int__ nSpline, T Function)
Definition Structs.h:173
+ + +
double Eval(__int__ nSpline, __float__ variation)
Definition Structs.h:175
+
XSecStruct(__int__ NumberOfSplines)
Definition Structs.h:131
+
~XSecStruct()
Definition Structs.h:146
+ +
std::vector< int > targets
Definition Structs.h:86
+
std::vector< std::vector< double > > Selection
Definition Structs.h:91
+
std::vector< std::string > KinematicVarStr
Definition Structs.h:97
+
int index
Definition Structs.h:100
+
std::string name
Definition Structs.h:76
+
TAxis * ebins
Definition Structs.h:74
+
bool hasKinBounds
Definition Structs.h:88
+
std::vector< int > preoscpdgs
Definition Structs.h:84
+
std::vector< int > modes
Definition Structs.h:78
+
std::vector< int > horncurrents
Definition Structs.h:80
+
std::vector< int > pdgs
Definition Structs.h:82
+ + +
int nKnownDetIDs
Definition Structs.cpp:90
+
double GetMassFromPDG(int PDG)
Definition Structs.cpp:11
+
std::unordered_map< int, int > KnownDetIDsMap
+ +
__float__ * xPts
Definition Structs.h:113
+
__int__ nPts
Definition Structs.h:110
+
const double * splineParsPointer
Definition Structs.h:120
+
__int__ CurrSegment
Definition Structs.h:117
+
+ + + + diff --git a/ThrowParms_8cpp.html b/ThrowParms_8cpp.html new file mode 100644 index 00000000..eb77380a --- /dev/null +++ b/ThrowParms_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/covariance/ThrowParms.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ThrowParms.cpp File Reference
+
+
+
#include "ThrowParms.h"
+
+

Go to the source code of this file.

+
+ + + + diff --git a/ThrowParms_8cpp_source.html b/ThrowParms_8cpp_source.html new file mode 100644 index 00000000..d6602d79 --- /dev/null +++ b/ThrowParms_8cpp_source.html @@ -0,0 +1,217 @@ + + + + + + + +MaCh3: /github/workspace/covariance/ThrowParms.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ThrowParms.cpp
+
+
+Go to the documentation of this file.
1#include "ThrowParms.h"
+
2
+
3// ************************
+
4// The constructor
+
5// Taking a TVectorD of central value parameter
+
6// Taking a TMatrixDSym of covariance matrix
+
+
7ThrowParms::ThrowParms(TVectorD &parms, TMatrixDSym &covm) {
+
8// ************************
+
9
+
10 // Copy over the central value parameters and covariance matrix
+
11 npars = parms.GetNrows();
+
12 pvals = new TVectorD(npars);
+
13 covar = new TMatrixDSym(npars);
+
14
+
15 // Copy the central values and covariance matrix
+
16 (*pvals) = parms;
+
17 (*covar) = covm;
+
18
+
19 // Check that the covariance matrix Cholesky decomposes
+
20 TDecompChol chdcmp(*covar);
+
21 if (!chdcmp.Decompose()) {
+
22 std::cerr << "Cholesky decomposition failed for " << std::endl;
+
23 throw;
+
24 }
+
25
+
26 // Running
+
27 chel_dec = new TMatrixD(chdcmp.GetU());
+ +
29}
+
+
30
+
+ +
32{
+
33 delete pvals;
+
34 delete covar;
+
35 delete chel_dec;
+
36}
+
+
37
+
+
38void ThrowParms::ThrowSet(std::vector<double> &parms) {
+
39 // Empty the vector of parameter values that has been passed
+
40 if(!parms.empty()) parms.clear();
+
41
+
42 parms.resize(npars);
+
43
+
44 int half_pars = npars/2+npars%2;
+
45 TVectorD std_rand(npars);
+
46
+
47 for(int j=0; j<half_pars; j++){
+
48 double z[2];
+
49 StdNormRand(z);
+
50 std_rand(j) = z[0];
+
51 if(npars%2==0 || j!=half_pars-1)
+
52 std_rand(j+half_pars) = z[1];
+
53 }
+
54
+
55 TVectorD prod = (*chel_dec)*std_rand;
+
56 for (int i = 0; i < npars; i++) {
+
57 parms[i] = prod(i) + (*pvals)(i);
+
58 }
+
59}
+
+
60
+
61
+
+
62void ThrowParms::StdNormRand(double *z) {
+
63 double u = 2.*rand.Rndm()-1.;
+
64 double v = 2.*rand.Rndm()-1.;
+
65
+
66 double s = u*u+v*v;
+
67
+
68 while(s==0 || s>=1.){
+
69 u = 2.*rand.Rndm()-1.;
+
70 v = 2.*rand.Rndm()-1.;
+
71 s = u*u+v*v;
+
72 }
+
73
+
74 z[0] = u*sqrt(-2.*TMath::Log(s)/s);
+
75 z[1] = v*sqrt(-2.*TMath::Log(s)/s);
+
76}
+
+
77
+
78
+
79// ************************************
+
+
80void ThrowParms::CheloskyDecomp(TMatrixD &chel_mat) {
+
81// ************************************
+
82
+
83 for (int i = 0; i < npars; i++) {
+
84 for (int j = 0; j < npars; j++) {
+
85 //if diagonal element
+
86 if (i == j){
+
87 chel_mat(i, i) = (*covar)(i, i);
+
88 for (int k = 0; k <= i-1; k++) {
+
89 chel_mat(i,i) = chel_mat(i,i)-pow(chel_mat(i,k),2);
+
90 }
+
91 chel_mat(i,i) = sqrt(chel_mat(i,i));
+
92 //if lower half
+
93 } else if (j < i) {
+
94 chel_mat(i, j) = (*covar)(i, j);
+
95 for(int k=0; k<=j-1; k++) {
+
96 chel_mat(i,j) = chel_mat(i,j)-chel_mat(i,k)*chel_mat(j,k);
+
97 }
+
98 chel_mat(i,j) = chel_mat(i,j)/chel_mat(j,j);
+
99 } else chel_mat(i,j) = 0.;
+
100 } // end inner for loop
+
101 } // end outer for loop
+
102
+
103}
+
+
104
+ + +
void ThrowSet(std::vector< double > &parms)
+
TVectorD * pvals
Definition ThrowParms.h:19
+
TRandom3 rand
Definition ThrowParms.h:23
+
TMatrixD * chel_dec
Definition ThrowParms.h:21
+
ThrowParms(TVectorD &parms, TMatrixDSym &covm)
Definition ThrowParms.cpp:7
+ +
void CheloskyDecomp(TMatrixD &chel_mat)
+
TMatrixDSym * covar
Definition ThrowParms.h:20
+
void StdNormRand(double *z)
+
+ + + + diff --git a/ThrowParms_8h.html b/ThrowParms_8h.html new file mode 100644 index 00000000..48c7acec --- /dev/null +++ b/ThrowParms_8h.html @@ -0,0 +1,109 @@ + + + + + + + +MaCh3: /github/workspace/covariance/ThrowParms.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ThrowParms.h File Reference
+
+
+
#include <iostream>
+#include <assert.h>
+#include <algorithm>
+#include <math.h>
+#include <vector>
+#include <TRandom3.h>
+#include <TF1.h>
+#include <TMath.h>
+#include <TMatrixT.h>
+#include <TMatrixTSym.h>
+#include <TVectorT.h>
+#include <TDecompChol.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ThrowParms
 
+
+ + + + diff --git a/ThrowParms_8h_source.html b/ThrowParms_8h_source.html new file mode 100644 index 00000000..8b2a5d2b --- /dev/null +++ b/ThrowParms_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +MaCh3: /github/workspace/covariance/ThrowParms.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ThrowParms.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <iostream>
+
4#include <assert.h>
+
5#include <algorithm>
+
6#include <math.h>
+
7#include <vector>
+
8
+
9#include <TRandom3.h>
+
10#include <TF1.h>
+
11#include <TMath.h>
+
12#include <TMatrixT.h>
+
13#include <TMatrixTSym.h>
+
14#include <TVectorT.h>
+
15#include <TDecompChol.h>
+
16
+
+ +
18 private:
+
19 TVectorD *pvals;
+
20 TMatrixDSym *covar;
+
21 TMatrixD *chel_dec;
+
22 int npars;
+
23 TRandom3 rand;
+
24
+
25 void CheloskyDecomp(TMatrixD &chel_mat);
+
26 void StdNormRand(double *z);
+
27
+
28 public:
+
29 ThrowParms(TVectorD &parms, TMatrixDSym &covm);
+ +
31
+
32 void SetSeed (int seed = 0) {rand.SetSeed(seed);};
+
33 int GetSize() {return npars;};
+
34 void ThrowSet(std::vector<double> &parms);
+
35
+
36};
+
+ + +
int GetSize()
Definition ThrowParms.h:33
+
void SetSeed(int seed=0)
Definition ThrowParms.h:32
+
void ThrowSet(std::vector< double > &parms)
+
TVectorD * pvals
Definition ThrowParms.h:19
+
TRandom3 rand
Definition ThrowParms.h:23
+
TMatrixD * chel_dec
Definition ThrowParms.h:21
+ +
void CheloskyDecomp(TMatrixD &chel_mat)
+
TMatrixDSym * covar
Definition ThrowParms.h:20
+
void StdNormRand(double *z)
+
+ + + + diff --git a/YamlHelper_8cpp.html b/YamlHelper_8cpp.html new file mode 100644 index 00000000..41a16460 --- /dev/null +++ b/YamlHelper_8cpp.html @@ -0,0 +1,270 @@ + + + + + + + +MaCh3: /github/workspace/manager/YamlHelper.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
YamlHelper.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + +

+Functions

YAML::Node STRINGtoYAML (const std::string &yaml_string)
 
std::string YAMLtoSTRING (const YAML::Node &node)
 KS: Convert a YAML node to a string representation.
 
std::string TMacroToString (const TMacro &macro)
 KS: Convert a ROOT TMacro object to a string representation.
 
YAML::Node TMacroToYAML (const TMacro &macro)
 KS: Convert a ROOT TMacro object to a YAML node.
 
+

Function Documentation

+ +

◆ STRINGtoYAML()

+ +
+
+ + + + + + + + +
YAML::Node STRINGtoYAML (const std::stringyaml_string)
+
+ +

Definition at line 5 of file YamlHelper.cpp.

+
5 {
+
6// **********************
+
7
+
8 try {
+
9 return YAML::Load(yaml_string);
+
10 } catch (const YAML::ParserException& e) {
+
11 std::cerr << "Error parsing YAML string: " << e.what() << std::endl;
+
12 return YAML::Node();
+
13 }
+
14}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ TMacroToString()

+ +
+
+ + + + + + + + +
std::string TMacroToString (const TMacromacro)
+
+ +

KS: Convert a ROOT TMacro object to a string representation.

+
Parameters
+ + +
macroThe ROOT TMacro object to convert.
+
+
+
Returns
std::string The string representation of the TMacro object.
+ +

Definition at line 28 of file YamlHelper.cpp.

+
28 {
+
29// **********************
+
30
+
31 std::stringstream ss;
+
32
+
33 // Retrieve lines from TMacro
+
34 TList* linesList = macro.GetListOfLines();
+
35 if (!linesList) {
+
36 std::cerr << "Error: Failed to retrieve lines from TMacro." << std::endl;
+
37 return "";
+
38 }
+
39
+ +
41 TObject *obj = nullptr;
+
42 while ((obj = nextLine())) {
+
43 TObjString* line = dynamic_cast<TObjString*>(obj);
+
44 if (!line) {
+
45 std::cerr << "Error: Failed to cast object to TObjString." << std::endl;
+
46 continue;
+
47 }
+
48 ss << line->GetString() << std::endl;
+
49 }
+
50
+
51 return ss.str();
+
52}
+
+
+
+ +

◆ TMacroToYAML()

+ +
+
+ + + + + + + + +
YAML::Node TMacroToYAML (const TMacromacro)
+
+ +

KS: Convert a ROOT TMacro object to a YAML node.

+
Parameters
+ + +
macroThe ROOT TMacro object to convert.
+
+
+
Returns
YAML::Node The YAML node representing the TMacro object.
+ +

Definition at line 56 of file YamlHelper.cpp.

+
56 {
+
57// **********************
+
58
+
59 std::string yaml_string = TMacroToString(macro);
+
60
+
61 // Convert the YAML string to a YAML node
+ +
63
+
64 return yaml_node;
+
65}
+
YAML::Node STRINGtoYAML(const std::string &yaml_string)
Definition YamlHelper.cpp:5
+
std::string TMacroToString(const TMacro &macro)
KS: Convert a ROOT TMacro object to a string representation.
+
+
+
+ +

◆ YAMLtoSTRING()

+ +
+
+ + + + + + + + +
std::string YAMLtoSTRING (const YAML::Nodenode)
+
+ +

KS: Convert a YAML node to a string representation.

+
Parameters
+ + +
nodeThe YAML node to convert to a string.
+
+
+
Returns
std::string The string representation of the YAML node.
+ +

Definition at line 18 of file YamlHelper.cpp.

+
18 {
+
19// **********************
+
20
+
21 YAML::Emitter emitter;
+
22 emitter << node;
+
23 return emitter.c_str();
+
24}
+
+
+
+
+ + + + diff --git a/YamlHelper_8cpp_source.html b/YamlHelper_8cpp_source.html new file mode 100644 index 00000000..8b462077 --- /dev/null +++ b/YamlHelper_8cpp_source.html @@ -0,0 +1,171 @@ + + + + + + + +MaCh3: /github/workspace/manager/YamlHelper.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
YamlHelper.cpp
+
+
+Go to the documentation of this file.
+
2
+
3// **********************
+
4// Function to convert a YAML string to a YAML node
+
+
5YAML::Node STRINGtoYAML(const std::string& yaml_string) {
+
6// **********************
+
7
+
8 try {
+
9 return YAML::Load(yaml_string);
+
10 } catch (const YAML::ParserException& e) {
+
11 std::cerr << "Error parsing YAML string: " << e.what() << std::endl;
+
12 return YAML::Node();
+
13 }
+
14}
+
+
15
+
16// **********************
+
17// Function to convert a YAML node to a YAML string
+
+
18std::string YAMLtoSTRING(const YAML::Node& node) {
+
19// **********************
+
20
+
21 YAML::Emitter emitter;
+
22 emitter << node;
+
23 return emitter.c_str();
+
24}
+
+
25
+
26// **********************
+
27//KS: Converts ROOT TMacro to string
+
+
28std::string TMacroToString(const TMacro& macro) {
+
29// **********************
+
30
+
31 std::stringstream ss;
+
32
+
33 // Retrieve lines from TMacro
+
34 TList* linesList = macro.GetListOfLines();
+
35 if (!linesList) {
+
36 std::cerr << "Error: Failed to retrieve lines from TMacro." << std::endl;
+
37 return "";
+
38 }
+
39
+ +
41 TObject *obj = nullptr;
+
42 while ((obj = nextLine())) {
+
43 TObjString* line = dynamic_cast<TObjString*>(obj);
+
44 if (!line) {
+
45 std::cerr << "Error: Failed to cast object to TObjString." << std::endl;
+
46 continue;
+
47 }
+
48 ss << line->GetString() << std::endl;
+
49 }
+
50
+
51 return ss.str();
+
52}
+
+
53
+
54// **********************
+
55//KS: Converts ROOT TMacro to yaml node
+
+
56YAML::Node TMacroToYAML(const TMacro& macro) {
+
57// **********************
+
58
+
59 std::string yaml_string = TMacroToString(macro);
+
60
+
61 // Convert the YAML string to a YAML node
+ +
63
+
64 return yaml_node;
+
65}
+
+
YAML::Node STRINGtoYAML(const std::string &yaml_string)
Definition YamlHelper.cpp:5
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
std::string TMacroToString(const TMacro &macro)
KS: Convert a ROOT TMacro object to a string representation.
+
std::string YAMLtoSTRING(const YAML::Node &node)
KS: Convert a YAML node to a string representation.
+ +
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+ + + + diff --git a/YamlHelper_8h.html b/YamlHelper_8h.html new file mode 100644 index 00000000..3f7a5d48 --- /dev/null +++ b/YamlHelper_8h.html @@ -0,0 +1,553 @@ + + + + + + + +MaCh3: /github/workspace/manager/YamlHelper.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
YamlHelper.h File Reference
+
+
+
#include <iostream>
+#include <fstream>
+#include <string>
+#include "TMacro.h"
+#include "TList.h"
+#include "TObjString.h"
+#include "yaml-cpp/yaml.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename Type >
Type GetFromManager (const YAML::Node &node, Type defval)
 
template<typename T >
bool CheckNodeExistsHelper (const T &node)
 
template<typename T , typename... Args>
bool CheckNodeExistsHelper (const T &node, const std::string &key, Args... args)
 
template<typename... Args>
bool CheckNodeExists (const YAML::Node &node, Args... args)
 
template<typename T >
T FindFromManagerHelper (const YAML::Node &node)
 Use this like this FindFromManager<std::string>(config, "LikelihoodOptions", "TestStatistic");.
 
template<typename T , typename... Args>
T FindFromManagerHelper (const YAML::Node &node, const std::string &key, Args... args)
 
template<typename T , typename... Args>
T FindFromManager (const YAML::Node &node, Args... args)
 
YAML::Node STRINGtoYAML (const std::string &yaml_string)
 
std::string YAMLtoSTRING (const YAML::Node &node)
 KS: Convert a YAML node to a string representation.
 
std::string TMacroToString (const TMacro &macro)
 KS: Convert a ROOT TMacro object to a string representation.
 
YAML::Node TMacroToYAML (const TMacro &macro)
 KS: Convert a ROOT TMacro object to a YAML node.
 
+

Function Documentation

+ +

◆ CheckNodeExists()

+ +
+
+
+template<typename... Args>
+ + + + + + + + + + + + + + + + + + +
bool CheckNodeExists (const YAML::Nodenode,
Args... args 
)
+
+ +

Definition at line 44 of file YamlHelper.h.

+
44 {
+ +
46}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
bool CheckNodeExistsHelper(const T &node)
Definition YamlHelper.h:27
+
+
+
+ +

◆ CheckNodeExistsHelper() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool CheckNodeExistsHelper (const Tnode)
+
+ +

Definition at line 27 of file YamlHelper.h.

+
27 {
+
28 (void)node;
+
29 return true; // Node exists, return true
+
30}
+
+
+
+ +

◆ CheckNodeExistsHelper() [2/2]

+ +
+
+
+template<typename T , typename... Args>
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool CheckNodeExistsHelper (const Tnode,
const std::stringkey,
Args... args 
)
+
+ +

Definition at line 34 of file YamlHelper.h.

+
34 {
+
35 if (!node[key]) {
+
36 //std::cerr << "Node " << key << " doesn't exist." << std::endl;
+
37 return false;
+
38 }
+ +
40}
+
+
+
+ +

◆ FindFromManager()

+ +
+
+
+template<typename T , typename... Args>
+ + + + + + + + + + + + + + + + + + +
T FindFromManager (const YAML::Nodenode,
Args... args 
)
+
+ +

Definition at line 68 of file YamlHelper.h.

+
68 {
+ +
70}
+
+
+
+ +

◆ FindFromManagerHelper() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
T FindFromManagerHelper (const YAML::Nodenode)
+
+ +

Use this like this FindFromManager<std::string>(config, "LikelihoodOptions", "TestStatistic");.

+ +

Definition at line 51 of file YamlHelper.h.

+
51 {
+
52 return node.as<T>(); // Convert YAML node to the specified type
+
53}
+
+
+
+ +

◆ FindFromManagerHelper() [2/2]

+ +
+
+
+template<typename T , typename... Args>
+ + + + + + + + + + + + + + + + + + + + + + + + +
T FindFromManagerHelper (const YAML::Nodenode,
const std::stringkey,
Args... args 
)
+
+ +

Definition at line 57 of file YamlHelper.h.

+
57 {
+
58 if (!node[key]) {
+
59 std::cerr << "Node " << key << " doesn't exist." << std::endl;
+
60 throw;
+
61 return T();
+
62 }
+
63 return FindFromManagerHelper<T>(node[key], args...); // Recursive call
+
64}
+
+
+
+ +

◆ GetFromManager()

+ +
+
+
+template<typename Type >
+ + + + + + + + + + + + + + + + + + +
Type GetFromManager (const YAML::Node & node,
Type defval 
)
+
+ +

Definition at line 14 of file YamlHelper.h.

+
15{
+
16 YAML::Node tmpNode = node;
+
17
+
18 if(!tmpNode){
+
19 return defval;
+
20 }
+
21 return tmpNode.as<Type>();
+
22}
+
+
+
+ +

◆ STRINGtoYAML()

+ +
+
+ + + + + + + + +
YAML::Node STRINGtoYAML (const std::stringyaml_string)
+
+ +

Definition at line 5 of file YamlHelper.cpp.

+
5 {
+
6// **********************
+
7
+
8 try {
+
9 return YAML::Load(yaml_string);
+
10 } catch (const YAML::ParserException& e) {
+
11 std::cerr << "Error parsing YAML string: " << e.what() << std::endl;
+
12 return YAML::Node();
+
13 }
+
14}
+
+
+
+ +

◆ TMacroToString()

+ +
+
+ + + + + + + + +
std::string TMacroToString (const TMacromacro)
+
+ +

KS: Convert a ROOT TMacro object to a string representation.

+
Parameters
+ + +
macroThe ROOT TMacro object to convert.
+
+
+
Returns
std::string The string representation of the TMacro object.
+ +

Definition at line 28 of file YamlHelper.cpp.

+
28 {
+
29// **********************
+
30
+
31 std::stringstream ss;
+
32
+
33 // Retrieve lines from TMacro
+
34 TList* linesList = macro.GetListOfLines();
+
35 if (!linesList) {
+
36 std::cerr << "Error: Failed to retrieve lines from TMacro." << std::endl;
+
37 return "";
+
38 }
+
39
+ +
41 TObject *obj = nullptr;
+
42 while ((obj = nextLine())) {
+
43 TObjString* line = dynamic_cast<TObjString*>(obj);
+
44 if (!line) {
+
45 std::cerr << "Error: Failed to cast object to TObjString." << std::endl;
+
46 continue;
+
47 }
+
48 ss << line->GetString() << std::endl;
+
49 }
+
50
+
51 return ss.str();
+
52}
+
+
+
+ +

◆ TMacroToYAML()

+ +
+
+ + + + + + + + +
YAML::Node TMacroToYAML (const TMacromacro)
+
+ +

KS: Convert a ROOT TMacro object to a YAML node.

+
Parameters
+ + +
macroThe ROOT TMacro object to convert.
+
+
+
Returns
YAML::Node The YAML node representing the TMacro object.
+ +

Definition at line 56 of file YamlHelper.cpp.

+
56 {
+
57// **********************
+
58
+
59 std::string yaml_string = TMacroToString(macro);
+
60
+
61 // Convert the YAML string to a YAML node
+ +
63
+
64 return yaml_node;
+
65}
+
YAML::Node STRINGtoYAML(const std::string &yaml_string)
Definition YamlHelper.cpp:5
+
std::string TMacroToString(const TMacro &macro)
KS: Convert a ROOT TMacro object to a string representation.
+
+
+
+ +

◆ YAMLtoSTRING()

+ +
+
+ + + + + + + + +
std::string YAMLtoSTRING (const YAML::Nodenode)
+
+ +

KS: Convert a YAML node to a string representation.

+
Parameters
+ + +
nodeThe YAML node to convert to a string.
+
+
+
Returns
std::string The string representation of the YAML node.
+ +

Definition at line 18 of file YamlHelper.cpp.

+
18 {
+
19// **********************
+
20
+
21 YAML::Emitter emitter;
+
22 emitter << node;
+
23 return emitter.c_str();
+
24}
+
+
+
+
+ + + + diff --git a/YamlHelper_8h_source.html b/YamlHelper_8h_source.html new file mode 100644 index 00000000..8ff7fe01 --- /dev/null +++ b/YamlHelper_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + +MaCh3: /github/workspace/manager/YamlHelper.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
YamlHelper.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <iostream>
+
4#include <fstream>
+
5#include <string>
+
6
+
7#include "TMacro.h"
+
8#include "TList.h"
+
9#include "TObjString.h"
+
10
+
11#include "yaml-cpp/yaml.h"
+
12
+
13template<typename Type>
+
+
14Type GetFromManager(const YAML::Node& node, Type defval)
+
15{
+
16 YAML::Node tmpNode = node;
+
17
+
18 if(!tmpNode){
+
19 return defval;
+
20 }
+
21 return tmpNode.as<Type>();
+
22}
+
+
23
+
24// Use this like this CheckNodeExists(config, "LikelihoodOptions", "TestStatistic");
+
25//KS: Base case for recursion
+
26template<typename T>
+
+ +
28 (void)node;
+
29 return true; // Node exists, return true
+
30}
+
+
31
+
32//KS: Recursive function to traverse YAML nodes
+
33template<typename T, typename... Args>
+
+
34bool CheckNodeExistsHelper(const T& node, const std::string& key, Args... args) {
+
35 if (!node[key]) {
+
36 //std::cerr << "Node " << key << " doesn't exist." << std::endl;
+
37 return false;
+
38 }
+ +
40}
+
+
41
+
42//KS: Wrapper function to call the recursive helper
+
43template<typename... Args>
+
+
44bool CheckNodeExists(const YAML::Node& node, Args... args) {
+ +
46}
+
+
47
+
49// Base case for recursion
+
50template<typename T>
+
+
51T FindFromManagerHelper(const YAML::Node& node) {
+
52 return node.as<T>(); // Convert YAML node to the specified type
+
53}
+
+
54
+
55// Recursive function to traverse YAML nodes
+
56template<typename T, typename... Args>
+
+
57T FindFromManagerHelper(const YAML::Node& node, const std::string& key, Args... args) {
+
58 if (!node[key]) {
+
59 std::cerr << "Node " << key << " doesn't exist." << std::endl;
+
60 throw;
+
61 return T();
+
62 }
+
63 return FindFromManagerHelper<T>(node[key], args...); // Recursive call
+
64}
+
+
65
+
66// Wrapper function to call the recursive helper
+
67template<typename T, typename... Args>
+
+
68T FindFromManager(const YAML::Node& node, Args... args) {
+ +
70}
+
+
71
+
72
+
73// Function to convert a YAML string to a YAML node
+
74YAML::Node STRINGtoYAML(const std::string& yaml_string);
+
75
+
79std::string YAMLtoSTRING(const YAML::Node& node);
+
80
+
84std::string TMacroToString(const TMacro& macro);
+
85
+
89YAML::Node TMacroToYAML(const TMacro& macro);
+
90
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
T FindFromManagerHelper(const YAML::Node &node)
Use this like this FindFromManager<std::string>(config, "LikelihoodOptions", "TestStatistic");.
Definition YamlHelper.h:51
+
T FindFromManager(const YAML::Node &node, Args... args)
Definition YamlHelper.h:68
+
bool CheckNodeExistsHelper(const T &node)
Definition YamlHelper.h:27
+
YAML::Node STRINGtoYAML(const std::string &yaml_string)
Definition YamlHelper.cpp:5
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
std::string TMacroToString(const TMacro &macro)
KS: Convert a ROOT TMacro object to a string representation.
+
std::string YAMLtoSTRING(const YAML::Node &node)
KS: Convert a YAML node to a string representation.
+
bool CheckNodeExists(const YAML::Node &node, Args... args)
Definition YamlHelper.h:44
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..18c76209 --- /dev/null +++ b/annotated.html @@ -0,0 +1,124 @@ + + + + + + + +MaCh3: Class List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/classBaseFuncPar-members.html b/classBaseFuncPar-members.html new file mode 100644 index 00000000..2f17abee --- /dev/null +++ b/classBaseFuncPar-members.html @@ -0,0 +1,95 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
BaseFuncPar Member List
+
+
+ +

This is the complete list of members for BaseFuncPar, including all inherited members.

+ + + + + + + + + + +
Apply()=0BaseFuncParpure virtual
BaseFuncPar()BaseFuncParinline
blahBaseFuncPar
Param_posBaseFuncPar
ScaleUncertaintyBaseFuncPar
SetUncertainty(double sigma)BaseFuncParinline
setup()BaseFuncPar
syst_posBaseFuncPar
~BaseFuncPar()BaseFuncPar
+ + + + diff --git a/classBaseFuncPar.html b/classBaseFuncPar.html new file mode 100644 index 00000000..bc014824 --- /dev/null +++ b/classBaseFuncPar.html @@ -0,0 +1,317 @@ + + + + + + + +MaCh3: BaseFuncPar Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
BaseFuncPar Class Referenceabstract
+
+
+ +

#include <ShiftFunctors.h>

+
+Inheritance diagram for BaseFuncPar:
+
+
+ + +EnergyScale +SKEScale + +
+ + + + + + + + + + + + +

+Public Member Functions

 BaseFuncPar ()
 
 ~BaseFuncPar ()
 
void SetUncertainty (double sigma)
 
void setup ()
 
virtual void Apply ()=0
 
+ + + + + + + + + +

+Public Attributes

double ScaleUncertainty = 1.0
 
doubleParam_pos
 
std::vector< doublesyst_pos
 
fdmc_baseblah
 
+

Detailed Description

+
+

Definition at line 5 of file ShiftFunctors.h.

+

Constructor & Destructor Documentation

+ +

◆ BaseFuncPar()

+ +
+
+ + + + + +
+ + + + + + + +
BaseFuncPar::BaseFuncPar ()
+
+inline
+
+ +

Definition at line 7 of file ShiftFunctors.h.

+
7{};
+
+
+
+ +

◆ ~BaseFuncPar()

+ +
+
+ + + + + + + +
BaseFuncPar::~BaseFuncPar ()
+
+ +
+
+

Member Function Documentation

+ +

◆ Apply()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void BaseFuncPar::Apply ()
+
+pure virtual
+
+ +

Implemented in SKEScale, and EnergyScale.

+ +
+
+ +

◆ SetUncertainty()

+ +
+
+ + + + + +
+ + + + + + + + +
void BaseFuncPar::SetUncertainty (double sigma)
+
+inline
+
+ +

Definition at line 10 of file ShiftFunctors.h.

+
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
double ScaleUncertainty
+
+
+
+ +

◆ setup()

+ +
+
+ + + + + + + +
void BaseFuncPar::setup ()
+
+ +
+
+

Member Data Documentation

+ +

◆ blah

+ +
+
+ + + + +
fdmc_base* BaseFuncPar::blah
+
+ +

Definition at line 16 of file ShiftFunctors.h.

+ +
+
+ +

◆ Param_pos

+ +
+
+ + + + +
double* BaseFuncPar::Param_pos
+
+ +

Definition at line 11 of file ShiftFunctors.h.

+ +
+
+ +

◆ ScaleUncertainty

+ +
+
+ + + + +
double BaseFuncPar::ScaleUncertainty = 1.0
+
+ +

Definition at line 9 of file ShiftFunctors.h.

+ +
+
+ +

◆ syst_pos

+ +
+
+ + + + +
std::vector<double> BaseFuncPar::syst_pos
+
+ +

Definition at line 13 of file ShiftFunctors.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classBaseFuncPar.png b/classBaseFuncPar.png new file mode 100644 index 0000000000000000000000000000000000000000..62c1ff90bf4b23d03b6542be067a35c0eeb926f3 GIT binary patch literal 706 zcmV;z0zLhSP)0000RP)t-s|Ns90 z008Lh^>vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0006_ zNkl5il@3&^l*7IvkI37=n>^#4Z_T9gLn5ZGuvSA+DGNrjhR_VcXIXyULqg!xNKjiGS3H7 zdodpvZ@)r*6)X=5`SxNuj4yUw&9AR(uZBV69htit61dbqrqS%u33 z^tiYDG)>bP0DKcOz+Jhs{5;>-{?76b_xsx4THd=2z%{r$z!kVWz!kVWz!kVWz&~J~ z=lN^^PT>QIba{XVmj~F#5jyd*Wa oyd>@OkPjh*Gsxsa2;mI=0D9S7Ft}*_kpKVy07*qoM6N<$f@i~7RsaA1 literal 0 HcmV?d00001 diff --git a/classEnergyScale-members.html b/classEnergyScale-members.html new file mode 100644 index 00000000..0d59d542 --- /dev/null +++ b/classEnergyScale-members.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
EnergyScale Member List
+
+
+ +

This is the complete list of members for EnergyScale, including all inherited members.

+ + + + + + + + + + + + + +
Apply()EnergyScaleinlinevirtual
BaseFuncPar()BaseFuncParinline
blahBaseFuncPar
EnergyScale()EnergyScaleinline
Param_posBaseFuncPar
ScaleUncertaintyBaseFuncPar
SetUncertainty(double sigma)BaseFuncParinline
setup()BaseFuncPar
syst_posBaseFuncPar
testEnergyScaleprotected
~BaseFuncPar()BaseFuncPar
~EnergyScale()EnergyScale
+ + + + diff --git a/classEnergyScale.html b/classEnergyScale.html new file mode 100644 index 00000000..8b4fa1d7 --- /dev/null +++ b/classEnergyScale.html @@ -0,0 +1,242 @@ + + + + + + + +MaCh3: EnergyScale Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
EnergyScale Class Reference
+
+
+ +

#include <ShiftFunctors.h>

+
+Inheritance diagram for EnergyScale:
+
+
+ + +BaseFuncPar + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 EnergyScale ()
 
 ~EnergyScale ()
 
void Apply ()
 
- Public Member Functions inherited from BaseFuncPar
 BaseFuncPar ()
 
 ~BaseFuncPar ()
 
void SetUncertainty (double sigma)
 
void setup ()
 
+ + + +

+Protected Attributes

int test
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from BaseFuncPar
double ScaleUncertainty = 1.0
 
doubleParam_pos
 
std::vector< doublesyst_pos
 
fdmc_baseblah
 
+

Detailed Description

+
+

Definition at line 29 of file ShiftFunctors.h.

+

Constructor & Destructor Documentation

+ +

◆ EnergyScale()

+ +
+
+ + + + + +
+ + + + + + + +
EnergyScale::EnergyScale ()
+
+inline
+
+ +

Definition at line 31 of file ShiftFunctors.h.

+
31{};
+
+
+
+ +

◆ ~EnergyScale()

+ +
+
+ + + + + + + +
EnergyScale::~EnergyScale ()
+
+ +
+
+

Member Function Documentation

+ +

◆ Apply()

+ +
+
+ + + + + +
+ + + + + + + +
void EnergyScale::Apply ()
+
+inlinevirtual
+
+ +

Implements BaseFuncPar.

+ +

Definition at line 33 of file ShiftFunctors.h.

+
33{};
+
+
+
+

Member Data Documentation

+ +

◆ test

+ +
+
+ + + + + +
+ + + + +
int EnergyScale::test
+
+protected
+
+ +

Definition at line 36 of file ShiftFunctors.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classEnergyScale.png b/classEnergyScale.png new file mode 100644 index 0000000000000000000000000000000000000000..f478bc2507219b4bfa6bde13fc0d8cd0cfb0bba7 GIT binary patch literal 481 zcmV<70UrK|P)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0004O zNkl)SR8{R%$>pJ{+UgGa7&wx12G{dgGLTI&8f{>9AIK%ToiyapSf_c{n>rU* zLDlqz{kp)ChFguYb&eXU(U9#`K9Q?&41Oe=Lw!`|>j<}(;E=C!?L$WNy|FJgchwn- zb$vHfwfQgd50FzzDMA1+trq}9YmRIyLy|L^%(=D+Nls~fMSp-SA`+oL XpQA~A@5eRR00000NkvXXu0mjfiRj{7 literal 0 HcmV?d00001 diff --git a/classFitterBase-members.html b/classFitterBase-members.html new file mode 100644 index 00000000..8146ead6 --- /dev/null +++ b/classFitterBase-members.html @@ -0,0 +1,125 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
FitterBase Member List
+
+
+ +

This is the complete list of members for FitterBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accCountFitterBaseprotected
accProbFitterBaseprotected
addOscHandler(covarianceOsc *oscf)FitterBase
addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)FitterBase
addSamplePDF(samplePDFBase *sample)FitterBase
addSystObj(covarianceBase *cov)FitterBase
auto_saveFitterBaseprotected
clockFitterBaseprotected
CovFolderFitterBaseprotected
FileSavedFitterBaseprotected
fitManFitterBaseprotected
FitterBase(manager *const fitMan)FitterBase
fTestLikelihoodFitterBaseprotected
GetName() constFitterBaseinlinevirtual
logLCurrFitterBaseprotected
logLPropFitterBaseprotected
oscFitterBaseprotected
osc2FitterBaseprotected
osc_llhFitterBaseprotected
outputFileFitterBaseprotected
OutputPreparedFitterBaseprotected
outTreeFitterBaseprotected
PrepareOutput()FitterBaseprotected
randomFitterBaseprotected
Run2DLLHScan()FitterBase
RunLLHScan()FitterBase
runMCMC()=0FitterBasepure virtual
sample_llhFitterBaseprotected
samplesFitterBaseprotected
save_nominalFitterBaseprotected
SaveOutput()FitterBaseprotected
SaveSettings()FitterBaseprotected
SettingsSavedFitterBaseprotected
stepFitterBaseprotected
stepClockFitterBaseprotected
stepTimeFitterBaseprotected
syst_llhFitterBaseprotected
systematicsFitterBaseprotected
~FitterBase()FitterBasevirtual
+ + + + diff --git a/classFitterBase.html b/classFitterBase.html new file mode 100644 index 00000000..2f6e7c44 --- /dev/null +++ b/classFitterBase.html @@ -0,0 +1,2179 @@ + + + + + + + +MaCh3: FitterBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <FitterBase.h>

+
+Inheritance diagram for FitterBase:
+
+
+ + +LikelihoodFit +mcmc +MinuitFit +PSO + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FitterBase (manager *const fitMan)
 Constructor.
 
virtual ~FitterBase ()
 Destructor.
 
void addSamplePDF (samplePDFBase *sample)
 This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.
 
void addSystObj (covarianceBase *cov)
 This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.
 
void addOscHandler (covarianceOsc *oscf)
 Adds an oscillation handler for covariance objects.
 
void addOscHandler (covarianceOsc *osca, covarianceOsc *oscb)
 Adds two oscillation handlers for covariance objects.
 
virtual void runMCMC ()=0
 The specific fitting algorithm implemented in this function depends on the derived class. It could be Markov Chain Monte Carlo (MCMC), MinuitFit, or another algorithm.
 
void RunLLHScan ()
 Perform a 1D likelihood scan.
 
void Run2DLLHScan ()
 Perform a 2D likelihood scan.
 
virtual std::string GetName () const
 Get name of class.
 
+ + + + + + + + + + +

+Protected Member Functions

void PrepareOutput ()
 Prepare the output file.
 
void SaveOutput ()
 Save output and close files.
 
void SaveSettings ()
 Save the settings that the MCMC was run with.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

managerfitMan
 The manager.
 
unsigned int step
 current state
 
double logLCurr
 current likelihood
 
double logLProp
 proposed likelihood
 
double accProb
 current acceptance prob
 
int accCount
 counts accepted steps
 
double osc_llh
 
doublesample_llh
 store the llh breakdowns
 
doublesyst_llh
 systematic llh breakdowns
 
std::vector< samplePDFBase * > samples
 Sample holder.
 
std::vector< covarianceBase * > systematics
 Systematic holder.
 
covarianceOscosc
 handles oscillation parameters
 
covarianceOscosc2
 handles oscillation parameters
 
TStopwatchclock
 tells global time how long fit took
 
TStopwatchstepClock
 tells how long single step/fit iteration took
 
double stepTime
 Time of single step.
 
TRandom3random
 Random number.
 
TFileoutputFile
 Output.
 
TDirectoryCovFolder
 Output cov folder.
 
TTreeoutTree
 Output tree with posteriors.
 
int auto_save
 auto save every N steps
 
bool fTestLikelihood
 Necessary for some fitting algorithms like PSO.
 
bool save_nominal
 save nominal matrix info or not
 
bool FileSaved
 Checks if file saved not repeat some operations.
 
bool SettingsSaved
 Checks if setting saved not repeat some operations.
 
bool OutputPrepared
 Checks if output prepared not repeat some operations.
 
+

Detailed Description

+
+

Definition at line 19 of file FitterBase.h.

+

Constructor & Destructor Documentation

+ +

◆ FitterBase()

+ +
+
+ + + + + + + + +
FitterBase::FitterBase (manager *const fitMan)
+
+ +

Constructor.

+ +

Definition at line 10 of file FitterBase.cpp.

+
10 : fitMan(man) {
+
11// *************************
+
12
+
13 random = new TRandom3(fitMan->raw()["General"]["Seed"].as<int>());
+
14
+
15 // Counter of the accepted # of steps
+
16 accCount = 0;
+
17 step = 0;
+
18
+
19 clock = new TStopwatch;
+ +
21 #ifdef DEBUG
+
22 // Fit summary and debug info
+
23 debug = fitMan->raw()["General"]["Debug"].as<bool>();
+
24 #endif
+
25
+
26 std::string outfile = fitMan->raw()["General"]["OutputFile"].as<std::string>();
+
27
+
28 // Save output every auto_save steps
+
29 //you don't want this too often https://root.cern/root/html606/TTree_8cxx_source.html#l01229
+
30 auto_save = fitMan->raw()["General"]["MCMC"]["AutoSave"].as<int>();
+
31 // Do we want to save the nominal parameters to output
+
32 save_nominal = true;
+
33
+
34 // Set the output file
+
35 outputFile = new TFile(outfile.c_str(), "RECREATE");
+
36 outputFile->cd();
+
37 // Set output tree
+
38 outTree = new TTree("posteriors", "Posterior_Distributions");
+
39 // Auto-save every 200MB, the bigger the better https://root.cern/root/html606/TTree_8cxx_source.html#l01229
+
40 outTree->SetAutoSave(-200E6);
+
41
+
42 FileSaved = false;
+
43 SettingsSaved = false;
+
44 OutputPrepared = false;
+
45
+
46 //Create TDirectory
+
47 CovFolder = outputFile->mkdir("CovarianceFolder");
+
48 outputFile->cd();
+
49
+
50 #ifdef DEBUG
+
51 // Prepare the output log file
+
52 if (debug) debugFile.open((outfile+".log").c_str());
+
53 #endif
+
54
+
55 // Clear the samples and systematics
+
56 samples.clear();
+
57 systematics.clear();
+
58 osc = nullptr;
+
59
+
60 sample_llh = nullptr;
+
61 syst_llh = nullptr;
+
62
+
63 fTestLikelihood = false;
+
64 //ETA - No guarantee that "Fitter" field exists so check this first before
+
65 //checking ["Fitter"]["FitTestLikelihood"]
+
66 if(fitMan->raw()["General"]["Fitter"])
+
67 {
+
68 if(fitMan->raw()["General"]["Fitter"]["FitTestLikelihood"]){
+
69 fTestLikelihood = fitMan->raw()["General"]["Fitter"]["FitTestLikelihood"].as<bool>();
+
70 }
+
71 }
+
72}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
bool OutputPrepared
Checks if output prepared not repeat some operations.
Definition FitterBase.h:129
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
unsigned int step
current state
Definition FitterBase.h:71
+
bool SettingsSaved
Checks if setting saved not repeat some operations.
Definition FitterBase.h:127
+
bool FileSaved
Checks if file saved not repeat some operations.
Definition FitterBase.h:125
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
TDirectory * CovFolder
Output cov folder.
Definition FitterBase.h:113
+
TStopwatch * clock
tells global time how long fit took
Definition FitterBase.h:101
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
bool fTestLikelihood
Necessary for some fitting algorithms like PSO.
Definition FitterBase.h:120
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
bool save_nominal
save nominal matrix info or not
Definition FitterBase.h:122
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
+
+
+ +

◆ ~FitterBase()

+ +
+
+ + + + + +
+ + + + + + + +
FitterBase::~FitterBase ()
+
+virtual
+
+ +

Destructor.

+ +

Definition at line 76 of file FitterBase.cpp.

+
76 {
+
77// *************************
+
78 SaveOutput();
+
79 if(random != nullptr) delete random;
+
80 if(sample_llh != nullptr) delete[] sample_llh;
+
81 if(syst_llh != nullptr) delete[] syst_llh;
+
82 if(outputFile != nullptr) delete outputFile;
+
83 delete clock;
+
84 delete stepClock;
+
85 MACH3LOG_INFO("Closing MaCh3 Fitter Engine");
+
86}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SaveOutput()
Save output and close files.
+
+
+
+

Member Function Documentation

+ +

◆ addOscHandler() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FitterBase::addOscHandler (covarianceOscosca,
covarianceOscoscb 
)
+
+ +

Adds two oscillation handlers for covariance objects.

+
Parameters
+ + + +
oscaA pointer to a covarianceOsc object for the first oscillation.
oscbA pointer to a covarianceOsc object for the second oscillation.
+
+
+ +

Definition at line 321 of file FitterBase.cpp.

+
321 {
+
322// *************************
+
323
+
324 osc = oscf;
+
325 osc2 = oscf2;
+
326
+
327 if (save_nominal) {
+
328 CovFolder->cd();
+
329 std::vector<double> vec = oscf->getNominalArray();
+
330 size_t n = vec.size();
+
331 double *n_vec = new double[n];
+
332 for (size_t i = 0; i < n; ++i) {
+
333 n_vec[i] = vec[i];
+
334 }
+ +
336 TString nameof = TString(oscf->getName());
+
337 nameof = nameof.Append("_nom");
+
338 t_vec.Write(nameof);
+
339
+
340 std::vector<double> vec2 = oscf2->getNominalArray();
+
341 size_t n2 = vec2.size();
+
342 double *n_vec2 = new double[n];
+
343 for (size_t i = 0; i < n; ++i) {
+
344 n_vec2[i] = vec2[i];
+
345 }
+ +
347 TString nameof2 = TString(oscf2->getName());
+
348 nameof2 = nameof2.Append("_2_nom");
+
349 t_vec2.Write(nameof2);
+
350 delete[] n_vec;
+
351 delete[] n_vec2;
+
352
+
353 outputFile->cd();
+
354 }
+
355
+
356 return;
+
357}
+
covarianceOsc * osc2
handles oscillation parameters
Definition FitterBase.h:98
+
virtual std::vector< double > getNominalArray()
+
+
+
+ +

◆ addOscHandler() [2/2]

+ +
+
+ + + + + + + + +
void FitterBase::addOscHandler (covarianceOscoscf)
+
+ +

Adds an oscillation handler for covariance objects.

+
Parameters
+ + +
oscfA pointer to a covarianceOsc object for forward oscillations.
+
+
+ +

Definition at line 295 of file FitterBase.cpp.

+
295 {
+
296// *************************
+
297
+
298 osc = oscf;
+
299
+
300 if (save_nominal) {
+
301 CovFolder->cd();
+
302 std::vector<double> vec = oscf->getNominalArray();
+
303 size_t n = vec.size();
+
304 double *n_vec = new double[n];
+
305 for (size_t i = 0; i < n; ++i) {
+
306 n_vec[i] = vec[i];
+
307 }
+ +
309 TString nameof = TString(oscf->getName());
+
310 nameof = nameof.Append("_nom");
+
311 t_vec.Write(nameof);
+
312 delete[] n_vec;
+
313 outputFile->cd();
+
314 }
+
315
+
316 return;
+
317}
+
+
+
+ +

◆ addSamplePDF()

+ +
+
+ + + + + + + + +
void FitterBase::addSamplePDF (samplePDFBasesample)
+
+ +

This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.

+
Parameters
+ + +
sampleA pointer to a sample PDF object derived from samplePDFBase.
+
+
+ +

Definition at line 256 of file FitterBase.cpp.

+
256 {
+
257// *************************
+
258 MACH3LOG_INFO("Adding {} object ", sample->GetName());
+
259 samples.push_back(sample);
+
260
+
261 return;
+
262}
+
+
+
+ +

◆ addSystObj()

+ +
+
+ + + + + + + + +
void FitterBase::addSystObj (covarianceBasecov)
+
+ +

This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.

+
Parameters
+ + +
covA pointer to a Covariance object derived from covarianceBase.
+
+
+ +

Definition at line 266 of file FitterBase.cpp.

+
266 {
+
267// *************************
+
268
+
269 MACH3LOG_INFO("Adding systematic object {}", cov->getName());
+
270 systematics.push_back(cov);
+
271
+
272 CovFolder->cd();
+
273 double *n_vec = new double[cov->getSize()];
+
274 for (int i = 0; i < cov->getSize(); ++i)
+
275 n_vec[i] = cov->getParInit(i);
+
276
+
277 TVectorT<double> t_vec(cov->getSize(), n_vec);
+
278 t_vec.Write((std::string(cov->getName()) + "_prior").c_str());
+
279 delete[] n_vec;
+
280
+
281 cov->getCovMatrix()->Write(cov->getName());
+
282
+
283 TH2D* CorrMatrix = cov->GetCorrelationMatrix();
+
284 CorrMatrix->Write((cov->getName() + std::string("_Corr")).c_str());
+
285 delete CorrMatrix;
+
286
+
287 outputFile->cd();
+
288
+
289 return;
+
290}
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string FitterBase::GetName () const
+
+inlinevirtual
+
+ +

Get name of class.

+ +

Reimplemented in LikelihoodFit, mcmc, MinuitFit, and PSO.

+ +

Definition at line 55 of file FitterBase.h.

+
55{return "FitterBase";};
+
+
+
+ +

◆ PrepareOutput()

+ +
+
+ + + + + +
+ + + + + + + +
void FitterBase::PrepareOutput ()
+
+protected
+
+ +

Prepare the output file.

+ +

Definition at line 157 of file FitterBase.cpp.

+
157 {
+
158// *******************
+
159
+
160 if(OutputPrepared) return;
+
161 //MS: Check if we are fitting the test likelihood, rather than T2K likelihood, and only setup T2K output if not
+
162 if(!fTestLikelihood)
+
163 {
+
164 // Check that we have added samples
+
165 if (!samples.size()) {
+
166 MACH3LOG_CRITICAL("No samples Found! If this is what you want find me here");
+ +
168 throw;
+
169 }
+
170
+
171 // Prepare the output trees
+
172 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it) {
+
173 (*it)->setBranches(*outTree);
+
174 }
+
175
+
176 if (osc) {
+ +
178 outTree->Branch("LogL_osc", &osc_llh, "LogL_osc/D");
+
179 }
+
180
+
181 outTree->Branch("LogL", &logLCurr, "LogL/D");
+
182 outTree->Branch("accProb", &accProb, "accProb/D");
+
183 outTree->Branch("step", &step, "step/I");
+
184 outTree->Branch("stepTime", &stepTime, "stepTime/D");
+
185
+
186 // Store individual likelihood components
+
187 // Using double means double as large output file!
+
188 sample_llh = new double[samples.size()];
+
189 syst_llh = new double[systematics.size()];
+
190
+
191 for (size_t i = 0; i < samples.size(); ++i) {
+
192 std::stringstream oss, oss2;
+
193 oss << "LogL_sample_" << i;
+
194 oss2 << oss.str() << "/D";
+
195 outTree->Branch(oss.str().c_str(), &sample_llh[i], oss2.str().c_str());
+
196
+
197 // For adding sample dependent branches to the posteriors tree
+
198 samples[i]->setMCMCBranches(outTree);
+
199 }
+
200
+
201 for (size_t i = 0; i < systematics.size(); ++i) {
+
202 std::stringstream oss, oss2;
+
203 oss << "LogL_systematic_" << systematics[i]->getName();
+
204 oss2 << oss.str() << "/D";
+
205 outTree->Branch(oss.str().c_str(), &syst_llh[i], oss2.str().c_str());
+
206 }
+
207 }
+
208 else
+
209 {
+
210 outTree->Branch("LogL", &logLCurr, "LogL/D");
+
211 outTree->Branch("accProb", &accProb, "accProb/D");
+
212 outTree->Branch("step", &step, "step/I");
+
213 outTree->Branch("stepTime", &stepTime, "stepTime/D");
+
214 }
+
215
+
216 MACH3LOG_INFO("-------------------- Starting MCMC --------------------");
+
217 #ifdef DEBUG
+
218 if (debug) {
+ +
220 debugFile << "----- Starting MCMC -----" << std::endl;
+
221 }
+
222 #endif
+
223 // Time the progress
+
224 clock->Start();
+
225
+
226 OutputPrepared = true;
+
227}
+
#define MACH3LOG_CRITICAL
Definition MaCh3Logger.h:12
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
double osc_llh
Definition FitterBase.h:83
+
void setBranches(TTree &tree)
+
+
+
+ +

◆ Run2DLLHScan()

+ +
+
+ + + + + + + +
void FitterBase::Run2DLLHScan ()
+
+ +

Perform a 2D likelihood scan.

+
Warning
This operation may take a significant amount of time, especially for complex models.
+ +

Definition at line 712 of file FitterBase.cpp.

+
712 {
+
713// *************************
+
714
+
715 // Save the settings into the output file
+
716 SaveSettings();
+
717
+
718 TDirectory *Sample_2DLLH = outputFile->mkdir("Sample_2DLLH");
+
719 std::vector<std::string> SkipVector;
+
720 if(fitMan->raw()["General"]["LLHScanSkipVector"])
+
721 {
+
722 SkipVector = fitMan->raw()["General"]["LLHScanSkipVector"].as<std::vector<std::string>>();
+
723 MACH3LOG_INFO("Found skip vector with {} entries", SkipVector.size());
+
724 }
+
725
+
726 // Number of points we do for each LLH scan
+
727 const int n_points = 20;
+
728 // We print 5 reweights
+
729 const int countwidth = double(n_points)/double(5);
+
730
+
731 bool isxsec = false;
+
732 // Loop over the covariance classes
+
733 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
734 {
+
735 if (std::string((*it)->getName()) == "xsec_cov")
+
736 {
+
737 isxsec = true;
+
738 } else {
+
739 isxsec = false;
+
740 }
+
741 // Scan over all the parameters
+
742 // Get the number of parameters
+
743 int npars = (*it)->getSize();
+
744 bool IsPCA = (*it)->IsPCA();
+
745 if (IsPCA) npars = (*it)->getNpars();
+
746
+
747 for (int i = 0; i < npars; ++i)
+
748 {
+
749
+
750 std::string name_x = (*it)->GetParName(i);
+
751 if (IsPCA) name_x += "_PCA";
+
752 // For xsec we can get the actual name, hurray for being informative
+
753 if (isxsec) name_x = (*it)->GetParFancyName(i);
+
754
+
755 // Get the parameter priors and bounds
+
756 double prior_x = (*it)->getParInit(i);
+
757 if (IsPCA) prior_x = (*it)->getParCurr_PCA(i);
+
758
+
759 // Get the covariance matrix and do the +/- nSigma
+
760 double nSigma = 1;
+
761 if (IsPCA) nSigma = 0.5;
+
762 // Set lower and upper bounds relative the prior
+
763 double lower_x = prior_x - nSigma*(*it)->getDiagonalError(i);
+
764 double upper_x = prior_x + nSigma*(*it)->getDiagonalError(i);
+
765 // If PCA, transform these parameter values to the PCA basis
+
766 if (IsPCA) {
+
767 lower_x = prior_x - nSigma*sqrt(((*it)->getEigenValues())(i));
+
768 upper_x = prior_x + nSigma*sqrt(((*it)->getEigenValues())(i));
+
769
+
770 std::cout << "eval " << i << " = " << (*it)->getEigenValues()(i) << std::endl;
+
771 std::cout << "prior " << i << " = " << prior_x << std::endl;
+
772 std::cout << "lower " << i << " = " << lower_x << std::endl;
+
773 std::cout << "upper " << i << " = " << upper_x << std::endl;
+
774 std::cout << "nSigma " << nSigma << std::endl;
+
775 }
+
776
+
777 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
778 if (lower_x < (*it)->GetLowerBound(i)) {
+
779 lower_x = (*it)->GetLowerBound(i);
+
780 }
+
781 if (upper_x > (*it)->GetUpperBound(i)) {
+
782 upper_x = (*it)->GetUpperBound(i);
+
783 }
+
784
+
785 bool skip = false;
+
786 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
787 {
+
788 if(name_x.substr(0, SkipVector[is].length()) == SkipVector[is])
+
789 {
+
790 skip = true;
+
791 break;
+
792 }
+
793 }
+
794 if(skip) continue;
+
795
+
796 for (int j = 0; j < i; ++j)
+
797 {
+
798 std::string name_y = (*it)->GetParName(j);
+
799 if (IsPCA) name_y += "_PCA";
+
800 // For xsec we can get the actual name, hurray for being informative
+
801 if (isxsec) name_y = (*it)->GetParFancyName(j);
+
802
+
803 bool skip = false;
+
804 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
805 {
+
806 if(name_y.substr(0, SkipVector[is].length()) == SkipVector[is])
+
807 {
+
808 skip = true;
+
809 break;
+
810 }
+
811 }
+
812 if(skip) continue;
+
813
+
814 // Get the parameter priors and bounds
+
815 double prior_y = (*it)->getParInit(j);
+
816 if (IsPCA) prior_y = (*it)->getParCurr_PCA(j);
+
817
+
818 // Set lower and upper bounds relative the prior
+
819 double lower_y = prior_y - nSigma*(*it)->getDiagonalError(j);
+
820 double upper_y = prior_y + nSigma*(*it)->getDiagonalError(j);
+
821 // If PCA, transform these parameter values to the PCA basis
+
822 if (IsPCA) {
+
823 lower_y = prior_y - nSigma*sqrt(((*it)->getEigenValues())(j));
+
824 upper_y = prior_y + nSigma*sqrt(((*it)->getEigenValues())(j));
+
825
+
826 std::cout << "eval " << j << " = " << (*it)->getEigenValues()(j) << std::endl;
+
827 std::cout << "prior " << j << " = " << prior_y << std::endl;
+
828 std::cout << "lower " << j << " = " << lower_y << std::endl;
+
829 std::cout << "upper " << j << " = " << upper_y << std::endl;
+
830 std::cout << "nSigma " << nSigma << std::endl;
+
831 }
+
832
+
833 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
834 if (lower_y < (*it)->GetLowerBound(j)) {
+
835 lower_y = (*it)->GetLowerBound(j);
+
836 }
+
837 if (upper_y > (*it)->GetUpperBound(j)) {
+
838 upper_y = (*it)->GetUpperBound(j);
+
839 }
+
840 MACH3LOG_INFO("Scanning X {} with {} steps, from {} - {}, prior = {}", name_x, n_points, lower_x, upper_x, prior_x);
+
841 MACH3LOG_INFO("Scanning Y {} with {} steps, from {} - {}, prior = {}", name_y, n_points, lower_y, upper_y, prior_y);
+
842
+
843 TH2D *hScanSam = new TH2D((name_x + "_" + name_y + "_sam").c_str(), (name_x + "_" + name_y + "_sam").c_str(), n_points, lower_x, upper_x, n_points, lower_y, upper_y);
+
844 hScanSam->GetXaxis()->SetTitle(name_x.c_str());
+
845 hScanSam->GetYaxis()->SetTitle(name_y.c_str());
+
846 hScanSam->GetZaxis()->SetTitle("2LLH_sam");
+
847
+
848 // Scan over the parameter space
+
849 for (int x = 0; x < n_points; x++)
+
850 {
+
851 if (x % countwidth == 0)
+ +
853
+
854 for (int y = 0; y < n_points; y++)
+
855 {
+
856 // For PCA we have to do it differently
+
857 if (IsPCA) {
+
858 (*it)->setParProp_PCA(i, hScanSam->GetXaxis()->GetBinCenter(x+1));
+
859 (*it)->setParProp_PCA(j, hScanSam->GetYaxis()->GetBinCenter(y+1));
+
860 } else {
+
861 // Set the parameter
+
862 (*it)->setParProp(i, hScanSam->GetXaxis()->GetBinCenter(x+1));
+
863 (*it)->setParProp(j, hScanSam->GetYaxis()->GetBinCenter(y+1));
+
864 }
+
865
+
866 // Reweight the MC
+
867 double *fake = 0;
+
868 for(unsigned int ivs = 0; ivs < samples.size(); ivs++) {
+
869 samples[ivs]->reweight(fake);
+
870 }
+
871
+
872 // Get the -log L likelihoods
+
873 double samplellh = 0;
+
874 for(unsigned int ivs = 0; ivs < samples.size(); ivs++) {
+
875 samplellh += samples[ivs]->GetLikelihood();
+
876 }
+
877 hScanSam->SetBinContent(x+1, y+1, 2*samplellh);
+
878 }// end loop over y points
+
879 } // end loop over x points
+
880
+
881 Sample_2DLLH->cd();
+
882 hScanSam->Write();
+
883
+
884 delete hScanSam;
+
885 hScanSam = nullptr;
+
886
+
887 // Reset the parameters to their prior central values
+
888 if (IsPCA) {
+
889 (*it)->setParProp_PCA(i, prior_x);
+
890 (*it)->setParProp_PCA(j, prior_y);
+
891 } else {
+
892 (*it)->setParProp(i, prior_x);
+
893 (*it)->setParProp(j, prior_y);
+
894 }
+
895 } //end loop over systematics y
+
896 }//end loop over systematics X
+
897 }//end loop covariance classes
+
898
+
899 Sample_2DLLH->Write();
+
900 delete Sample_2DLLH;
+
901
+
902}
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
+
+
+ +

◆ RunLLHScan()

+ +
+
+ + + + + + + +
void FitterBase::RunLLHScan ()
+
+ +

Perform a 1D likelihood scan.

+ +

Definition at line 361 of file FitterBase.cpp.

+
361 {
+
362// *************************
+
363
+
364 // Save the settings into the output file
+
365 SaveSettings();
+
366
+
367 MACH3LOG_INFO("Starting LLH Scan");
+
368 int TotalNSamples = 0;
+
369 for(unsigned int i = 0; i < samples.size(); i++ )
+
370 {
+
371 TotalNSamples += samples[i]->GetNsamples();
+
372 }
+
373
+
374 //KS: Turn it on if you want LLH scan for each ND sample separately, which increase time significantly but can be useful for validating new samples or dials.
+
375 bool PlotAllNDsamplesLLH = false;
+
376 if(fitMan->raw()["General"]["LLHScanBySample"])
+
377 PlotAllNDsamplesLLH = fitMan->raw()["General"]["LLHScanBySample"].as<bool>();
+
378
+
379 std::vector<std::string> SkipVector;
+
380 if(fitMan->raw()["General"]["LLHScanSkipVector"])
+
381 {
+
382 SkipVector = fitMan->raw()["General"]["LLHScanSkipVector"].as<std::vector<std::string>>();
+
383 MACH3LOG_INFO("Found skip vector with {} entries", SkipVector.size());
+
384 }
+
385
+
386 // Now finally get onto the LLH scan stuff
+
387 // Very similar code to MCMC but never start MCMC; just scan over the parameter space
+
388
+
389 std::vector<TDirectory *> Cov_LLH(systematics.size());
+
390 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
391 {
+
392 std::string NameTemp = systematics[ivc]->getName();
+
393 NameTemp = NameTemp.substr(0, NameTemp.find("_cov")) + "_LLH";
+
394 Cov_LLH[ivc] = outputFile->mkdir(NameTemp.c_str());
+
395 }
+
396
+
397 std::vector<TDirectory *> SampleClass_LLH(samples.size());
+
398 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
399 {
+
400 std::string NameTemp = samples[ivs]->GetName();
+
401 SampleClass_LLH[ivs] = outputFile->mkdir(NameTemp.c_str());
+
402 }
+
403
+
404 TDirectory *Sample_LLH = outputFile->mkdir("Sample_LLH");
+
405 TDirectory *Total_LLH = outputFile->mkdir("Total_LLH");
+
406
+
407 TDirectory **SampleSplit_LLH = nullptr;
+ +
409 {
+ +
411 int iterator = 0;
+
412 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
413 {
+
414 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
415 {
+
416 SampleSplit_LLH[iterator] = outputFile->mkdir((samples[ivs]->GetSampleName(is)+ "_LLH").c_str());
+
417 iterator++;
+
418 }
+
419 }
+
420 }
+
421 // Number of points we do for each LLH scan
+
422 const int n_points = GetFromManager<int>(fitMan->raw()["General"]["LLHScanPoints"], 100);
+
423
+
424 // We print 5 reweights
+
425 const int countwidth = double(n_points)/double(5);
+
426
+
427 bool isxsec = false;
+
428 // Loop over the covariance classes
+
429 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
430 {
+
431 if (std::string((*it)->getName()) == "xsec_cov")
+
432 {
+
433 isxsec = true;
+
434 } else {
+
435 isxsec = false;
+
436 }
+
437
+
438 // Scan over all the parameters
+
439 // Get the number of parameters
+
440 int npars = (*it)->getSize();
+
441 bool IsPCA = (*it)->IsPCA();
+
442 if (IsPCA) npars = (*it)->getNpars();
+
443 for (int i = 0; i < npars; ++i)
+
444 {
+
445 // Get the parameter name
+
446 std::string name = (*it)->GetParName(i);
+
447 if (IsPCA) name += "_PCA";
+
448 // For xsec we can get the actual name, hurray for being informative
+
449 if (isxsec) name = (*it)->GetParFancyName(i);
+
450 bool skip = false;
+
451 for(unsigned int is = 0; is < SkipVector.size(); is++)
+
452 {
+
453 if(name.substr(0, SkipVector[is].length()) == SkipVector[is])
+
454 {
+
455 skip = true;
+
456 break;
+
457 }
+
458 }
+
459 if(skip) continue;
+
460
+
461 // Get the parameter priors and bounds
+
462 double prior = (*it)->getParInit(i);
+
463 if (IsPCA) prior = (*it)->getParCurr_PCA(i);
+
464
+
465 // Get the covariance matrix and do the +/- nSigma
+
466 double nSigma = 1;
+
467 if (IsPCA) nSigma = 0.5;
+
468 // Set lower and upper bounds relative the prior
+
469 double lower = prior - nSigma*(*it)->getDiagonalError(i);
+
470 double upper = prior + nSigma*(*it)->getDiagonalError(i);
+
471 // If PCA, transform these parameter values to the PCA basis
+
472 if (IsPCA) {
+
473 lower = prior - nSigma*sqrt(((*it)->getEigenValues())(i));
+
474 upper = prior + nSigma*sqrt(((*it)->getEigenValues())(i));
+
475
+
476 std::cout << "eval " << i << " = " << (*it)->getEigenValues()(i) << std::endl;
+
477 std::cout << "prior " << i << " = " << prior << std::endl;
+
478 std::cout << "lower " << i << " = " << lower << std::endl;
+
479 std::cout << "upper " << i << " = " << upper << std::endl;
+
480 std::cout << "nSigma " << nSigma << std::endl;
+
481 }
+
482
+
483 // Cross-section and flux parameters have boundaries that we scan between, check that these are respected in setting lower and upper variables
+
484 if (lower < (*it)->GetLowerBound(i)) {
+
485 lower = (*it)->GetLowerBound(i);
+
486 }
+
487 if (upper > (*it)->GetUpperBound(i)) {
+
488 upper = (*it)->GetUpperBound(i);
+
489 }
+
490 MACH3LOG_INFO("Scanning {} with {} steps, from {:.2f} - {:.2f}, prior = {:.2f}", name, n_points, lower, upper, prior);
+
491
+
492 // Make the TH1D
+
493 TH1D *hScan = new TH1D((name+"_full").c_str(), (name+"_full").c_str(), n_points, lower, upper);
+
494 hScan->SetTitle(std::string(std::string("2LLH_full, ") + name + ";" + name + "; -2(ln L_{sample} + ln L_{xsec+flux} + ln L_{det})").c_str());
+
495
+
496 TH1D *hScanSam = new TH1D((name+"_sam").c_str(), (name+"_sam").c_str(), n_points, lower, upper);
+
497 hScanSam->SetTitle(std::string(std::string("2LLH_sam, ") + name + ";" + name + "; -2(ln L_{sample})").c_str());
+
498
+
499
+
500 TH1D **hScanSample = new TH1D*[samples.size()];
+
501 double *nSamLLH = new double[samples.size()];
+
502 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
503 {
+
504 std::string NameTemp = samples[ivs]->GetName();
+
505 hScanSample[ivs] = new TH1D((name+"_"+NameTemp).c_str(), (name+"_" + NameTemp).c_str(), n_points, lower, upper);
+
506 hScanSample[ivs]->SetTitle(std::string(std::string("2LLH_" + NameTemp + ", ") + name + ";" + name + "; -2(ln L_{" + NameTemp +"})").c_str());
+
507 nSamLLH[ivs] = 0.;
+
508 }
+
509
+
510 TH1D **hScanCov = new TH1D*[systematics.size()];
+
511 double *nCovLLH = new double[systematics.size()];
+
512 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
513 {
+
514 std::string NameTemp = systematics[ivc]->getName();
+
515 NameTemp = NameTemp.substr(0, NameTemp.find("_cov"));
+
516
+
517 hScanCov[ivc] = new TH1D((name+"_"+NameTemp).c_str(), (name+"_" + NameTemp).c_str(), n_points, lower, upper);
+
518 hScanCov[ivc]->SetTitle(std::string(std::string("2LLH_" + NameTemp + ", ") + name + ";" + name + "; -2(ln L_{" + NameTemp +"})").c_str());
+
519 nCovLLH[ivc] = 0.;
+
520 }
+
521
+
522 TH1D **hScanSamSplit = nullptr;
+
523 double *sampleSplitllh = nullptr;
+ +
525 {
+
526 int iterator = 0;
+
527 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
528 {
+ +
530 sampleSplitllh = new double[TotalNSamples];
+
531 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
532 {
+
533 hScanSamSplit[iterator] = new TH1D( (name+samples[ivs]->GetSampleName(is)).c_str(), (name+samples[ivs]->GetSampleName(is)).c_str(), n_points, lower, upper );
+
534 hScanSamSplit[iterator]->SetTitle(std::string(std::string("2LLH_sam, ") + name + ";" + name + "; -2(ln L_{sample})").c_str());
+
535 iterator++;
+
536 }
+
537 }
+
538 }
+
539
+
540 // Scan over the parameter space
+
541 for (int j = 0; j < n_points; j++)
+
542 {
+
543 if (j % countwidth == 0)
+ +
545
+
546 // For PCA we have to do it differently
+
547 if (IsPCA) {
+
548 (*it)->setParProp_PCA(i, hScan->GetBinCenter(j+1));
+
549 } else {
+
550 // Set the parameter
+
551 (*it)->setParProp(i, hScan->GetBinCenter(j+1));
+
552 }
+
553
+
554 // Reweight the MC
+
555 double *fake = 0;
+
556 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
557 {
+
558 samples[ivs]->reweight(fake);
+
559 }
+
560 //Total LLH
+
561 double totalllh = 0;
+
562
+
563 // Get the -log L likelihoods
+
564 double samplellh = 0;
+
565
+
566 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
567 {
+
568 nSamLLH[ivs] = samples[ivs]->GetLikelihood();
+ +
570 }
+
571
+
572 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
573 {
+
574 nCovLLH[ivc] = systematics[ivc]->GetLikelihood();
+
575 totalllh += nCovLLH[ivc];
+
576 }
+
577
+ +
579
+ +
581 {
+
582 int iterator = 0;
+
583 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
584 {
+
585 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
586 {
+
587 sampleSplitllh[iterator] = samples[ivs]->getSampleLikelihood(is);
+
588 iterator++;
+
589 }
+
590 }
+
591 }
+
592
+
593 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
594 {
+
595 hScanSample[ivs]->SetBinContent(j+1, 2*nSamLLH[ivs]);
+
596 }
+
597 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
598 {
+
599 hScanCov[ivc]->SetBinContent(j+1, 2*nCovLLH[ivc]);
+
600 }
+
601
+
602 hScanSam->SetBinContent(j+1, 2*samplellh);
+
603 hScan->SetBinContent(j+1, 2*totalllh);
+
604
+ +
606 {
+
607 int iterator = 0;
+
608 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
609 {
+
610 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
611 {
+
612 hScanSamSplit[is]->SetBinContent(j+1, 2*sampleSplitllh[is]);
+
613 iterator++;
+
614 }
+
615 }
+
616 }
+
617 }
+
618 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
619 {
+
620 Cov_LLH[ivc]->cd();
+
621 hScanCov[ivc]->Write();
+
622 delete hScanCov[ivc];
+
623 }
+
624
+
625 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
626 {
+
627 SampleClass_LLH[ivs]->cd();
+
628 hScanSample[ivs]->Write();
+
629 delete hScanSample[ivs];
+
630 }
+
631
+
632 Sample_LLH->cd();
+
633 hScanSam->Write();
+
634 Total_LLH->cd();
+
635 hScan->Write();
+
636
+
637 delete[] hScanCov;
+
638 delete[] nCovLLH;
+
639 delete[] hScanSample;
+
640 delete[] nSamLLH;
+
641 delete hScanSam;
+
642 delete hScan;
+
643
+
644 hScanCov = nullptr;
+
645 nCovLLH = nullptr;
+
646 hScanSample = nullptr;
+
647 nSamLLH = nullptr;
+
648 hScanSam = nullptr;
+
649 hScan = nullptr;
+
650
+ +
652 {
+
653 int iterator = 0;
+
654 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
655 {
+
656 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++)
+
657 {
+ +
659 hScanSamSplit[iterator]->Write();
+
660 delete hScanSamSplit[iterator];
+
661 iterator++;
+
662 }
+
663 }
+
664 delete[] hScanSamSplit;
+
665 }
+
666
+
667 // Reset the parameters to their prior central values
+
668 if (IsPCA) {
+
669 (*it)->setParProp_PCA(i, prior);
+
670 } else {
+
671 (*it)->setParProp(i, prior);
+
672 }
+
673 }//end loop over systematics
+
674 }//end loop covariance classes
+
675
+
676 for(unsigned int ivc = 0; ivc < systematics.size(); ivc++ )
+
677 {
+
678 Cov_LLH[ivc]->Write();
+
679 delete Cov_LLH[ivc];
+
680 }
+
681
+
682 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
683 {
+
684 SampleClass_LLH[ivs]->Write();
+
685 delete SampleClass_LLH[ivs];
+
686 }
+
687
+
688 Sample_LLH->Write();
+
689 delete Sample_LLH;
+
690
+
691 Total_LLH->Write();
+
692 delete Total_LLH;
+
693
+ +
695 {
+
696 int iterator = 0;
+
697 for(unsigned int ivs = 0; ivs < samples.size(); ivs++ )
+
698 {
+
699 for(__int__ is = 0; is < samples[ivs]->GetNsamples(); is++ )
+
700 {
+
701 SampleSplit_LLH[iterator]->Write();
+ +
703 iterator++;
+
704 }
+
705 }
+
706 }
+
707}
+
#define __int__
Definition Structs.h:14
+
+
+
+ +

◆ runMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void FitterBase::runMCMC ()
+
+pure virtual
+
+ +

The specific fitting algorithm implemented in this function depends on the derived class. It could be Markov Chain Monte Carlo (MCMC), MinuitFit, or another algorithm.

+ +

Implemented in mcmc, MinuitFit, PSO, and LikelihoodFit.

+ +
+
+ +

◆ SaveOutput()

+ +
+
+ + + + + +
+ + + + + + + +
void FitterBase::SaveOutput ()
+
+protected
+
+ +

Save output and close files.

+ +

Definition at line 230 of file FitterBase.cpp.

+
230 {
+
231// *******************
+
232
+
233 if(FileSaved) return;
+
234 //Stop Clock
+
235 clock->Stop();
+
236
+
237 outputFile->cd();
+
238 outTree->Write();
+
239
+
240 MACH3LOG_INFO("{} steps took {:.2f} seconds to complete. ({:.2f}s / step).", step, clock->RealTime(), clock->RealTime() / step);
+
241 MACH3LOG_INFO("{} steps were accepted.", accCount);
+
242 #ifdef DEBUG
+
243 if (debug)
+
244 {
+
245 debugFile << "\n\n" << step << " steps took " << clock->RealTime() << " seconds to complete. (" << clock->RealTime() / step << "s / step).\n" << accCount<< " steps were accepted." << std::endl;
+
246 debugFile.close();
+
247 }
+
248 #endif
+
249
+
250 outputFile->Close();
+
251 FileSaved = true;
+
252}
+
+
+
+ +

◆ SaveSettings()

+ +
+
+ + + + + +
+ + + + + + + +
void FitterBase::SaveSettings ()
+
+protected
+
+ +

Save the settings that the MCMC was run with.

+ +

Definition at line 91 of file FitterBase.cpp.

+
91 {
+
92// *******************
+
93
+
94 if(SettingsSaved) return;
+
95
+
96 outputFile->cd();
+
97
+
98 TDirectory* MaCh3Version = outputFile->mkdir("MaCh3Engine");
+
99 MaCh3Version->cd();
+
100
+
101 if (std::getenv("MaCh3_ROOT") == NULL) {
+
102 MACH3LOG_ERROR("Need MaCh3_ROOT environment variable");
+
103 MACH3LOG_ERROR("Please remember about source bin/setup.MaCh3.sh");
+
104 throw;
+
105 }
+
106
+
107 if (std::getenv("MACH3") == NULL) {
+
108 MACH3LOG_ERROR("Need MACH3 environment variable");
+
109 throw;
+
110 }
+
111
+
112 std::string header_path = std::string(std::getenv("MACH3"));
+
113 header_path += "/version.h";
+
114 FILE* file = fopen(header_path.c_str(), "r");
+
115 //KS: It is better to use experiment specific header file. If given experiment didn't provide it we gonna use one given by Core MaCh3.
+
116 if (!file)
+
117 {
+
118 header_path = std::string(std::getenv("MaCh3_ROOT"));
+
119 header_path += "/version.h";
+
120 }
+
121 else
+
122 {
+
123 fclose(file);
+
124 }
+
125
+
126 // EM: embed the cmake generated version.h file
+
127 TMacro versionHeader("version_header", "version_header");
+
128 versionHeader.ReadFile(header_path.c_str());
+
129 versionHeader.Write();
+
130
+ +
132 Engine.Write(GetName().c_str());
+
133
+
134 MaCh3Version->Write();
+
135 delete MaCh3Version;
+
136
+
137 outputFile->cd();
+
138
+ +
140
+
141 MACH3LOG_WARN("\033[0;31mCurrent Total RAM usage is {:.2f} GB\033[0m", MaCh3Utils::getValue("VmRSS") / 1048576.0);
+
142 MACH3LOG_WARN("\033[0;31mOut of Total available RAM {:.2f} GB\033[0m", MaCh3Utils::getValue("MemTotal") / 1048576.0);
+
143
+
144 MACH3LOG_INFO("#####Current Setup#####");
+
145 MACH3LOG_INFO("Number of covariances: {}", systematics.size());
+
146 for(unsigned int i = 0; i < systematics.size(); i++)
+
147 MACH3LOG_INFO("{}: Cov name: {}",i, systematics[i]->getName());
+
148 MACH3LOG_INFO("Number of SamplePDFs: {}", samples.size());
+
149 for(unsigned int i = 0; i < samples.size(); i++)
+
150 MACH3LOG_INFO("{}: SamplePDF name: {}",i , samples[i]->GetName());
+
151
+
152 SettingsSaved = true;
+
153}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
virtual std::string GetName() const
Get name of class.
Definition FitterBase.h:55
+
void SaveSettings(TFile *const OutputFile)
Add manager useful information's to TFile, in most cases to Fitter.
Definition manager.cpp:56
+
int getValue(std::string Type)
Definition Monitor.cpp:158
+
+
+
+

Member Data Documentation

+ +

◆ accCount

+ +
+
+ + + + + +
+ + + + +
int FitterBase::accCount
+
+protected
+
+ +

counts accepted steps

+ +

Definition at line 79 of file FitterBase.h.

+ +
+
+ +

◆ accProb

+ +
+
+ + + + + +
+ + + + +
double FitterBase::accProb
+
+protected
+
+ +

current acceptance prob

+ +

Definition at line 77 of file FitterBase.h.

+ +
+
+ +

◆ auto_save

+ +
+
+ + + + + +
+ + + + +
int FitterBase::auto_save
+
+protected
+
+ +

auto save every N steps

+ +

Definition at line 117 of file FitterBase.h.

+ +
+
+ +

◆ clock

+ +
+
+ + + + + +
+ + + + +
TStopwatch* FitterBase::clock
+
+protected
+
+ +

tells global time how long fit took

+ +

Definition at line 101 of file FitterBase.h.

+ +
+
+ +

◆ CovFolder

+ +
+
+ + + + + +
+ + + + +
TDirectory* FitterBase::CovFolder
+
+protected
+
+ +

Output cov folder.

+ +

Definition at line 113 of file FitterBase.h.

+ +
+
+ +

◆ FileSaved

+ +
+
+ + + + + +
+ + + + +
bool FitterBase::FileSaved
+
+protected
+
+ +

Checks if file saved not repeat some operations.

+ +

Definition at line 125 of file FitterBase.h.

+ +
+
+ +

◆ fitMan

+ +
+
+ + + + + +
+ + + + +
manager* FitterBase::fitMan
+
+protected
+
+ +

The manager.

+ +

Definition at line 68 of file FitterBase.h.

+ +
+
+ +

◆ fTestLikelihood

+ +
+
+ + + + + +
+ + + + +
bool FitterBase::fTestLikelihood
+
+protected
+
+ +

Necessary for some fitting algorithms like PSO.

+ +

Definition at line 120 of file FitterBase.h.

+ +
+
+ +

◆ logLCurr

+ +
+
+ + + + + +
+ + + + +
double FitterBase::logLCurr
+
+protected
+
+ +

current likelihood

+ +

Definition at line 73 of file FitterBase.h.

+ +
+
+ +

◆ logLProp

+ +
+
+ + + + + +
+ + + + +
double FitterBase::logLProp
+
+protected
+
+ +

proposed likelihood

+ +

Definition at line 75 of file FitterBase.h.

+ +
+
+ +

◆ osc

+ +
+
+ + + + + +
+ + + + +
covarianceOsc* FitterBase::osc
+
+protected
+
+ +

handles oscillation parameters

+ +

Definition at line 96 of file FitterBase.h.

+ +
+
+ +

◆ osc2

+ +
+
+ + + + + +
+ + + + +
covarianceOsc* FitterBase::osc2
+
+protected
+
+ +

handles oscillation parameters

+ +

Definition at line 98 of file FitterBase.h.

+ +
+
+ +

◆ osc_llh

+ +
+
+ + + + + +
+ + + + +
double FitterBase::osc_llh
+
+protected
+
+

LLH for samples/syst objects oscillation covariance llh

+ +

Definition at line 83 of file FitterBase.h.

+ +
+
+ +

◆ outputFile

+ +
+
+ + + + + +
+ + + + +
TFile* FitterBase::outputFile
+
+protected
+
+ +

Output.

+ +

Definition at line 111 of file FitterBase.h.

+ +
+
+ +

◆ OutputPrepared

+ +
+
+ + + + + +
+ + + + +
bool FitterBase::OutputPrepared
+
+protected
+
+ +

Checks if output prepared not repeat some operations.

+ +

Definition at line 129 of file FitterBase.h.

+ +
+
+ +

◆ outTree

+ +
+
+ + + + + +
+ + + + +
TTree* FitterBase::outTree
+
+protected
+
+ +

Output tree with posteriors.

+ +

Definition at line 115 of file FitterBase.h.

+ +
+
+ +

◆ random

+ +
+
+ + + + + +
+ + + + +
TRandom3* FitterBase::random
+
+protected
+
+ +

Random number.

+ +

Definition at line 108 of file FitterBase.h.

+ +
+
+ +

◆ sample_llh

+ +
+
+ + + + + +
+ + + + +
double* FitterBase::sample_llh
+
+protected
+
+ +

store the llh breakdowns

+ +

Definition at line 85 of file FitterBase.h.

+ +
+
+ +

◆ samples

+ +
+
+ + + + + +
+ + + + +
std::vector<samplePDFBase*> FitterBase::samples
+
+protected
+
+ +

Sample holder.

+ +

Definition at line 90 of file FitterBase.h.

+ +
+
+ +

◆ save_nominal

+ +
+
+ + + + + +
+ + + + +
bool FitterBase::save_nominal
+
+protected
+
+ +

save nominal matrix info or not

+ +

Definition at line 122 of file FitterBase.h.

+ +
+
+ +

◆ SettingsSaved

+ +
+
+ + + + + +
+ + + + +
bool FitterBase::SettingsSaved
+
+protected
+
+ +

Checks if setting saved not repeat some operations.

+ +

Definition at line 127 of file FitterBase.h.

+ +
+
+ +

◆ step

+ +
+
+ + + + + +
+ + + + +
unsigned int FitterBase::step
+
+protected
+
+ +

current state

+ +

Definition at line 71 of file FitterBase.h.

+ +
+
+ +

◆ stepClock

+ +
+
+ + + + + +
+ + + + +
TStopwatch* FitterBase::stepClock
+
+protected
+
+ +

tells how long single step/fit iteration took

+ +

Definition at line 103 of file FitterBase.h.

+ +
+
+ +

◆ stepTime

+ +
+
+ + + + + +
+ + + + +
double FitterBase::stepTime
+
+protected
+
+ +

Time of single step.

+ +

Definition at line 105 of file FitterBase.h.

+ +
+
+ +

◆ syst_llh

+ +
+
+ + + + + +
+ + + + +
double* FitterBase::syst_llh
+
+protected
+
+ +

systematic llh breakdowns

+ +

Definition at line 87 of file FitterBase.h.

+ +
+
+ +

◆ systematics

+ +
+
+ + + + + +
+ + + + +
std::vector<covarianceBase*> FitterBase::systematics
+
+protected
+
+ +

Systematic holder.

+ +

Definition at line 93 of file FitterBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classFitterBase.png b/classFitterBase.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac13b2cf4ffef77908414a5b446203bf3c76f7e GIT binary patch literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^_kg&AgBeKf&s&-gq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)?NBL4fUe z|B(;>{A;#GF@B9&ns7Ad@Eixrl9;mJ;tS+rua~wm?%C z0=|{^B7VtT509>Wx%d0~otxq=#lF%Ft9bvHjrT>VVqfwBIbp~5rsjWR_pvst{xCnT z#Lj)Oz}`%~*b9E|a$o5d<=gGbeYtj#c+KR)Kf7MI?ah2!pyudx?(wcaTV_>f?-eW7 zza+gXJ;ZWxu|>==(cVzM_j~_~U1qjmzx?^$Z{`_t2P|jI`+iUU0MJbfU+-FHz;N~= z^PTC{ufP6X`}f`2?;Cb+zJK=Xnj)qx-7gupbRlp|+rIa|s~G-FS>>Nl#UN^E+hF6v zzd&gj`-JwFj3Gz9FnltwZRnaI=ODL?Jz%2Q*Ez*`;(LqFy?wOgETi2cm6aMB=c$Mu z{nBv3$A1!ELe-=x?#trLCA;s5(OG?_o&N8Co?3KQEZOtcqw2jMW!0*@ z*FV|$$U?p&Zr1hF8&z@xz4Y}Y^1m7_{%*YYN6nqU{D}$wt7|7$|G&E;=$-2RxMV-w z#oree`5phY;NCAcQ?2DHqK~@vS5FGzxIB3Y(1RRjzo@)qSf=h-IYUlhR`EH}XF%_q zA~M9$pi<)JlK3>EFx!VO*~A zQoiez?d@V4!ydUa{5!tx+We*IM)iK7_TrLC*&{zCpWWO2xH=}kZod6RZYjrnuSrfj z%{k{S6W^WtYHIgAtHtk^Z9j2P_)F02P_b(ltydT2z2q(0oVwQkHl<^GfQC9a>R yB6|!eE`dp4;Y^^|gQ%)=mf_PTo3Z~mBJW{U9eiijYCm9JV(@hJb6Mw<&;$Sm8Ph-j literal 0 HcmV?d00001 diff --git a/classLikelihoodFit-members.html b/classLikelihoodFit-members.html new file mode 100644 index 00000000..81fd815e --- /dev/null +++ b/classLikelihoodFit-members.html @@ -0,0 +1,133 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
LikelihoodFit Member List
+
+
+ +

This is the complete list of members for LikelihoodFit, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accCountFitterBaseprotected
accProbFitterBaseprotected
addOscHandler(covarianceOsc *oscf)FitterBase
addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)FitterBase
addSamplePDF(samplePDFBase *sample)FitterBase
addSystObj(covarianceBase *cov)FitterBase
auto_saveFitterBaseprotected
CalcChi2(const double *x)LikelihoodFitvirtual
clockFitterBaseprotected
CovFolderFitterBaseprotected
FileSavedFitterBaseprotected
fitManFitterBaseprotected
FitterBase(manager *const fitMan)FitterBase
fMirroringLikelihoodFitprotected
fTestLikelihoodFitterBaseprotected
GetName() constLikelihoodFitinlinevirtual
GetNPars()LikelihoodFitinline
LikelihoodFit(manager *const fitMan)LikelihoodFit
logLCurrFitterBaseprotected
logLPropFitterBaseprotected
NParsLikelihoodFitprotected
NParsPCALikelihoodFitprotected
oscFitterBaseprotected
osc2FitterBaseprotected
osc_llhFitterBaseprotected
outputFileFitterBaseprotected
OutputPreparedFitterBaseprotected
outTreeFitterBaseprotected
PrepareFit()LikelihoodFitprotected
PrepareOutput()FitterBaseprotected
randomFitterBaseprotected
Run2DLLHScan()FitterBase
RunLLHScan()FitterBase
runMCMC()=0LikelihoodFitpure virtual
sample_llhFitterBaseprotected
samplesFitterBaseprotected
save_nominalFitterBaseprotected
SaveOutput()FitterBaseprotected
SaveSettings()FitterBaseprotected
SettingsSavedFitterBaseprotected
stepFitterBaseprotected
stepClockFitterBaseprotected
stepTimeFitterBaseprotected
syst_llhFitterBaseprotected
systematicsFitterBaseprotected
~FitterBase()FitterBasevirtual
~LikelihoodFit()LikelihoodFitvirtual
+ + + + diff --git a/classLikelihoodFit.html b/classLikelihoodFit.html new file mode 100644 index 00000000..5aeb2729 --- /dev/null +++ b/classLikelihoodFit.html @@ -0,0 +1,714 @@ + + + + + + + +MaCh3: LikelihoodFit Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <LikelihoodFit.h>

+
+Inheritance diagram for LikelihoodFit:
+
+
+ + +FitterBase +MinuitFit +PSO + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LikelihoodFit (manager *const fitMan)
 Constructor.
 
virtual ~LikelihoodFit ()
 Destructor.
 
virtual double CalcChi2 (const double *x)
 Chi2 calculation over all included samples and syst objects.
 
int GetNPars ()
 Get total number of params, this sums over all covariance objects.
 
virtual void runMCMC ()=0
 Implementation of fitting algorithm.
 
virtual std::string GetName () const
 Get name of class.
 
- Public Member Functions inherited from FitterBase
 FitterBase (manager *const fitMan)
 Constructor.
 
virtual ~FitterBase ()
 Destructor.
 
void addSamplePDF (samplePDFBase *sample)
 This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.
 
void addSystObj (covarianceBase *cov)
 This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.
 
void addOscHandler (covarianceOsc *oscf)
 Adds an oscillation handler for covariance objects.
 
void addOscHandler (covarianceOsc *osca, covarianceOsc *oscb)
 Adds two oscillation handlers for covariance objects.
 
void RunLLHScan ()
 Perform a 1D likelihood scan.
 
void Run2DLLHScan ()
 Perform a 2D likelihood scan.
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

void PrepareFit ()
 prepare output and perform sanity checks
 
- Protected Member Functions inherited from FitterBase
void PrepareOutput ()
 Prepare the output file.
 
void SaveOutput ()
 Save output and close files.
 
void SaveSettings ()
 Save the settings that the MCMC was run with.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int NPars
 Number of all parameters from all covariances.
 
int NParsPCA
 Number of all parameters from all covariances in PCA base.
 
bool fMirroring
 Flag telling if mirroring is used or not.
 
- Protected Attributes inherited from FitterBase
managerfitMan
 The manager.
 
unsigned int step
 current state
 
double logLCurr
 current likelihood
 
double logLProp
 proposed likelihood
 
double accProb
 current acceptance prob
 
int accCount
 counts accepted steps
 
double osc_llh
 
doublesample_llh
 store the llh breakdowns
 
doublesyst_llh
 systematic llh breakdowns
 
std::vector< samplePDFBase * > samples
 Sample holder.
 
std::vector< covarianceBase * > systematics
 Systematic holder.
 
covarianceOscosc
 handles oscillation parameters
 
covarianceOscosc2
 handles oscillation parameters
 
TStopwatchclock
 tells global time how long fit took
 
TStopwatchstepClock
 tells how long single step/fit iteration took
 
double stepTime
 Time of single step.
 
TRandom3random
 Random number.
 
TFileoutputFile
 Output.
 
TDirectoryCovFolder
 Output cov folder.
 
TTreeoutTree
 Output tree with posteriors.
 
int auto_save
 auto save every N steps
 
bool fTestLikelihood
 Necessary for some fitting algorithms like PSO.
 
bool save_nominal
 save nominal matrix info or not
 
bool FileSaved
 Checks if file saved not repeat some operations.
 
bool SettingsSaved
 Checks if setting saved not repeat some operations.
 
bool OutputPrepared
 Checks if output prepared not repeat some operations.
 
+

Detailed Description

+
+

Definition at line 5 of file LikelihoodFit.h.

+

Constructor & Destructor Documentation

+ +

◆ LikelihoodFit()

+ +
+
+ + + + + + + + +
LikelihoodFit::LikelihoodFit (manager *const fitMan)
+
+ +

Constructor.

+ +

Definition at line 5 of file LikelihoodFit.cpp.

+
5 : FitterBase(man) {
+
6// *******************
+
7 NPars = 0;
+
8 NParsPCA = 0;
+
9 fMirroring = true;
+
10}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
int NParsPCA
Number of all parameters from all covariances in PCA base.
+
int NPars
Number of all parameters from all covariances.
+
bool fMirroring
Flag telling if mirroring is used or not.
+
+
+
+ +

◆ ~LikelihoodFit()

+ +
+
+ + + + + +
+ + + + + + + +
LikelihoodFit::~LikelihoodFit ()
+
+virtual
+
+ +

Destructor.

+ +

Definition at line 15 of file LikelihoodFit.cpp.

+
15 {
+
16// *************************
+
17
+
18}
+
+
+
+

Member Function Documentation

+ +

◆ CalcChi2()

+ +
+
+ + + + + +
+ + + + + + + + +
double LikelihoodFit::CalcChi2 (const doublex)
+
+virtual
+
+ +

Chi2 calculation over all included samples and syst objects.

+ +

Reimplemented in PSO.

+ +

Definition at line 45 of file LikelihoodFit.cpp.

+
45 {
+
46// *******************
+
47
+
48 if (step % 10000 == 0)
+
49 {
+
50 MACH3LOG_INFO("Iteration {}", step);
+
51 }
+
52
+
53 stepClock->Start();
+
54
+
55 int ParCounter = 0;
+
56 double llh = 0;
+
57 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
58 {
+
59 if(!(*it)->IsPCA())
+
60 {
+
61 std::vector<double> pars;
+
62 const int Size = (*it)->getSize();
+
63 //KS: Avoid push back as they are slow
+
64 pars.resize(Size);
+
65 for(int i = 0; i < Size; ++i, ++ParCounter)
+
66 {
+
67 double ParVal = x[ParCounter];
+
68 //KS: Basically apply mirroring for parameters out of bounds
+
69 if(fMirroring)
+
70 {
+
71 if(ParVal < (*it)->GetLowerBound(i))
+
72 {
+
73 ParVal = (*it)->GetLowerBound(i) + ((*it)->GetLowerBound(i) - ParVal);
+
74 }
+
75 else if (ParVal > (*it)->GetUpperBound(i))
+
76 {
+
77 ParVal = (*it)->GetUpperBound(i) - ( ParVal - (*it)->GetUpperBound(i));
+
78 }
+
79 }
+
80 pars[i] = ParVal;
+
81 }
+
82 (*it)->setParameters(pars);
+
83 }
+
84 else
+
85 {
+
86 std::vector<double> pars;
+
87 const int Size = (*it)->getNpars();
+
88 //KS: Avoid push back as they are slow
+
89 pars.resize(Size);
+
90 for(int i = 0; i < Size; ++i, ++ParCounter)
+
91 {
+
92 double ParVal = x[ParCounter];
+
93 //KS: Basically apply mirroring for parameters out of bounds
+
94 pars[i] = ParVal;
+
95 }
+
96 (*it)->setParameters_PCA(pars);
+
97 }
+
98 (*it)->acceptStep();
+
99 }
+
100
+
101 // Loop over the systematics and propose the initial step
+
102 int stdIt = 0;
+
103 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it, ++stdIt)
+
104 {
+
105 //GetLikelihood will return LargeL if out of bounds, for minimizers this is not the problem, while calcLikelihood will return actual likelihood
+
106 syst_llh[stdIt] = (*it)->CalcLikelihood();
+
107 llh += syst_llh[stdIt];
+
108 #ifdef DEBUG
+
109 if (debug) debugFile << "LLH after " << systematics[stdIt]->getName() << " " << llh << std::endl;
+
110 #endif
+
111 }
+
112 // Could multi-thread this
+
113 // But since sample reweight is multi-threaded it's probably better to do that
+
114 for (size_t i = 0; i < samples.size(); i++)
+
115 {
+
116 // If we're running with different oscillation parameters for neutrino and anti-neutrino
+
117 if (osc) {
+
118 samples[i]->reweight(osc->getPropPars());
+
119 // If we aren't using any oscillation
+
120 } else {
+
121 double* fake = NULL;
+
122 samples[i]->reweight(fake);
+
123 }
+
124 }
+
125
+
126 //DB for atmospheric event by event sample migration, need to fully reweight all samples to allow event passing prior to likelihood evaluation
+
127 for (size_t i = 0; i < samples.size(); i++) {
+
128 // Get the sample likelihoods and add them
+
129 sample_llh[i] = samples[i]->GetLikelihood();
+
130 llh += sample_llh[i];
+
131 #ifdef DEBUG
+
132 if (debug) debugFile << "LLH after sample " << i << " " << llh << std::endl;
+
133 #endif
+
134 }
+
135
+
136 // Save the proposed likelihood (class member)
+
137 logLProp = llh;
+
138 logLCurr = llh;
+
139 accProb = 1;
+
140
+
141 stepClock->Stop();
+
142 stepTime = stepClock->RealTime();
+
143
+
144 // Write step to output tree
+
145 outTree->Fill();
+
146
+
147 // Auto save the output
+
148 if (step % auto_save == 0) outTree->AutoSave();
+
149 step++;
+
150 accCount++;
+
151
+
152 llh = 2.0*llh;
+
153 return llh;
+
154}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
double logLProp
proposed likelihood
Definition FitterBase.h:75
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
unsigned int step
current state
Definition FitterBase.h:71
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+
double * getPropPars()
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string LikelihoodFit::GetName () const
+
+inlinevirtual
+
+ +

Get name of class.

+ +

Reimplemented from FitterBase.

+ +

Reimplemented in MinuitFit, and PSO.

+ +

Definition at line 21 of file LikelihoodFit.h.

+
21{return "LikelihoodFit";};
+
+
+
+ +

◆ GetNPars()

+ +
+
+ + + + + +
+ + + + + + + +
int LikelihoodFit::GetNPars ()
+
+inline
+
+ +

Get total number of params, this sums over all covariance objects.

+ +

Definition at line 15 of file LikelihoodFit.h.

+
15{return NPars;};
+
+
+
+ +

◆ PrepareFit()

+ +
+
+ + + + + +
+ + + + + + + +
void LikelihoodFit::PrepareFit ()
+
+protected
+
+ +

prepare output and perform sanity checks

+ +

Definition at line 21 of file LikelihoodFit.cpp.

+
21 {
+
22// *******************
+
23
+
24 // Save the settings into the output file
+ +
26
+
27 // Prepare the output branches
+ +
29
+
30 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
31 {
+
32 NPars += (*it)->getSize();
+
33 NParsPCA += (*it)->getNpars();
+
34 }
+
35
+
36 if (osc) {
+
37 std::cerr<<" Osc not supported "<<std::endl;
+
38 throw;
+
39 }
+
40 //KS: If PCA is note enabled NParsPCA == NPars
+
41 MACH3LOG_INFO("Total number of parameters {}", NParsPCA);
+
42}
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
void PrepareOutput()
Prepare the output file.
+
+
+
+ +

◆ runMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void LikelihoodFit::runMCMC ()
+
+pure virtual
+
+ +

Implementation of fitting algorithm.

+ +

Implements FitterBase.

+ +

Implemented in MinuitFit, and PSO.

+ +
+
+

Member Data Documentation

+ +

◆ fMirroring

+ +
+
+ + + + + +
+ + + + +
bool LikelihoodFit::fMirroring
+
+protected
+
+ +

Flag telling if mirroring is used or not.

+ +

Definition at line 30 of file LikelihoodFit.h.

+ +
+
+ +

◆ NPars

+ +
+
+ + + + + +
+ + + + +
int LikelihoodFit::NPars
+
+protected
+
+ +

Number of all parameters from all covariances.

+ +

Definition at line 26 of file LikelihoodFit.h.

+ +
+
+ +

◆ NParsPCA

+ +
+
+ + + + + +
+ + + + +
int LikelihoodFit::NParsPCA
+
+protected
+
+ +

Number of all parameters from all covariances in PCA base.

+ +

Definition at line 28 of file LikelihoodFit.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classLikelihoodFit.png b/classLikelihoodFit.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e10dae8a5ea0737e50aef9c50c375b84829b38 GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0vp^8-TcjgBeH`I80mvq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)lFzsbGA2_if)|1D@80 z;?Yif|7+i4Vw72M#%H$3CabCEKLl?3{b1G?{R8rk-o;rke0`Lb=BjKU;FZwW7-6|X zI{y6InBC@Q&z$=lTd-|6YyLU|W9t*D5AxoAy>jJwr>M<*?|Sp^1%ehnM^j>~=bU>g z9%Fg9{lQrtedc1*it7)*@@<+pV|U#Ll{kB$Naf9%H|%G8pZU=Chn%s@fx}*cVVxh| z^3Q(Rbvm5Wc(XsuS|)CuBSq! zdYmTp@b$rufmW>X_aCOJe44q>u)=u7`lZv)6>OX3w|VE=5B#fLq}2XiV%*3gCeZ=5 z_S=Ej>!qp81KF)kgCYeKIzm6(63V~FFD)jGsO8?PP6x#^e6d|8%U=()2$uSFHJH zk!n$u_EWz<>XTT-(s|we?n#%<#{d7c^7Or%7yiiZDOn*<(Yp45Nlt5;#YB4s_qU2W zV%op^ANzZ7c4Qs*oZn@aW7z-v(<)?<+tF>^WFMpIwdQbI+I$!Lvq0zQG_sm)j$q0^ h@a|ozFo^ifZ + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
MCMCProcessor Member List
+
+
+ +

This is the complete list of members for MCMCProcessor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AcceptanceProbabilities()MCMCProcessorinlineprivate
AccProbBatchedAveragesMCMCProcessorprivate
AccProbValuesMCMCProcessorprivate
ApplySmoothingMCMCProcessorprivate
AutoCorrelation()MCMCProcessorinlineprivate
AutoCorrLagMCMCProcessorprivate
BatchedAnalysis()MCMCProcessorinlineprivate
BatchedAveragesMCMCProcessorprivate
BatchedMeans()MCMCProcessorinlineprivate
BranchNamesMCMCProcessorprivate
BurnInCutMCMCProcessorprivate
CacheMCMCMCMCProcessorprivate
CacheSteps()MCMCProcessor
CalculateESS(const int nLags)MCMCProcessorinlineprivate
CanvasNameMCMCProcessorprivate
Central_ValueMCMCProcessorprivate
ChainMCMCProcessorprivate
CorrelationMCMCProcessorprivate
CovarianceMCMCProcessorprivate
CovPosMCMCProcessorprivate
Credible_IntervalsMCMCProcessorprivate
Credible_IntervalsColoursMCMCProcessorprivate
Credible_RegionColorMCMCProcessorprivate
Credible_RegionsMCMCProcessorprivate
Credible_RegionStyleMCMCProcessorprivate
CredibleInSigmasMCMCProcessorprivate
DiagMCMC()MCMCProcessor
doDiagMCMCMCMCProcessorprivate
DrawCorrelations1D()MCMCProcessorinlineprivate
DrawCovariance()MCMCProcessor
DrawPostfit()MCMCProcessor
DrawRangeMCMCProcessorprivate
ErrorsMCMCProcessorprivate
Errors_GaussMCMCProcessorprivate
Errors_HPDMCMCProcessorprivate
Errors_HPD_NegativeMCMCProcessorprivate
Errors_HPD_PositiveMCMCProcessorprivate
ExcludedNamesMCMCProcessorprivate
ExcludedTypesMCMCProcessorprivate
FancyPlotNamesMCMCProcessorprivate
FindInputFiles()MCMCProcessorinlineprivate
GaussMCMCProcessorprivate
GetArithmetic(TH1D *const hpost, const int i)MCMCProcessorinlineprivate
GetBayesFactor(std::vector< std::string > ParName, std::vector< std::vector< double > > Model1Bounds, std::vector< std::vector< double > > Model2Bounds, std::vector< std::vector< std::string > > ModelNames)MCMCProcessor
GetBranchNames() constMCMCProcessorinline
GetCovariance(TMatrixDSym *&Cov, TMatrixDSym *&Corr)MCMCProcessor
GetCredibleInterval(TH1D *const hpost, TH1D *hpost_copy, const double coverage=0.6827)MCMCProcessorinlineprivate
GetCredibleRegion(TH2D *hpost, const double coverage=0.6827)MCMCProcessorinlineprivate
GetDunneKaboth(const double BayesFactor)MCMCProcessorinlineprivate
GetFDCov() constMCMCProcessorinline
GetGaussian(TH1D *&hpost, const int i)MCMCProcessorinlineprivate
GetHPD(TH1D *const hpost, const int i, const double coverage=0.6827)MCMCProcessorinlineprivate
GetHpost(const int i)MCMCProcessorinline
GetHpost2D(const int i, const int j)MCMCProcessorinline
GetJeffreysScale(const double BayesFactor)MCMCProcessorinlineprivate
GetNDCov() constMCMCProcessorinline
GetnEntries()MCMCProcessorinline
GetNFD()MCMCProcessorinline
GetNFlux()MCMCProcessorinline
GetNND()MCMCProcessorinline
GetNParams()MCMCProcessorinline
GetnSteps()MCMCProcessorinline
GetNthParameter(const int param, double &Prior, double &PriorError, TString &Title)MCMCProcessor
GetNXSec()MCMCProcessorinline
GetOSC()MCMCProcessorinline
GetOscCov() constMCMCProcessorinline
GetParamIndexFromName(const std::string Name)MCMCProcessor
GetPolarPlot(std::vector< std::string > ParNames)MCMCProcessor
GetPostfit(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Central_Gauss, TVectorD *&Errors_Gauss, TVectorD *&Peaks)MCMCProcessor
GetPostfit_Ind(TVectorD *&Central, TVectorD *&Errors, TVectorD *&Peaks, ParameterEnum kParam)MCMCProcessor
GetSavageDickey(std::vector< std::string > ParName, std::vector< double > EvaluationPoint, std::vector< std::vector< double > > Bounds)MCMCProcessor
GetSigmaValue(int sigma)MCMCProcessorinlineprivate
GetViolin()MCMCProcessorinline
GetViolinPrior()MCMCProcessorinline
GetXSecCov() constMCMCProcessorinline
GewekeDiagnostic()MCMCProcessorinlineprivate
hpostMCMCProcessorprivate
hpost2DMCMCProcessorprivate
hviolinMCMCProcessorprivate
hviolin_priorMCMCProcessorprivate
IamVariedMCMCProcessorprivate
Initialise()MCMCProcessor
IsXsecMCMCProcessorprivate
LagLMCMCProcessorprivate
MadePostfitMCMCProcessorprivate
MakeCorrMCMCProcessorprivate
MakeCovariance()MCMCProcessor
MakeCovariance_MP()MCMCProcessor
MakeCredibleIntervals()MCMCProcessor
MakeCredibleRegions()MCMCProcessor
MakeOutputFile()MCMCProcessorinlineprivate
MakePostfit()MCMCProcessor
MakePrefit()MCMCProcessorinlineprivate
MakeTrianglePlot(std::vector< std::string > ParamNames)MCMCProcessor
MakeViolin()MCMCProcessor
MCMCFileMCMCProcessorprivate
MCMCProcessor(const std::string &InputFile, bool MakePostfitCorr)MCMCProcessor
MeansMCMCProcessorprivate
Means_GaussMCMCProcessorprivate
Means_HPDMCMCProcessorprivate
nBatchesMCMCProcessorprivate
nBinsMCMCProcessorprivate
nBranchesMCMCProcessorprivate
nDrawMCMCProcessorprivate
NDSamplesBinsMCMCProcessorprivate
NDSamplesNamesMCMCProcessorprivate
nEntriesMCMCProcessorprivate
nFluxMCMCProcessorprivate
nParamMCMCProcessorprivate
nSamplesMCMCProcessorprivate
nStepsMCMCProcessorprivate
nSystsMCMCProcessorprivate
OutputFileMCMCProcessorprivate
OutputNameMCMCProcessorprivate
OutputSuffixMCMCProcessorprivate
ParamCentralMCMCProcessorprivate
ParamErrorsMCMCProcessorprivate
ParamFlatMCMCProcessorprivate
ParamNamesMCMCProcessorprivate
ParamNomMCMCProcessorprivate
ParamSumsMCMCProcessorprivate
ParamTraces()MCMCProcessorinlineprivate
ParamTypeMCMCProcessorprivate
ParamTypeStartPosMCMCProcessorprivate
ParStepMCMCProcessorprivate
plotBinValueMCMCProcessorprivate
PlotDetMCMCProcessorprivate
PlotFlatPriorMCMCProcessorprivate
PlotJarlskogMCMCProcessorprivate
plotRelativeToPriorMCMCProcessorprivate
PlotXSecMCMCProcessorprivate
Post2DPlotThresholdMCMCProcessorprivate
PosteriorMCMCProcessorprivate
Posterior1DCutMCMCProcessorprivate
PrepareDiagMCMC()MCMCProcessorinlineprivate
printToPDFMCMCProcessorprivate
ReadFDFile()MCMCProcessorinlineprivate
ReadInputCov()MCMCProcessorinlineprivate
ReadNDFile()MCMCProcessorinlineprivate
ReadOSCFile()MCMCProcessorinlineprivate
ReadXSecFile()MCMCProcessorinlineprivate
RemoveParameters()MCMCProcessorinlineprivate
ResetHistograms()MCMCProcessor
ReweightPrior(std::vector< std::string > Names, std::vector< double > NewCentral, std::vector< double > NewError)MCMCProcessor
SampleName_vMCMCProcessorprivate
SampleValuesMCMCProcessorprivate
ScanInput()MCMCProcessorinlineprivate
ScanParameterOrder()MCMCProcessorinlineprivate
SetCredibleInSigmas(const bool Intervals)MCMCProcessorinline
SetCredibleIntervals(std::vector< double > Intervals)MCMCProcessorinline
SetCredibleIntervalsColours(std::vector< Color_t > Intervals)MCMCProcessorinline
SetCredibleRegionColor(std::vector< Color_t > Intervals)MCMCProcessorinline
SetCredibleRegions(std::vector< double > Intervals)MCMCProcessorinline
SetCredibleRegionStyle(std::vector< Style_t > Intervals)MCMCProcessorinline
SetExcludedNames(std::vector< std::string > Name)MCMCProcessorinline
SetExcludedTypes(std::vector< std::string > Name)MCMCProcessorinline
SetFancyNames(const bool PlotOrNot)MCMCProcessorinline
SetnBatches(const int Batches)MCMCProcessorinline
SetnLags(const int nLags)MCMCProcessorinline
SetOutputSuffix(const std::string Suffix)MCMCProcessorinline
SetPlotBinValue(const bool PlotOrNot)MCMCProcessorinline
SetPlotErrorForFlatPrior(const bool PlotOrNot)MCMCProcessorinline
SetPlotRelativeToPrior(const bool PlotOrNot)MCMCProcessorinline
SetPost2DPlotThreshold(const double Threshold)MCMCProcessorinline
SetPosterior1DCut(const std::string Cut)MCMCProcessorinline
SetPrintToPDF(const bool PlotOrNot)MCMCProcessorinline
SetSmoothing(const bool PlotOrNot)MCMCProcessorinline
SetStepCut(std::string Cuts)MCMCProcessor
SetStepCut(const int Cuts)MCMCProcessor
SetupOutput()MCMCProcessorinlineprivate
StepCutMCMCProcessorprivate
StepNumberMCMCProcessorprivate
SystName_vMCMCProcessorprivate
SystValuesMCMCProcessorprivate
~MCMCProcessor()MCMCProcessor
+ + + + diff --git a/classMCMCProcessor.html b/classMCMCProcessor.html new file mode 100644 index 00000000..d917a9ce --- /dev/null +++ b/classMCMCProcessor.html @@ -0,0 +1,9427 @@ + + + + + + + +MaCh3: MCMCProcessor Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <MCMCProcessor.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MCMCProcessor (const std::string &InputFile, bool MakePostfitCorr)
 
 ~MCMCProcessor ()
 
void Initialise ()
 Scan chain, what parameters we have and load information from covariance matrices.
 
void MakePostfit ()
 Make 1D projection for each parameter and prepare structure.
 
void MakeCovariance ()
 Calculate covariance by making 2D projection of each combination of parameters.
 
void CacheSteps ()
 KS:By caching each step we use multithreading.
 
void MakeCovariance_MP ()
 
void ResetHistograms ()
 Reset 2D posteriors, in case we would like to calculate in again with different BurnInCut.
 
void DrawPostfit ()
 Draw the post-fit comparisons.
 
void MakeViolin ()
 Make and Draw Violin.
 
void MakeCredibleIntervals ()
 Make and Draw Credible intervals.
 
void DrawCovariance ()
 Draw the post-fit covariances.
 
void MakeCredibleRegions ()
 Make and Draw Credible Regions.
 
void MakeTrianglePlot (std::vector< std::string > ParamNames)
 Make fancy triangle plot for selected parameters.
 
void GetPolarPlot (std::vector< std::string > ParNames)
 Make funny polar plot.
 
void GetBayesFactor (std::vector< std::string > ParName, std::vector< std::vector< double > > Model1Bounds, std::vector< std::vector< double > > Model2Bounds, std::vector< std::vector< std::string > > ModelNames)
 
void GetSavageDickey (std::vector< std::string > ParName, std::vector< double > EvaluationPoint, std::vector< std::vector< double > > Bounds)
 
void ReweightPrior (std::vector< std::string > Names, std::vector< double > NewCentral, std::vector< double > NewError)
 
void DiagMCMC ()
 KS: Perform MCMC diagnostic including AutoCorrelation, Trace etc.
 
int GetNParams ()
 
int GetNFlux ()
 
int GetNXSec ()
 
int GetNND ()
 
int GetNFD ()
 
int GetOSC ()
 
TH1DGetHpost (const int i)
 
TH2DGetHpost2D (const int i, const int j)
 
TH2DGetViolin ()
 
TH2DGetViolinPrior ()
 
std::vector< std::string > constGetXSecCov () const
 
std::string constGetNDCov () const
 
std::string constGetFDCov () const
 
std::string constGetOscCov () const
 
void GetPostfit (TVectorD *&Central, TVectorD *&Errors, TVectorD *&Central_Gauss, TVectorD *&Errors_Gauss, TVectorD *&Peaks)
 Get the post-fit results (arithmetic and Gaussian)
 
void GetCovariance (TMatrixDSym *&Cov, TMatrixDSym *&Corr)
 Get the post-fit covariances and correlations.
 
void GetPostfit_Ind (TVectorD *&Central, TVectorD *&Errors, TVectorD *&Peaks, ParameterEnum kParam)
 Or the individual post-fits.
 
const std::vector< TString > & GetBranchNames () const
 
void GetNthParameter (const int param, double &Prior, double &PriorError, TString &Title)
 
int GetParamIndexFromName (const std::string Name)
 
int GetnEntries ()
 
int GetnSteps ()
 
void SetStepCut (std::string Cuts)
 
void SetStepCut (const int Cuts)
 
void SetPlotRelativeToPrior (const bool PlotOrNot)
 
void SetPrintToPDF (const bool PlotOrNot)
 
void SetPlotErrorForFlatPrior (const bool PlotOrNot)
 
void SetPlotBinValue (const bool PlotOrNot)
 
void SetFancyNames (const bool PlotOrNot)
 
void SetSmoothing (const bool PlotOrNot)
 
void SetPost2DPlotThreshold (const double Threshold)
 
void SetExcludedTypes (std::vector< std::string > Name)
 
void SetExcludedNames (std::vector< std::string > Name)
 
void SetnBatches (const int Batches)
 
void SetnLags (const int nLags)
 
void SetOutputSuffix (const std::string Suffix)
 
void SetPosterior1DCut (const std::string Cut)
 
void SetCredibleIntervals (std::vector< double > Intervals)
 
void SetCredibleIntervalsColours (std::vector< Color_t > Intervals)
 
void SetCredibleRegions (std::vector< double > Intervals)
 
void SetCredibleRegionStyle (std::vector< Style_t > Intervals)
 
void SetCredibleRegionColor (std::vector< Color_t > Intervals)
 
void SetCredibleInSigmas (const bool Intervals)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

TH1DMakePrefit ()
 
void MakeOutputFile ()
 
void DrawCorrelations1D ()
 
void ReadInputCov ()
 
void FindInputFiles ()
 
void ReadXSecFile ()
 
void ReadNDFile ()
 
void ReadFDFile ()
 
void ReadOSCFile ()
 
void RemoveParameters ()
 
void ScanInput ()
 
void ScanParameterOrder ()
 
void SetupOutput ()
 
void GetArithmetic (TH1D *const hpost, const int i)
 
void GetGaussian (TH1D *&hpost, const int i)
 
void GetHPD (TH1D *const hpost, const int i, const double coverage=0.6827)
 
void GetCredibleInterval (TH1D *const hpost, TH1D *hpost_copy, const double coverage=0.6827)
 
void GetCredibleRegion (TH2D *hpost, const double coverage=0.6827)
 
std::string GetJeffreysScale (const double BayesFactor)
 
std::string GetDunneKaboth (const double BayesFactor)
 
double GetSigmaValue (int sigma)
 
void PrepareDiagMCMC ()
 
void ParamTraces ()
 
void AutoCorrelation ()
 
void CalculateESS (const int nLags)
 
void BatchedAnalysis ()
 
void BatchedMeans ()
 
void GewekeDiagnostic ()
 
void AcceptanceProbabilities ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

std::string MCMCFile
 
std::string OutputSuffix
 
std::vector< std::vector< std::string > > CovPos
 
TChainChain
 
std::string StepCut
 
std::string Posterior1DCut
 
int BurnInCut
 
int nBranches
 
int nEntries
 
int nSteps
 
int nSamples
 
int nSysts
 
std::vector< TStringBranchNames
 
std::vector< std::string > ExcludedTypes
 
std::vector< std::string > ExcludedNames
 
int nDraw
 
std::vector< boolIamVaried
 
std::vector< std::vector< TString > > ParamNames
 
std::vector< std::vector< double > > ParamCentral
 
std::vector< std::vector< double > > ParamNom
 
std::vector< std::vector< double > > ParamErrors
 
std::vector< std::vector< bool > > ParamFlat
 
std::vector< intnParam
 
std::vector< ParameterEnumParamType
 
std::vector< intParamTypeStartPos
 
std::vector< boolIsXsec
 
int nFlux
 
std::vector< TStringSampleName_v
 
std::vector< TStringSystName_v
 
std::string OutputName
 
TString CanvasName
 
bool PlotXSec
 
bool PlotDet
 
bool PlotFlatPrior
 
bool PlotJarlskog
 
bool MakeCorr
 
bool plotRelativeToPrior
 
bool MadePostfit
 
bool printToPDF
 
bool FancyPlotNames
 
bool plotBinValue
 
bool ApplySmoothing
 
bool CredibleInSigmas
 
double Post2DPlotThreshold
 
std::vector< intNDSamplesBins
 
std::vector< std::string > NDSamplesNames
 
TF1Gauss
 
TFileOutputFile
 
TCanvasPosterior
 
TVectorDCentral_Value
 
TVectorDMeans
 
TVectorDErrors
 
TVectorDMeans_Gauss
 
TVectorDErrors_Gauss
 
TVectorDMeans_HPD
 
TVectorDErrors_HPD
 
TVectorDErrors_HPD_Positive
 
TVectorDErrors_HPD_Negative
 
TMatrixDSymCovariance
 
TMatrixDSymCorrelation
 
TH1D ** hpost
 
TH2D *** hpost2D
 
TH2Dhviolin
 
TH2Dhviolin_prior
 
double ** ParStep
 
intStepNumber
 
int nBins
 
double DrawRange
 
bool CacheMCMC
 
bool doDiagMCMC
 
int nBatches
 
int AutoCorrLag
 
doubleParamSums
 
double ** BatchedAverages
 
double ** LagL
 
double ** SampleValues
 
double ** SystValues
 
doubleAccProbValues
 
doubleAccProbBatchedAverages
 
std::vector< doubleCredible_Intervals
 
std::vector< Color_tCredible_IntervalsColours
 
std::vector< doubleCredible_Regions
 
std::vector< Style_tCredible_RegionStyle
 
std::vector< Color_tCredible_RegionColor
 
+

Detailed Description

+
+

Definition at line 66 of file MCMCProcessor.h.

+

Constructor & Destructor Documentation

+ +

◆ MCMCProcessor()

+ +
+
+ + + + + + + + + + + + + + + + + + +
MCMCProcessor::MCMCProcessor (const std::string & InputFile,
bool MakePostfitCorr 
)
+
+ +

Definition at line 41 of file MCMCProcessor.cpp.

+
41 :
+
42 Chain(nullptr), StepCut(""), MakeCorr(MakePostfitCorr), MadePostfit(false) {
+
43// ****************************
+ +
45
+ + + + +
50 MACH3LOG_INFO("Making post-fit processor for: {}", MCMCFile);
+
51
+
52 ParStep = nullptr;
+
53 StepNumber = nullptr;
+
54
+
55 Posterior = nullptr;
+
56 hpost = nullptr;
+
57 hpost2D = nullptr;
+
58 hviolin = nullptr;
+
59 hviolin_prior = nullptr;
+
60
+
61 OutputFile = nullptr;
+
62
+
63 ParamSums = nullptr;
+
64 BatchedAverages = nullptr;
+
65 LagL = nullptr;
+
66 SampleValues = nullptr;
+
67 SystValues = nullptr;
+
68 AccProbValues = nullptr;
+
69 AccProbBatchedAverages = nullptr;
+
70
+
71 //KS: Warning this only work when you project from Chain, will nor work when you try SetBranchAddress etc. Turn it on only if you know how to use it
+
72 PlotJarlskog = false;
+
73
+
74 //KS:Hardcoded should be a way to get it via config or something
+
75 plotRelativeToPrior = false;
+
76 printToPDF = false;
+
77 plotBinValue = false;
+
78 PlotFlatPrior = true;
+
79 CacheMCMC = false;
+
80 ApplySmoothing = true;
+
81 FancyPlotNames = true;
+
82 doDiagMCMC = false;
+
83 OutputSuffix = "_Process";
+
84 Post2DPlotThreshold = 1.e-5;
+
85
+
86 nDraw = 0;
+
87 nFlux = 0;
+
88 nEntries = 0;
+
89 nSteps = 0;
+
90 nBatches = 0;
+
91 AutoCorrLag = 0;
+
92 nSysts = 0;
+
93 nSamples = 0;
+
94
+
95 nBins = 70;
+
96 DrawRange = 1.5;
+
97
+
98 Posterior1DCut = "";
+
99 CredibleInSigmas = false;
+
100 //KS:Those keep basic information for ParameterEnum
+ + + + + + +
107 nParam.resize(kNParameterEnum);
+
108 CovPos.resize(kNParameterEnum);
+
109
+
110 for(int i = 0; i < kNParameterEnum; i++)
+
111 {
+
112 ParamTypeStartPos[i] = 0;
+
113 nParam[i] = 0;
+
114 }
+
115 //Only if GPU is enabled
+
116 #ifdef CUDA
+
117 ParStep_cpu = nullptr;
+
118 NumeratorSum_cpu = nullptr;
+
119 ParamSums_cpu = nullptr;
+
120 DenomSum_cpu = nullptr;
+
121
+
122 ParStep_gpu = nullptr;
+
123 NumeratorSum_gpu = nullptr;
+
124 ParamSums_gpu = nullptr;
+
125 DenomSum_gpu = nullptr;
+
126 #endif
+
127}
+
@ kNParameterEnum
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
double ** ParStep
+ + +
double Post2DPlotThreshold
+
double ** SampleValues
+ +
std::vector< std::vector< double > > ParamCentral
+
std::vector< std::vector< double > > ParamErrors
+ +
std::vector< int > nParam
+ + +
std::vector< std::vector< bool > > ParamFlat
+
std::vector< std::vector< double > > ParamNom
+
double ** SystValues
+
double * AccProbBatchedAverages
+ +
std::string StepCut
+ + + + + + +
std::string MCMCFile
+
std::vector< std::vector< std::string > > CovPos
+
double * ParamSums
+
TCanvas * Posterior
+
std::string Posterior1DCut
+
double * AccProbValues
+ +
std::string OutputSuffix
+ + + +
double ** BatchedAverages
+ + + + +
std::vector< std::vector< TString > > ParamNames
+ + + +
std::vector< int > ParamTypeStartPos
+ + + + +
void GetCPUInfo()
Definition Monitor.cpp:53
+
void GetGPUInfo()
Definition Monitor.cpp:76
+
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.
Definition Monitor.cpp:6
+
+
+
+ +

◆ ~MCMCProcessor()

+ +
+
+ + + + + + + +
MCMCProcessor::~MCMCProcessor ()
+
+ +

Definition at line 131 of file MCMCProcessor.cpp.

+
131 {
+
132// ****************************
+
133
+
134 // Close the pdf file
+
135 MACH3LOG_INFO("Closing pdf in MCMCProcessor: {}", CanvasName);
+
136 CanvasName += "]";
+
137 if(printToPDF) Posterior->Print(CanvasName);
+
138 if (Posterior != nullptr) delete Posterior;
+
139
+
140 delete Gauss;
+
141 delete Covariance;
+
142 delete Correlation;
+
143 delete Central_Value;
+
144 delete Means;
+
145 delete Errors;
+
146 delete Means_Gauss;
+
147 delete Errors_Gauss;
+
148 delete Means_HPD;
+
149 delete Errors_HPD;
+
150 delete Errors_HPD_Positive;
+
151 delete Errors_HPD_Negative;
+
152
+
153 if(hpost != nullptr)
+
154 {
+
155 for (int i = 0; i < nDraw; ++i)
+
156 {
+
157 delete hpost[i];
+
158 }
+
159 delete[] hpost;
+
160 }
+
161 if(CacheMCMC)
+
162 {
+
163 for (int i = 0; i < nDraw; ++i)
+
164 {
+
165 for (int j = 0; j < nDraw; ++j)
+
166 {
+
167 delete hpost2D[i][j];
+
168 }
+
169 delete[] ParStep[i];
+
170 delete[] hpost2D[i];
+
171 }
+
172 delete[] ParStep;
+
173 delete[] hpost2D;
+
174 }
+
175 if(StepNumber != nullptr) delete[] StepNumber;
+
176
+
177 if(hviolin != nullptr) delete hviolin;
+
178 if(hviolin_prior != nullptr) delete hviolin_prior;
+
179 if(OutputFile != nullptr) OutputFile->Close();
+
180 if(OutputFile != nullptr) delete OutputFile;
+
181 delete Chain;
+
182}
+
TMatrixDSym * Correlation
+
TVectorD * Means_HPD
+
TVectorD * Errors
+
TVectorD * Means_Gauss
+
TVectorD * Errors_HPD_Negative
+ +
TVectorD * Errors_Gauss
+
TVectorD * Central_Value
+ +
TVectorD * Errors_HPD
+
TVectorD * Means
+
TVectorD * Errors_HPD_Positive
+
TMatrixDSym * Covariance
+
+
+
+

Member Function Documentation

+ +

◆ AcceptanceProbabilities()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::AcceptanceProbabilities ()
+
+inlineprivate
+
+ +

Definition at line 4431 of file MCMCProcessor.cpp.

+
4431 {
+
4432// **************************
+
4433 if (AccProbBatchedAverages == nullptr) PrepareDiagMCMC();
+
4434
+
4435 std::cout << "Making AccProb plots..." << std::endl;
+
4436
+
4437 // Set the titles and limits for TH1Ds
+
4438 TH1D* AcceptanceProbPlot = new TH1D("AcceptanceProbability", "Acceptance Probability", nEntries, 0, nEntries);
+
4439 AcceptanceProbPlot->GetXaxis()->SetTitle("Step");
+
4440 AcceptanceProbPlot->GetYaxis()->SetTitle("Acceptance Probability");
+
4441
+
4442 TH1D* BatchedAcceptanceProblot = new TH1D("AcceptanceProbability_Batch", "AcceptanceProbability_Batch", nBatches, 0, nBatches);
+
4443 BatchedAcceptanceProblot->GetYaxis()->SetTitle("Acceptance Probability");
+
4444
+
4445 for (int i = 0; i < nBatches; ++i) {
+ + + +
4449 std::stringstream ss;
+
4450 ss << BatchRangeLow << " - " << BatchRangeHigh;
+
4451 BatchedAcceptanceProblot->GetXaxis()->SetBinLabel(i+1, ss.str().c_str());
+
4452 }
+
4453
+
4454#ifdef MULTITHREAD
+
4455#pragma omp parallel for
+
4456#endif
+
4457 for (int i = 0; i < nEntries; ++i) {
+
4458 // Set bin content for the ith bin to the parameter values
+
4459 AcceptanceProbPlot->SetBinContent(i, AccProbValues[i]);
+
4460 }
+
4461
+
4462 TDirectory *probDir = OutputFile->mkdir("AccProb");
+
4463 probDir->cd();
+
4464
+
4465 AcceptanceProbPlot->Write();
+
4466 BatchedAcceptanceProblot->Write();
+
4467
+
4468 delete AcceptanceProbPlot;
+ +
4470 delete[] AccProbValues;
+
4471 delete[] AccProbBatchedAverages;
+
4472
+
4473 probDir->Close();
+
4474 delete probDir;
+
4475
+
4476 OutputFile->cd();
+
4477
+
4478}
+ +
+
+
+ +

◆ AutoCorrelation()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::AutoCorrelation ()
+
+inlineprivate
+
+ +

Definition at line 3739 of file MCMCProcessor.cpp.

+
3739 {
+
3740// *********************************
+
3741
+
3742 if (ParStep == nullptr) PrepareDiagMCMC();
+
3743
+
3744 TStopwatch clock;
+
3745 clock.Start();
+
3746 const int nLags = AutoCorrLag;
+
3747 MACH3LOG_INFO("Making auto-correlations for nLags = {}", nLags);
+
3748
+
3749 // The sum of (Y-Ymean)^2 over all steps for each parameter
+
3750 double **DenomSum = new double*[nDraw]();
+
3751 double **NumeratorSum = new double*[nDraw]();
+
3752 LagL = new double*[nDraw];
+
3753 for (int j = 0; j < nDraw; ++j) {
+
3754 DenomSum[j] = new double[nLags];
+
3755 NumeratorSum[j] = new double[nLags];
+
3756 LagL[j] = new double[nLags];
+
3757 }
+
3758 TH1D** LagKPlots = new TH1D*[nDraw];
+
3759 // Loop over the parameters of interest
+
3760 for (int j = 0; j < nDraw; ++j)
+
3761 {
+
3762 // Loop over each lag
+
3763 for (int k = 0; k < nLags; ++k) {
+
3764 NumeratorSum[j][k] = 0.0;
+
3765 DenomSum[j][k] = 0.0;
+
3766 LagL[j][k] = 0.0;
+
3767 }
+
3768
+
3769 // Make TH1Ds for each parameter which hold the lag
+
3770 TString Title = "";
+
3771 double Prior = 1.0;
+
3772 double PriorError = 1.0;
+
3773
+ +
3775 std::string HistName = Form("%s_%s_Lag", Title.Data(), BranchNames[j].Data());
+
3776 LagKPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nLags, 0.0, nLags);
+
3777 LagKPlots[j]->GetXaxis()->SetTitle("Lag");
+
3778 LagKPlots[j]->GetYaxis()->SetTitle("Auto-correlation function");
+
3779 }
+
3780//KS: If CUDA is not enabled do calculations on CPU
+
3781#ifndef CUDA
+
3782 // Loop over the lags
+
3783 //CW: Each lag is independent so might as well multi-thread them!
+
3784 #ifdef MULTITHREAD
+
3785 std::cout << "Using multi-threading..." << std::endl;
+
3786 #pragma omp parallel for
+
3787 #endif
+
3788 for (int k = 0; k < nLags; ++k) {
+
3789 // Loop over the number of entries
+
3790 for (int i = 0; i < nEntries; ++i) {
+
3791 // Loop over the number of parameters
+
3792 for (int j = 0; j < nDraw; ++j) {
+
3793 const double Diff = ParStep[i][j]-ParamSums[j];
+
3794
+
3795 // Only sum the numerator up to i = N-k
+
3796 if (i < nEntries-k) {
+
3797 const double LagTerm = ParStep[i+k][j]-ParamSums[j];
+
3798 const double Product = Diff*LagTerm;
+
3799 NumeratorSum[j][k] += Product;
+
3800 }
+
3801
+
3802 // Square the difference to form the denominator
+
3803 const double Denom = Diff*Diff;
+
3804 DenomSum[j][k] += Denom;
+
3805 }
+
3806 }
+
3807 }
+
3808#else //NOW GPU specific code
+
3809 std::cout << "Using GPU" << std::endl;
+
3810 //KS: This allocates memory and copy data from CPU to GPU
+ +
3812
+
3813 //KS: This runs the main kernel and copy results back to CPU
+ + + + + + +
3820 DenomSum_cpu);
+
3821
+
3822 #ifdef MULTITHREAD
+
3823 #pragma omp parallel for collapse(2)
+
3824 #endif
+
3825 //KS: Now that that we received data from GPU convert it to CPU-like format
+
3826 for (int j = 0; j < nDraw; ++j)
+
3827 {
+
3828 for (int k = 0; k < nLags; ++k)
+
3829 {
+
3830 const int temp_index = j*nLags+k;
+ + +
3833 }
+
3834 }
+
3835 //delete auxilary variables
+
3836 delete[] NumeratorSum_cpu;
+
3837 delete[] DenomSum_cpu;
+
3838 delete[] ParStep_cpu;
+
3839 delete[] ParamSums_cpu;
+
3840
+
3841 //KS: Delete stuff at GPU as well
+ + + + +
3846 DenomSum_gpu);
+
3847
+
3848//KS: End of GPU specific code
+
3849#endif
+
3850
+
3851 OutputFile->cd();
+
3852 TDirectory *AutoCorrDir = OutputFile->mkdir("Auto_corr");
+
3853 // Now fill the LagK auto-correlation plots
+
3854 for (int j = 0; j < nDraw; ++j) {
+
3855 for (int k = 0; k < nLags; ++k) {
+
3856 LagL[j][k] = NumeratorSum[j][k]/DenomSum[j][k];
+
3857 LagKPlots[j]->SetBinContent(k, NumeratorSum[j][k]/DenomSum[j][k]);
+
3858 }
+
3859 AutoCorrDir->cd();
+
3860 LagKPlots[j]->Write();
+
3861 delete LagKPlots[j];
+
3862 }
+
3863 delete[] LagKPlots;
+
3864
+
3865 //KS: This is different diagnostic however it relies on calucated Lag, thus we call it before we delete LagKPlots
+ +
3867
+
3868 for (int j = 0; j < nDraw; ++j) {
+
3869 delete[] NumeratorSum[j];
+
3870 delete[] DenomSum[j];
+
3871 delete[] LagL[j];
+
3872 }
+
3873 delete[] NumeratorSum;
+
3874 delete[] DenomSum;
+
3875 delete[] LagL;
+
3876 delete[] ParamSums;
+
3877
+
3878 AutoCorrDir->Close();
+
3879 delete AutoCorrDir;
+
3880
+
3881 OutputFile->cd();
+
3882
+
3883 clock.Stop();
+
3884 std::cout << "It took " << clock.RealTime() << std::endl;
+
3885}
+
void GetNthParameter(const int param, double &Prior, double &PriorError, TString &Title)
+
std::vector< TString > BranchNames
+
void CalculateESS(const int nLags)
+
+
+
+ +

◆ BatchedAnalysis()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::BatchedAnalysis ()
+
+inlineprivate
+
+ +

Definition at line 4146 of file MCMCProcessor.cpp.

+
4146 {
+
4147// **************************
+
4148
+
4149 if(BatchedAverages == nullptr)
+
4150 {
+
4151 std::cerr<<"BatchedAverages haven't been initialises or have been deleted somehting is wrong"<<std::endl;
+
4152 std::cerr<<"I need it and refuse to go further"<<std::endl;
+
4153 throw;
+
4154 }
+
4155
+
4156 // Calcualte variance estimator using batched means following https://arxiv.org/pdf/1911.00915.pdf see Eq. 1.2
+ +
4158 //KS: The hypothesis is rejected if C > z α for a given confidence level α. If the batch means do not pass the test, Correlated is reported for the half-width on the statistical reports following https://rossetti.github.io/RossettiArenaBook/ch5-BatchMeansMethod.html alternatively for more oldschhol see Alexopoulos and Seila 1998 section 3.4.3
+ +
4160
+
4161 double* OverallBatchMean = new double[nDraw]();
+
4162 double* C_Rho_Nominator = new double[nDraw]();
+
4163 double* C_Rho_Denominator = new double[nDraw]();
+
4164 double* C_Nominator = new double[nDraw]();
+
4165 double* C_Denominator = new double[nDraw]();
+
4166 const int BatchLength = nEntries/nBatches+1;
+
4167//KS: Start parallel region
+
4168#ifdef MULTITHREAD
+
4169#pragma omp parallel
+
4170{
+
4171#endif
+
4172 #ifdef MULTITHREAD
+
4173 #pragma omp for
+
4174 #endif
+
4175 //KS: First calcuate mean of batched means for each param and Initialise everything to 0
+
4176 for (int j = 0; j < nDraw; ++j)
+
4177 {
+
4178 OverallBatchMean[j] = 0.0;
+
4179 C_Rho_Nominator[j] = 0.0;
+
4180 C_Rho_Denominator[j] = 0.0;
+
4181 C_Nominator[j] = 0.0;
+
4182 C_Denominator[j] = 0.0;
+
4183
+
4184 (*BatchedVariance)(j) = 0.0;
+
4185 (*C_Test_Statistics)(j) = 0.0;
+
4186 for (int i = 0; i < nBatches; ++i)
+
4187 {
+ +
4189 }
+ +
4191 }
+
4192
+
4193 #ifdef MULTITHREAD
+
4194 #pragma omp for nowait
+
4195 #endif
+
4196 //KS: next loop is copletely idnepend thus nowait clause
+
4197 for (int j = 0; j < nDraw; ++j)
+
4198 {
+
4199 for (int i = 0; i < nBatches; ++i)
+
4200 {
+
4201 (*BatchedVariance)(j) += (OverallBatchMean[j] - BatchedAverages[i][j])*(OverallBatchMean[j] - BatchedAverages[i][j]);
+
4202 }
+
4203 (*BatchedVariance)(j) = (BatchLength/(nBatches-1))* (*BatchedVariance)(j);
+
4204 }
+
4205
+
4206 //KS: Now we focus on C test statistic, again use nowait as next is calcualtion is independent
+
4207 #ifdef MULTITHREAD
+
4208 #pragma omp for nowait
+
4209 #endif
+
4210 for (int j = 0; j < nDraw; ++j)
+
4211 {
+ + +
4214 for (int i = 0; i < nBatches; ++i)
+
4215 {
+ +
4217 }
+ +
4219 }
+
4220
+
4221 //KS: We still calcualte C and for this we need rho wee need autocorealtion between bathces
+
4222 #ifdef MULTITHREAD
+
4223 #pragma omp for
+
4224 #endif
+
4225 for (int j = 0; j < nDraw; ++j)
+
4226 {
+
4227 for (int i = 0; i < nBatches-1; ++i)
+
4228 {
+ +
4230 }
+
4231
+
4232 for (int i = 0; i < nBatches; ++i)
+
4233 {
+ +
4235 }
+
4236 }
+
4237
+
4238 //KS: Finall calcuations of C
+
4239 #ifdef MULTITHREAD
+
4240 #pragma omp for
+
4241 #endif
+
4242 for (int j = 0; j < nDraw; ++j)
+
4243 {
+
4244 (*C_Test_Statistics)(j) = std::sqrt((nBatches*nBatches - 1)/(nBatches-2)) * ( C_Rho_Nominator[j]/C_Rho_Denominator[j] + C_Nominator[j]/ C_Denominator[j]);
+
4245 }
+
4246#ifdef MULTITHREAD
+
4247} //End parallel region
+
4248#endif
+
4249
+
4250 //Save to file
+
4251 OutputFile->cd();
+
4252 BatchedVariance->Write("BatchedMeansVariance");
+
4253 C_Test_Statistics->Write("C_Test_Statistics");
+
4254
+
4255 //Delete all variables
+
4256 delete BatchedVariance;
+
4257 delete C_Test_Statistics;
+
4258 delete[] OverallBatchMean;
+
4259 delete[] C_Rho_Nominator;
+
4260 delete[] C_Rho_Denominator;
+
4261 delete[] C_Nominator;
+
4262 delete[] C_Denominator;
+
4263}
+
+
+
+ +

◆ BatchedMeans()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::BatchedMeans ()
+
+inlineprivate
+
+ +

Definition at line 4084 of file MCMCProcessor.cpp.

+
4084 {
+
4085// **************************
+
4086
+
4087 if (BatchedAverages == nullptr) PrepareDiagMCMC();
+
4088
+
4089 std::cout << "Making BatchedMeans plots..." << std::endl;
+
4090
+
4091 TH1D ** BatchedParamPlots = new TH1D*[nDraw];
+
4092 for (int j = 0; j < nDraw; ++j) {
+
4093 TString Title = "";
+
4094 double Prior = 1.0;
+
4095 double PriorError = 1.0;
+
4096
+ +
4098
+
4099 std::string HistName = Form("%s_%s_batch", Title.Data(), BranchNames[j].Data());
+
4100 BatchedParamPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nBatches, 0, nBatches);
+
4101 }
+
4102
+
4103 #ifdef MULTITHREAD
+
4104 #pragma omp parallel for
+
4105 #endif
+
4106 for (int j = 0; j < nDraw; ++j) {
+
4107 for (int i = 0; i < nBatches; ++i) {
+
4108 BatchedParamPlots[j]->SetBinContent(i+1, BatchedAverages[i][j]);
+ + +
4111 std::stringstream ss;
+
4112 ss << BatchRangeLow << " - " << BatchRangeHigh;
+
4113 BatchedParamPlots[j]->GetXaxis()->SetBinLabel(i+1, ss.str().c_str());
+
4114 }
+
4115 }
+
4116
+
4117 TDirectory *BatchDir = OutputFile->mkdir("Batched_means");
+
4118 BatchDir->cd();
+
4119 for (int j = 0; j < nDraw; ++j) {
+
4120 TF1 *Fitter = new TF1("Fitter","[0]", 0, nBatches);
+
4121 Fitter->SetLineColor(kRed);
+
4122 BatchedParamPlots[j]->Fit("Fitter","Rq");
+
4123 BatchedParamPlots[j]->Write();
+
4124 delete Fitter;
+
4125 delete BatchedParamPlots[j];
+
4126 }
+
4127 delete[] BatchedParamPlots;
+
4128
+
4129 //KS: Get the batched means variance estimation and variable indicating if number of batches is sensible
+
4130 // We do this before deleting BatchedAverages
+ +
4132
+
4133 for (int i = 0; i < nBatches; ++i) {
+
4134 delete BatchedAverages[i];
+
4135 }
+
4136 delete[] BatchedAverages;
+
4137
+
4138 BatchDir->Close();
+
4139 delete BatchDir;
+
4140
+
4141 OutputFile->cd();
+
4142}
+ +
+
+
+ +

◆ CacheSteps()

+ +
+
+ + + + + + + +
void MCMCProcessor::CacheSteps ()
+
+ +

KS:By caching each step we use multithreading.

+ +

Definition at line 1125 of file MCMCProcessor.cpp.

+
1125 {
+
1126// ***************
+
1127 if(CacheMCMC == true) return;
+
1128
+
1129 CacheMCMC = true;
+
1130
+
1131 if(ParStep != nullptr)
+
1132 {
+
1133 MACH3LOG_ERROR("It look like ParStep was already filled ");
+
1134 MACH3LOG_ERROR("Eventhough it is used for MakeCovariance_MP and for DiagMCMC ");
+
1135 MACH3LOG_ERROR("it has differnt structure in both for cache hits, sorry ");
+
1136 throw;
+
1137 }
+
1138
+
1139 MACH3LOG_INFO("Caching input tree...");
+
1140 MACH3LOG_INFO("Allocating {:.2f} MB", (sizeof(double)*nDraw*nEntries)/1.E6);
+
1141 TStopwatch clock;
+
1142 clock.Start();
+
1143
+
1144 ParStep = new double*[nDraw];
+
1145 StepNumber = new int[nEntries];
+
1146
+
1147 hpost2D = new TH2D**[nDraw]();
+
1148
+
1149 for (int i = 0; i < nDraw; ++i)
+
1150 {
+
1151 ParStep[i] = new double[nEntries];
+
1152 hpost2D[i] = new TH2D*[nDraw]();
+
1153
+
1154 for (int j = 0; j < nEntries; ++j)
+
1155 {
+
1156 ParStep[i][j] = -999.99;
+
1157 //KS: Set this only once
+
1158 if(i == 0) StepNumber[j] = -999.99;
+
1159 }
+
1160 }
+
1161
+
1162 // Set all the branches to off
+
1163 Chain->SetBranchStatus("*", false);
+
1164
+
1165 // Turn on the branches which we want for parameters
+
1166 for (int i = 0; i < nDraw; ++i)
+
1167 {
+
1168 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
1169 }
+
1170 Chain->SetBranchStatus("step", true);
+
1171
+
1172 const int countwidth = nEntries/10;
+
1173 // Loop over the entries
+
1174 //KS: This is really a bottleneck right now, thus revisit with ROOT6 https://pep-root6.github.io/docs/analysis/parallell/root.html
+
1175 for (int j = 0; j < nEntries; ++j)
+
1176 {
+
1177 if (j % countwidth == 0)
+ +
1179
+
1180 Chain->SetBranchAddress("step", &StepNumber[j]);
+
1181 // Set the branch addresses for params
+
1182 for (int i = 0; i < nDraw; ++i)
+
1183 {
+
1184 Chain->SetBranchAddress(BranchNames[i].Data(), &ParStep[i][j]);
+
1185 }
+
1186
+
1187 if (j % countwidth == 0) {
+ +
1189 } else {
+
1190 // Fill up the ParStep array
+
1191 Chain->GetEntry(j);
+
1192 }
+
1193
+
1194 }
+
1195
+
1196 // Set all the branches to on
+
1197 Chain->SetBranchStatus("*", true);
+
1198
+
1199 // Cache max and min in chain for covariance matrix
+
1200 for (int i = 0; i < nDraw; ++i)
+
1201 {
+
1202 const double Min_Chain_i = Chain->GetMinimum(BranchNames[i]);
+
1203 const double Max_Chain_i = Chain->GetMaximum(BranchNames[i]);
+
1204
+
1205 TString Title_i = "";
+
1206 double Prior_i, PriorError_i;
+ +
1208
+
1209 for (int j = 0; j <= i; ++j)
+
1210 {
+
1211 const double Min_Chain_j = Chain->GetMinimum(BranchNames[j]);
+
1212 const double Max_Chain_j = Chain->GetMaximum(BranchNames[j]);
+
1213
+
1214 // TH2D to hold the Correlation
+
1215 hpost2D[i][j] = new TH2D(Form("hpost2D_%i_%i",i,j), Form("hpost2D_%i_%i",i,j), nBins, Min_Chain_i, Max_Chain_i, nBins, Min_Chain_j, Max_Chain_j);
+
1216
+
1217 TString Title_j = "";
+
1218 double Prior_j, PriorError_j;
+ +
1220
+
1221 hpost2D[i][j]->SetMinimum(0);
+
1222 hpost2D[i][j]->GetXaxis()->SetTitle(Title_i);
+
1223 hpost2D[i][j]->GetYaxis()->SetTitle(Title_j);
+
1224 hpost2D[i][j]->GetZaxis()->SetTitle("Steps");
+
1225 }
+
1226 }
+
1227
+
1228 clock.Stop();
+
1229 MACH3LOG_INFO("Caching steps took {:.2f}s to finish for {} steps", clock.RealTime(), nEntries );
+
1230}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
void EstimateDataTransferRate(TChain *chain, const int entry)
Definition Monitor.cpp:114
+
void PrintProgressBar(const int Done, const int All)
Definition Monitor.cpp:134
+
+
+
+ +

◆ CalculateESS()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::CalculateESS (const int nLags)
+
+inlineprivate
+
+ +

Definition at line 3972 of file MCMCProcessor.cpp.

+
3972 {
+
3973// **************************
+
3974
+
3975 if(LagL == nullptr)
+
3976 {
+
3977 std::cerr<<"Trying to call CalculateESS before LagL was calcauted, this will not work"<<std::endl;
+
3978 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
3979 throw;
+
3980 }
+
3981 std::cout << "Making ESS plots..." << std::endl;
+
3982
+ + +
3985 double *TempDenominator = new double[nDraw]();
+
3986
+
3987 const int Nhists = 5;
+
3988 const double Thresholds[Nhists+1] = {1, 0.02, 0.005, 0.001, 0.0001, 0.0};
+ +
3990
+
3991 //KS: This histogram is inspired by the following: https://mc-stan.org/bayesplot/articles/visual-mcmc-diagnostics.html
+ +
3993 for(int i = 0; i < Nhists; ++i)
+
3994 {
+
3995 EffectiveSampleSizeHist[i] = new TH1D(Form("EffectiveSampleSizeHist_%i",i), Form("EffectiveSampleSizeHist_%i",i), nDraw, 0, nDraw);
+
3996 EffectiveSampleSizeHist[i]->GetYaxis()->SetTitle("N_{eff}/N");
+
3997 EffectiveSampleSizeHist[i]->SetFillColor(ESSColours[i]);
+
3998 EffectiveSampleSizeHist[i]->SetLineColor(ESSColours[i]);
+
3999 for (int j = 0; j < nDraw; ++j)
+
4000 {
+
4001 TString Title = "";
+
4002 double Prior = 1.0;
+
4003 double PriorError = 1.0;
+ +
4005 EffectiveSampleSizeHist[i]->GetXaxis()->SetBinLabel(j+1, Title.Data());
+
4006 }
+
4007 }
+
4008
+
4009 #ifdef MULTITHREAD
+
4010 #pragma omp parallel for
+
4011 #endif
+
4012 //KS: Calculate ESS and MCMC efficiency for each parameter
+
4013 for (int j = 0; j < nDraw; ++j)
+
4014 {
+
4015 (*EffectiveSampleSize)(j) = __UNDEF__;
+
4016 (*SamplingEfficiency)(j) = __UNDEF__;
+
4017 TempDenominator[j] = 0.;
+
4018 //KS: Firs sum over all Calculated autoceralations
+
4019 for (int k = 0; k < nLags; ++k)
+
4020 {
+
4021 TempDenominator[j] += LagL[j][k];
+
4022 }
+ +
4024 (*EffectiveSampleSize)(j) = nEntries/TempDenominator[j];
+
4025 // 100 becasue we convert to percentage
+
4026 (*SamplingEfficiency)(j) = 100 * 1/TempDenominator[j];
+
4027
+
4028 for(int i = 0; i < Nhists; ++i)
+
4029 {
+
4030 EffectiveSampleSizeHist[i]->SetBinContent(j+1, 0);
+
4031 EffectiveSampleSizeHist[i]->SetBinError(j+1, 0);
+
4032
+
4033 const double TempEntry = std::fabs((*EffectiveSampleSize)(j)) / nEntries;
+
4034 if(Thresholds[i] >= TempEntry && TempEntry > Thresholds[i+1])
+
4035 {
+
4036 if( std::isnan((*EffectiveSampleSize)(j)) ) continue;
+
4037 EffectiveSampleSizeHist[i]->SetBinContent(j+1, TempEntry);
+
4038 }
+
4039 }
+
4040 }
+
4041
+
4042 //KS Write to the output tree
+
4043 //Save to file
+
4044 OutputFile->cd();
+
4045 EffectiveSampleSize->Write("EffectiveSampleSize");
+
4046 SamplingEfficiency->Write("SamplingEfficiency");
+
4047
+
4048 EffectiveSampleSizeHist[0]->SetTitle("Effective Sample Size");
+
4049 EffectiveSampleSizeHist[0]->Draw();
+
4050 for(int i = 1; i < Nhists; ++i)
+
4051 {
+
4052 EffectiveSampleSizeHist[i]->Draw("SAME");
+
4053 }
+
4054
+
4055 TLegend *leg = new TLegend(0.2, 0.7, 0.6, 0.95);
+
4056 leg->SetTextSize(0.03);
+
4057 for(int i = 0; i < Nhists; ++i)
+
4058 {
+
4059 leg->AddEntry(EffectiveSampleSizeHist[i], Form("%.4f >= N_{eff}/N > %.4f", Thresholds[i], Thresholds[i+1]), "f");
+
4060 }
+
4061 leg->SetLineColor(0);
+
4062 leg->SetLineStyle(0);
+
4063 leg->SetFillColor(0);
+
4064 leg->SetFillStyle(0);
+
4065 leg->Draw("SAME");
+
4066
+
4067 Posterior->Write("EffectiveSampleSizeCanvas");
+
4068
+
4069 //Delete all variables
+
4070 delete EffectiveSampleSize;
+
4071 delete SamplingEfficiency;
+
4072 for(int i = 0; i < Nhists; ++i)
+
4073 {
+
4074 delete EffectiveSampleSizeHist[i];
+
4075 }
+
4076 delete leg;
+
4077 delete[] EffectiveSampleSizeHist;
+
4078 //KS Remove auxiliary arrays
+
4079 delete[] TempDenominator;
+
4080}
+
#define __UNDEF__
+
double * EffectiveSampleSize
Definition RHat.cpp:57
+
+
+
+ +

◆ DiagMCMC()

+ +
+
+ + + + + + + +
void MCMCProcessor::DiagMCMC ()
+
+ +

KS: Perform MCMC diagnostic including AutoCorrelation, Trace etc.

+ +

Definition at line 3436 of file MCMCProcessor.cpp.

+
3436 {
+
3437// **************************
+
3438
+
3439// MCMC stuff to implement:
+
3440// Trace plots -- DONE
+
3441// LogL vs step plots -- DONE
+
3442// Acceptance probability -- DONE
+
3443// Autocorrelation -- DONE
+
3444// _Batched Means_ -- DONE
+
3445
+
3446 // Prepare branches etc for DiagMCMC
+ +
3448
+
3449 // Draw the simple trace matrices
+
3450 ParamTraces();
+
3451
+
3452 // Get the batched means
+
3453 BatchedMeans();
+
3454
+
3455 // Draw the auto-correlations
+ +
3457
+
3458 // Get Geweke Z score helping select burn-in
+ +
3460
+
3461 // Draw acceptance Probability
+ +
3463}
+ +
void AcceptanceProbabilities()
+ + + +
+
+
+ +

◆ DrawCorrelations1D()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::DrawCorrelations1D ()
+
+inlineprivate
+
+ +

Definition at line 1441 of file MCMCProcessor.cpp.

+
1441 {
+
1442// *********************
+
1443
+
1444 //KS: Store it as we go back to them at the end
+
1445 const double TopMargin = Posterior->GetTopMargin();
+
1446 const double BottomMargin = Posterior->GetBottomMargin();
+
1447 const int OptTitle = gStyle->GetOptTitle();
+
1448
+
1449 Posterior->SetTopMargin(0.1);
+
1450 Posterior->SetBottomMargin(0.2);
+
1451 gStyle->SetOptTitle(1);
+
1452
+
1453 const int Nhists = 3;
+
1454 //KS: Highest value is just meant bo be sliglhy higher than 1 to catch >,
+
1455 const double Thresholds[Nhists+1] = {0, 0.25, 0.5, 1.0001};
+
1456 const Color_t CorrColours[Nhists] = {kRed-10, kRed-6, kRed};
+
1457
+
1458 //KS: This strore neccesary entires for stripped covariance which strore only "menaingfull correlations
+
1459 std::vector<std::vector<double>> CorrOfInterest;
+
1460 CorrOfInterest.resize(nDraw);
+
1461 std::vector<std::vector<std::string>> NameCorrOfInterest;
+
1462 NameCorrOfInterest.resize(nDraw);
+
1463
+
1464 TH1D ***Corr1DHist = new TH1D**[nDraw]();
+
1465 //KS: Initialising ROOT objects is never safe in MP loop
+
1466 for(int i = 0; i < nDraw; ++i)
+
1467 {
+
1468 TString Title = "";
+
1469 double Prior = 1.0;
+
1470 double PriorError = 1.0;
+ +
1472
+
1473 Corr1DHist[i] = new TH1D*[Nhists]();
+
1474 for(int j = 0; j < Nhists; ++j)
+
1475 {
+
1476 Corr1DHist[i][j] = new TH1D(Form("Corr1DHist_%i_%i", i, j), Form("Corr1DHist_%i_%i", i, j), nDraw, 0, nDraw);
+
1477 Corr1DHist[i][j]->SetTitle(Form("%s",Title.Data()));
+
1478 Corr1DHist[i][j]->GetYaxis()->SetTitle("Correlation");
+
1479 Corr1DHist[i][j]->SetFillColor(CorrColours[j]);
+
1480 Corr1DHist[i][j]->SetLineColor(kBlack);
+
1481
+
1482 for (int k = 0; k < nDraw; ++k)
+
1483 {
+
1484 TString Title_y = "";
+
1485 double Prior_y = 1.0;
+
1486 double PriorError_y = 1.0;
+ +
1488 Corr1DHist[i][j]->GetXaxis()->SetBinLabel(k+1, Title_y.Data());
+
1489 }
+
1490 }
+
1491 }
+
1492
+
1493 #ifdef MULTITHREAD
+
1494 #pragma omp parallel for
+
1495 #endif
+
1496 for(int i = 0; i < nDraw; ++i)
+
1497 {
+
1498 for(int j = 0; j < nDraw; ++j)
+
1499 {
+
1500 for(int k = 0; k < Nhists; ++k)
+
1501 {
+
1502 const double TempEntry = std::fabs((*Correlation)(i,j));
+
1503 if(Thresholds[k+1] > TempEntry && TempEntry >= Thresholds[k])
+
1504 {
+
1505 Corr1DHist[i][k]->SetBinContent(j+1, (*Correlation)(i,j));
+
1506 }
+
1507 }
+
1508 if(std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold && i != j)
+
1509 {
+
1510 CorrOfInterest[i].push_back((*Correlation)(i,j));
+
1511 NameCorrOfInterest[i].push_back(Corr1DHist[i][0]->GetXaxis()->GetBinLabel(j+1));
+
1512 }
+
1513 }
+
1514 }
+
1515
+
1516 TDirectory *CorrDir = OutputFile->mkdir("Corr1D");
+
1517 CorrDir->cd();
+
1518
+
1519 for(int i = 0; i < nDraw; i++)
+
1520 {
+
1521 if (IamVaried[i] == false) continue;
+
1522
+
1523 Corr1DHist[i][0]->SetMaximum(+1.);
+
1524 Corr1DHist[i][0]->SetMinimum(-1.);
+
1525 Corr1DHist[i][0]->Draw();
+
1526 for(int k = 1; k < Nhists; k++)
+
1527 {
+
1528 Corr1DHist[i][k]->Draw("SAME");
+
1529 }
+
1530
+
1531 TLegend *leg = new TLegend(0.3, 0.75, 0.6, 0.90);
+
1532 leg->SetTextSize(0.02);
+
1533 for(int k = 0; k < Nhists; k++)
+
1534 {
+
1535 leg->AddEntry(Corr1DHist[i][k], Form("%.2f > |Corr| >= %.2f", Thresholds[k+1], Thresholds[k]), "f");
+
1536 }
+
1537 leg->SetLineColor(0);
+
1538 leg->SetLineStyle(0);
+
1539 leg->SetFillColor(0);
+
1540 leg->SetFillStyle(0);
+
1541 leg->Draw("SAME");
+
1542
+
1543 Posterior->Write(Corr1DHist[i][0]->GetTitle());
+
1544 if(printToPDF) Posterior->Print(CanvasName);
+
1545
+
1546 delete leg;
+
1547 }
+
1548
+
1549 //KS: Plot only meaninfull correlations
+
1550 for(int i = 0; i < nDraw; i++)
+
1551 {
+
1552 const int size = CorrOfInterest[i].size();
+
1553
+
1554 if(size == 0) continue;
+
1555 TH1D* Corr1DHist_Reduced = new TH1D("Corr1DHist_Reduced", "Corr1DHist_Reduced", size, 0, size);
+
1556
+
1557 Corr1DHist_Reduced->SetTitle(Corr1DHist[i][0]->GetTitle());
+
1558 Corr1DHist_Reduced->GetYaxis()->SetTitle("Correlation");
+
1559 Corr1DHist_Reduced->SetFillColor(kBlue);
+
1560 Corr1DHist_Reduced->SetLineColor(kBlue);
+
1561
+
1562 for (int j = 0; j < size; ++j)
+
1563 {
+
1564 Corr1DHist_Reduced->GetXaxis()->SetBinLabel(j+1, NameCorrOfInterest[i][j].c_str());
+
1565 Corr1DHist_Reduced->SetBinContent(j+1, CorrOfInterest[i][j]);
+
1566 }
+
1567 Corr1DHist_Reduced->GetXaxis()->LabelsOption("v");
+
1568
+
1569 Corr1DHist_Reduced->SetMaximum(+1.);
+
1570 Corr1DHist_Reduced->SetMinimum(-1.);
+
1571 Corr1DHist_Reduced->Draw();
+
1572
+
1573 Posterior->Write(Form("%s_Red", Corr1DHist_Reduced->GetTitle()));
+
1574 if(printToPDF) Posterior->Print(CanvasName);
+
1575
+
1576 delete Corr1DHist_Reduced;
+
1577 }
+
1578
+
1579 for(int i = 0; i < nDraw; i++)
+
1580 {
+
1581 for(int k = 1; k < Nhists; k++)
+
1582 {
+
1583 delete Corr1DHist[i][k];
+
1584 }
+
1585 delete[] Corr1DHist[i];
+
1586 }
+
1587 delete[] Corr1DHist;
+
1588
+
1589 CorrDir->Close();
+
1590 delete CorrDir;
+
1591
+
1592 OutputFile->cd();
+
1593
+
1594 Posterior->SetTopMargin(TopMargin);
+
1595 Posterior->SetBottomMargin(BottomMargin);
+
1596 gStyle->SetOptTitle(OptTitle);
+
1597
+
1598}
+
int size
+
std::vector< bool > IamVaried
+
+
+
+ +

◆ DrawCovariance()

+ +
+
+ + + + + + + +
void MCMCProcessor::DrawCovariance ()
+
+ +

Draw the post-fit covariances.

+ +

Definition at line 1341 of file MCMCProcessor.cpp.

+
1341 {
+
1342// *********************
+
1343
+
1344 int covBinning = nDraw;
+
1345 // The Covariance matrix from the fit
+
1346 TH2D* hCov = new TH2D("hCov", "hCov", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1347 hCov->GetZaxis()->SetTitle("Covariance");
+
1348 // The Covariance matrix square root, with correct sign
+
1349 TH2D* hCovSq = new TH2D("hCovSq", "hCovSq", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1350 hCovSq->GetZaxis()->SetTitle("Covariance");
+
1351 // The Correlation
+
1352 TH2D* hCorr = new TH2D("hCorr", "hCorr", covBinning, 0, covBinning, covBinning, 0, covBinning);
+
1353 hCorr->GetZaxis()->SetTitle("Correlation");
+
1354 hCorr->SetMinimum(-1);
+
1355 hCorr->SetMaximum(1);
+
1356 hCov->GetXaxis()->SetLabelSize(0.015);
+
1357 hCov->GetYaxis()->SetLabelSize(0.015);
+
1358 hCovSq->GetXaxis()->SetLabelSize(0.015);
+
1359 hCovSq->GetYaxis()->SetLabelSize(0.015);
+
1360 hCorr->GetXaxis()->SetLabelSize(0.015);
+
1361 hCorr->GetYaxis()->SetLabelSize(0.015);
+
1362
+
1363 // Loop over the Covariance matrix entries
+
1364 for (int i = 0; i < covBinning; ++i)
+
1365 {
+
1366 TString titlex = "";
+
1367 double nom, err;
+ +
1369
+
1370 hCov->GetXaxis()->SetBinLabel(i+1, titlex);
+
1371 hCovSq->GetXaxis()->SetBinLabel(i+1, titlex);
+
1372 hCorr->GetXaxis()->SetBinLabel(i+1, titlex);
+
1373
+
1374 for (int j = 0; j < covBinning; ++j)
+
1375 {
+
1376 // The value of the Covariance
+
1377 double cov = (*Covariance)(i,j);
+
1378 double corr = (*Correlation)(i,j);
+
1379
+
1380 hCov->SetBinContent(i+1, j+1, cov);
+
1381 hCovSq->SetBinContent(i+1, j+1, ((cov > 0) - (cov < 0))*std::sqrt(std::fabs(cov)));
+
1382 hCorr->SetBinContent(i+1, j+1, corr);
+
1383
+
1384
+
1385 TString titley = "";
+
1386 double nom_j, err_j;
+ +
1388
+
1389 hCov->GetYaxis()->SetBinLabel(j+1, titley);
+
1390 hCovSq->GetYaxis()->SetBinLabel(j+1, titley);
+
1391 hCorr->GetYaxis()->SetBinLabel(j+1, titley);
+
1392 }
+
1393 }
+
1394
+
1395 // Take away the stat box
+
1396 gStyle->SetOptStat(0);
+
1397 if(plotBinValue)gStyle->SetPaintTextFormat("4.1f"); //Precision of value in matrix element
+
1398 // Make pretty Correlation colors (red to blue)
+
1399 const int NRGBs = 5;
+
1400 TColor::InitializeColors();
+
1401 Double_t stops[NRGBs] = { 0.00, 0.25, 0.50, 0.75, 1.00 };
+
1402 Double_t red[NRGBs] = { 0.00, 0.25, 1.00, 1.00, 0.50 };
+
1403 Double_t green[NRGBs] = { 0.00, 0.25, 1.00, 0.25, 0.00 };
+
1404 Double_t blue[NRGBs] = { 0.50, 1.00, 1.00, 0.25, 0.00 };
+
1405 TColor::CreateGradientColorTable(5, stops, red, green, blue, 255);
+
1406 gStyle->SetNumberContours(255);
+
1407
+
1408 // cd into the correlation directory
+
1409 OutputFile->cd();
+
1410
+
1411 Posterior->cd();
+
1412 Posterior->Clear();
+
1413 if(plotBinValue) hCov->Draw("colz text");
+
1414 else hCov->Draw("colz");
+
1415 Posterior->SetRightMargin(0.15);
+
1416 if(printToPDF) Posterior->Print(CanvasName);
+
1417
+
1418 Posterior->cd();
+
1419 Posterior->Clear();
+
1420 if(plotBinValue) hCorr->Draw("colz text");
+
1421 else hCorr->Draw("colz");
+
1422 Posterior->SetRightMargin(0.15);
+
1423 if(printToPDF) Posterior->Print(CanvasName);
+
1424
+
1425 hCov->Write("Covariance_plot");
+
1426 hCovSq->Write("Covariance_sq_plot");
+
1427 hCorr->Write("Correlation_plot");
+
1428
+
1429 //Back to normal
+
1430 Posterior->SetRightMargin(0.03);
+
1431 delete hCov;
+
1432 delete hCovSq;
+
1433 delete hCorr;
+
1434
+ +
1436}
+ +
+
+
+ +

◆ DrawPostfit()

+ +
+
+ + + + + + + +
void MCMCProcessor::DrawPostfit ()
+
+ +

Draw the post-fit comparisons.

+ +

Definition at line 459 of file MCMCProcessor.cpp.

+
459 {
+
460// *******************
+
461
+
462 if (OutputFile == nullptr) MakeOutputFile();
+
463
+
464 // Make the prefit plot
+ +
466
+
467 // cd into the output file
+
468 OutputFile->cd();
+
469
+
470 std::string CutPosterior1D = "";
+
471 if(Posterior1DCut != "")
+
472 {
+ +
474 }
+
475 else CutPosterior1D = StepCut;
+
476
+
477 // Make a TH1D of the central values and the errors
+
478 TH1D *paramPlot = new TH1D("paramPlot", "paramPlot", nDraw, 0, nDraw);
+
479 paramPlot->SetName("mach3params");
+
480 paramPlot->SetTitle(CutPosterior1D.c_str());
+
481 paramPlot->SetFillStyle(3001);
+
482 paramPlot->SetFillColor(kBlue-1);
+
483 paramPlot->SetMarkerColor(paramPlot->GetFillColor());
+
484 paramPlot->SetMarkerStyle(20);
+
485 paramPlot->SetLineColor(paramPlot->GetFillColor());
+
486 paramPlot->SetMarkerSize(prefit->GetMarkerSize());
+
487
+
488 // Same but with Gaussian output
+
489 TH1D *paramPlot_Gauss = (TH1D*)(paramPlot->Clone());
+
490 paramPlot_Gauss->SetMarkerColor(kOrange-5);
+
491 paramPlot_Gauss->SetMarkerStyle(23);
+
492 paramPlot_Gauss->SetLineWidth(2);
+
493 paramPlot_Gauss->SetMarkerSize((prefit->GetMarkerSize())*0.75);
+
494 paramPlot_Gauss->SetFillColor(paramPlot_Gauss->GetMarkerColor());
+
495 paramPlot_Gauss->SetFillStyle(3244);
+
496 paramPlot_Gauss->SetLineColor(paramPlot_Gauss->GetMarkerColor());
+
497
+
498 // Same but with Gaussian output
+
499 TH1D *paramPlot_HPD = (TH1D*)(paramPlot->Clone());
+
500 paramPlot_HPD->SetMarkerColor(kBlack);
+
501 paramPlot_HPD->SetMarkerStyle(25);
+
502 paramPlot_HPD->SetLineWidth(2);
+
503 paramPlot_HPD->SetMarkerSize((prefit->GetMarkerSize())*0.5);
+
504 paramPlot_HPD->SetFillColor(0);
+
505 paramPlot_HPD->SetFillStyle(0);
+
506 paramPlot_HPD->SetLineColor(paramPlot_HPD->GetMarkerColor());
+
507
+
508 // Set labels and data
+
509 for (int i = 0; i < nDraw; ++i)
+
510 {
+
511 //Those keep which parameter type we run currently and realtive number
+
512 int ParamEnu = ParamType[i];
+
513 int ParamNo = i - ParamTypeStartPos[ParameterEnum(ParamEnu)];
+
514
+
515 //KS: Sliglthy hacky way to get realtive to prior or nominal as this is convention we use
+
516 //This only applies for xsec for other systematic types doesn't matter
+
517 double CentralValueTemp = 0;
+ +
519 double Err, Err_Gauss, Err_HPD;
+
520
+ +
522 {
+ +
524 // Normalise the prior relative the nominal/prior, just the way we get our fit results in MaCh3
+
525 if ( CentralValueTemp != 0)
+
526 {
+
527 Central = (*Means)(i) / CentralValueTemp;
+
528 Err = (*Errors)(i) / CentralValueTemp;
+
529
+
530 Central_gauss = (*Means_Gauss)(i) / CentralValueTemp;
+
531 Err_Gauss = (*Errors_Gauss)(i) / CentralValueTemp;
+
532
+
533 Central_HPD = (*Means_HPD)(i) / CentralValueTemp;
+
534 Err_HPD = (*Errors_HPD)(i) / CentralValueTemp;
+
535 }
+
536 else {
+
537 Central = 1+(*Means)(i);
+
538 Err = (*Errors)(i);
+
539
+
540 Central_gauss = 1+(*Means_Gauss)(i);
+
541 Err_Gauss = (*Errors_Gauss)(i);
+
542
+
543 Central_HPD = 1+(*Means_HPD)(i) ;
+
544 Err_HPD = (*Errors_HPD)(i);
+
545 }
+
546 }
+
547 //KS: Just get value of each parameter without dividing by prior
+
548 else
+
549 {
+
550 Central = (*Means)(i);
+
551 Err = (*Errors)(i);
+
552
+
553 Central_gauss = (*Means_Gauss)(i);
+
554 Err_Gauss = (*Errors_Gauss)(i);
+
555
+
556 Central_HPD = (*Means_HPD)(i) ;
+
557 Err_HPD = (*Errors_HPD)(i);
+
558 }
+
559
+
560 paramPlot->SetBinContent(i+1, Central);
+
561 paramPlot->SetBinError(i+1, Err);
+
562
+
563 paramPlot_Gauss->SetBinContent(i+1, Central_gauss);
+
564 paramPlot_Gauss->SetBinError(i+1, Err_Gauss);
+
565
+
566 paramPlot_HPD->SetBinContent(i+1, Central_HPD);
+
567 paramPlot_HPD->SetBinError(i+1, Err_HPD);
+
568
+
569 paramPlot->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
570 paramPlot_Gauss->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
571 paramPlot_HPD->GetXaxis()->SetBinLabel(i+1, prefit->GetXaxis()->GetBinLabel(i+1));
+
572 }
+
573
+
574 // Make a TLegend
+
575 TLegend *CompLeg = new TLegend(0.33, 0.73, 0.76, 0.95);
+
576 CompLeg->AddEntry(prefit, "Prefit", "fp");
+
577 CompLeg->AddEntry(paramPlot, "Postfit PDF", "fp");
+
578 CompLeg->AddEntry(paramPlot_Gauss, "Postfit Gauss", "fp");
+
579 CompLeg->AddEntry(paramPlot_HPD, "Postfit HPD", "lfep");
+
580 CompLeg->SetFillColor(0);
+
581 CompLeg->SetFillStyle(0);
+
582 CompLeg->SetLineWidth(0);
+
583 CompLeg->SetLineStyle(0);
+
584 CompLeg->SetBorderSize(0);
+
585
+
586 const double BottomMargin = Posterior->GetBottomMargin();
+
587 Posterior->SetBottomMargin(0.2);
+
588
+
589 OutputFile->cd();
+
590 //KS: Plot Xsec and Flux
+
591 if (PlotXSec == true)
+
592 {
+
593 const int Start = ParamTypeStartPos[kXSecPar];
+
594 // Plot the xsec parameters (0 to ~nXsec-nFlux) nXsec == xsec + flux, quite confusing I know
+
595 // Have already looked through the branches earlier
+
596 if(plotRelativeToPrior) prefit->GetYaxis()->SetTitle("Variation rel. prior");
+
597 else prefit->GetYaxis()->SetTitle("Parameter Value");
+
598 prefit->GetYaxis()->SetRangeUser(-2.5, 2.5);
+
599 prefit->GetXaxis()->SetTitle("");
+
600 prefit->GetXaxis()->LabelsOption("v");
+
601
+
602 prefit->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
603 paramPlot->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
604 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start, Start+ nParam[kXSecPar]-nFlux);
+
605 paramPlot_HPD->GetXaxis()->SetRangeUser(Start, Start + nParam[kXSecPar]-nFlux);
+
606
+
607 // Write the individual ones
+
608 prefit->Write("param_xsec_prefit");
+
609 paramPlot->Write("param_xsec");
+
610 paramPlot_Gauss->Write("param_xsec_gaus");
+
611 paramPlot_HPD->Write("param_xsec_HPD");
+
612
+
613 // And the combined
+
614 prefit->Draw("e2");
+
615 paramPlot->Draw("e2, same");
+
616 paramPlot_Gauss->Draw("e2, same");
+
617 paramPlot_HPD->Draw("e1, same");
+
618 CompLeg->Draw("same");
+
619 Posterior->Write("param_xsec_canv");
+
620 if(printToPDF) Posterior->Print(CanvasName);
+
621 Posterior->Clear();
+
622
+
623 OutputFile->cd();
+
624 // Plot the flux parameters (nXSec to nxsec+nflux) if enabled
+
625 // Have already looked through the branches earlier
+
626 prefit->GetYaxis()->SetRangeUser(0.7, 1.3);
+
627 paramPlot->GetYaxis()->SetRangeUser(0.7, 1.3);
+
628 paramPlot_Gauss->GetYaxis()->SetRangeUser(0.7, 1.3);
+
629 paramPlot_HPD->GetYaxis()->SetRangeUser(0.7, 1.3);
+
630
+
631 prefit->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
632 paramPlot->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
633 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
634 paramPlot_HPD->GetXaxis()->SetRangeUser(Start + nParam[kXSecPar]-nFlux, Start + nParam[kXSecPar]);
+
635
+
636 prefit->Write("param_flux_prefit");
+
637 paramPlot->Write("param_flux");
+
638 paramPlot_Gauss->Write("param_flux_gaus");
+
639 paramPlot_HPD->Write("param_flux_HPD");
+
640
+
641 prefit->Draw("e2");
+
642 paramPlot->Draw("e2, same");
+
643 paramPlot_Gauss->Draw("e1, same");
+
644 paramPlot_HPD->Draw("e1, same");
+
645 CompLeg->Draw("same");
+
646 Posterior->Write("param_flux_canv");
+
647 if(printToPDF) Posterior->Print(CanvasName);
+
648 Posterior->Clear();
+
649 }
+
650 if(PlotDet)
+
651 {
+ +
653 int NDbinCounter = Start;
+
654 //KS: Make prefit postfit for each ND sample, having all of them at the same plot is unreadable
+
655 for(unsigned int i = 0; i < NDSamplesNames.size(); i++ )
+
656 {
+
657 std::string NDname = NDSamplesNames[i];
+ +
659 OutputFile->cd();
+
660 prefit->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
661 prefit->GetYaxis()->SetRangeUser(0.6, 1.4);
+
662 prefit->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
663 prefit->GetXaxis()->SetTitle();
+
664 prefit->GetXaxis()->LabelsOption("v");
+
665
+
666 paramPlot->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
667 paramPlot->GetYaxis()->SetRangeUser(0.6, 1.4);
+
668 paramPlot->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
669 paramPlot->GetXaxis()->SetTitle("");
+
670 paramPlot->SetTitle(CutPosterior1D.c_str());
+
671 paramPlot->GetXaxis()->LabelsOption("v");
+
672
+
673 paramPlot_Gauss->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
674 paramPlot_Gauss->GetYaxis()->SetRangeUser(0.6, 1.4);
+
675 paramPlot_Gauss->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
676 paramPlot_Gauss->GetXaxis()->SetTitle("");
+
677 paramPlot_Gauss->SetTitle(CutPosterior1D.c_str());
+
678 paramPlot_Gauss->GetXaxis()->LabelsOption("v");
+
679
+
680 paramPlot_HPD->GetYaxis()->SetTitle(("Variation for "+NDname).c_str());
+
681 paramPlot_HPD->GetYaxis()->SetRangeUser(0.6, 1.4);
+
682 paramPlot_HPD->GetXaxis()->SetRangeUser(Start, NDbinCounter);
+
683 paramPlot_HPD->GetXaxis()->SetTitle("");
+
684 paramPlot_HPD->SetTitle(CutPosterior1D.c_str());
+
685 paramPlot_HPD->GetXaxis()->LabelsOption("v");
+
686
+
687 prefit->Write(("param_"+NDname+"_prefit").c_str());
+
688 paramPlot->Write(("param_"+NDname).c_str());
+
689 paramPlot_Gauss->Write(("param_"+NDname+"_gaus").c_str());
+
690 paramPlot_HPD->Write(("param_"+NDname+"_HPD").c_str());
+
691
+
692 prefit->Draw("e2");
+
693 paramPlot->Draw("e2, same");
+
694 paramPlot_Gauss->Draw("e1, same");
+
695 paramPlot_HPD->Draw("e1, same");
+
696 CompLeg->Draw("same");
+
697 Posterior->Write(("param_"+NDname+"_canv").c_str());
+
698 if(printToPDF) Posterior->Print(CanvasName);
+
699 Posterior->Clear();
+ +
701 }
+
702 }
+
703
+
704 delete prefit;
+
705 delete paramPlot;
+
706 delete paramPlot_Gauss;
+
707 delete paramPlot_HPD;
+
708 delete CompLeg;
+
709
+
710 //KS: Return Margin to default one
+
711 Posterior->SetBottomMargin(BottomMargin);
+
712}
+
ParameterEnum
+
@ kNDPar
+
@ kXSecPar
+ +
std::vector< std::string > NDSamplesNames
+ + +
std::vector< ParameterEnum > ParamType
+ +
std::vector< int > NDSamplesBins
+
+
+
+ +

◆ FindInputFiles()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::FindInputFiles ()
+
+inlineprivate
+
+ +

Definition at line 2412 of file MCMCProcessor.cpp.

+
2412 {
+
2413// **************************
+
2414
+
2415 // Now read the MCMC file
+
2416 TFile *TempFile = new TFile(MCMCFile.c_str(), "open");
+
2417
+
2418 // Get the settings for the MCMC
+
2419 TMacro *Config = (TMacro*)(TempFile->Get("MaCh3_Config"));
+
2420 if (Config == nullptr) {
+
2421 MACH3LOG_ERROR("Didn't find MaCh3_Config tree in MCMC file! {}", MCMCFile);
+
2422 TempFile->ls();
+
2423 throw;
+
2424 }
+
2425 //KS:Most inputs are in ${MACH3}/inputs/blarb.root
+
2426 if (std::getenv("MACH3") != nullptr) {
+
2427 MACH3LOG_INFO("Found MACH3 environment variable: {}", std::getenv("MACH3"));
+
2428 }
+
2429
+
2430 YAML::Node Settings = TMacroToYAML(*Config);
+
2431
+
2432 bool InputNotFound = false;
+
2433 //CW: Get the xsec Covariance matrix
+
2434 CovPos[kXSecPar] = GetFromManager<std::vector<std::string>>(Settings["General"]["Systematics"]["XsecCovFile"], {"none"});
+
2435 if(CovPos[kXSecPar].back() == "none")
+
2436 {
+
2437 MACH3LOG_WARN("Couldn't find XsecCov branch in output");
+
2438 InputNotFound = true;
+
2439 }
+
2440
+
2441 //CW: And the ND Covariance matrix
+
2442 CovPos[kNDPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["NDCovFile"], "none"));
+
2443 if(CovPos[kNDPar].back() == "none")
+
2444 {
+
2445 MACH3LOG_WARN("Couldn't find NDCov branch in output");
+
2446 InputNotFound = true;
+
2447 }
+
2448
+
2449 //CW: And the FD Covariance matrix
+
2450 CovPos[kFDDetPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["FDCovFile"], "none"));
+
2451 if(CovPos[kFDDetPar].back() == "none")
+
2452 {
+
2453 MACH3LOG_WARN("Couldn't find FDCov branch in output");
+
2454 InputNotFound = true;
+
2455 }
+
2456
+
2457 //CW: And the Osc Covariance matrix
+
2458 CovPos[kOSCPar].push_back(GetFromManager<std::string>(Settings["General"]["Systematics"]["OscCovFile"], "none"));
+
2459 if(CovPos[kOSCPar].back() == "none")
+
2460 {
+
2461 MACH3LOG_WARN("Couldn't find OscCov branch in output");
+
2462 InputNotFound = true;
+
2463 }
+
2464 if(InputNotFound) std::cout<<Settings<<std::endl;
+
2465
+
2466 if (std::getenv("MACH3") != nullptr)
+
2467 {
+
2468 for(unsigned int i = 0; i < CovPos[kXSecPar].size(); i++)
+
2469 CovPos[kXSecPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2470
+
2471 for(unsigned int i = 0; i < CovPos[kNDPar].size(); i++)
+
2472 CovPos[kNDPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2473
+
2474 for(unsigned int i = 0; i < CovPos[kFDDetPar].size(); i++)
+
2475 CovPos[kFDDetPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2476
+
2477 for(unsigned int i = 0; i < CovPos[kOSCPar].size(); i++)
+
2478 CovPos[kOSCPar][i].insert(0, std::string(std::getenv("MACH3"))+"/");
+
2479 }
+
2480
+
2481 // Delete the TTrees and the input file handle since we've now got the settings we need
+
2482 delete Config;
+
2483
+
2484 // Delete the MCMCFile pointer we're reading
+
2485 TempFile->Close();
+
2486 delete TempFile;
+
2487}
+
@ kOSCPar
+
@ kFDDetPar
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
YAML::Node TMacroToYAML(const TMacro &macro)
KS: Convert a ROOT TMacro object to a YAML node.
+
+
+
+ +

◆ GetArithmetic()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetArithmetic (TH1D *const hpost,
const int i 
)
+
+inlineprivate
+
+ +

Definition at line 2715 of file MCMCProcessor.cpp.

+
2715 {
+
2716// **************************
+
2717 (*Means)(i) = hpost->GetMean();
+
2718 (*Errors)(i) = hpost->GetRMS();
+
2719}
+
+
+
+ +

◆ GetBayesFactor()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetBayesFactor (std::vector< std::string > ParName,
std::vector< std::vector< double > > Model1Bounds,
std::vector< std::vector< double > > Model2Bounds,
std::vector< std::vector< std::string > > ModelNames 
)
+
+ +

Definition at line 3095 of file MCMCProcessor.cpp.

+
3095 {
+
3096// **************************
+
3097
+
3098 if(hpost[0] == nullptr) MakePostfit();
+
3099
+
3100 MACH3LOG_INFO("Calculating Bayes Factor");
+
3101 if((ParNames.size() != Model1Bounds.size()) || (Model2Bounds.size() != Model1Bounds.size()) || (Model2Bounds.size() != ModelNames.size()))
+
3102 {
+
3103 MACH3LOG_ERROR("Size doesn't match");
+
3104 throw;
+
3105 }
+
3106 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3107 {
+
3108 //KS: First we need to find parameter number based on name
+
3109 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3110 bool skip = false;
+
3111 if(ParamNo == __UNDEF__)
+
3112 {
+
3113 MACH3LOG_WARN("Couldn't find param {}. Will not calculate Bayes Factor", ParNames[k]);
+
3114 skip = true;
+
3115 }
+
3116 if(skip) continue;
+
3117
+
3118 const double M1_min = Model1Bounds[k][0];
+
3119 const double M2_min = Model2Bounds[k][0];
+
3120 const double M1_max = Model1Bounds[k][1];
+
3121 const double M2_max = Model2Bounds[k][1];
+
3122
+
3123 long double IntegralMode1 = hpost[ParamNo]->Integral(hpost[ParamNo]->FindFixBin(M1_min), hpost[ParamNo]->FindFixBin(M1_max));
+
3124 long double IntegralMode2 = hpost[ParamNo]->Integral(hpost[ParamNo]->FindFixBin(M2_min), hpost[ParamNo]->FindFixBin(M2_max));
+
3125
+
3126 double BayesFactor = 0.;
+
3127 std::string Name = "";
+
3128 //KS: Calc Bayes Factor
+
3129 //If M1 is more likely
+ +
3131 {
+ +
3133 Name = "\\mathfrak{B}(" + ModelNames[k][0]+ "/" + ModelNames[k][1] + ") = " + std::to_string(BayesFactor);
+
3134 }
+
3135 else //If M2 is more likely
+
3136 {
+ +
3138 Name = "\\mathfrak{B}(" + ModelNames[k][1]+ "/" + ModelNames[k][0] + ") = " + std::to_string(BayesFactor);
+
3139 }
+ + +
3142
+
3143 MACH3LOG_INFO("{} for {}", Name, ParNames[k]);
+
3144 MACH3LOG_INFO("Following Jeffreys Scale = ", JeffreysScale);
+
3145 MACH3LOG_INFO("Following Dunne-Kaboth Scale = ", DunneKabothScale);
+
3146 std::cout<<std::endl;
+
3147 }
+
3148 return;
+
3149}
+
std::string GetDunneKaboth(const double BayesFactor)
+
std::string GetJeffreysScale(const double BayesFactor)
+
int GetParamIndexFromName(const std::string Name)
+
void MakePostfit()
Make 1D projection for each parameter and prepare structure.
+
+
+
+ +

◆ GetBranchNames()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< TString > & MCMCProcessor::GetBranchNames () const
+
+inline
+
+ +

Definition at line 136 of file MCMCProcessor.h.

+
136{ return BranchNames;};
+
+
+
+ +

◆ GetCovariance()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetCovariance (TMatrixDSym *& Cov,
TMatrixDSym *& Corr 
)
+
+ +

Get the post-fit covariances and correlations.

+ +

Definition at line 229 of file MCMCProcessor.cpp.

+
229 {
+
230// ***************
+ +
232 else MakeCovariance();
+
233 Cov = (TMatrixDSym*)Covariance->Clone();
+
234 Corr = (TMatrixDSym*)Correlation->Clone();
+
235}
+ +
void MakeCovariance()
Calculate covariance by making 2D projection of each combination of parameters.
+
+
+
+ +

◆ GetCredibleInterval()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetCredibleInterval (TH1D *const hpost,
TH1Dhpost_copy,
const double coverage = 0.6827 
)
+
+inlineprivate
+
+

Loop over histogram bins with highest number of entries until covered 90 or 68.3%

+

Get bin of highest content and save the number of entries reached so far

+

Replace bin value by -1 so it is not looped over as being maximum bin again

+ +

Definition at line 2835 of file MCMCProcessor.cpp.

+
2835 {
+
2836// ***************
+
2837
+
2838 if(coverage > 1)
+
2839 {
+
2840 std::cerr<<"Specified Credible Interval is greater that 1 and equal to "<< coverage <<" Should be between 0 and 1"<<std::endl;
+
2841 throw;
+
2842 }
+
2843 //KS: Reset first copy of histogram
+
2844 hpost_copy->Reset("");
+
2845 hpost_copy->Fill(0.0, 0.0);
+
2846
+
2847 //KS: Temporary structure to be thread save
+
2848 double *hist_copy = new double[hpost->GetXaxis()->GetNbins()+1];
+
2849 bool *hist_copy_fill = new bool[hpost->GetXaxis()->GetNbins()+1];
+
2850 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2851 {
+
2852 hist_copy[i] = hpost->GetBinContent(i);
+
2853 hist_copy_fill[i] = false;
+
2854 }
+
2855
+
2857 const long double Integral = hpost->Integral();
+
2858 long double sum = 0;
+
2859
+
2860 while ((sum / Integral) < coverage)
+
2861 {
+
2863 int max_entry_bin = 0;
+
2864 double max_entries = 0.;
+
2865 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2866 {
+
2867 if (hist_copy[i] > max_entries)
+
2868 {
+ +
2870 max_entry_bin = i;
+
2871 }
+
2872 }
+
2874 hist_copy[max_entry_bin] = -1.;
+ +
2876
+
2877 sum += max_entries;
+
2878 }
+
2879 //KS: Now fill our copy only for bins which got included in coverage region
+
2880 for(int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2881 {
+
2882 if(hist_copy_fill[i]) hpost_copy->SetBinContent(i, hpost->GetBinContent(i));
+
2883 }
+
2884
+
2885 delete[] hist_copy;
+
2886 delete[] hist_copy_fill;
+
2887
+
2888 return;
+
2889}
+
+
+
+ +

◆ GetCredibleRegion()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetCredibleRegion (TH2Dhpost,
const double coverage = 0.6827 
)
+
+inlineprivate
+
+

Loop over histogram bins with highest number of entries until covered 90 or 68.3%

+

Get bin of highest content and save the number of entries reached so far

+

Replace bin value by -1 so it is not looped over as being maximum bin again

+ +

Definition at line 2893 of file MCMCProcessor.cpp.

+
2893 {
+
2894// ***************
+
2895
+
2896 if(coverage > 1)
+
2897 {
+
2898 std::cerr<<"Specified Credible Region is greater than 1 and equal to "<< coverage <<" Should be between 0 and 1"<<std::endl;
+
2899 throw;
+
2900 }
+
2901
+
2902 //KS: Temporary structure to be thread save
+
2903 double **hist_copy = new double*[hpost->GetXaxis()->GetNbins()+1];
+
2904 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2905 {
+
2906 hist_copy[i] = new double[hpost->GetYaxis()->GetNbins()+1];
+
2907 for (int j = 0; j <= hpost->GetYaxis()->GetNbins(); ++j)
+
2908 {
+
2909 hist_copy[i][j] = hpost->GetBinContent(i,j);
+
2910 }
+
2911 }
+
2912
+
2914 const long double Integral = hpost->Integral();
+
2915 long double sum = 0;
+
2916
+
2917 //We need to as ROOT requiers array to set to contour
+
2918 double Contour[1];
+
2919 while ((sum / Integral) < coverage)
+
2920 {
+
2922 int max_entry_bin_x = 0;
+
2923 int max_entry_bin_y = 0;
+
2924 double max_entries = 0.;
+
2925 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2926 {
+
2927 for (int j = 0; j <= hpost->GetYaxis()->GetNbins(); ++j)
+
2928 {
+
2929 if (hist_copy[i][j] > max_entries)
+
2930 {
+ + + +
2934 }
+
2935 }
+
2936 }
+ +
2939
+
2940 sum += max_entries;
+
2941 Contour[0] = max_entries;
+
2942 }
+
2943 hpost->SetContour(1, Contour);
+
2944
+
2945 //Delete temporary arrays
+
2946 for (int i = 0; i <= hpost->GetXaxis()->GetNbins(); ++i)
+
2947 {
+
2948 delete[] hist_copy[i];
+
2949 }
+
2950 delete[] hist_copy;
+
2951
+
2952 return;
+
2953}
+
+
+
+ +

◆ GetDunneKaboth()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string MCMCProcessor::GetDunneKaboth (const double BayesFactor)
+
+inlineprivate
+
+ +

Definition at line 3319 of file MCMCProcessor.cpp.

+
3319 {
+
3320// **************************
+
3321 std::string DunneKaboth = "";
+
3322 //KS: Get fancy DunneKaboth Scale as I am to lazy to look into table everytime
+
3323
+
3324 if(2.125 > BayesFactor) DunneKaboth = "< 1 #sigma";
+
3325 else if( 20.74 > BayesFactor) DunneKaboth = "> 1 #sigma";
+
3326 else if( 369.4 > BayesFactor) DunneKaboth = "> 2 #sigma";
+
3327 else if( 15800 > BayesFactor) DunneKaboth = "> 3 #sigma";
+
3328 else if( 1745000 > BayesFactor) DunneKaboth = "> 4 #sigma";
+
3329 else DunneKaboth = "> 5 #sigma";
+
3330
+
3331 return DunneKaboth;
+
3332}
+
+
+
+ +

◆ GetFDCov()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const & MCMCProcessor::GetFDCov () const
+
+inline
+
+ +

Definition at line 123 of file MCMCProcessor.h.

+
123{ return CovPos[kFDDetPar].back(); };
+
+
+
+ +

◆ GetGaussian()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetGaussian (TH1D *& hpost,
const int i 
)
+
+inlineprivate
+
+ +

Definition at line 2723 of file MCMCProcessor.cpp.

+
2723 {
+
2724// **************************
+
2725
+
2726 const double mean = hpost->GetMean();
+
2727 const double err = hpost->GetRMS();
+
2728 const double peakval = hpost->GetBinCenter(hpost->GetMaximumBin());
+
2729
+
2730 // Set the range for the Gaussian fit
+
2731 Gauss->SetRange(mean - 1.5*err , mean + 1.5*err);
+
2732 // Set the starting parameters close to RMS and peaks of the histograms
+
2733 Gauss->SetParameters(hpost->GetMaximum()*err*std::sqrt(2*3.14), peakval, err);
+
2734
+
2735 // Perform the fit
+
2736 hpost->Fit(Gauss->GetName(),"Rq");
+
2737 hpost->SetStats(0);
+
2738
+
2739 (*Means_Gauss)(i) = Gauss->GetParameter(1);
+
2740 (*Errors_Gauss)(i) = Gauss->GetParameter(2);
+
2741}
+
+
+
+ +

◆ GetHPD()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetHPD (TH1D *const hpost,
const int i,
const double coverage = 0.6827 
)
+
+inlineprivate
+
+ +

Definition at line 2746 of file MCMCProcessor.cpp.

+
2746 {
+
2747// ***************
+
2748 // Get the bin which has the largest posterior density
+
2749 const int MaxBin = hpost->GetMaximumBin();
+
2750 // And it's value
+
2751 const double peakval = hpost->GetBinCenter(MaxBin);
+
2752
+
2753 // The total integral of the posterior
+
2754 const long double Integral = hpost->Integral();
+
2755 //KS: and integral of left handed and right handed parts
+
2756 const long double LowIntegral = hpost->Integral(1, MaxBin-1) + hpost->GetBinContent(MaxBin)/2.0;
+
2757 const long double HighIntegral = hpost->Integral(MaxBin+1, hpost->GetNbinsX()) + hpost->GetBinContent(MaxBin)/2.0;
+
2758
+
2759 // Keep count of how much area we're covering
+
2760 //KS: Take only half content of HPD bin as one half goes for right handed error and the other for left handed error
+
2761 long double sum = hpost->GetBinContent(MaxBin)/2.0;
+
2762
+
2763 // Counter for current bin
+
2764 int CurrBin = MaxBin;
+ +
2766 CurrBin++;
+
2767 sum += hpost->GetBinContent(CurrBin);
+
2768 }
+
2769 const double sigma_p = std::fabs(hpost->GetBinCenter(MaxBin)-hpost->GetXaxis()->GetBinUpEdge(CurrBin));
+
2770 // Reset the sum
+
2771 //KS: Take only half content of HPD bin as one half goes for right handed error and the other for left handed error
+
2772 sum = hpost->GetBinContent(MaxBin)/2.0;
+
2773
+
2774 // Reset the bin counter
+
2775 CurrBin = MaxBin;
+
2776 // Counter for current bin
+ +
2778 CurrBin--;
+
2779 sum += hpost->GetBinContent(CurrBin);
+
2780 }
+
2781 const double sigma_m = std::fabs(hpost->GetBinCenter(CurrBin)-hpost->GetBinLowEdge(MaxBin));
+
2782
+
2783 // Now do the double sided HPD
+
2784 //KS: Start sum from the HPD
+
2785 sum = hpost->GetBinContent(MaxBin);
+
2786 int LowBin = MaxBin;
+
2787 int HighBin = MaxBin;
+
2788 long double LowCon = 0.0;
+
2789 long double HighCon = 0.0;
+
2790
+
2791 while (sum/Integral < coverage && (LowBin > 0 || HighBin < hpost->GetNbinsX()+1))
+
2792 {
+
2793 LowCon = 0.0;
+
2794 HighCon = 0.0;
+
2795 //KS:: Move further only if you haven't reached histogram end
+
2796 if(LowBin > 1)
+
2797 {
+
2798 LowBin--;
+
2799 LowCon = hpost->GetBinContent(LowBin);
+
2800 }
+ +
2802 {
+
2803 HighBin++;
+
2804 HighCon = hpost->GetBinContent(HighBin);
+
2805 }
+
2806
+
2807 // If we're on the last slice and the lower contour is larger than the upper
+ +
2809 sum += LowCon;
+
2810 break;
+
2811 // If we're on the last slice and the upper contour is larger than the lower
+
2812 } else if ((sum+LowCon+HighCon)/Integral > coverage && HighCon >= LowCon) {
+
2813 sum += HighCon;
+
2814 break;
+
2815 } else {
+
2816 sum += LowCon + HighCon;
+
2817 }
+
2818 }
+
2819
+
2820 double sigma_hpd = 0.0;
+
2821 if (LowCon > HighCon) {
+
2822 sigma_hpd = std::fabs(hpost->GetBinLowEdge(LowBin)-hpost->GetBinCenter(MaxBin));
+
2823 } else {
+
2824 sigma_hpd = std::fabs(hpost->GetXaxis()->GetBinUpEdge(HighBin)-hpost->GetBinCenter(MaxBin));
+
2825 }
+
2826
+
2827 (*Means_HPD)(i) = peakval;
+
2828 (*Errors_HPD)(i) = sigma_hpd;
+
2829 (*Errors_HPD_Positive)(i) = sigma_p;
+
2830 (*Errors_HPD_Negative)(i) = sigma_m;
+
2831}
+
+
+
+ +

◆ GetHpost()

+ +
+
+ + + + + +
+ + + + + + + + +
TH1D * MCMCProcessor::GetHpost (const int i)
+
+inline
+
+ +

Definition at line 115 of file MCMCProcessor.h.

+
115{ return hpost[i]; };
+
+
+
+ +

◆ GetHpost2D()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
TH2D * MCMCProcessor::GetHpost2D (const int i,
const int j 
)
+
+inline
+
+ +

Definition at line 116 of file MCMCProcessor.h.

+
116{ return hpost2D[i][j]; };
+
+
+
+ +

◆ GetJeffreysScale()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string MCMCProcessor::GetJeffreysScale (const double BayesFactor)
+
+inlineprivate
+
+ +

Definition at line 3301 of file MCMCProcessor.cpp.

+
3301 {
+
3302// **************************
+
3303 std::string JeffreysScale = "";
+
3304 //KS: Get fancy Jeffreys Scale as I am to lazy to look into table everytime
+
3305 if(BayesFactor < 0) JeffreysScale = "Negative";
+
3306 else if( 5 > BayesFactor) JeffreysScale = "Barely worth mentioning";
+
3307 else if( 10 > BayesFactor) JeffreysScale = "Substantial";
+
3308 else if( 15 > BayesFactor) JeffreysScale = "Strong";
+
3309 else if( 20 > BayesFactor) JeffreysScale = "Very strong";
+
3310 else JeffreysScale = "Decisive";
+
3311
+
3312 MACH3LOG_INFO("Following Jeffreys Scale = {}",JeffreysScale);
+
3313 return JeffreysScale;
+
3314}
+
+
+
+ +

◆ GetNDCov()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const & MCMCProcessor::GetNDCov () const
+
+inline
+
+ +

Definition at line 122 of file MCMCProcessor.h.

+
122{ return CovPos[kNDPar].back(); };
+
+
+
+ +

◆ GetnEntries()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetnEntries ()
+
+inline
+
+ +

Definition at line 140 of file MCMCProcessor.h.

+
140{return nEntries;};
+
+
+
+ +

◆ GetNFD()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetNFD ()
+
+inline
+
+ +

Definition at line 111 of file MCMCProcessor.h.

+
111{ return nParam[kFDDetPar]; };
+
+
+
+ +

◆ GetNFlux()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetNFlux ()
+
+inline
+
+ +

Definition at line 108 of file MCMCProcessor.h.

+
108{ return nFlux; };
+
+
+
+ +

◆ GetNND()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetNND ()
+
+inline
+
+ +

Definition at line 110 of file MCMCProcessor.h.

+
110{ return nParam[kNDPar]; };
+
+
+
+ +

◆ GetNParams()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetNParams ()
+
+inline
+
+ +

Definition at line 107 of file MCMCProcessor.h.

+
107{ return nDraw; };
+
+
+
+ +

◆ GetnSteps()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetnSteps ()
+
+inline
+
+ +

Definition at line 141 of file MCMCProcessor.h.

+
141{return nSteps;};
+
+
+
+ +

◆ GetNthParameter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetNthParameter (const int param,
doublePrior,
doublePriorError,
TStringTitle 
)
+
+ +

Definition at line 2957 of file MCMCProcessor.cpp.

+
2957 {
+
2958// **************************
+
2959
+ +
2961 int ParamNo = __UNDEF__;
+
2962 ParamNo = param - ParamTypeStartPos[ParType];
+
2963
+
2964 Prior = ParamCentral[ParType][ParamNo];
+
2965 PriorError = ParamErrors[ParType][ParamNo];
+
2966 Title = ParamNames[ParType][ParamNo];
+
2967 return;
+
2968}
+
+
+
+ +

◆ GetNXSec()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetNXSec ()
+
+inline
+
+ +

Definition at line 109 of file MCMCProcessor.h.

+
109{ return nParam[kXSecPar]; };
+
+
+
+ +

◆ GetOSC()

+ +
+
+ + + + + +
+ + + + + + + +
int MCMCProcessor::GetOSC ()
+
+inline
+
+ +

Definition at line 112 of file MCMCProcessor.h.

+
112{ return nParam[kOSCPar]; };
+
+
+
+ +

◆ GetOscCov()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const & MCMCProcessor::GetOscCov () const
+
+inline
+
+ +

Definition at line 124 of file MCMCProcessor.h.

+
124{ return CovPos[kOSCPar].back(); };
+
+
+
+ +

◆ GetParamIndexFromName()

+ +
+
+ + + + + + + + +
int MCMCProcessor::GetParamIndexFromName (const std::string Name)
+
+ +

Definition at line 2972 of file MCMCProcessor.cpp.

+
2972 {
+
2973// **************************
+
2974
+
2975 int ParamNo = __UNDEF__;
+
2976 for (int i = 0; i < nDraw; ++i)
+
2977 {
+
2978 TString Title = "";
+
2979 double Prior = 1.0;
+
2980 double PriorError = 1.0;
+
2981
+ +
2983
+
2984 if(Name == Title)
+
2985 {
+
2986 ParamNo = i;
+
2987 break;
+
2988 }
+
2989 }
+
2990 return ParamNo;
+
2991}
+
+
+
+ +

◆ GetPolarPlot()

+ +
+
+ + + + + + + + +
void MCMCProcessor::GetPolarPlot (std::vector< std::string > ParNames)
+
+ +

Make funny polar plot.

+ +

Definition at line 3013 of file MCMCProcessor.cpp.

+
3013 {
+
3014// **************************
+
3015
+
3016 if(hpost[0] == nullptr) MakePostfit();
+
3017
+
3018 const double TopMargin = Posterior->GetTopMargin();
+
3019 const double BottomMargin = Posterior->GetBottomMargin();
+
3020 const double LeftMargin = Posterior->GetLeftMargin();
+
3021 const double RightMargin = Posterior->GetRightMargin();
+
3022
+
3023 Posterior->SetTopMargin(0.1);
+
3024 Posterior->SetBottomMargin(0.1);
+
3025 Posterior->SetLeftMargin(0.1);
+
3026 Posterior->SetRightMargin(0.1);
+
3027 Posterior->Update();
+
3028
+
3029 std::cout << "Calculating Polar Plot "<< std::endl;
+
3030 TDirectory *PolarDir = OutputFile->mkdir("PolarDir");
+
3031 PolarDir->cd();
+
3032
+
3033 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3034 {
+
3035 //KS: First we need to find parameter number based on name
+
3036 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3037 bool skip = false;
+
3038 if(ParamNo == __UNDEF__)
+
3039 {
+
3040 MACH3LOG_WARN("Couldn't find param {}. Will not calculate Polar Plot", ParNames[k]);
+
3041 skip = true;
+
3042 }
+
3043 if(skip) continue;
+
3044
+
3045 TString Title = "";
+
3046 double Prior = 1.0;
+
3047 double PriorError = 1.0;
+ +
3049
+
3050 std::vector<double> x_val(nBins);
+
3051 std::vector<double> y_val(nBins);
+
3052
+
3053 double xmin = 0;
+
3054 double xmax = 2*TMath::Pi();
+
3055
+
3056 double Integral = hpost[ParamNo]->Integral();
+
3057 for (Int_t ipt = 0; ipt < nBins; ipt++)
+
3058 {
+ +
3060 y_val[ipt] = hpost[ParamNo]->GetBinContent(ipt+1)/Integral;
+
3061 }
+
3062
+
3063 TGraphPolar * PolarGraph = new TGraphPolar(nBins, x_val.data(), y_val.data());
+
3064 PolarGraph->SetLineWidth(2);
+
3065 PolarGraph->SetFillStyle(3001);
+
3066 PolarGraph->SetLineColor(kRed);
+
3067 PolarGraph->SetFillColor(kRed);
+
3068 PolarGraph->Draw("AFL");
+
3069
+
3070 TText* Text = new TText(0.6, 0.1, Title);
+
3071 Text->SetTextSize(0.04);
+
3072 Text->SetNDC(true);
+
3073 Text->Draw("");
+
3074
+
3075 Posterior->Print(CanvasName);
+
3076 Posterior->Write(Title);
+
3077
+
3078 delete PolarGraph;
+
3079 delete Text;
+
3080 } //End loop over parameters
+
3081
+
3082 PolarDir->Close();
+
3083 delete PolarDir;
+
3084
+
3085 OutputFile->cd();
+
3086
+
3087 Posterior->SetTopMargin(TopMargin);
+
3088 Posterior->SetBottomMargin(BottomMargin);
+
3089 Posterior->SetLeftMargin(LeftMargin);
+
3090 Posterior->SetRightMargin(RightMargin);
+
3091}
+
+
+
+ +

◆ GetPostfit()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetPostfit (TVectorD *& Central,
TVectorD *& Errors,
TVectorD *& Central_Gauss,
TVectorD *& Errors_Gauss,
TVectorD *& Peaks 
)
+
+ +

Get the post-fit results (arithmetic and Gaussian)

+ +

Definition at line 195 of file MCMCProcessor.cpp.

+
195 {
+
196// ***************
+
197 // Make the post fit
+
198 MakePostfit();
+
199
+
200 // We now have the private members
+ + + + + +
206}
+
+
+
+ +

◆ GetPostfit_Ind()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetPostfit_Ind (TVectorD *& Central,
TVectorD *& Errors,
TVectorD *& Peaks,
ParameterEnum kParam 
)
+
+ +

Or the individual post-fits.

+ +

Definition at line 210 of file MCMCProcessor.cpp.

+
210 {
+
211// ***************
+
212 // Make the post fit
+
213 MakePostfit();
+
214
+
215 // Loop over the loaded param types
+
216 const int ParamTypeSize = ParamType.size();
+
217 int ParamNumber = 0;
+
218 for (int i = 0; i < ParamTypeSize; ++i) {
+
219 if (ParamType[i] != kParam) continue;
+
220 (*PDF_Central)(ParamNumber) = (*Means)(i);
+
221 (*PDF_Errors)(ParamNumber) = (*Errors)(i);
+
222 (*Peak_Values)(ParamNumber) = (*Means_HPD)(i);
+
223 ++ParamNumber;
+
224 }
+
225}
+
+
+
+ +

◆ GetSavageDickey()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::GetSavageDickey (std::vector< std::string > ParName,
std::vector< doubleEvaluationPoint,
std::vector< std::vector< double > > Bounds 
)
+
+ +

Definition at line 3154 of file MCMCProcessor.cpp.

+
3154 {
+
3155// **************************
+
3156
+
3157 if((ParNames.size() != EvaluationPoint.size()) || (Bounds.size() != EvaluationPoint.size()))
+
3158 {
+
3159 MACH3LOG_ERROR("Size doesn't match");
+
3160 throw;
+
3161 }
+
3162
+
3163 if(hpost[0] == nullptr) MakePostfit();
+
3164
+
3165 MACH3LOG_INFO("Calculating Savage Dickey");
+
3166 TDirectory *SavageDickeyDir = OutputFile->mkdir("SavageDickey");
+
3167 SavageDickeyDir->cd();
+
3168
+
3169 for(unsigned int k = 0; k < ParNames.size(); ++k)
+
3170 {
+
3171 //KS: First we need to find parameter number based on name
+
3172 int ParamNo = GetParamIndexFromName(ParNames[k]);
+
3173 bool skip = false;
+
3174 if(ParamNo == __UNDEF__)
+
3175 {
+
3176 MACH3LOG_WARN("Couldn't find param {}. Will not calculate SavageDickey", ParNames[k]);
+
3177 skip = true;
+
3178 }
+
3179 if(skip) continue;
+
3180
+
3181 TString Title = "";
+
3182 double Prior = 1.0;
+
3183 double PriorError = 1.0;
+
3184 bool FlatPrior = false;
+ +
3186
+
3187 ParameterEnum ParType = ParamType[ParamNo];
+
3188 int ParamTemp = ParamNo - ParamTypeStartPos[ParType];
+ +
3190
+
3191 TH1D* PosteriorHist = (TH1D*) hpost[ParamNo]->Clone(Title);
+
3192 RemoveFitter(PosteriorHist, "Gauss");
+
3193
+
3194 TH1D* PriorHist = nullptr;
+
3195 //KS: If flat prior we need to have well defined bounds otherwise Prior distriution will not make sense
+
3196 if(FlatPrior)
+
3197 {
+
3198 int NBins = PosteriorHist->GetNbinsX();
+
3199 if(Bounds[k][0] > Bounds[k][1])
+
3200 {
+
3201 MACH3LOG_ERROR("Lower bound is higher than upper bound");
+
3202 throw;
+
3203 }
+
3204 PriorHist = new TH1D("PriorHist", Title, NBins, Bounds[k][0], Bounds[k][1]);
+
3205
+
3206 double FlatProb = ( Bounds[k][1] - Bounds[k][0]) / NBins;
+
3207 for (int g = 0; g < NBins + 1; ++g)
+
3208 {
+
3209 PriorHist->SetBinContent(g+1, FlatProb);
+
3210 }
+
3211 }
+
3212 else //KS: Otherwise throw from Gaussian
+
3213 {
+
3214 PriorHist = (TH1D*) PosteriorHist->Clone("Prior");
+
3215 PriorHist->Reset("");
+
3216 PriorHist->Fill(0.0, 0.0);
+
3217
+
3218 TRandom3* rand = new TRandom3(0);
+
3219 //KS: Throw nice gaussian, just need big number to have smooth distribution
+
3220 for(int g = 0; g < 1000000; ++g)
+
3221 {
+
3222 PriorHist->Fill(rand->Gaus(Prior, PriorError));
+
3223 }
+
3224 delete rand;
+
3225 }
+
3226 // Area normalise the distributions
+
3227 PriorHist->Scale(1./PriorHist->Integral(), "width");
+
3228 PosteriorHist->Scale(1./PosteriorHist->Integral(), "width");
+
3229
+
3230 PriorHist->SetLineColor(kRed);
+
3231 PriorHist->SetMarkerColor(kRed);
+
3232 PriorHist->SetFillColorAlpha(kRed, 0.35);
+
3233 PriorHist->SetFillStyle(1001);
+
3234 PriorHist->GetXaxis()->SetTitle(Title);
+
3235 PriorHist->GetYaxis()->SetTitle("Posterior Probability");
+
3236 PriorHist->SetMaximum(PosteriorHist->GetMaximum()*1.5);
+
3237 PriorHist->GetYaxis()->SetLabelOffset(999);
+
3238 PriorHist->GetYaxis()->SetLabelSize(0);
+
3239 PriorHist->SetLineWidth(2);
+
3240 PriorHist->SetLineStyle(kSolid);
+
3241
+
3242 PosteriorHist->SetLineColor(kBlue);
+
3243 PosteriorHist->SetMarkerColor(kBlue);
+
3244 PosteriorHist->SetFillColorAlpha(kBlue, 0.35);
+
3245 PosteriorHist->SetFillStyle(1001);
+
3246
+
3247 PriorHist->Draw("hist");
+
3248 PosteriorHist->Draw("hist same");
+
3249
+
3250 double ProbPrior = PriorHist->GetBinContent(PriorHist->FindBin(EvaluationPoint[k]));
+
3251 //KS: In case we go so far away that prior is 0, set this to small value to avoid dividing by 0
+
3252 if(ProbPrior < 0) ProbPrior = 0.00001;
+
3253 double ProbPosterior = PosteriorHist->GetBinContent(PosteriorHist->FindBin(EvaluationPoint[k]));
+ +
3255
+ +
3257 //Get Best point
+
3258 TGraph *PostPoint = new TGraph(1);
+
3259 PostPoint->SetPoint(0, EvaluationPoint[k], ProbPosterior);
+
3260 PostPoint->SetMarkerStyle(20);
+
3261 PostPoint->SetMarkerSize(1);
+
3262 PostPoint->Draw("P same");
+
3263
+
3264 TGraph *PriorPoint = new TGraph(1);
+
3265 PriorPoint->SetPoint(0, EvaluationPoint[k], ProbPrior);
+
3266 PriorPoint->SetMarkerStyle(20);
+
3267 PriorPoint->SetMarkerSize(1);
+
3268 PriorPoint->Draw("P same");
+
3269
+
3270 TLegend *legend = new TLegend(0.12, 0.6, 0.6, 0.97);
+
3271 legend->SetTextSize(0.04);
+
3272 legend->AddEntry(PriorHist, "Prior", "l");
+
3273 legend->AddEntry(PosteriorHist, "Posterior", "l");
+
3274 legend->AddEntry(PostPoint, Form("SavageDickey = %.2f, (%s)", SavageDickey, DunneKabothScale.c_str()),"");
+
3275 legend->SetLineColor(0);
+
3276 legend->SetLineStyle(0);
+
3277 legend->SetFillColor(0);
+
3278 legend->SetFillStyle(0);
+
3279 legend->SetBorderSize(0);
+
3280 legend->Draw("same");
+
3281
+
3282 Posterior->Print(CanvasName);
+
3283 Posterior->Write(Title);
+
3284
+
3285 delete PosteriorHist;
+
3286 delete PriorHist;
+
3287 delete PostPoint;
+
3288 delete PriorPoint;
+
3289 delete legend;
+
3290 } //End loop over parameters
+
3291
+
3292 SavageDickeyDir->Close();
+
3293 delete SavageDickeyDir;
+
3294
+
3295 OutputFile->cd();
+
3296}
+
void RemoveFitter(TH1D *hist, std::string name)
Definition Structs.cpp:356
+
+
+
+ +

◆ GetSigmaValue()

+ +
+
+ + + + + +
+ + + + + + + + +
double MCMCProcessor::GetSigmaValue (int sigma)
+
+inlineprivate
+
+ +

Definition at line 2120 of file MCMCProcessor.cpp.

+
2120 {
+
2121// *********************
+
2122 double width = 0;
+
2123 switch (std::abs(sigma))
+
2124 {
+
2125 case 1:
+
2126 width = 0.682689492137;
+
2127 break;
+
2128 case 2:
+
2129 width = 0.954499736104;
+
2130 break;
+
2131 case 3:
+
2132 width = 0.997300203937;
+
2133 break;
+
2134 case 4:
+
2135 width = 0.999936657516;
+
2136 break;
+
2137 case 5:
+
2138 width = 0.999999426697;
+
2139 break;
+
2140 case 6:
+
2141 width = 0.999999998027;
+
2142 break;
+
2143 default:
+
2144 std::cerr<<sigma<<" is unsuported value of sigma"<<std::endl;
+
2145 throw;
+
2146 break;
+
2147 }
+
2148 return width;
+
2149}
+
+
+
+ +

◆ GetViolin()

+ +
+
+ + + + + +
+ + + + + + + +
TH2D * MCMCProcessor::GetViolin ()
+
+inline
+
+ +

Definition at line 117 of file MCMCProcessor.h.

+
117{ return hviolin; };
+
+
+
+ +

◆ GetViolinPrior()

+ +
+
+ + + + + +
+ + + + + + + +
TH2D * MCMCProcessor::GetViolinPrior ()
+
+inline
+
+ +

Definition at line 118 of file MCMCProcessor.h.

+
118{ return hviolin_prior; };
+
+
+
+ +

◆ GetXSecCov()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< std::string > const & MCMCProcessor::GetXSecCov () const
+
+inline
+
+ +

Definition at line 121 of file MCMCProcessor.h.

+
121{ return CovPos[kXSecPar]; };
+
+
+
+ +

◆ GewekeDiagnostic()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::GewekeDiagnostic ()
+
+inlineprivate
+
+ +

Definition at line 4269 of file MCMCProcessor.cpp.

+
4269 {
+
4270// **************************
+
4271
+
4272 std::cout << "Making Geweke Diagnostic "<< std::endl;
+
4273
+
4274 //KS: Up refers to upper limit we check, it stays constnt, in literature it is moslty 50% thus using 0.5 for threshold
+
4275 double* MeanUp = new double[nDraw]();
+
4276 double* SpectralVarianceUp = new double[nDraw]();
+
4277 int* DenomCounterUp = new int[nDraw]();
+
4278 const double Threshold = 0.5 * nSteps;
+
4279
+
4280 //KS: Select values betwen which you want to scan, for example 0 means 0% burn in and 1 100% burn in.
+
4281 const double LowerThreshold = 0;
+
4282 const double UpperThreshold = 1.0;
+
4283 // Tells how many intervals between thresholds we want to check
+
4284 const int NChecks = 100;
+
4285 const double Division = (UpperThreshold - LowerThreshold)/NChecks;
+
4286
+
4287 TH1D** GewekePlots = new TH1D*[nDraw];
+
4288 for (int j = 0; j < nDraw; ++j)
+
4289 {
+
4290 MeanUp[j] = 0;
+
4291 SpectralVarianceUp[j] = 0;
+
4292 DenomCounterUp[j] = 0;
+
4293
+
4294 TString Title = "";
+
4295 double Prior = 1.0;
+
4296 double PriorError = 1.0;
+ +
4298 std::string HistName = Form("%s_%s_Geweke", Title.Data(), BranchNames[j].Data());
+
4299 GewekePlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), NChecks, 0.0, 100*UpperThreshold);
+
4300 GewekePlots[j]->GetXaxis()->SetTitle("Burn-In (%)");
+
4301 GewekePlots[j]->GetYaxis()->SetTitle("Geweke T score");
+
4302 }
+
4303
+
4304//KS: Start parallel region
+
4305#ifdef MULTITHREAD
+
4306#pragma omp parallel
+
4307{
+
4308#endif
+
4309 //KS: First we calcualte mean and spectral variance for the upper limit, this doesn't change and in literature is most often 50%
+
4310 #ifdef MULTITHREAD
+
4311 #pragma omp for
+
4312 #endif
+
4313 for (int j = 0; j < nDraw; ++j)
+
4314 {
+
4315 for(int i = 0; i < nEntries; ++i)
+
4316 {
+
4317 if(StepNumber[i] > Threshold)
+
4318 {
+
4319 MeanUp[j] += ParStep[i][j];
+
4320 DenomCounterUp[j]++;
+
4321 }
+
4322 }
+ +
4324 }
+
4325
+
4326 //KS: now Spectral variance which in this case is sample variance
+
4327 #ifdef MULTITHREAD
+
4328 #pragma omp for collapse(2)
+
4329 #endif
+
4330 for (int j = 0; j < nDraw; ++j)
+
4331 {
+
4332 for(int i = 0; i < nEntries; ++i)
+
4333 {
+
4334 if(StepNumber[i] > Threshold)
+
4335 {
+
4336 SpectralVarianceUp[j] += (ParStep[i][j] - MeanUp[j])*(ParStep[i][j] - MeanUp[j]);
+
4337 }
+
4338 }
+
4339 }
+
4340
+
4341 //Loop over how many intervals we calucate
+
4342 #ifdef MULTITHREAD
+
4343 #pragma omp for
+
4344 #endif
+
4345 for (int k = 1; k < NChecks+1; ++k)
+
4346 {
+
4347 //KS each thread has it't own
+
4348 double* MeanDown = new double[nDraw]();
+
4349 double* SpectralVarianceDown = new double[nDraw]();
+
4350 int* DenomCounterDown = new int[nDraw]();
+
4351
+
4352 //set to 0
+
4353 for (int j = 0; j < nDraw; ++j)
+
4354 {
+
4355 MeanDown[j] = 0;
+ +
4357 DenomCounterDown[j] = 0;
+
4358 }
+
4359
+
4360 const int ThresholsCheck = Division*k*nSteps;
+
4361 //KS: First mean
+
4362 for (int j = 0; j < nDraw; ++j)
+
4363 {
+
4364 for(int i = 0; i < nEntries; ++i)
+
4365 {
+ +
4367 {
+
4368 MeanDown[j] += ParStep[i][j];
+ +
4370 }
+
4371 }
+ +
4373 }
+
4374
+
4375 //Now spectral variance
+
4376 for (int j = 0; j < nDraw; ++j)
+
4377 {
+
4378 for(int i = 0; i < nEntries; ++i)
+
4379 {
+ +
4381 {
+ +
4383 }
+
4384 }
+
4385 }
+
4386 //Lasly calc T score and fill histogram entry
+
4387 for (int j = 0; j < nDraw; ++j)
+
4388 {
+ +
4390
+
4391 GewekePlots[j]->SetBinContent(k, T_score);
+
4392 }
+
4393 //KS: delete for each thread
+
4394 delete[] MeanDown;
+
4395 delete[] SpectralVarianceDown;
+
4396 delete[] DenomCounterDown;
+
4397 } //end loop over intervals
+
4398#ifdef MULTITHREAD
+
4399} //End parallel region
+
4400#endif
+
4401
+
4402 //Finally save it to TFile
+
4403 OutputFile->cd();
+
4404 TDirectory *GewekeDir = OutputFile->mkdir("Geweke");
+
4405 for (int j = 0; j < nDraw; ++j)
+
4406 {
+
4407 GewekeDir->cd();
+
4408 GewekePlots[j]->Write();
+
4409 delete GewekePlots[j];
+
4410 }
+
4411 delete[] GewekePlots;
+
4412
+
4413 //Free memory
+
4414 delete[] MeanUp;
+
4415 delete[] DenomCounterUp;
+
4416 delete[] SpectralVarianceUp;
+
4417
+
4418 for (int i = 0; i < nEntries; ++i) {
+
4419 delete[] ParStep[i];
+
4420 }
+
4421 delete[] ParStep;
+
4422
+
4423 GewekeDir->Close();
+
4424 delete GewekeDir;
+
4425
+
4426 OutputFile->cd();
+
4427}
+
+
+
+ +

◆ Initialise()

+ +
+
+ + + + + + + +
void MCMCProcessor::Initialise ()
+
+ +

Scan chain, what parameters we have and load information from covariance matrices.

+ +

Definition at line 185 of file MCMCProcessor.cpp.

+
185 {
+
186// ***************
+
187 // Scan the ROOT file for useful branches
+
188 ScanInput();
+
189
+
190 // Setup the output
+
191 SetupOutput();
+
192}
+ + +
+
+
+ +

◆ MakeCovariance()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakeCovariance ()
+
+ +

Calculate covariance by making 2D projection of each combination of parameters.

+ +

Definition at line 1009 of file MCMCProcessor.cpp.

+
1009 {
+
1010// *********************
+
1011
+
1012 if (OutputFile == nullptr) MakeOutputFile();
+
1013
+
1014 bool HaveMadeDiagonal = false;
+
1015 MACH3LOG_INFO("Making post-fit covariances...");
+
1016 // Check that the diagonal entries have been filled
+
1017 // i.e. MakePostfit() has been called
+
1018 for (int i = 0; i < nDraw; ++i) {
+
1019 if ((*Covariance)(i,i) == __UNDEF__) {
+
1020 HaveMadeDiagonal = false;
+
1021 MACH3LOG_INFO("Have not run diagonal elements in covariance, will do so now by calling MakePostfit()");
+
1022 break;
+
1023 } else {
+
1024 HaveMadeDiagonal = true;
+
1025 }
+
1026 }
+
1027
+
1028 if (HaveMadeDiagonal == false) {
+
1029 MakePostfit();
+
1030 }
+
1031
+
1032 gStyle->SetPalette(55);
+
1033
+
1034 int covBinning = nDraw;
+
1035 // Now we are sure we have the diagonal elements, let's make the off-diagonals
+
1036 for (int i = 0; i < covBinning; ++i)
+
1037 {
+
1038 if (i % (covBinning/5) == 0)
+
1039 std::cout << " " << i << "/" << covBinning << " (" << int((double(i)/double(covBinning)*100.0))+1 << "%)" << std::endl;
+
1040
+
1041 TString Title_i = "";
+
1042 double Prior_i, PriorError;
+
1043
+ +
1045
+
1046 const double min_i = Chain->GetMinimum(BranchNames[i]);
+
1047 const double max_i = Chain->GetMaximum(BranchNames[i]);
+
1048
+
1049 // Loop over the other parameters to get the correlations
+
1050 for (int j = 0; j <= i; ++j) {
+
1051
+
1052 // Skip the diagonal elements which we've already done above
+
1053 if (j == i) continue;
+
1054
+
1055 // If this parameter isn't varied
+
1056 if (IamVaried[j] == false) {
+
1057 (*Covariance)(i,j) = 0.0;
+
1058 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1059 (*Correlation)(i,j) = 0.0;
+
1060 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1061 continue;
+
1062 }
+
1063
+
1064 TString Title_j = "";
+
1065 double Prior_j, PriorError_j;
+ +
1067
+
1068 OutputFile->cd();
+
1069
+
1070 // The draw which we want to perform
+ +
1072
+
1073 const double max_j = Chain->GetMaximum(BranchNames[j]);
+
1074 const double min_j = Chain->GetMinimum(BranchNames[j]);
+
1075
+
1076 // TH2F to hold the Correlation
+ +
1078
+
1079 hpost_2D->SetMinimum(0);
+
1080 hpost_2D->GetXaxis()->SetTitle(Title_i);
+
1081 hpost_2D->GetYaxis()->SetTitle(Title_j);
+
1082 hpost_2D->GetZaxis()->SetTitle("Steps");
+
1083
+
1084 // The draw command we want, i.e. draw param j vs param i
+
1085 Chain->Project(DrawMe, DrawMe, StepCut.c_str());
+
1086
+
1087 if(ApplySmoothing) hpost_2D->Smooth();
+
1088 // Get the Covariance for these two parameters
+
1089 (*Covariance)(i,j) = hpost_2D->GetCovariance();
+
1090 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1091
+
1092 (*Correlation)(i,j) = hpost_2D->GetCorrelationFactor();
+
1093 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1094
+
1095 if(printToPDF)
+
1096 {
+
1097 //KS: Skip Flux Params
+
1098 if(ParamType[i] == kXSecPar && ParamType[j] == kXSecPar)
+
1099 {
+
1100 if(IsXsec[j] && IsXsec[i] && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold)
+
1101 {
+
1102 Posterior->cd();
+
1103 hpost_2D->Draw("colz");
+
1104 Posterior->SetName(hpost_2D->GetName());
+
1105 Posterior->SetTitle(hpost_2D->GetTitle());
+
1106 Posterior->Print(CanvasName);
+
1107 }
+
1108 }
+
1109 }
+
1110 // Write it to root file
+
1111 //OutputFile->cd();
+
1112 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold ) hpost_2D->Write();
+
1113
+
1114 delete hpost_2D;
+
1115 } // End j loop
+
1116 } // End i loop
+
1117 OutputFile->cd();
+
1118 Covariance->Write("Covariance");
+
1119 Correlation->Write("Correlation");
+
1120}
+
std::vector< bool > IsXsec
+
+
+
+ +

◆ MakeCovariance_MP()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakeCovariance_MP ()
+
+ +

Definition at line 1235 of file MCMCProcessor.cpp.

+
1235 {
+
1236// *********************
+
1237
+
1238 if (OutputFile == nullptr) MakeOutputFile();
+
1239
+
1240 if(!CacheMCMC) CacheSteps();
+
1241
+
1242 int covBinning = nDraw;
+
1243
+
1244 bool HaveMadeDiagonal = false;
+
1245 // Check that the diagonal entries have been filled
+
1246 // i.e. MakePostfit() has been called
+
1247 for (int i = 0; i < covBinning; ++i) {
+
1248 if ((*Covariance)(i,i) == __UNDEF__) {
+
1249 HaveMadeDiagonal = false;
+
1250 std::cout << "Have not run diagonal elements in covariance, will do so now by calling MakePostfit()" << std::endl;
+
1251 break;
+
1252 } else {
+
1253 HaveMadeDiagonal = true;
+
1254 }
+
1255 }
+
1256
+
1257 if (HaveMadeDiagonal == false) MakePostfit();
+
1258 MACH3LOG_INFO("Calculating covaraince matrix");
+
1259 TStopwatch clock;
+
1260 clock.Start();
+
1261
+
1262 gStyle->SetPalette(55);
+
1263 // Now we are sure we have the diagonal elements, let's make the off-diagonals
+
1264 #ifdef MULTITHREAD
+
1265 #pragma omp parallel for
+
1266 #endif
+
1267 for (int i = 0; i < covBinning; ++i)
+
1268 {
+
1269 for (int j = 0; j <= i; ++j)
+
1270 {
+
1271 // Skip the diagonal elements which we've already done above
+
1272 if (j == i) continue;
+
1273
+
1274 // If this parameter isn't varied
+
1275 if (IamVaried[j] == false) {
+
1276 (*Covariance)(i,j) = 0.0;
+
1277 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1278 (*Correlation)(i,j) = 0.0;
+
1279 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1280 continue;
+
1281 }
+
1282 hpost2D[i][j]->SetMinimum(0);
+
1283
+
1284 for (int k = 0; k < nEntries; ++k)
+
1285 {
+
1286 //KS: Burn in cut
+
1287 if(StepNumber[k] < BurnInCut) continue;
+
1288
+
1289 //KS: Fill histogram with cached steps
+
1290 hpost2D[i][j]->Fill(ParStep[i][k], ParStep[j][k]);
+
1291 }
+
1292 if(ApplySmoothing) hpost2D[i][j]->Smooth();
+
1293
+
1294 // Get the Covariance for these two parameters
+
1295 (*Covariance)(i,j) = hpost2D[i][j]->GetCovariance();
+
1296 (*Covariance)(j,i) = (*Covariance)(i,j);
+
1297
+
1298 //KS: Since we already have covariance consider calcaulating correlation using it, right now we effectively calcaualte covariance twice
+
1299 //https://root.cern.ch/doc/master/TH2_8cxx_source.html#l01099
+
1300 (*Correlation)(i,j) = hpost2D[i][j]->GetCorrelationFactor();
+
1301 (*Correlation)(j,i) = (*Correlation)(i,j);
+
1302 }// End j loop
+
1303 }// End i loop
+
1304
+
1305 clock.Stop();
+
1306 std::cout << "Making Covariance took " << clock.RealTime() << "s to finish for " << nEntries << " steps" << std::endl;
+
1307
+
1308 OutputFile->cd();
+
1309 if(printToPDF)
+
1310 {
+
1311 Posterior->cd();
+
1312 for (int i = 0; i < covBinning; ++i)
+
1313 {
+
1314 for (int j = 0; j <= i; ++j)
+
1315 {
+
1316 // Skip the diagonal elements which we've already done above
+
1317 if (j == i) continue;
+
1318 if (IamVaried[j] == false) continue;
+
1319
+
1320 if(ParamType[i] == kXSecPar && ParamType[j] == kXSecPar)
+
1321 {
+
1322 //KS: Skip Flux Params
+
1323 if(IsXsec[j] && IsXsec[i] && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold)
+
1324 {
+
1325 hpost2D[i][j]->Draw("colz");
+
1326 Posterior->SetName(hpost2D[i][j]->GetName());
+
1327 Posterior->SetTitle(hpost2D[i][j]->GetTitle());
+
1328 Posterior->Print(CanvasName);
+
1329 }
+
1330 }
+
1331 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold) hpost2D[i][j]->Write();
+
1332 }// End j loop
+
1333 }// End i loop
+
1334 } //end if pdf
+
1335 Covariance->Write("Covariance");
+
1336 Correlation->Write("Correlation");
+
1337}
+ +
void GetCovariance(TMatrixDSym *&Cov, TMatrixDSym *&Corr)
Get the post-fit covariances and correlations.
+
void CacheSteps()
KS:By caching each step we use multithreading.
+
+
+
+ +

◆ MakeCredibleIntervals()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakeCredibleIntervals ()
+
+ +

Make and Draw Credible intervals.

+

Scale the histograms so it shows the posterior probability

+ +

Definition at line 716 of file MCMCProcessor.cpp.

+
716 {
+
717// *********************
+
718
+
719 if(hpost[0] == nullptr) MakePostfit();
+
720
+
721 MACH3LOG_INFO("Making Credible Intervals ");
+
722
+
723 const double LeftMargin = Posterior->GetLeftMargin();
+
724 Posterior->SetLeftMargin(0.15);
+
725
+
726 //Load values set via config or executable
+
727 std::vector<double> CredibleIntervals = Credible_Intervals;
+ +
729 //Nothing was passed via config so use default values which are fancy ;)
+
730 if(CredibleIntervals.size() == 0 && CredibleIntervalsColours.size() == 0)
+
731 {
+
732 CredibleIntervals.insert(CredibleIntervals.end(), { 0.99, 0.90, 0.68 });
+
733 CredibleIntervalsColours.insert(CredibleIntervalsColours.end(), { kCyan+4, kCyan-2, kCyan-10 });
+
734 }
+ +
736 {
+
737 MACH3LOG_ERROR("Size of CredibleIntervals is not equat to size of CredibleIntervalsColours");
+
738 throw;
+
739 }
+
740 const int nCredible = CredibleIntervals.size();
+
741 TH1D** hpost_copy = new TH1D*[nDraw];
+
742 TH1D*** hpost_cl = new TH1D**[nDraw];
+
743
+
744 //KS: Copy all histograms to be thread safe
+
745 for (int i = 0; i < nDraw; ++i)
+
746 {
+
747 hpost_copy[i] = (TH1D*) hpost[i]->Clone(Form("hpost_copy_%i", i));
+
748 hpost_cl[i] = new TH1D*[nCredible];
+
749
+
750 for (int j = 0; j < nCredible; ++j)
+
751 {
+
752 hpost_cl[i][j] = (TH1D*) hpost[i]->Clone( Form("hpost_copy_%i_CL_%f", i, CredibleIntervals[j]));
+
753
+
754 //KS: Reset to get rid to TF1 otherwise we run into segfault :(
+
755 hpost_cl[i][j]->Reset("");
+
756 hpost_cl[i][j]->Fill(0.0, 0.0);
+
757 }
+
758 }
+
759
+
760 #ifdef MULTITHREAD
+
761 #pragma omp parallel for
+
762 #endif
+
763 for (int i = 0; i < nDraw; ++i)
+
764 {
+
766 hpost_copy[i]->Scale(1. / hpost_copy[i]->Integral());
+
767 for (int j = 0; j < nCredible; ++j)
+
768 {
+
769 // Scale the histograms before gettindg credible intervals
+
770 hpost_cl[i][j]->Scale(1. / hpost_cl[i][j]->Integral());
+
771
+
772 //KS: We have sliglhy different approach depdening if you passed percentage or sigmas
+ +
774 {
+
775 //KS: Convert sigmas into percentage
+
776 const double CredInter = GetSigmaValue((int)std::round(CredibleIntervals[j]));
+ +
778 }
+
779 else
+
780 {
+ +
782 }
+
783
+
784 hpost_cl[i][j]->SetFillColor(CredibleIntervalsColours[j]);
+
785 hpost_cl[i][j]->SetLineWidth(1);
+
786 }
+
787 hpost_copy[i]->GetYaxis()->SetTitleOffset(1.8);
+
788 hpost_copy[i]->SetLineWidth(1);
+
789 hpost_copy[i]->SetMaximum(hpost_copy[i]->GetMaximum()*1.2);
+
790 hpost_copy[i]->SetLineWidth(2);
+
791 hpost_copy[i]->SetLineColor(kBlack);
+
792 hpost_copy[i]->GetYaxis()->SetTitle("Posterior Probability");
+
793 }
+
794
+
795 OutputFile->cd();
+
796 TDirectory *CredibleDir = OutputFile->mkdir("Credible");
+
797
+
798 for (int i = 0; i < nDraw; ++i)
+
799 {
+
800 if(!IamVaried[i]) continue;
+
801
+
802 // Now make the TLine for the Asimov
+
803 TString Title = "";
+
804 double Prior = 1.0;
+
805 double PriorError = 1.0;
+
806
+ +
808
+ +
810 Asimov->SetLineColor(kRed-3);
+
811 Asimov->SetLineWidth(2);
+
812 Asimov->SetLineStyle(kDashed);
+
813
+
814 TLegend* legend = new TLegend(0.20, 0.7, 0.4, 0.92);
+
815 legend->SetTextSize(0.03);
+
816 legend->SetFillColor(0);
+
817 legend->SetFillStyle(0);
+
818 legend->SetLineColor(0);
+
819 legend->SetLineStyle(0);
+
820 legend->SetBorderSize(0);
+
821 hpost_copy[i]->Draw("HIST");
+
822
+
823 for (int j = 0; j < nCredible; ++j)
+
824 hpost_cl[i][j]->Draw("HIST SAME");
+
825 for (int j = nCredible-1; j >= 0; --j)
+
826 {
+ +
828 legend->AddEntry(hpost_cl[i][j], Form("%.0f#sigma Credible Interval", CredibleIntervals[j]), "f");
+
829 else
+
830 legend->AddEntry(hpost_cl[i][j], Form("%.0f%% Credible Interval", CredibleIntervals[j]*100), "f");
+
831 }
+
832 legend->AddEntry(Asimov, Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError), "l");
+
833 legend->Draw("SAME");
+
834 Asimov->Draw("SAME");
+
835
+
836 // Write to file
+
837 Posterior->SetName(hpost[i]->GetName());
+
838 Posterior->SetTitle(hpost[i]->GetTitle());
+
839
+
840 if(printToPDF) Posterior->Print(CanvasName);
+
841 // cd into directory in root file
+
842 CredibleDir->cd();
+
843 Posterior->Write();
+
844
+
845 delete legend;
+
846 delete Asimov;
+
847 }
+
848
+
849 //KS: Remove histograms
+
850 for (int i = 0; i < nDraw; ++i)
+
851 {
+
852 delete hpost_copy[i];
+
853 for (int j = 0; j < nCredible; ++j)
+
854 {
+
855 delete hpost_cl[i][j];
+
856 }
+
857 delete[] hpost_cl[i];
+
858 }
+
859 delete[] hpost_copy;
+
860 delete[] hpost_cl;
+
861
+
862 CredibleDir->Close();
+
863 delete CredibleDir;
+
864
+
865 OutputFile->cd();
+
866
+
867 //Set back to normal
+
868 Posterior->SetLeftMargin(LeftMargin);
+
869}
+
void GetCredibleInterval(TH1D *const hpost, TH1D *hpost_copy, const double coverage=0.6827)
+
double GetSigmaValue(int sigma)
+
std::vector< double > Credible_Intervals
+
std::vector< Color_t > Credible_IntervalsColours
+
+
+
+ +

◆ MakeCredibleRegions()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakeCredibleRegions ()
+
+ +

Make and Draw Credible Regions.

+ +

Definition at line 1602 of file MCMCProcessor.cpp.

+
1602 {
+
1603// *********************
+
1604
+
1605 if(hpost2D == nullptr) MakeCovariance_MP();
+
1606 std::cout << "Making Credible Regions "<< std::endl;
+
1607
+
1608 //Load values set via config or executable
+
1609 std::vector<double> CredibleRegions = Credible_Regions;
+
1610 std::vector<Style_t> CredibleRegionStyle = Credible_RegionStyle;
+
1611 std::vector<Color_t> CredibleRegionColor = Credible_RegionColor;
+
1612
+
1613 //Nothing was passed via config so use default values which are still fancy
+
1614 if(CredibleRegions.size() == 0 && CredibleRegionStyle.size() == 0 && CredibleRegionColor.size() == 0)
+
1615 {
+
1616 CredibleRegions.insert(CredibleRegions.end(), { 0.99, 0.90, 0.68 });
+
1617 CredibleRegionStyle.insert(CredibleRegionStyle.end(), { kDashed, kSolid, kDotted });
+
1618 CredibleRegionColor.insert(CredibleRegionColor.end(), { kGreen-3, kGreen-10, kGreen });
+
1619 }
+
1620 if( (CredibleRegions.size() != CredibleRegionStyle.size()) || (CredibleRegionStyle.size() != CredibleRegionColor.size()) )
+
1621 {
+
1622 std::cerr<<" size of CredibleRegions is not equat to size of CredibleRegionStyle"<<std::endl;
+
1623 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1624 throw;
+
1625 }
+
1626 const int nCredible = CredibleRegions.size();
+
1627 TH2D*** hpost_2D_copy = new TH2D**[nDraw];
+
1628 TH2D**** hpost_2D_cl = new TH2D***[nDraw];
+
1629
+
1630 //KS: Copy all histograms to be thread safe
+
1631 for (int i = 0; i < nDraw; ++i)
+
1632 {
+
1633 hpost_2D_copy[i] = new TH2D*[nDraw];
+
1634 hpost_2D_cl[i] = new TH2D**[nDraw];
+
1635 for (int j = 0; j <= i; ++j)
+
1636 {
+
1637 hpost_2D_copy[i][j] = (TH2D*) hpost2D[i][j]->Clone( Form("hpost_copy_%i_%i", i, j));
+
1638
+
1639 hpost_2D_cl[i][j] = new TH2D*[nCredible];
+
1640 for (int k = 0; k < nCredible; ++k)
+
1641 {
+
1642 hpost_2D_cl[i][j][k] = (TH2D*)hpost2D[i][j]->Clone( Form("hpost_copy_%i_%i_CL_%f", i, j, CredibleRegions[k]));;
+
1643 }
+
1644 }
+
1645 }
+
1646
+
1647 #ifdef MULTITHREAD
+
1648 #pragma omp parallel for
+
1649 #endif
+
1650 //Calcualte creadible histogram
+
1651 for (int i = 0; i < nDraw; ++i)
+
1652 {
+
1653 for (int j = 0; j <= i; ++j)
+
1654 {
+
1655 for (int k = 0; k < nCredible; ++k)
+
1656 {
+ +
1658 {
+
1659 //KS: Convert sigmas into percentage
+
1660 double CredReg = GetSigmaValue((int)std::round(CredibleRegions[k]));
+ +
1662 }
+
1663 else
+
1664 {
+ +
1666 }
+
1667 hpost_2D_cl[i][j][k]->SetLineColor(CredibleRegionColor[k]);
+
1668 hpost_2D_cl[i][j][k]->SetLineWidth(2);
+
1669 hpost_2D_cl[i][j][k]->SetLineStyle(CredibleRegionStyle[k]);
+
1670 }
+
1671 }
+
1672 }
+
1673
+
1674 gStyle->SetPalette(51);
+
1675 for (int i = 0; i < nDraw; ++i)
+
1676 {
+
1677 for (int j = 0; j <= i; ++j)
+
1678 {
+
1679 // Skip the diagonal elements which we've already done above
+
1680 if (j == i) continue;
+
1681 if (IamVaried[j] == false) continue;
+
1682
+
1683 TLegend* legend = new TLegend(0.20, 0.7, 0.4, 0.92);
+
1684 legend->SetTextColor(kRed);
+
1685 legend->SetTextSize(0.03);
+
1686 legend->SetFillColor(0);
+
1687 legend->SetFillStyle(0);
+
1688 legend->SetLineColor(0);
+
1689 legend->SetLineStyle(0);
+
1690 legend->SetBorderSize(0);
+
1691
+
1692 //Get Best point
+
1693 TGraph *bestfitM = new TGraph(1);
+
1694 const int MaxBin = hpost_2D_copy[i][j]->GetMaximumBin();
+
1695 int Mbx, Mby, Mbz;
+
1696 hpost_2D_copy[i][j]->GetBinXYZ(MaxBin, Mbx, Mby, Mbz);
+
1697 const double Mx = hpost_2D_copy[i][j]->GetXaxis()->GetBinCenter(Mbx);
+
1698 const double My = hpost_2D_copy[i][j]->GetYaxis()->GetBinCenter(Mby);
+
1699
+
1700 bestfitM->SetPoint(0, Mx, My);
+
1701 bestfitM->SetMarkerStyle(22);
+
1702 bestfitM->SetMarkerSize(1);
+
1703 bestfitM->SetMarkerColor(kMagenta);
+
1704 legend->AddEntry(bestfitM,"Best Fit","p");
+
1705
+
1706 //Plot default 2D posterior
+
1707 hpost_2D_copy[i][j]->Draw("COLZ");
+
1708
+
1709 //Now credible regions
+
1710 for (int k = 0; k < nCredible; ++k)
+
1711 hpost_2D_cl[i][j][k]->Draw("CONT3 SAME");
+
1712 for (int k = nCredible-1; k >= 0; --k)
+
1713 {
+ +
1715 legend->AddEntry(hpost_2D_cl[i][j][k], Form("%.0f#sigma Credible Interval", CredibleRegions[k]), "l");
+
1716 else
+
1717 legend->AddEntry(hpost_2D_cl[i][j][k], Form("%.0f%% Credible Region", CredibleRegions[k]*100), "l");
+
1718 }
+
1719
+
1720 legend->Draw("SAME");
+
1721 bestfitM->Draw("SAME.P");
+
1722
+
1723 // Write to file
+
1724 Posterior->SetName(hpost2D[i][j]->GetName());
+
1725 Posterior->SetTitle(hpost2D[i][j]->GetTitle());
+
1726
+
1727 //KS: Print only regions with correlation greater than specified value, by defualt 0.2. This is done to avoid dumping thousands of plots
+
1728 if(printToPDF && std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold) Posterior->Print(CanvasName);
+
1729 // Write it to root file
+
1730 //OutputFile->cd();
+
1731 //if( std::fabs((*Correlation)(i,j)) > Post2DPlotThreshold ) Posterior->Write();
+
1732
+
1733 delete legend;
+
1734 delete bestfitM;
+
1735 }
+
1736 }
+
1737
+
1738 OutputFile->cd();
+
1739 //KS: Remove histograms
+
1740 for (int i = 0; i < nDraw; ++i)
+
1741 {
+
1742 for (int j = 0; j <= i; ++j)
+
1743 {
+
1744 delete hpost_2D_copy[i][j];
+
1745 for (int k = 0; k < nCredible; ++k)
+
1746 {
+
1747 delete hpost_2D_cl[i][j][k];
+
1748 }
+
1749 delete[] hpost_2D_cl[i][j];
+
1750 }
+
1751 delete[] hpost_2D_copy[i];
+
1752 delete[] hpost_2D_cl[i];
+
1753 }
+
1754 delete[] hpost_2D_copy;
+
1755 delete[] hpost_2D_cl;
+
1756}
+
std::vector< Style_t > Credible_RegionStyle
+
std::vector< double > Credible_Regions
+
void GetCredibleRegion(TH2D *hpost, const double coverage=0.6827)
+
std::vector< Color_t > Credible_RegionColor
+
+
+
+ +

◆ MakeOutputFile()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::MakeOutputFile ()
+
+inlineprivate
+
+ +

Definition at line 238 of file MCMCProcessor.cpp.

+
238 {
+
239// ***************
+
240
+
241 //KS: ROOT hates me... but we can create several instances of MCMC Processor, each with own TCanvas ROOT is mad and will delete if there is more than one canvas with the same name, so we add random number to avoid issue
+
242 TRandom3* rand = new TRandom3(0);
+
243 const int uniform = int(rand->Uniform(0, 10000));
+
244 // Open a TCanvas to write the posterior onto
+
245 Posterior = new TCanvas(("Posterior" + std::to_string(uniform)).c_str(), ("Posterior" + std::to_string(uniform)).c_str(), 0, 0, 1024, 1024);
+
246
+
247 Posterior->SetGrid();
+
248 gStyle->SetOptStat(0);
+
249 gStyle->SetOptTitle(0);
+
250 Posterior->SetTickx();
+
251 Posterior->SetTicky();
+
252 Posterior->SetBottomMargin(0.1);
+
253 Posterior->SetTopMargin(0.05);
+
254 Posterior->SetRightMargin(0.03);
+
255 Posterior->SetLeftMargin(0.15);
+
256
+
257 //To avoid TCanvas::Print> messages
+ +
259
+
260 // Output file to write to
+
261 OutputName = MCMCFile + OutputSuffix +".root";
+
262
+
263 // Output file
+
264 OutputFile = new TFile(OutputName.c_str(), "recreate");
+
265 OutputFile->cd();
+
266}
+
std::string OutputName
+
+
+
+ +

◆ MakePostfit()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakePostfit ()
+
+ +

Make 1D projection for each parameter and prepare structure.

+ +

Definition at line 271 of file MCMCProcessor.cpp.

+
271 {
+
272// ****************************
+
273
+
274 // Check if we've already made post-fit
+
275 if (MadePostfit == true) return;
+
276 MadePostfit = true;
+
277
+
278 // Check if the output file is ready
+
279 if (OutputFile == nullptr) MakeOutputFile();
+
280
+
281 MACH3LOG_INFO("MCMCProcessor is making post-fit plots...");
+
282
+
283 // Directory for posteriors
+
284 TDirectory *PostDir = OutputFile->mkdir("Post");
+
285
+
286 // We fit with this Gaussian
+
287 Gauss = new TF1("Gauss","[0]/sqrt(2.0*3.14159)/[2]*TMath::Exp(-0.5*pow(x-[1],2)/[2]/[2])",-5,5);
+
288 Gauss->SetLineWidth(2);
+
289 Gauss->SetLineColor(kOrange-5);
+
290
+
291 // nDraw is number of draws we want to do
+
292 for (int i = 0; i < nDraw; ++i)
+
293 {
+
294 if (i % (nDraw/5) == 0)
+
295 {
+ +
297 }
+
298 OutputFile->cd();
+
299 TString Title = "";
+
300 double Prior = 1.0;
+
301 double PriorError = 1.0;
+
302
+ +
304
+
305 // This holds the posterior density
+
306 const double maxi = Chain->GetMaximum(BranchNames[i]);
+
307 const double mini = Chain->GetMinimum(BranchNames[i]);
+
308 // This holds the posterior density
+ +
310 hpost[i]->SetMinimum(0);
+
311 hpost[i]->GetYaxis()->SetTitle("Steps");
+
312 hpost[i]->GetYaxis()->SetNoExponent(false);
+
313
+
314 //KS: Apply additional Cuts, like mass ordering
+
315 std::string CutPosterior1D = "";
+
316 if(Posterior1DCut != "")
+
317 {
+ +
319 }
+
320 else CutPosterior1D = StepCut;
+
321
+
322 // Project BranchNames[i] onto hpost, applying stepcut
+
323 Chain->Project(BranchNames[i], BranchNames[i], CutPosterior1D.c_str());
+
324
+
325 if(ApplySmoothing) hpost[i]->Smooth();
+
326
+
327 (*Central_Value)(i) = Prior;
+
328
+ +
330 GetGaussian(hpost[i], i);
+
331 GetHPD(hpost[i], i);
+
332
+
333 // Write the results from the projection into the TVectors and TMatrices
+
334 (*Covariance)(i,i) = (*Errors)(i)*(*Errors)(i);
+
335 (*Correlation)(i,i) = 1.0;
+
336
+
337 //KS: This need to be before SetMaximum(), this way plot is nicer as line end at the maximum
+
338 TLine *hpd = new TLine((*Means_HPD)(i), hpost[i]->GetMinimum(), (*Means_HPD)(i), hpost[i]->GetMaximum());
+
339 hpd->SetLineColor(kBlack);
+
340 hpd->SetLineWidth(2);
+
341 hpd->SetLineStyle(kSolid);
+
342
+
343 hpost[i]->SetLineWidth(2);
+
344 hpost[i]->SetLineColor(kBlue-1);
+
345 hpost[i]->SetMaximum(hpost[i]->GetMaximum()*DrawRange);
+
346 hpost[i]->SetTitle(Title);
+
347 hpost[i]->GetXaxis()->SetTitle(hpost[i]->GetTitle());
+
348
+
349 // Now make the TLine for the Asimov
+ +
351 Asimov->SetLineColor(kRed-3);
+
352 Asimov->SetLineWidth(2);
+
353 Asimov->SetLineStyle(kDashed);
+
354
+
355 TLegend *leg = new TLegend(0.12, 0.6, 0.6, 0.97);
+
356 leg->SetTextSize(0.04);
+
357 leg->AddEntry(hpost[i], Form("#splitline{PDF}{#mu = %.2f, #sigma = %.2f}", hpost[i]->GetMean(), hpost[i]->GetRMS()), "l");
+
358 leg->AddEntry(Gauss, Form("#splitline{Gauss}{#mu = %.2f, #sigma = %.2f}", Gauss->GetParameter(1), Gauss->GetParameter(2)), "l");
+
359 leg->AddEntry(hpd, Form("#splitline{HPD}{#mu = %.2f, #sigma = %.2f (+%.2f-%.2f)}", (*Means_HPD)(i), (*Errors_HPD)(i), (*Errors_HPD_Positive)(i), (*Errors_HPD_Negative)(i)), "l");
+
360 leg->AddEntry(Asimov, Form("#splitline{Prior}{x = %.2f , #sigma = %.2f}", Prior, PriorError), "l");
+
361 leg->SetLineColor(0);
+
362 leg->SetLineStyle(0);
+
363 leg->SetFillColor(0);
+
364 leg->SetFillStyle(0);
+
365
+
366 //CW: Don't plot if this is a fixed histogram (i.e. the peak is the whole integral)
+
367 if (hpost[i]->GetMaximum() == hpost[i]->Integral()*DrawRange)
+
368 {
+
369 MACH3LOG_WARN("Found fixed parameter, moving on");
+
370 IamVaried[i] = false;
+
371 //KS:Set mean and error to prior for fixed parameters, it looks much better when fixed parameter has mean on prior rather than on 0 with 0 error.
+
372 (*Means_HPD)(i) = Prior;
+
373 (*Errors_HPD)(i) = PriorError;
+
374
+
375 delete Asimov;
+
376 delete hpd;
+
377 delete leg;
+
378 continue;
+
379 }
+
380
+
381 // Store that this parameter is indeed being varied
+
382 IamVaried[i] = true;
+
383
+
384 // Write to file
+
385 Posterior->SetName(hpost[i]->GetName());
+
386 Posterior->SetTitle(hpost[i]->GetTitle());
+
387
+
388 // Draw onto the TCanvas
+
389 hpost[i]->Draw();
+
390 hpd->Draw("same");
+
391 Asimov->Draw("same");
+
392 leg->Draw("same");
+
393
+
394 if(printToPDF) Posterior->Print(CanvasName);
+
395
+
396 // cd into params directory in root file
+
397 PostDir->cd();
+
398 Posterior->Write();
+
399
+
400 delete Asimov;
+
401 delete hpd;
+
402 delete leg;
+
403 } // end the for loop over nDraw
+
404
+
405 OutputFile->cd();
+
406 TTree *SettingsBranch = new TTree("Settings", "Settings");
+ +
408 SettingsBranch->Branch("CrossSectionParameters", &CrossSectionParameters);
+ +
410 SettingsBranch->Branch("CrossSectionParametersStartingPos", &CrossSectionParametersStartingPos);
+
411 int FluxParameters = nFlux;
+
412 SettingsBranch->Branch("FluxParameters", &FluxParameters);
+
413
+ +
415 SettingsBranch->Branch("NDParameters", &NDParameters);
+ +
417 SettingsBranch->Branch("NDParametersStartingPos", &NDParametersStartingPos);
+
418
+ +
420 SettingsBranch->Branch("FDParameters", &FDParameters);
+ +
422 SettingsBranch->Branch("FDParametersStartingPos", &FDParametersStartingPos);
+
423
+ +
425 SettingsBranch->Branch("OscParameters", &OscParameters);
+ +
427 SettingsBranch->Branch("OscParametersStartingPos", &OscParametersStartingPos);
+
428
+
429 SettingsBranch->Branch("NDSamplesBins", &NDSamplesBins);
+
430 SettingsBranch->Branch("NDSamplesNames", &NDSamplesNames);
+
431
+
432 SettingsBranch->Fill();
+
433 SettingsBranch->Write();
+
434
+
435 delete SettingsBranch;
+
436
+
437 TDirectory *Names = OutputFile->mkdir("Names");
+
438 Names->cd();
+
439 for (std::vector<TString>::iterator it = BranchNames.begin(); it != BranchNames.end(); ++it) {
+
440 TObjString((*it)).Write();
+
441 }
+
442 OutputFile->cd();
+
443 Central_Value->Write("Central_Value");
+
444 Means->Write("PDF_Means");
+
445 Errors->Write("PDF_Error");
+
446 Means_Gauss->Write("Gauss_Means");
+
447 Errors_Gauss->Write("Gauss_Errors");
+
448 Means_HPD->Write("Means_HPD");
+
449 Errors_HPD->Write("Errors_HPD");
+
450 Errors_HPD_Positive->Write("Errors_HPD_Positive");
+
451 Errors_HPD_Negative->Write("Errors_HPD_Negative");
+
452
+
453 PostDir->Close();
+
454 delete PostDir;
+
455} // Have now written the postfit projections
+
int FDParameters
+
int OscParametersStartingPos
+
int CrossSectionParameters
+
int OscParameters
+
int FDParametersStartingPos
+
int NDParametersStartingPos
+
int NDParameters
+
int FluxParameters
+
void GetGaussian(TH1D *&hpost, const int i)
+
void GetHPD(TH1D *const hpost, const int i, const double coverage=0.6827)
+
void GetArithmetic(TH1D *const hpost, const int i)
+
+
+
+ +

◆ MakePrefit()

+ +
+
+ + + + + +
+ + + + + + + +
TH1D * MCMCProcessor::MakePrefit ()
+
+inlineprivate
+
+ +

Definition at line 2332 of file MCMCProcessor.cpp.

+
2332 {
+
2333// *****************************
+
2334
+
2335 if (OutputFile == nullptr) MakeOutputFile();
+
2336
+
2337 TH1D *PreFitPlot = new TH1D("Prefit", "Prefit", nDraw, 0, nDraw);
+
2338 for (int i = 0; i < PreFitPlot->GetNbinsX() + 1; ++i) {
+
2339 PreFitPlot->SetBinContent(i+1, 0);
+
2340 PreFitPlot->SetBinError(i+1, 0);
+
2341 }
+
2342
+
2343 //KS: Slightly hacky way to get relative to prior or nominal as this is convention we use,
+
2344 //Only applies for xsec, for other systematic it make no difference
+ +
2346
+
2347 // Set labels and data
+
2348 for (int i = 0; i < nDraw; ++i)
+
2349 {
+
2350 //Those keep which parameter type we run currently and relative number
+
2351 int ParamEnum = ParamType[i];
+
2352 int ParamNo = i - ParamTypeStartPos[ParameterEnum(ParamEnum)];
+ + +
2355 {
+
2356 // Normalise the prior relative the nominal/prior, just the way we get our fit results in MaCh3
+
2357 if ( CentralValueTemp != 0)
+
2358 {
+ + +
2361 } else
+
2362 {
+
2363 Central = CentralValueTemp + 1.0;
+
2364 Error = ParamErrors[ParamEnum][ParamNo];
+
2365 }
+
2366 }
+
2367 else
+
2368 {
+ +
2370 Error = ParamErrors[ParamEnum][ParamNo];
+
2371 }
+
2372 //KS: If plotting error for param with flat prior is turned off and given param really has flat prior set error to 0
+
2373 if(!PlotFlatPrior && ParamFlat[ParamEnum][ParamNo])
+
2374 {
+
2375 Error = 0.;
+
2376 }
+
2377
+
2378 PreFitPlot->SetBinContent(i+1, Central);
+
2379 PreFitPlot->SetBinError(i+1, Error);
+
2380 PreFitPlot->GetXaxis()->SetBinLabel(i+1, ParamNames[ParamEnum][ParamNo]);
+
2381 }
+
2382 PreFitPlot->SetDirectory(0);
+
2383
+
2384 PreFitPlot->SetFillStyle(1001);
+
2385 PreFitPlot->SetFillColor(kRed-3);
+
2386 PreFitPlot->SetMarkerStyle(21);
+
2387 PreFitPlot->SetMarkerSize(2.4);
+
2388 PreFitPlot->SetMarkerColor(kWhite);
+
2389 PreFitPlot->SetLineColor(PreFitPlot->GetFillColor());
+
2390 PreFitPlot->GetXaxis()->LabelsOption("v");
+
2391
+
2392 return PreFitPlot;
+
2393}
+
+
+
+ +

◆ MakeTrianglePlot()

+ +
+
+ + + + + + + + +
void MCMCProcessor::MakeTrianglePlot (std::vector< std::string > ParamNames)
+
+ +

Make fancy triangle plot for selected parameters.

+

Scale the histograms so it shows the posterior probability

+ +

Definition at line 1761 of file MCMCProcessor.cpp.

+
1761 {
+
1762// *********************
+
1763
+
1764 if(hpost2D == nullptr) MakeCovariance_MP();
+
1765 MACH3LOG_INFO("Making Triangle Plot");
+
1766
+
1767 const int nParamPlot = ParamNames.size();
+
1768 std::vector<int> ParamNumber;
+
1769 for(int j = 0; j < nParamPlot; ++j)
+
1770 {
+
1771 //KS: First we need to find parameter number based on name
+
1772 int ParamNo = __UNDEF__;
+
1773 for (int i = 0; i < nDraw; ++i)
+
1774 {
+
1775 TString Title = "";
+
1776 double Prior = 1.0;
+
1777 double PriorError = 1.0;
+
1778
+ +
1780
+
1781 if(ParamNames[j] == Title) ParamNo = i;
+
1782 }
+
1783 if(ParamNo == __UNDEF__)
+
1784 {
+
1785 MACH3LOG_WARN("Couldn't find param {}. Will not plot Triangle plot", ParamNames[j]);
+
1786 return;
+
1787 }
+
1788 ParamNumber.push_back(ParamNo);
+
1789 }
+
1790
+
1791 //KS: Store it as we go back to them at the end
+
1792 const double TopMargin = Posterior->GetTopMargin();
+
1793 const double BottomMargin = Posterior->GetBottomMargin();
+
1794 const double LeftMargin = Posterior->GetLeftMargin();
+
1795 const double RighMargin = Posterior->GetRightMargin();
+
1796 Posterior->SetTopMargin(0.001);
+
1797 Posterior->SetBottomMargin(0.001);
+
1798 Posterior->SetLeftMargin(0.001);
+
1799 Posterior->SetRightMargin(0.001);
+
1800
+
1801 Posterior->cd();
+
1802 Posterior->Clear();
+
1803 Posterior->Update();
+
1804
+
1805 //KS: We sort to have parameters from highest to lowest, this is related to how we make 2D projections in MakeCovariance_MP
+
1806 std::sort(ParamNumber.begin(), ParamNumber.end(), std::greater<int>());
+
1807
+
1808 //KS: Calculate how many pads/plots we need
+
1809 int Npad = 0;
+
1810 for(int j = 1; j < nParamPlot+1; j++) Npad += j;
+
1811 Posterior->cd();
+
1812
+
1813 //Load values set via config or executable
+
1814 std::vector<double> CredibleIntervals = Credible_Intervals;
+ +
1816 //Nothing was passed via config so use default values which are still fancy
+
1817 if(CredibleIntervals.size() == 0 && CredibleIntervalsColours.size() == 0)
+
1818 {
+
1819 CredibleIntervals.insert(CredibleIntervals.end(), { 0.99, 0.90, 0.68 });
+
1820 CredibleIntervalsColours.insert(CredibleIntervalsColours.end(), { kCyan+4, kCyan-2, kCyan-10 });
+
1821 }
+
1822 if(CredibleIntervals.size() != CredibleIntervalsColours.size())
+
1823 {
+
1824 std::cerr<<" size of CredibleIntervals is not equat to size of CredibleIntervalsColours"<<std::endl;
+
1825 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1826 throw;
+
1827 }
+
1828 //Load values set via config or executable
+
1829 std::vector<double> CredibleRegions = Credible_Regions;
+
1830 std::vector<Style_t> CredibleRegionStyle = Credible_RegionStyle;
+
1831 std::vector<Color_t> CredibleRegionColor = Credible_RegionColor;
+
1832
+
1833 //Nothing was passed via config so use default values which are still fancy
+
1834 if(CredibleRegions.size() == 0 && CredibleRegionStyle.size() == 0 && CredibleRegionColor.size() == 0)
+
1835 {
+
1836 CredibleRegions.insert(CredibleRegions.end(), { 0.99, 0.90, 0.68 });
+
1837 CredibleRegionStyle.insert(CredibleRegionStyle.end(), { kDashed, kSolid, kDotted });
+
1838 CredibleRegionColor.insert(CredibleRegionColor.end(), { kGreen-3, kGreen-10, kGreen });
+
1839 }
+
1840 if( (CredibleRegions.size() != CredibleRegionStyle.size()) || (CredibleRegionStyle.size() != CredibleRegionColor.size()) )
+
1841 {
+
1842 std::cerr<<" size of CredibleRegions is not equat to size of CredibleRegionStyle"<<std::endl;
+
1843 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
1844 throw;
+
1845 }
+
1846 const int nCredibleIntervals = CredibleIntervals.size();
+
1847 const int nCredibleRegions = CredibleRegions.size();
+
1848
+
1849 //KS: Initialise Tpad histograms etc we will need
+
1850 TPad** TrianglePad = new TPad*[Npad];
+
1851 //KS: 1D copy of posterior, we need it as we modify them
+
1852 TH1D** hpost_copy = new TH1D*[nParamPlot];
+
1853 TH1D*** hpost_cl = new TH1D**[nParamPlot];
+
1854 TText **TriangleText = new TText *[nParamPlot*2];
+ +
1856 TH2D*** hpost_2D_cl = new TH2D**[Npad-nParamPlot];
+
1857 gStyle->SetPalette(51);
+
1858
+
1859 //KS: Super convoluted way of calculating ranges for our pads, trust me it works...
+
1860 double* X_Min = new double[nParamPlot];
+
1861 double* X_Max = new double[nParamPlot];
+
1862
+
1863 X_Min[0] = 0.10;
+
1864 double xScale = (0.95 - (X_Min[0]+0.05))/nParamPlot;
+
1865 //KS: 0.05 is becasue we need additional offset for labels
+
1866 X_Max[0] = X_Min[0]+xScale+0.05;
+
1867 for(int i = 1; i < nParamPlot; i++)
+
1868 {
+
1869 X_Min[i] = X_Max[i-1];
+
1870 X_Max[i] = X_Min[i]+xScale;
+
1871 }
+
1872 double* Y_Min = new double[nParamPlot];
+
1873 double* Y_Max = new double[nParamPlot];
+
1874 Y_Max[0] = 0.95;
+
1875 //KS: 0.10 is becasue we need additional offset for labels
+
1876 double yScale = std::fabs(0.10 - (Y_Max[0]))/nParamPlot;
+
1877 Y_Min[0] = Y_Max[0]-yScale;
+
1878 for(int i = 1; i < nParamPlot; i++)
+
1879 {
+
1880 Y_Max[i] = Y_Min[i-1];
+
1881 Y_Min[i] = Y_Max[i]-yScale;
+
1882 }
+
1883
+
1884 //KS: We store as numbering of isn't straightforward
+
1885 int counterPad = 0;
+
1886 int counterText = 0;
+
1887 int counterPost = 0;
+
1888 int counter2DPost = 0;
+
1889 //KS: We start from top of the plot, might be confusing but works very well
+
1890 for(int y = 0; y < nParamPlot; y++)
+
1891 {
+
1892 //KS: start from left and go right, depending on y
+
1893 for(int x = 0; x <= y; x++)
+
1894 {
+
1895 //KS: Need to go to canvas every time to have our pads in the same canvas, not pads in the pads
+
1896 Posterior->cd();
+
1897 TrianglePad[counterPad] = new TPad(Form("TPad_%i", counterPad), Form("TPad_%i", counterPad), X_Min[x], Y_Min[y], X_Max[x], Y_Max[y]);
+
1898
+
1899 TrianglePad[counterPad]->SetTopMargin(0);
+
1900 TrianglePad[counterPad]->SetRightMargin(0);
+
1901
+
1902 TrianglePad[counterPad]->SetGrid();
+
1903 TrianglePad[counterPad]->SetFrameBorderMode(0);
+
1904 TrianglePad[counterPad]->SetBorderMode(0);
+
1905 TrianglePad[counterPad]->SetBorderSize(0);
+
1906
+
1907 //KS: Corresponds to bottom part of the plot, need marings for lables
+
1908 if(y == (nParamPlot-1)) TrianglePad[counterPad]->SetBottomMargin(0.1);
+
1909 else TrianglePad[counterPad]->SetBottomMargin(0);
+
1910
+
1911 //KS: Corresponds to left part, need marings for lables
+
1912 if(x == 0) TrianglePad[counterPad]->SetLeftMargin(0.15);
+
1913 else TrianglePad[counterPad]->SetLeftMargin(0);
+
1914
+
1915 TrianglePad[counterPad]->Draw();
+
1916 TrianglePad[counterPad]->cd();
+
1917
+
1918 //KS:if diagonal plot main posterior
+
1919 if(x == y)
+
1920 {
+
1921 hpost_copy[counterPost] = (TH1D*) hpost[ParamNumber[x]]->Clone(Form("hpost_copy_%i", ParamNumber[x]));
+ + +
1925 for (int j = 0; j < nCredibleIntervals; ++j)
+
1926 {
+
1927 hpost_cl[counterPost][j] = (TH1D*) hpost[ParamNumber[x]]->Clone( Form("hpost_copy_%i_CL_%f", ParamNumber[x], CredibleIntervals[j]));
+
1928 //KS: Reset to get rid to TF1 otherwise we run into segfault :(
+
1929 hpost_cl[counterPost][j]->Reset("");
+
1930 hpost_cl[counterPost][j]->Fill(0.0, 0.0);
+
1931
+
1932 // Scale the histograms before gettindg credible intervals
+
1933 hpost_cl[counterPost][j]->Scale(1. / hpost_cl[counterPost][j]->Integral());
+
1934 //KS: Slightly different approach depending if interavls are in pecentage or sigmas
+ +
1936 {
+
1937 //KS: Convert sigmas into percentage
+
1938 double CredReg = GetSigmaValue((int)std::round(CredibleIntervals[j]));
+ +
1940 }
+
1941 else
+
1942 {
+ +
1944 }
+
1945
+ +
1947 hpost_cl[counterPost][j]->SetLineWidth(1);
+
1948 }
+
1949
+ +
1951 hpost_copy[counterPost]->SetLineWidth(2);
+
1952 hpost_copy[counterPost]->SetLineColor(kBlack);
+
1953
+
1954 //KS: Don't want any titles
+
1955 hpost_copy[counterPost]->GetXaxis()->SetTitle("");
+
1956 hpost_copy[counterPost]->GetYaxis()->SetTitle("");
+
1957 hpost_copy[counterPost]->SetTitle("");
+
1958
+
1959 hpost_copy[counterPost]->GetXaxis()->SetLabelSize(0.1);
+
1960 hpost_copy[counterPost]->GetYaxis()->SetLabelSize(0.1);
+
1961
+
1962 hpost_copy[counterPost]->GetXaxis()->SetNdivisions(4);
+
1963 hpost_copy[counterPost]->GetYaxis()->SetNdivisions(4);
+
1964
+
1965 hpost_copy[counterPost]->Draw("HIST");
+
1966 for (int j = 0; j < nCredibleIntervals; ++j)
+
1967 hpost_cl[counterPost][j]->Draw("HIST SAME");
+
1968 counterPost++;
+
1969 }
+
1970 //KS: Here we plot 2D credible regions
+
1971 else
+
1972 {
+
1973 hpost_2D_copy[counter2DPost] = (TH2D*) hpost2D[ParamNumber[x]][ParamNumber[y]]->Clone( Form("hpost_copy_%i_%i", ParamNumber[x], ParamNumber[y]));
+ +
1975 //KS: Now copy for every credible region
+
1976 for (int k = 0; k < nCredibleRegions; ++k)
+
1977 {
+
1978 hpost_2D_cl[counter2DPost][k] = (TH2D*)hpost2D[ParamNumber[x]][ParamNumber[y]]->Clone( Form("hpost_copy_%i_%i_CL_%f", ParamNumber[x], ParamNumber[y], CredibleRegions[k]));
+
1979
+ +
1981 {
+
1982 //KS: Convert sigmas into percentage
+
1983 double CredReg = GetSigmaValue((int)std::round(CredibleRegions[k]));
+ +
1985 }
+
1986 else
+
1987 {
+ +
1989 }
+
1990
+ +
1992 hpost_2D_cl[counter2DPost][k]->SetLineWidth(2);
+ +
1994 }
+
1995
+
1996 //KS: Don't want any titles
+
1997 hpost_2D_copy[counter2DPost]->GetXaxis()->SetTitle("");
+
1998 hpost_2D_copy[counter2DPost]->GetYaxis()->SetTitle("");
+
1999 hpost_2D_copy[counter2DPost]->SetTitle("");
+
2000
+
2001 hpost_2D_copy[counter2DPost]->GetXaxis()->SetLabelSize(0.1);
+
2002 hpost_2D_copy[counter2DPost]->GetYaxis()->SetLabelSize(0.1);
+
2003
+
2004 hpost_2D_copy[counter2DPost]-> GetXaxis()->SetNdivisions(4);
+
2005 hpost_2D_copy[counter2DPost]-> GetYaxis()->SetNdivisions(4);
+
2006 hpost_2D_copy[counter2DPost]->Draw("COL");
+
2007 //Now credible regions
+
2008 for (int k = 0; k < nCredibleRegions; ++k)
+
2009 hpost_2D_cl[counter2DPost][k]->Draw("CONT3 SAME");
+
2010 counter2DPost++;
+
2011 }
+
2012 //KS: Corresponds to bottom part of the plot
+
2013 if(y == (nParamPlot-1))
+
2014 {
+
2015 Posterior->cd();
+
2016 TriangleText[counterText] = new TText(X_Min[x]+ (X_Max[x]-X_Min[x])/4, 0.04, hpost[ParamNumber[x]]->GetTitle());
+
2017 //KS: Unfortunately for many plots or long names this can go out of bounds :(
+
2018 TriangleText[counterText]->SetTextSize(0.015);
+
2019 TriangleText[counterText]->SetNDC(true);
+
2020 TriangleText[counterText]->Draw();
+
2021
+
2022 counterText++;
+
2023 }
+
2024 //KS: Corresponds to left part
+
2025 if(x == 0)
+
2026 {
+
2027 Posterior->cd();
+
2028 TriangleText[counterText] = new TText(0.04, Y_Min[y] + (Y_Max[y]-Y_Min[y])/4, hpost[ParamNumber[y]]->GetTitle());
+
2029 //KS: Rotate as this is y axis
+
2030 TriangleText[counterText]->SetTextAngle(90);
+
2031 //KS: Unfortunately for many plots or long names this can go out of bounds :(
+
2032 TriangleText[counterText]->SetTextSize(0.015);
+
2033 TriangleText[counterText]->SetNDC(true);
+
2034 TriangleText[counterText]->Draw();
+
2035 counterText++;
+
2036 }
+
2037 Posterior->Update();
+
2038 counterPad++;
+
2039 }
+
2040 }
+
2041
+
2042 Posterior->cd();
+
2043 TLegend* legend = new TLegend(0.60, 0.7, 0.9, 0.9);
+
2044 legend->SetTextSize(0.03);
+
2045 legend->SetFillColor(0);
+
2046 legend->SetFillStyle(0);
+
2047 legend->SetLineColor(0);
+
2048 legend->SetLineStyle(0);
+
2049 legend->SetBorderSize(0);
+
2050 //KS: Legend is shared so just take first histograms
+
2051 for (int j = nCredibleIntervals-1; j >= 0; --j)
+
2052 {
+ +
2054 legend->AddEntry(hpost_cl[0][j], Form("%.0f#sigma Credible Interval", CredibleIntervals[j]), "f");
+
2055 else
+
2056 legend->AddEntry(hpost_cl[0][j], Form("%.0f%% Credible Interval", CredibleRegions[j]*100), "f");
+
2057 }
+
2058 for (int k = nCredibleRegions-1; k >= 0; --k)
+
2059 {
+ +
2061 legend->AddEntry(hpost_2D_cl[0][k], Form("%.0f#sigma Credible Region", CredibleRegions[k]), "l");
+
2062 else
+
2063 legend->AddEntry(hpost_2D_cl[0][k], Form("%.0f%% Credible Region", CredibleRegions[k]*100), "l");
+
2064 }
+
2065 legend->Draw("SAME");
+
2066 Posterior->Update();
+
2067
+
2068 // Write to file
+
2069 Posterior->SetName("TrianglePlot");
+
2070 Posterior->SetTitle("TrianglePlot");
+
2071
+
2072 if(printToPDF) Posterior->Print(CanvasName);
+
2073 // Write it to root file
+
2074 OutputFile->cd();
+
2075 Posterior->Write();
+
2076
+
2077 //KS: Remove allocated structures
+
2078 for(int i = 0; i < Npad; i++) delete TrianglePad[i];
+
2079 for(int i = 0; i < nParamPlot*2; i++) delete TriangleText[i];
+
2080 for(int i = 0; i < nParamPlot; i++)
+
2081 {
+
2082 delete hpost_copy[i];
+
2083 for (int j = 0; j < nCredibleIntervals; ++j)
+
2084 {
+
2085 delete hpost_cl[i][j];
+
2086 }
+
2087 delete[] hpost_cl[i];
+
2088 }
+
2089 for(int i = 0; i < Npad - nParamPlot; i++)
+
2090 {
+
2091 delete hpost_2D_copy[i];
+
2092 for (int j = 0; j < nCredibleRegions; ++j)
+
2093 {
+
2094 delete hpost_2D_cl[i][j];
+
2095 }
+
2096 delete[] hpost_2D_cl[i];
+
2097 }
+
2098
+
2099 delete[] hpost_copy;
+
2100 delete[] hpost_cl;
+
2101 delete[] hpost_2D_copy;
+
2102 delete[] hpost_2D_cl;
+
2103 delete[] TrianglePad;
+
2104 delete[] TriangleText;
+
2105 delete[] X_Min;
+
2106 delete[] X_Max;
+
2107 delete[] Y_Min;
+
2108 delete[] Y_Max;
+
2109 delete legend;
+
2110
+
2111 //KS: Restore margin
+
2112 Posterior->SetTopMargin(TopMargin);
+
2113 Posterior->SetLeftMargin(BottomMargin);
+
2114 Posterior->SetLeftMargin(LeftMargin);
+
2115 Posterior->SetRightMargin(RighMargin);
+
2116}
+
+
+
+ +

◆ MakeViolin()

+ +
+
+ + + + + + + +
void MCMCProcessor::MakeViolin ()
+
+ +

Make and Draw Violin.

+ +

Definition at line 874 of file MCMCProcessor.cpp.

+
874 {
+
875// *********************
+
876 //KS: Make sure we have steps
+
877 if(!CacheMCMC) CacheSteps();
+
878
+
879 MACH3LOG_INFO("Producing Violin Plot");
+
880
+
881 //KS: Find min and max to make histogram in range
+
882 double maxi_y = Chain->GetMaximum(BranchNames[0]);
+
883 double mini_y = Chain->GetMinimum(BranchNames[0]);
+
884 for (int i = 1; i < nDraw; ++i)
+
885 {
+
886 if(Chain->GetMaximum(BranchNames[i]) > maxi_y) maxi_y = Chain->GetMaximum(BranchNames[i]);
+
887 if(Chain->GetMinimum(BranchNames[i]) < mini_y) mini_y = Chain->GetMinimum(BranchNames[i]);
+
888 }
+
889
+
890 const int vBins = (maxi_y-mini_y)*25;
+
891
+
892 hviolin = new TH2D("hviolin", "hviolin", nDraw, 0, nDraw, vBins, mini_y, maxi_y);
+
893
+
894 //KS: Prior has larger errors so we increase range and number of bins
+
895 const int PriorFactor = 4;
+
896 hviolin_prior = new TH2D("hviolin_prior", "hviolin_prior", nDraw, 0, nDraw, PriorFactor*vBins, PriorFactor*mini_y, PriorFactor*maxi_y);
+
897
+
898 TRandom3* rand = new TRandom3(0);
+
899
+
900 std::vector<double> PriorVec(nDraw);
+
901 std::vector<double> PriorErrorVec(nDraw);
+
902 std::vector<bool> PriorFlatVec(nDraw);
+
903
+
904 for (int x = 0; x < nDraw; ++x)
+
905 {
+ +
907 double Prior, PriorError;
+
908
+ +
910 //Set fancy labels
+
911 hviolin->GetXaxis()->SetBinLabel(x+1, Title);
+
912 hviolin_prior->GetXaxis()->SetBinLabel(x+1, Title);
+
913 PriorVec[x] = Prior;
+ +
915
+ + + +
919 }
+
920
+
921 TStopwatch clock;
+
922 clock.Start();
+
923
+
924 // nDraw is number of draws we want to do
+
925 #ifdef MULTITHREAD
+
926 #pragma omp parallel for
+
927 #endif
+
928 for (int x = 0; x < nDraw; ++x)
+
929 {
+
930 //KS: Consider another treatment for fixed params
+
931 //if (IamVaried[x] == false) continue;
+
932 for (int k = 0; k < nEntries; ++k)
+
933 {
+
934 //KS: Burn in cut
+
935 if(StepNumber[k] < BurnInCut) continue;
+
936 //KS: We know exaclty which x bin we will end up, find y bin. This allow to avoid coslty Fill() and enable multithreading becasue I am master of faster
+
937 const double y = hviolin->GetYaxis()->FindBin(ParStep[x][k]);
+
938 hviolin->SetBinContent(x+1, y, hviolin->GetBinContent(x+1, y)+1);
+
939 }
+
940
+
941 //KS: If we set option to not plot flat prior and param has flat prior then we skip this step
+
942 if(!(!PlotFlatPrior && PriorFlatVec[x]))
+
943 {
+
944 for (int k = 0; k < nEntries; ++k)
+
945 {
+
946 const double Entry = rand->Gaus(PriorVec[x], PriorErrorVec[x]);
+
947 const double y = hviolin_prior->GetYaxis()->FindBin(Entry);
+
948 hviolin_prior->SetBinContent(x+1, y, hviolin_prior->GetBinContent(x+1, y)+1);
+
949 }
+
950 }
+
951 } // end the for loop over nDraw
+
952 clock.Stop();
+
953 std::cout << "Making Violin plot took " << clock.RealTime() << "s to finish for " << nEntries << " steps" << std::endl;
+
954
+
955 //KS: Tells how many parameters in one canvas we want
+
956 const int IntervalsSize = 10;
+
957 const int NIntervals = nDraw/IntervalsSize;
+
958
+
959 hviolin->GetYaxis()->SetTitle("Parameter Value");
+
960 hviolin->GetXaxis()->SetTitle();
+
961 hviolin->GetXaxis()->LabelsOption("v");
+
962
+
963 hviolin_prior->GetYaxis()->SetTitle("Parameter Value");
+
964 hviolin_prior->GetXaxis()->SetTitle();
+
965 hviolin_prior->GetXaxis()->LabelsOption("v");
+
966
+
967 hviolin_prior->SetLineColor(kRed);
+
968 hviolin_prior->SetMarkerColor(kRed);
+
969 hviolin_prior->SetFillColorAlpha(kRed, 0.35);
+
970 hviolin_prior->SetMarkerStyle(20);
+
971 hviolin_prior->SetMarkerSize(0.5);
+
972
+
973 hviolin->SetLineColor(kBlue);
+
974 hviolin->SetMarkerColor(kBlue);
+
975 hviolin->SetFillColorAlpha(kBlue, 0.35);
+
976 hviolin->SetMarkerStyle(20);
+
977 hviolin->SetMarkerSize(1.0);
+
978
+
979 const double BottomMargin = Posterior->GetBottomMargin();
+
980 Posterior->SetBottomMargin(0.2);
+
981
+
982 OutputFile->cd();
+
983 hviolin->Write("param_violin");
+
984 hviolin_prior->Write("param_violin_prior");
+
985 //KS: This is moslty for example plots, we have full file in the ROOT file so can do much better plot later
+
986 hviolin->GetYaxis()->SetRangeUser(-1, +2);
+
987 hviolin_prior->GetYaxis()->SetRangeUser(-1, +2);
+
988 for (int i = 0; i < NIntervals+1; ++i)
+
989 {
+
990 hviolin->GetXaxis()->SetRangeUser(i*IntervalsSize, i*IntervalsSize+IntervalsSize);
+
991 hviolin_prior->GetXaxis()->SetRangeUser(i*IntervalsSize, i*IntervalsSize+IntervalsSize);
+
992 if(i == NIntervals+1)
+
993 {
+
994 hviolin->GetXaxis()->SetRangeUser(i*IntervalsSize, nDraw);
+
995 hviolin_prior->GetXaxis()->SetRangeUser(i*IntervalsSize, nDraw);
+
996 }
+
997 //KS: ROOT6 has some additional options, consider updaiting it. more https://root.cern/doc/master/classTHistPainter.html#HP140b
+
998 hviolin_prior->Draw("VIOLIN");
+
999 hviolin->Draw("VIOLIN SAME");
+
1000 if(printToPDF) Posterior->Print(CanvasName);
+
1001 }
+
1002 delete rand;
+
1003 //KS: Return Margin to default one
+
1004 Posterior->SetBottomMargin(BottomMargin);
+
1005}
+
+
+
+ +

◆ ParamTraces()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ParamTraces ()
+
+inlineprivate
+
+ +

Definition at line 3636 of file MCMCProcessor.cpp.

+
3636 {
+
3637// *****************
+
3638
+
3639 if (ParStep == nullptr) PrepareDiagMCMC();
+
3640 MACH3LOG_INFO("Making trace plots...");
+
3641 // Make the TH1Ds
+
3642 TH1D** TraceParamPlots = new TH1D*[nDraw];
+ +
3644 TH1D** TraceSystsPlots = new TH1D*[nSysts];
+
3645
+
3646 // Set the titles and limits for TH2Ds
+
3647 for (int j = 0; j < nDraw; ++j) {
+
3648
+
3649 TString Title = "";
+
3650 double Prior = 1.0;
+
3651 double PriorError = 1.0;
+
3652
+ +
3654 std::string HistName = Form("%s_%s_Trace", Title.Data(), BranchNames[j].Data());
+
3655
+
3656 TraceParamPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3657 TraceParamPlots[j]->GetXaxis()->SetTitle("Step");
+
3658 TraceParamPlots[j]->GetYaxis()->SetTitle("Parameter Variation");
+
3659 }
+
3660
+
3661 for (int j = 0; j < nSamples; ++j) {
+
3662 std::string HistName = SampleName_v[j].Data();
+
3663 TraceSamplePlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3664 TraceSamplePlots[j]->GetXaxis()->SetTitle("Step");
+
3665 TraceSamplePlots[j]->GetYaxis()->SetTitle("Sample -logL");
+
3666 }
+
3667
+
3668 for (int j = 0; j < nSysts; ++j) {
+
3669 std::string HistName = SystName_v[j].Data();
+
3670 TraceSystsPlots[j] = new TH1D(HistName.c_str(), HistName.c_str(), nEntries, 0, nEntries);
+
3671 TraceSystsPlots[j]->GetXaxis()->SetTitle("Step");
+
3672 TraceSystsPlots[j]->GetYaxis()->SetTitle("Systematic -logL");
+
3673 }
+
3674
+
3675 // Have now made the empty TH1Ds, now for writing content to them!
+
3676
+
3677 // Loop over the number of parameters to draw their traces
+
3678 // Each histogram
+
3679#ifdef MULTITHREAD
+
3680 MACH3LOG_INFO("Using multi-threading...");
+
3681 #pragma omp parallel for
+
3682#endif
+
3683 for (int i = 0; i < nEntries; ++i) {
+
3684 // Set bin content for the ith bin to the parameter values
+
3685 for (int j = 0; j < nDraw; ++j) {
+
3686 TraceParamPlots[j]->SetBinContent(i, ParStep[i][j]);
+
3687 }
+
3688
+
3689 for (int j = 0; j < nSamples; ++j) {
+
3690 TraceSamplePlots[j]->SetBinContent(i, SampleValues[i][j]);
+
3691 }
+
3692
+
3693 for (int j = 0; j < nSysts; ++j) {
+
3694 TraceSystsPlots[j]->SetBinContent(i, SystValues[i][j]);
+
3695 }
+
3696 }
+
3697
+
3698 // Write the output and delete the TH2Ds
+
3699 TDirectory *TraceDir = OutputFile->mkdir("Trace");
+
3700 TraceDir->cd();
+
3701 for (int j = 0; j < nDraw; ++j) {
+
3702 // Fit a linear function to the traces
+
3703 TF1 *Fitter = new TF1("Fitter","[0]", int(nEntries/2), nEntries);
+
3704 Fitter->SetLineColor(kRed);
+
3705 TraceParamPlots[j]->Fit("Fitter","Rq");
+
3706 TraceParamPlots[j]->Write();
+
3707 delete Fitter;
+
3708 delete TraceParamPlots[j];
+
3709 }
+
3710 delete[] TraceParamPlots;
+
3711
+
3712 TDirectory *LLDir = OutputFile->mkdir("LogL");
+
3713 LLDir->cd();
+
3714 for (int j = 0; j < nSamples; ++j) {
+
3715 TraceSamplePlots[j]->Write();
+
3716 delete TraceSamplePlots[j];
+
3717 delete[] SampleValues[j];
+
3718 }
+
3719 delete[] TraceSamplePlots;
+
3720 delete[] SampleValues;
+
3721
+
3722 for (int j = 0; j < nSysts; ++j) {
+
3723 TraceSystsPlots[j]->Write();
+
3724 delete TraceSystsPlots[j];
+
3725 delete SystValues[j];
+
3726 }
+
3727 delete[] TraceSystsPlots;
+
3728 delete[] SystValues;
+
3729
+
3730 TraceDir->Close();
+
3731 delete TraceDir;
+
3732
+
3733 OutputFile->cd();
+
3734}
+
std::vector< TString > SampleName_v
+
std::vector< TString > SystName_v
+
+
+
+ +

◆ PrepareDiagMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::PrepareDiagMCMC ()
+
+inlineprivate
+
+ +

Definition at line 3468 of file MCMCProcessor.cpp.

+
3468 {
+
3469// **************************
+
3470
+
3471 doDiagMCMC = true;
+
3472
+
3473 if(ParStep != nullptr)
+
3474 {
+
3475 MACH3LOG_ERROR("It look like ParStep was already filled ");
+
3476 MACH3LOG_ERROR("Eventhough it is used for MakeCovariance_MP and for DiagMCMC");
+
3477 MACH3LOG_ERROR("it has differnt structure in both for cache hits, sorry ");
+
3478 throw;
+
3479 }
+
3480 if(nBatches == 0)
+
3481 {
+
3482 MACH3LOG_ERROR("nBatches is equal to 0");
+
3483 MACH3LOG_ERROR("please use SetnBatches to set other value fore exampl 20");
+
3484 throw;
+
3485 }
+
3486
+
3487 // Initialise ParStep
+
3488 ParStep = new double*[nEntries]();
+
3489 SampleValues = new double*[nEntries]();
+
3490 SystValues = new double*[nEntries]();
+
3491 AccProbValues = new double[nEntries]();
+
3492 StepNumber = new int[nEntries]();
+
3493 #ifdef MULTITHREAD
+
3494 #pragma omp parallel for
+
3495 #endif
+
3496 for (int i = 0; i < nEntries; ++i) {
+
3497 ParStep[i] = new double[nDraw]();
+
3498 SampleValues[i] = new double[nSamples]();
+
3499 SystValues[i] = new double[nSysts]();
+
3500 for (int j = 0; j < nDraw; ++j) {
+
3501 ParStep[i][j] = -999.99;
+
3502 }
+
3503 for (int j = 0; j < nSamples; ++j) {
+
3504 SampleValues[i][j] = -999.99;
+
3505 }
+
3506 for (int j = 0; j < nSysts; ++j) {
+
3507 SystValues[i][j] = -999.99;
+
3508 }
+
3509 AccProbValues[i] = -999.99;
+
3510
+
3511 StepNumber[i] = -999.99;
+
3512 }
+
3513
+
3514 // Initialise the sums
+
3515 ParamSums = new double[nDraw]();
+
3516 for (int i = 0; i < nDraw; ++i) {
+
3517 ParamSums[i] = 0.0;
+
3518 }
+
3519 MACH3LOG_INFO("Reading input tree...");
+
3520 TStopwatch clock;
+
3521 clock.Start();
+
3522
+
3523 // Set all the branches to off
+
3524 Chain->SetBranchStatus("*", false);
+
3525
+
3526// Turn on the branches which we want for parameters
+
3527 for (int i = 0; i < nDraw; ++i) {
+
3528 Chain->SetBranchStatus(BranchNames[i].Data(), true);
+
3529 }
+
3530
+
3531 // Turn on the branches which we want for LogL sample
+
3532 for (int i = 0; i < nSamples; ++i) {
+
3533 Chain->SetBranchStatus(SampleName_v[i].Data(), true);
+
3534 }
+
3535
+
3536 // Turn on the branches which we want for LogL systs
+
3537 for (int i = 0; i < nSysts; ++i) {
+
3538 Chain->SetBranchStatus(SystName_v[i].Data(), true);
+
3539 }
+
3540
+
3541 // Turn on the branches which we want for acc prob
+
3542 Chain->SetBranchStatus("accProb", true);
+
3543
+
3544 // Only needed for Geweke right now
+
3545 Chain->SetBranchStatus("step", true);
+
3546
+
3547 // 10 entries output
+
3548 const int countwidth = nEntries/10;
+
3549
+
3550 // Can also do the batched means here to minimize excessive loops
+
3551 // The length of each batch
+
3552 const int BatchLength = nEntries/nBatches+1;
+
3553 BatchedAverages = new double*[nBatches]();
+
3554 AccProbBatchedAverages = new double[nBatches]();
+
3555 for (int i = 0; i < nBatches; ++i) {
+
3556 BatchedAverages[i] = new double[nDraw];
+ +
3558 for (int j = 0; j < nDraw; ++j) {
+
3559 BatchedAverages[i][j] = 0.0;
+
3560 }
+
3561 }
+
3562
+
3563 // Loop over the entries
+
3564 //KS: This is really a bottleneck right now, thus revisit with ROOT6 https://pep-root6.github.io/docs/analysis/parallell/root.html
+
3565 for (int i = 0; i < nEntries; ++i) {
+
3566
+
3567 if (i % countwidth == 0) {
+
3568 std::cout << i << "/" << nEntries << " (" << double(i)/double(nEntries)*100. << "%)" << std::endl;
+
3569 }
+
3570
+
3571 // Set the branch addresses for params
+
3572 for (int j = 0; j < nDraw; ++j) {
+
3573 Chain->SetBranchAddress(BranchNames[j].Data(), &ParStep[i][j]);
+
3574 }
+
3575
+
3576 // Set the branch addresses for samples
+
3577 for (int j = 0; j < nSamples; ++j) {
+
3578 Chain->SetBranchAddress(SampleName_v[j].Data(), &SampleValues[i][j]);
+
3579 }
+
3580
+
3581 // Set the branch addresses for systematics
+
3582 for (int j = 0; j < nSysts; ++j) {
+
3583 Chain->SetBranchAddress(SystName_v[j].Data(), &SystValues[i][j]);
+
3584 }
+
3585
+
3586 // Set the branch addresses for Acceptance Probability
+
3587 Chain->SetBranchAddress("accProb", &AccProbValues[i]);
+
3588
+
3589 Chain->SetBranchAddress("step", &StepNumber[i]);
+
3590
+
3591 // Fill up the arrays
+
3592 Chain->GetEntry(i);
+
3593
+
3594 // Find which batch the event belongs in
+
3595 int BatchNumber = -1;
+
3596 // I'm so lazy! But it's OK, the major overhead here is GetEntry: saved by ROOT!
+
3597 for (int j = 0; j < nBatches; ++j) {
+
3598 if (i < (j+1)*BatchLength) {
+
3599 BatchNumber = j;
+
3600 break;
+
3601 }
+
3602 }
+
3603
+
3604 // Fill up the sum for each j param
+
3605 for (int j = 0; j < nDraw; ++j) {
+
3606 ParamSums[j] += ParStep[i][j];
+ +
3608 }
+
3609
+
3610 //KS: Could easyli add this to above loop but I accProb is different beast so better keep it like this
+ +
3612 }
+
3613
+
3614 clock.Stop();
+
3615 std::cout << "Took " << clock.RealTime() << "s to finish caching statistic for Diag MCMC with " << nEntries << " steps" << std::endl;
+
3616
+
3617 // Make the sums into average
+
3618 #ifdef MULTITHREAD
+
3619 #pragma omp parallel for
+
3620 #endif
+
3621 for (int i = 0; i < nDraw; ++i) {
+
3622 ParamSums[i] /= nEntries;
+
3623 for (int j = 0; j < nBatches; ++j) {
+
3624 // Divide by the total number of events in the batch
+ +
3626 if(i==0) AccProbBatchedAverages[j] /= BatchLength; //KS: we have only one accProb, keep it like this for now
+
3627 }
+
3628 }
+
3629
+
3630 // And make our sweet output file
+
3631 if (OutputFile == nullptr) MakeOutputFile();
+
3632}
+
+
+
+ +

◆ ReadFDFile()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ReadFDFile ()
+
+inlineprivate
+
+ +

Definition at line 2593 of file MCMCProcessor.cpp.

+
2593 {
+
2594// ***************
+
2595
+
2596 // Do the same for the FD
+
2597 TFile *FDdetFile = new TFile(CovPos[kFDDetPar].back().c_str(), "open");
+
2598 if (FDdetFile->IsZombie()) {
+
2599 std::cerr << "Couldn't find FDdetFile " << CovPos[kFDDetPar].back() << std::endl;
+
2600 throw;
+
2601 }
+
2602 FDdetFile->cd();
+
2603
+
2604 TMatrixDSym *FDdetMatrix = (TMatrixDSym*)(FDdetFile->Get("SKJointError_Erec_Total"));
+
2605
+
2606 for (int i = 0; i < FDdetMatrix->GetNrows(); ++i)
+
2607 {
+
2608 //KS: FD parameters start at 1. in contrary to ND280
+
2609 ParamNom[kFDDetPar].push_back(1.);
+
2610 ParamCentral[kFDDetPar].push_back(1.);
+
2611
+
2612 ParamErrors[kFDDetPar].push_back( std::sqrt((*FDdetMatrix)(i,i)) );
+
2613 ParamNames[kFDDetPar].push_back( Form("FD Det %i", i) );
+
2614
+
2615 //KS: Currently we can only set it via config, change it in future
+
2616 ParamFlat[kFDDetPar].push_back( false );
+
2617 }
+
2618 //KS: The last parameter is p scale
+
2619 if(FancyPlotNames) ParamNames[kFDDetPar].back() = "Momentum Scale";
+
2620
+
2621 FDdetFile->Close();
+
2622 delete FDdetFile;
+
2623 delete FDdetMatrix;
+
2624}
+
+
+
+ +

◆ ReadInputCov()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ReadInputCov ()
+
+inlineprivate
+
+ +

Definition at line 2399 of file MCMCProcessor.cpp.

+
2399 {
+
2400// **************************
+ +
2402 if(nParam[kXSecPar] > 0) ReadXSecFile();
+
2403 if(nParam[kNDPar] > 0) ReadNDFile();
+
2404 if(nParam[kFDDetPar] > 0) ReadFDFile();
+
2405 if(nParam[kOSCPar] > 0) ReadOSCFile();
+
2406 //KS: Remove parameters which were removed
+ +
2408}
+ + + + + + +
+
+
+ +

◆ ReadNDFile()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ReadNDFile ()
+
+inlineprivate
+
+ +

Definition at line 2547 of file MCMCProcessor.cpp.

+
2547 {
+
2548// ***************
+
2549
+
2550 // Do the same for the ND280
+
2551 TFile *NDdetFile = new TFile(CovPos[kNDPar].back().c_str(), "open");
+
2552 if (NDdetFile->IsZombie()) {
+
2553 std::cerr << "Couldn't find NDdetFile " << CovPos[kNDPar].back() << std::endl;
+
2554 throw;
+
2555 }
+
2556 NDdetFile->cd();
+
2557
+
2558 TMatrixDSym *NDdetMatrix = (TMatrixDSym*)(NDdetFile->Get("nddet_cov"));
+
2559 TVectorD *NDdetNominal = (TVectorD*)(NDdetFile->Get("det_weights"));
+
2560 TDirectory *BinningDirectory = (TDirectory*)NDdetFile->Get("Binning")->Clone();
+
2561
+
2562 for (int i = 0; i < NDdetNominal->GetNrows(); ++i)
+
2563 {
+
2564 ParamNom[kNDPar].push_back( (*NDdetNominal)(i) );
+
2565 ParamCentral[kNDPar].push_back( (*NDdetNominal)(i) );
+
2566
+
2567 ParamErrors[kNDPar].push_back( std::sqrt((*NDdetMatrix)(i,i)) );
+
2568 ParamNames[kNDPar].push_back( Form("ND Det %i", i) );
+
2569 //KS: Currently we can only set it via config, change it in future
+
2570 ParamFlat[kNDPar].push_back( false );
+
2571 }
+
2572
+
2573 TIter next(BinningDirectory->GetListOfKeys());
+
2574 TKey *key = nullptr;
+
2575
+
2576 // Loop through all entries
+
2577 while ((key = (TKey*)next()))
+
2578 {
+
2579 std::string name = std::string(key->GetName());
+
2580 TH2Poly* RefPoly = (TH2Poly*)BinningDirectory->Get((name).c_str())->Clone();
+
2581 int size = RefPoly->GetNumberOfBins();
+
2582 NDSamplesBins.push_back(size);
+
2583 NDSamplesNames.push_back(RefPoly->GetTitle());
+
2584 }
+
2585
+
2586 NDdetFile->Close();
+
2587 delete NDdetFile;
+
2588}
+
+
+
+ +

◆ ReadOSCFile()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ReadOSCFile ()
+
+inlineprivate
+
+ +

Definition at line 2628 of file MCMCProcessor.cpp.

+
2628 {
+
2629// ***************
+
2630
+
2631 // Do the same for the ND280
+
2632 TFile *OscFile = new TFile(CovPos[kOSCPar].back().c_str(), "open");
+
2633 if (OscFile->IsZombie()) {
+
2634 std::cerr << "Couldn't find OSCFile " << CovPos[kOSCPar].back() << std::endl;
+
2635 throw;
+
2636 }
+
2637 OscFile->cd();
+
2638
+
2639 TMatrixDSym *OscMatrix = (TMatrixDSym*)(OscFile->Get("osc_cov"));
+
2640 //KS: Osc nominal we can also set via config so there is danger that this will nor corrspond to what was used in the fit
+
2641 TVectorD *OscNominal = (TVectorD*)(OscFile->Get("osc_nom"));
+
2642 TObjArray* osc_param_names = (TObjArray*)(OscFile->Get("osc_param_names"));
+
2643 TVectorD* osc_flat_prior = (TVectorD*)OscFile->Get("osc_flat_prior");
+
2644
+
2645 for (int i = 0; i < osc_flat_prior->GetNrows(); ++i)
+
2646 {
+
2647 ParamNom[kOSCPar].push_back( (*OscNominal)(i) );
+
2648 ParamCentral[kOSCPar].push_back( (*OscNominal)(i) );
+
2649
+
2650 ParamErrors[kOSCPar].push_back( std::sqrt((*OscMatrix)(i,i)) );
+
2651 // Push back the name
+
2652 std::string TempString = std::string(((TObjString*)osc_param_names->At(i))->GetString());
+
2653 ParamNames[kOSCPar].push_back(TempString);
+
2654
+
2655 ParamFlat[kOSCPar].push_back( (bool)((*osc_flat_prior)(i)) );
+
2656 }
+
2657 if(PlotJarlskog)
+
2658 {
+
2659 Chain->SetAlias("J_cp", "TMath::Sqrt(sin2th_13)*TMath::Sqrt(1.-sin2th_13)*TMath::Sqrt(1.-sin2th_13)*TMath::Sqrt(sin2th_12)*TMath::Sqrt(1.-sin2th_12)*TMath::Sqrt(sin2th_23)*TMath::Sqrt(1.-sin2th_23)*TMath::Sin(delta_cp)");
+
2660 BranchNames.push_back("J_cp");
+
2661 ParamType.push_back(kOSCPar);
+
2662 nParam[kOSCPar]++;
+
2663 nDraw++;
+
2664
+
2665 //TODO we should actually calucate central value and prior error but leave it for now...
+
2666 ParamNom[kOSCPar].push_back( 0. );
+
2667 ParamCentral[kOSCPar].push_back( 0. );
+
2668 ParamErrors[kOSCPar].push_back( 1. );
+
2669 // Push back the name
+
2670 ParamNames[kOSCPar].push_back("J_cp");
+
2671 ParamFlat[kOSCPar].push_back( false );
+
2672 }
+
2673 OscFile->Close();
+
2674 delete OscFile;
+
2675}
+
+
+
+ +

◆ ReadXSecFile()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ReadXSecFile ()
+
+inlineprivate
+
+ +

Definition at line 2492 of file MCMCProcessor.cpp.

+
2492 {
+
2493// ***************
+
2494 YAML::Node XSecFile;
+
2495 XSecFile["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
2496 for(unsigned int i = 0; i < CovPos[kXSecPar].size(); i++)
+
2497 {
+
2498 YAML::Node YAMLDocTemp = YAML::LoadFile(CovPos[kXSecPar][i]);
+
2499 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
2500 XSecFile["Systematics"].push_back(item);
+
2501 }
+
2502 }
+
2503
+
2504 auto systematics = XSecFile["Systematics"];
+
2505 int i = 0;
+
2506 for (auto it = systematics.begin(); it != systematics.end(); ++it, ++i)
+
2507 {
+
2508 auto const &param = *it;
+
2509
+
2510 // Push back the name
+
2511 std::string TempString = (param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
2512
+
2513 //KS:Reject particular parameter names, noticed that sometimes string comparison doesn't work becasue of some weird casting of TObjString into std::string. This is rare and sooner or later we move away from TObjString so this is fine
+
2514 bool rejected = false;
+
2515 for (unsigned int ik = 0; ik < ExcludedNames.size(); ++ik)
+
2516 {
+
2517 if (TempString.rfind(ExcludedNames.at(ik), 0) == 0)
+
2518 {
+
2519 const int Tracker = ParamTypeStartPos[kXSecPar] + i;
+
2520 BranchNames[Tracker] = "delete";
+
2521 nParam[kXSecPar]--;
+
2522 rejected = true;
+
2523 break;
+
2524 }
+
2525 }
+
2526 if(rejected) continue;
+
2527 ParamNames[kXSecPar].push_back(TempString);
+
2528 if(ParamNames[kXSecPar][i].BeginsWith("b_"))
+
2529 {
+
2530 IsXsec.push_back(false);
+
2531 nFlux++;
+
2532 }
+
2533 else IsXsec.push_back(true);
+
2534
+
2535 ParamCentral[kXSecPar].push_back( param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>() );
+
2536 ParamNom[kXSecPar].push_back( param["Systematic"]["ParameterValues"]["Generated"].as<double>() );
+
2537 ParamErrors[kXSecPar].push_back( param["Systematic"]["Error"].as<double>() );
+
2538
+
2539 bool flat = false;
+
2540 if (param["Systematic"]["FlatPrior"]) { flat = param["Systematic"]["FlatPrior"].as<bool>(); }
+
2541 ParamFlat[kXSecPar].push_back( flat );
+
2542 }
+
2543}
+
std::vector< std::string > ExcludedNames
+
+
+
+ +

◆ RemoveParameters()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::RemoveParameters ()
+
+inlineprivate
+
+ +

Definition at line 2679 of file MCMCProcessor.cpp.

+
2679 {
+
2680// ***************
+
2681
+
2682 for(int i = 0; i < nDraw; i++)
+
2683 {
+
2684 if(BranchNames[i] == "delete")
+
2685 {
+
2686 BranchNames.erase(BranchNames.begin() + i);
+
2687 ParamType.erase(ParamType.begin() + i);
+
2688 nDraw--;
+
2689 i = 0;
+
2690 }
+
2691 }
+
2692}
+
+
+
+ +

◆ ResetHistograms()

+ +
+
+ + + + + + + +
void MCMCProcessor::ResetHistograms ()
+
+ +

Reset 2D posteriors, in case we would like to calculate in again with different BurnInCut.

+ +

Definition at line 2995 of file MCMCProcessor.cpp.

+
2995 {
+
2996// **************************************************
+
2997 #ifdef MULTITHREAD
+
2998 #pragma omp parallel for
+
2999 #endif
+
3000 for (int i = 0; i < nDraw; ++i)
+
3001 {
+
3002 for (int j = 0; j <= i; ++j)
+
3003 {
+
3004 // TH2D to hold the Correlation
+
3005 hpost2D[i][j]->Reset("");
+
3006 hpost2D[i][j]->Fill(0.0, 0.0, 0.0);
+
3007 }
+
3008 }
+
3009}
+
+
+
+ +

◆ ReweightPrior()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void MCMCProcessor::ReweightPrior (std::vector< std::string > Names,
std::vector< doubleNewCentral,
std::vector< doubleNewError 
)
+
+ +

Definition at line 3336 of file MCMCProcessor.cpp.

+
3336 {
+
3337// **************************
+
3338
+
3339 if( (Names.size() != NewCentral.size()) || (NewCentral.size() != NewError.size()))
+
3340 {
+
3341 MACH3LOG_ERROR("Size of passed vectors doesn't match in ReweightPrior");
+
3342 throw;
+
3343 }
+
3344 std::vector<int> Param;
+
3345 std::vector<double> OldCentral;
+
3346 std::vector<double> OldError;
+
3347 std::vector<bool> FlatPrior;
+
3348
+
3349 //KS: First we need to find parameter number based on name
+
3350 for(unsigned int k = 0; k < Names.size(); ++k)
+
3351 {
+
3352 //KS: First we need to find parameter number based on name
+
3353 int ParamNo = GetParamIndexFromName(Names[k]);
+
3354 if(ParamNo == __UNDEF__)
+
3355 {
+
3356 MACH3LOG_WARN("Couldn't find param {}. Can't reweight Prior", Names[k]);
+
3357 continue;
+
3358 }
+
3359
+
3360 TString Title = "";
+
3361 double Prior = 1.0;
+
3362 double PriorError = 1.0;
+ +
3364
+
3365 Param.push_back(ParamNo);
+
3366 OldCentral.push_back(Prior);
+
3367 OldError.push_back(PriorError);
+
3368
+
3369 ParameterEnum ParType = ParamType[ParamNo];
+
3370 int ParamTemp = ParamNo - ParamTypeStartPos[ParType];
+
3371
+
3372 FlatPrior.push_back(ParamFlat[ParType][ParamTemp]);
+
3373 }
+
3374
+
3375 double* ParameterPos = new double[Names.size()];
+
3376
+
3377 std::string InputFile = MCMCFile+".root";
+
3378 std::string OutputFilename = MCMCFile + "_reweighted.root";
+
3379
+
3380 //KS: Simply create copy of file and add there new branch
+
3381 system(("cp "+InputFile+" "+OutputFilename).c_str());
+
3382
+
3383 TFile *OutputChain = new TFile(OutputFilename.c_str(), "UPDATE");
+
3384 OutputChain->cd();
+
3385 TTree *post = (TTree *)OutputChain->Get("posteriors");
+
3386
+
3387 double Weight = 1.;
+
3388
+
3389 post->SetBranchStatus("*",false);
+
3390 // Set the branch addresses for params
+
3391 for (unsigned int j = 0; j < Names.size(); ++j) {
+
3392 post->SetBranchStatus(BranchNames[Param[j]].Data(), true);
+
3393 post->SetBranchAddress(BranchNames[Param[j]].Data(), &ParameterPos[j]);
+
3394 }
+
3395 TBranch *bpt = post->Branch("Weight", &Weight, "Weight/D");
+
3396 post->SetBranchStatus("Weight", true);
+
3397
+
3398 for (int i = 0; i < nEntries; ++i)
+
3399 {
+
3400 post->GetEntry(i);
+
3401 Weight = 1.;
+
3402
+
3403 //KS: Calcualte reweight weight. Weights are multiplicative so we can do several reweights at once. FIXME Big limitation is that code only works for uncorelated paramters :(
+
3404 for (unsigned int j = 0; j < Names.size(); ++j)
+
3405 {
+
3406 double new_chi = (ParameterPos[j] - NewCentral[j])/NewError[j];
+
3407 double new_prior = std::exp(-0.5 * new_chi * new_chi);
+
3408
+
3409 double old_chi = -1;
+
3410 double old_prior = -1;
+
3411 if(FlatPrior[j])
+
3412 {
+
3413 old_prior = 1.0;
+
3414 }
+
3415 else
+
3416 {
+ +
3418 old_prior = std::exp(-0.5 * old_chi * old_chi);
+
3419 }
+ +
3421 }
+
3422 bpt->Fill();
+
3423 }
+
3424 post->SetBranchStatus("*",true);
+
3425 OutputChain->cd();
+
3426 post->Write("posteriors", TObject::kOverwrite);
+
3427 OutputChain->Close();
+
3428 delete OutputChain;
+
3429 delete[] ParameterPos;
+
3430
+
3431 OutputFile->cd();
+
3432}
+
+
+
+ +

◆ ScanInput()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ScanInput ()
+
+inlineprivate
+
+ +

Definition at line 2154 of file MCMCProcessor.cpp.

+
2154 {
+
2155// **************************
+
2156 // Open the Chain
+
2157 Chain = new TChain("posteriors","posteriors");
+
2158 Chain->Add(MCMCFile.c_str());
+
2159
+
2160 nEntries = Chain->GetEntries();
+
2161
+
2162 // Get the list of branches
+
2163 TObjArray* brlis = (TObjArray*)(Chain->GetListOfBranches());
+
2164
+
2165 // Get the number of branches
+
2166 nBranches = brlis->GetEntries();
+
2167
+
2168 BranchNames.reserve(nBranches);
+
2169 IamVaried.reserve(nBranches);
+
2170 ParamType.reserve(nBranches);
+
2171
+
2172 // Loop over the number of branches
+
2173 // Find the name and how many of each systematic we have
+
2174 for (int i = 0; i < nBranches; i++)
+
2175 {
+
2176 // Get the TBranch and its name
+
2177 TBranch* br = (TBranch*)brlis->At(i);
+
2178 TString bname = br->GetName();
+
2179
+
2180 //KS: Exclude paramer types
+
2181 bool rejected = false;
+
2182 for(unsigned int ik = 0; ik < ExcludedTypes.size(); ++ik )
+
2183 {
+
2184 if(bname.BeginsWith(ExcludedTypes[ik]))
+
2185 {
+
2186 rejected = true;
+
2187 break;
+
2188 }
+
2189 }
+
2190 if(rejected) continue;
+
2191 // If we're on beam systematics
+
2192 if(bname.BeginsWith("xsec_"))
+
2193 {
+
2194 BranchNames.push_back(bname);
+
2195 ParamType.push_back(kXSecPar);
+
2196 PlotXSec = true;
+
2197 nParam[kXSecPar]++;
+
2198 }
+
2199 else if (bname.BeginsWith("ndd_"))
+
2200 {
+
2201 BranchNames.push_back(bname);
+
2202 ParamType.push_back(kNDPar);
+
2203 PlotDet = true;
+
2204 nParam[kNDPar]++;
+
2205 }
+
2206 else if (bname.BeginsWith("skd_joint_"))
+
2207 {
+
2208 BranchNames.push_back(bname);
+
2209 ParamType.push_back(kFDDetPar);
+
2210 nParam[kFDDetPar]++;
+
2211 }
+
2212 else if (bname.BeginsWith("sin2th_") ||
+
2213 bname.BeginsWith("delm2_") ||
+
2214 bname.BeginsWith("delta_") )
+
2215 {
+
2216 BranchNames.push_back(bname);
+
2217 ParamType.push_back(kOSCPar);
+
2218 nParam[kOSCPar]++;
+
2219 }
+
2220
+
2221 //KS: as a bonus get LogL systeamtic
+
2222 if (bname.BeginsWith("LogL_sample_")) {
+
2223 SampleName_v.push_back(bname);
+
2224 nSamples++;
+
2225 }
+
2226 else if (bname.BeginsWith("LogL_systematic_")) {
+
2227 SystName_v.push_back(bname);
+
2228 nSysts++;
+
2229 }
+
2230 }
+
2231 nDraw = BranchNames.size();
+
2232 // Read the input Covariances
+
2233 ReadInputCov();
+
2234
+
2235 // Check order of parameter types
+ +
2237 MACH3LOG_INFO("************************************************");
+
2238 MACH3LOG_INFO("Scanning output branches...");
+
2239 MACH3LOG_INFO("# useful entries in tree: \033[1;32m {} \033[0m ", nDraw);
+
2240 MACH3LOG_INFO("# XSec params: \033[1;32m {} starting at {} \033[0m ", nParam[kXSecPar] - nFlux, ParamTypeStartPos[kXSecPar]);
+
2241 MACH3LOG_INFO("# Flux params: {}", nFlux);
+
2242 MACH3LOG_INFO("# Flux params: {}", nFlux);
+
2243 MACH3LOG_INFO("# ND params: \033[1;32m {} starting at {} \033[0m ", nParam[kNDPar] - nFlux, ParamTypeStartPos[kNDPar]);
+
2244 MACH3LOG_INFO("# FD params: \033[1;32m {} starting at {} \033[0m ", nParam[kFDDetPar] - nFlux, ParamTypeStartPos[kFDDetPar]);
+
2245 MACH3LOG_INFO("# Osc params: \033[1;32m {} starting at {} \033[0m ", nParam[kOSCPar] - nFlux, ParamTypeStartPos[kOSCPar]);
+
2246 MACH3LOG_INFO("************************************************");
+
2247
+
2248 nSteps = Chain->GetMaximum("step");
+
2249 // Set the step cut to be 20%
+
2250 int cut = nSteps/5;
+
2251 SetStepCut(cut);
+
2252}
+ +
void SetStepCut(std::string Cuts)
+
std::vector< std::string > ExcludedTypes
+ + +
+
+
+ +

◆ ScanParameterOrder()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::ScanParameterOrder ()
+
+inlineprivate
+
+ +

Definition at line 2314 of file MCMCProcessor.cpp.

+
2314 {
+
2315// *****************************
+
2316 for(int i = 0; i < kNParameterEnum; i++)
+
2317 {
+
2318 for(unsigned int j = 0; j < ParamType.size(); j++)
+
2319 {
+
2320 if(ParamType[j] == ParameterEnum(i))
+
2321 {
+
2322 //KS: When we find that i-th parameter types start at j, save and move to the next parameter.
+ +
2324 break;
+
2325 }
+
2326 }
+
2327 }
+
2328}
+
+
+
+ +

◆ SetCredibleInSigmas()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleInSigmas (const bool Intervals)
+
+inline
+
+ +

Definition at line 212 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetCredibleIntervals()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleIntervals (std::vector< doubleIntervals)
+
+inline
+
+ +

Definition at line 172 of file MCMCProcessor.h.

+
173 {
+
174 if(Intervals.size() > 1)
+
175 {
+
176 for(unsigned int i = 1; i < Intervals.size(); i++ )
+
177 {
+
178 if(Intervals[i] > Intervals[i-1])
+
179 {
+
180 std::cerr<<" Interval "<<i<<" is smaller than "<<i-1<<std::endl;
+
181 std::cerr<<Intervals[i] <<" "<<Intervals[i-1]<<std::endl;
+
182 std::cerr<<" They should be grouped in decreasing order"<<std::endl;
+
183 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
184 throw;
+
185 }
+
186 }
+
187 }
+ +
189 };
+
+
+
+ +

◆ SetCredibleIntervalsColours()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleIntervalsColours (std::vector< Color_tIntervals)
+
+inline
+
+ +

Definition at line 190 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetCredibleRegionColor()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleRegionColor (std::vector< Color_tIntervals)
+
+inline
+
+ +

Definition at line 211 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetCredibleRegions()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleRegions (std::vector< doubleIntervals)
+
+inline
+
+ +

Definition at line 192 of file MCMCProcessor.h.

+
193 {
+
194 if(Intervals.size() > 1)
+
195 {
+
196 for(unsigned int i = 1; i < Intervals.size(); i++ )
+
197 {
+
198 if(Intervals[i] > Intervals[i-1])
+
199 {
+
200 std::cerr<<" Interval "<<i<<" is smaller than "<<i-1<<std::endl;
+
201 std::cerr<<Intervals[i] <<" "<<Intervals[i-1]<<std::endl;
+
202 std::cerr<<" They should be grouped in decreasing order"<<std::endl;
+
203 std::cerr <<__FILE__ << ":" << __LINE__ << std::endl;
+
204 throw;
+
205 }
+
206 }
+
207 }
+ +
209 };
+
+
+
+ +

◆ SetCredibleRegionStyle()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetCredibleRegionStyle (std::vector< Style_tIntervals)
+
+inline
+
+ +

Definition at line 210 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetExcludedNames()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetExcludedNames (std::vector< std::string > Name)
+
+inline
+
+ +

Definition at line 162 of file MCMCProcessor.h.

+
162{ExcludedNames = Name; };
+
+
+
+ +

◆ SetExcludedTypes()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetExcludedTypes (std::vector< std::string > Name)
+
+inline
+
+ +

Definition at line 161 of file MCMCProcessor.h.

+
161{ExcludedTypes = Name; };
+
+
+
+ +

◆ SetFancyNames()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetFancyNames (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 155 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetnBatches()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetnBatches (const int Batches)
+
+inline
+
+ +

Definition at line 165 of file MCMCProcessor.h.

+
165{nBatches = Batches; };
+
+
+
+ +

◆ SetnLags()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetnLags (const int nLags)
+
+inline
+
+ +

Definition at line 166 of file MCMCProcessor.h.

+
166{AutoCorrLag = nLags; };
+
+
+
+ +

◆ SetOutputSuffix()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetOutputSuffix (const std::string Suffix)
+
+inline
+
+ +

Definition at line 168 of file MCMCProcessor.h.

+
168{OutputSuffix = Suffix; };
+
+
+
+ +

◆ SetPlotBinValue()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPlotBinValue (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 154 of file MCMCProcessor.h.

+
+
+
+
+ +

◆ SetPlotErrorForFlatPrior()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPlotErrorForFlatPrior (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 153 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetPlotRelativeToPrior()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPlotRelativeToPrior (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 151 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetPost2DPlotThreshold()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPost2DPlotThreshold (const double Threshold)
+
+inline
+
+ +

Definition at line 158 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetPosterior1DCut()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPosterior1DCut (const std::string Cut)
+
+inline
+
+ +

Definition at line 169 of file MCMCProcessor.h.

+
169{Posterior1DCut = Cut; };
+
+
+
+ +

◆ SetPrintToPDF()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetPrintToPDF (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 152 of file MCMCProcessor.h.

+
+
+
+
+ +

◆ SetSmoothing()

+ +
+
+ + + + + +
+ + + + + + + + +
void MCMCProcessor::SetSmoothing (const bool PlotOrNot)
+
+inline
+
+ +

Definition at line 156 of file MCMCProcessor.h.

+ +
+
+ +

◆ SetStepCut() [1/2]

+ +
+
+ + + + + + + + +
void MCMCProcessor::SetStepCut (const int Cuts)
+
+ +

Definition at line 2705 of file MCMCProcessor.cpp.

+
2705 {
+
2706// ***************
+
2707 std::stringstream TempStream;
+
2708 TempStream << "step > " << Cuts;
+
2709 StepCut = TempStream.str();
+
2710 BurnInCut = Cuts;
+
2711}
+
+
+
+ +

◆ SetStepCut() [2/2]

+ +
+
+ + + + + + + + +
void MCMCProcessor::SetStepCut (std::string Cuts)
+
+ +

Definition at line 2697 of file MCMCProcessor.cpp.

+
2697 {
+
2698// ***************
+
2699 StepCut = Cuts;
+
2700 BurnInCut = std::stoi( Cuts );
+
2701}
+
+
+
+ +

◆ SetupOutput()

+ +
+
+ + + + + +
+ + + + + + + +
void MCMCProcessor::SetupOutput ()
+
+inlineprivate
+
+ +

Definition at line 2256 of file MCMCProcessor.cpp.

+
2256 {
+
2257// ****************************
+
2258
+
2259 // Make sure we can read files located anywhere and strip the .root ending
+
2260 MCMCFile = MCMCFile.substr(0, MCMCFile.find(".root"));
+
2261
+
2262 // Check if the output file is ready
+
2263 if (OutputFile == nullptr) MakeOutputFile();
+
2264
+
2265 CanvasName = MCMCFile + OutputSuffix + ".pdf[";
+
2266 if(printToPDF) Posterior->Print(CanvasName);
+
2267
+
2268 // Once the pdf file is open no longer need to bracket
+
2269 CanvasName.ReplaceAll("[","");
+
2270
+
2271 // We fit with this Gaussian
+
2272 Gauss = new TF1("gauss","[0]/sqrt(2.0*3.14159)/[2]*TMath::Exp(-0.5*pow(x-[1],2)/[2]/[2])", -5, 5);
+
2273
+
2274 // Declare the TVectors
+ + + +
2278 Means = new TVectorD(nDraw);
+
2279 Errors = new TVectorD(nDraw);
+
2280 Means_Gauss = new TVectorD(nDraw);
+ +
2282 Means_HPD = new TVectorD(nDraw);
+
2283 Errors_HPD = new TVectorD(nDraw);
+ + +
2286
+
2287 // Initialise to something silly
+
2288 #ifdef MULTITHREAD
+
2289 #pragma omp parallel for
+
2290 #endif
+
2291 for (int i = 0; i < nDraw; ++i)
+
2292 {
+
2293 (*Central_Value)(i) = __UNDEF__;
+
2294 (*Means)(i) = __UNDEF__;
+
2295 (*Errors)(i) = __UNDEF__;
+
2296 (*Means_Gauss)(i) = __UNDEF__;
+
2297 (*Errors_Gauss)(i) = __UNDEF__;
+
2298 (*Means_HPD)(i) = __UNDEF__;
+
2299 (*Errors_HPD)(i) = __UNDEF__;
+
2300 (*Errors_HPD_Positive)(i) = __UNDEF__;
+
2301 (*Errors_HPD_Negative)(i) = __UNDEF__;
+
2302 for (int j = 0; j < nDraw; ++j) {
+
2303 (*Covariance)(i, j) = __UNDEF__;
+
2304 (*Correlation)(i, j) = __UNDEF__;
+
2305 }
+
2306 }
+
2307
+
2308 hpost = new TH1D*[nDraw]();
+
2309}
+
+
+
+

Member Data Documentation

+ +

◆ AccProbBatchedAverages

+ +
+
+ + + + + +
+ + + + +
double* MCMCProcessor::AccProbBatchedAverages
+
+private
+
+ +

Definition at line 389 of file MCMCProcessor.h.

+ +
+
+ +

◆ AccProbValues

+ +
+
+ + + + + +
+ + + + +
double* MCMCProcessor::AccProbValues
+
+private
+
+ +

Definition at line 388 of file MCMCProcessor.h.

+ +
+
+ +

◆ ApplySmoothing

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::ApplySmoothing
+
+private
+
+ +

Definition at line 323 of file MCMCProcessor.h.

+ +
+
+ +

◆ AutoCorrLag

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::AutoCorrLag
+
+private
+
+ +

Definition at line 375 of file MCMCProcessor.h.

+ +
+
+ +

◆ BatchedAverages

+ +
+
+ + + + + +
+ + + + +
double** MCMCProcessor::BatchedAverages
+
+private
+
+ +

Definition at line 379 of file MCMCProcessor.h.

+ +
+
+ +

◆ BranchNames

+ +
+
+ + + + + +
+ + + + +
std::vector<TString> MCMCProcessor::BranchNames
+
+private
+
+ +

Definition at line 277 of file MCMCProcessor.h.

+ +
+
+ +

◆ BurnInCut

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::BurnInCut
+
+private
+
+ +

Definition at line 268 of file MCMCProcessor.h.

+ +
+
+ +

◆ CacheMCMC

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::CacheMCMC
+
+private
+
+ +

Definition at line 370 of file MCMCProcessor.h.

+ +
+
+ +

◆ CanvasName

+ +
+
+ + + + + +
+ + + + +
TString MCMCProcessor::CanvasName
+
+private
+
+ +

Definition at line 308 of file MCMCProcessor.h.

+ +
+
+ +

◆ Central_Value

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Central_Value
+
+private
+
+ +

Definition at line 342 of file MCMCProcessor.h.

+ +
+
+ +

◆ Chain

+ +
+
+ + + + + +
+ + + + +
TChain* MCMCProcessor::Chain
+
+private
+
+ +

Definition at line 264 of file MCMCProcessor.h.

+ +
+
+ +

◆ Correlation

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* MCMCProcessor::Correlation
+
+private
+
+ +

Definition at line 353 of file MCMCProcessor.h.

+ +
+
+ +

◆ Covariance

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* MCMCProcessor::Covariance
+
+private
+
+ +

Definition at line 352 of file MCMCProcessor.h.

+ +
+
+ +

◆ CovPos

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<std::string> > MCMCProcessor::CovPos
+
+private
+
+ +

Definition at line 257 of file MCMCProcessor.h.

+ +
+
+ +

◆ Credible_Intervals

+ +
+
+ + + + + +
+ + + + +
std::vector<double> MCMCProcessor::Credible_Intervals
+
+private
+
+ +

Definition at line 407 of file MCMCProcessor.h.

+ +
+
+ +

◆ Credible_IntervalsColours

+ +
+
+ + + + + +
+ + + + +
std::vector<Color_t> MCMCProcessor::Credible_IntervalsColours
+
+private
+
+ +

Definition at line 408 of file MCMCProcessor.h.

+ +
+
+ +

◆ Credible_RegionColor

+ +
+
+ + + + + +
+ + + + +
std::vector<Color_t> MCMCProcessor::Credible_RegionColor
+
+private
+
+ +

Definition at line 412 of file MCMCProcessor.h.

+ +
+
+ +

◆ Credible_Regions

+ +
+
+ + + + + +
+ + + + +
std::vector<double> MCMCProcessor::Credible_Regions
+
+private
+
+ +

Definition at line 410 of file MCMCProcessor.h.

+ +
+
+ +

◆ Credible_RegionStyle

+ +
+
+ + + + + +
+ + + + +
std::vector<Style_t> MCMCProcessor::Credible_RegionStyle
+
+private
+
+ +

Definition at line 411 of file MCMCProcessor.h.

+ +
+
+ +

◆ CredibleInSigmas

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::CredibleInSigmas
+
+private
+
+ +

Definition at line 325 of file MCMCProcessor.h.

+ +
+
+ +

◆ doDiagMCMC

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::doDiagMCMC
+
+private
+
+ +

Definition at line 371 of file MCMCProcessor.h.

+ +
+
+ +

◆ DrawRange

+ +
+
+ + + + + +
+ + + + +
double MCMCProcessor::DrawRange
+
+private
+
+ +

Definition at line 367 of file MCMCProcessor.h.

+ +
+
+ +

◆ Errors

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Errors
+
+private
+
+ +

Definition at line 344 of file MCMCProcessor.h.

+ +
+
+ +

◆ Errors_Gauss

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Errors_Gauss
+
+private
+
+ +

Definition at line 346 of file MCMCProcessor.h.

+ +
+
+ +

◆ Errors_HPD

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Errors_HPD
+
+private
+
+ +

Definition at line 348 of file MCMCProcessor.h.

+ +
+
+ +

◆ Errors_HPD_Negative

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Errors_HPD_Negative
+
+private
+
+ +

Definition at line 350 of file MCMCProcessor.h.

+ +
+
+ +

◆ Errors_HPD_Positive

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Errors_HPD_Positive
+
+private
+
+ +

Definition at line 349 of file MCMCProcessor.h.

+ +
+
+ +

◆ ExcludedNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> MCMCProcessor::ExcludedNames
+
+private
+
+ +

Definition at line 279 of file MCMCProcessor.h.

+ +
+
+ +

◆ ExcludedTypes

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> MCMCProcessor::ExcludedTypes
+
+private
+
+ +

Definition at line 278 of file MCMCProcessor.h.

+ +
+
+ +

◆ FancyPlotNames

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::FancyPlotNames
+
+private
+
+ +

Definition at line 321 of file MCMCProcessor.h.

+ +
+
+ +

◆ Gauss

+ +
+
+ + + + + +
+ + + + +
TF1* MCMCProcessor::Gauss
+
+private
+
+ +

Definition at line 333 of file MCMCProcessor.h.

+ +
+
+ +

◆ hpost

+ +
+
+ + + + + +
+ + + + +
TH1D** MCMCProcessor::hpost
+
+private
+
+ +

Definition at line 356 of file MCMCProcessor.h.

+ +
+
+ +

◆ hpost2D

+ +
+
+ + + + + +
+ + + + +
TH2D*** MCMCProcessor::hpost2D
+
+private
+
+ +

Definition at line 357 of file MCMCProcessor.h.

+ +
+
+ +

◆ hviolin

+ +
+
+ + + + + +
+ + + + +
TH2D* MCMCProcessor::hviolin
+
+private
+
+ +

Definition at line 358 of file MCMCProcessor.h.

+ +
+
+ +

◆ hviolin_prior

+ +
+
+ + + + + +
+ + + + +
TH2D* MCMCProcessor::hviolin_prior
+
+private
+
+ +

Definition at line 359 of file MCMCProcessor.h.

+ +
+
+ +

◆ IamVaried

+ +
+
+ + + + + +
+ + + + +
std::vector<bool> MCMCProcessor::IamVaried
+
+private
+
+ +

Definition at line 285 of file MCMCProcessor.h.

+ +
+
+ +

◆ IsXsec

+ +
+
+ + + + + +
+ + + + +
std::vector<bool> MCMCProcessor::IsXsec
+
+private
+
+ +

Definition at line 300 of file MCMCProcessor.h.

+ +
+
+ +

◆ LagL

+ +
+
+ + + + + +
+ + + + +
double** MCMCProcessor::LagL
+
+private
+
+ +

Definition at line 380 of file MCMCProcessor.h.

+ +
+
+ +

◆ MadePostfit

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::MadePostfit
+
+private
+
+ +

Definition at line 319 of file MCMCProcessor.h.

+ +
+
+ +

◆ MakeCorr

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::MakeCorr
+
+private
+
+ +

Definition at line 317 of file MCMCProcessor.h.

+ +
+
+ +

◆ MCMCFile

+ +
+
+ + + + + +
+ + + + +
std::string MCMCProcessor::MCMCFile
+
+private
+
+ +

Definition at line 254 of file MCMCProcessor.h.

+ +
+
+ +

◆ Means

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Means
+
+private
+
+ +

Definition at line 343 of file MCMCProcessor.h.

+ +
+
+ +

◆ Means_Gauss

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Means_Gauss
+
+private
+
+ +

Definition at line 345 of file MCMCProcessor.h.

+ +
+
+ +

◆ Means_HPD

+ +
+
+ + + + + +
+ + + + +
TVectorD* MCMCProcessor::Means_HPD
+
+private
+
+ +

Definition at line 347 of file MCMCProcessor.h.

+ +
+
+ +

◆ nBatches

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nBatches
+
+private
+
+ +

Definition at line 374 of file MCMCProcessor.h.

+ +
+
+ +

◆ nBins

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nBins
+
+private
+
+ +

Definition at line 365 of file MCMCProcessor.h.

+ +
+
+ +

◆ nBranches

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nBranches
+
+private
+
+ +

Definition at line 269 of file MCMCProcessor.h.

+ +
+
+ +

◆ nDraw

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nDraw
+
+private
+
+ +

Definition at line 282 of file MCMCProcessor.h.

+ +
+
+ +

◆ NDSamplesBins

+ +
+
+ + + + + +
+ + + + +
std::vector< int > MCMCProcessor::NDSamplesBins
+
+private
+
+ +

Definition at line 329 of file MCMCProcessor.h.

+ +
+
+ +

◆ NDSamplesNames

+ +
+
+ + + + + +
+ + + + +
std::vector< std::string > MCMCProcessor::NDSamplesNames
+
+private
+
+ +

Definition at line 330 of file MCMCProcessor.h.

+ +
+
+ +

◆ nEntries

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nEntries
+
+private
+
+ +

Definition at line 271 of file MCMCProcessor.h.

+ +
+
+ +

◆ nFlux

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nFlux
+
+private
+
+ +

Definition at line 301 of file MCMCProcessor.h.

+ +
+
+ +

◆ nParam

+ +
+
+ + + + + +
+ + + + +
std::vector<int> MCMCProcessor::nParam
+
+private
+
+ +

Definition at line 292 of file MCMCProcessor.h.

+ +
+
+ +

◆ nSamples

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nSamples
+
+private
+
+ +

Definition at line 273 of file MCMCProcessor.h.

+ +
+
+ +

◆ nSteps

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nSteps
+
+private
+
+ +

Definition at line 272 of file MCMCProcessor.h.

+ +
+
+ +

◆ nSysts

+ +
+
+ + + + + +
+ + + + +
int MCMCProcessor::nSysts
+
+private
+
+ +

Definition at line 274 of file MCMCProcessor.h.

+ +
+
+ +

◆ OutputFile

+ +
+
+ + + + + +
+ + + + +
TFile* MCMCProcessor::OutputFile
+
+private
+
+ +

Definition at line 336 of file MCMCProcessor.h.

+ +
+
+ +

◆ OutputName

+ +
+
+ + + + + +
+ + + + +
std::string MCMCProcessor::OutputName
+
+private
+
+ +

Definition at line 307 of file MCMCProcessor.h.

+ +
+
+ +

◆ OutputSuffix

+ +
+
+ + + + + +
+ + + + +
std::string MCMCProcessor::OutputSuffix
+
+private
+
+ +

Definition at line 255 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamCentral

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<double> > MCMCProcessor::ParamCentral
+
+private
+
+ +

Definition at line 287 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamErrors

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<double> > MCMCProcessor::ParamErrors
+
+private
+
+ +

Definition at line 289 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamFlat

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<bool> > MCMCProcessor::ParamFlat
+
+private
+
+ +

Definition at line 290 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<TString> > MCMCProcessor::ParamNames
+
+private
+
+ +

Definition at line 286 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamNom

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<double> > MCMCProcessor::ParamNom
+
+private
+
+ +

Definition at line 288 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamSums

+ +
+
+ + + + + +
+ + + + +
double* MCMCProcessor::ParamSums
+
+private
+
+ +

Definition at line 378 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamType

+ +
+
+ + + + + +
+ + + + +
std::vector<ParameterEnum> MCMCProcessor::ParamType
+
+private
+
+ +

Definition at line 294 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParamTypeStartPos

+ +
+
+ + + + + +
+ + + + +
std::vector<int> MCMCProcessor::ParamTypeStartPos
+
+private
+
+ +

Definition at line 297 of file MCMCProcessor.h.

+ +
+
+ +

◆ ParStep

+ +
+
+ + + + + +
+ + + + +
double** MCMCProcessor::ParStep
+
+private
+
+ +

Definition at line 361 of file MCMCProcessor.h.

+ +
+
+ +

◆ plotBinValue

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::plotBinValue
+
+private
+
+ +

Definition at line 322 of file MCMCProcessor.h.

+ +
+
+ +

◆ PlotDet

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::PlotDet
+
+private
+
+ +

Definition at line 312 of file MCMCProcessor.h.

+ +
+
+ +

◆ PlotFlatPrior

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::PlotFlatPrior
+
+private
+
+ +

Definition at line 313 of file MCMCProcessor.h.

+ +
+
+ +

◆ PlotJarlskog

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::PlotJarlskog
+
+private
+
+ +

Definition at line 314 of file MCMCProcessor.h.

+ +
+
+ +

◆ plotRelativeToPrior

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::plotRelativeToPrior
+
+private
+
+ +

Definition at line 318 of file MCMCProcessor.h.

+ +
+
+ +

◆ PlotXSec

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::PlotXSec
+
+private
+
+ +

Definition at line 311 of file MCMCProcessor.h.

+ +
+
+ +

◆ Post2DPlotThreshold

+ +
+
+ + + + + +
+ + + + +
double MCMCProcessor::Post2DPlotThreshold
+
+private
+
+ +

Definition at line 327 of file MCMCProcessor.h.

+ +
+
+ +

◆ Posterior

+ +
+
+ + + + + +
+ + + + +
TCanvas* MCMCProcessor::Posterior
+
+private
+
+ +

Definition at line 339 of file MCMCProcessor.h.

+ +
+
+ +

◆ Posterior1DCut

+ +
+
+ + + + + +
+ + + + +
std::string MCMCProcessor::Posterior1DCut
+
+private
+
+ +

Definition at line 267 of file MCMCProcessor.h.

+ +
+
+ +

◆ printToPDF

+ +
+
+ + + + + +
+ + + + +
bool MCMCProcessor::printToPDF
+
+private
+
+ +

Definition at line 320 of file MCMCProcessor.h.

+ +
+
+ +

◆ SampleName_v

+ +
+
+ + + + + +
+ + + + +
std::vector<TString> MCMCProcessor::SampleName_v
+
+private
+
+ +

Definition at line 304 of file MCMCProcessor.h.

+ +
+
+ +

◆ SampleValues

+ +
+
+ + + + + +
+ + + + +
double** MCMCProcessor::SampleValues
+
+private
+
+ +

Definition at line 383 of file MCMCProcessor.h.

+ +
+
+ +

◆ StepCut

+ +
+
+ + + + + +
+ + + + +
std::string MCMCProcessor::StepCut
+
+private
+
+ +

Definition at line 266 of file MCMCProcessor.h.

+ +
+
+ +

◆ StepNumber

+ +
+
+ + + + + +
+ + + + +
int* MCMCProcessor::StepNumber
+
+private
+
+ +

Definition at line 362 of file MCMCProcessor.h.

+ +
+
+ +

◆ SystName_v

+ +
+
+ + + + + +
+ + + + +
std::vector<TString> MCMCProcessor::SystName_v
+
+private
+
+ +

Definition at line 305 of file MCMCProcessor.h.

+ +
+
+ +

◆ SystValues

+ +
+
+ + + + + +
+ + + + +
double** MCMCProcessor::SystValues
+
+private
+
+ +

Definition at line 385 of file MCMCProcessor.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classMaCh3__Modes-members.html b/classMaCh3__Modes-members.html new file mode 100644 index 00000000..1d21f162 --- /dev/null +++ b/classMaCh3__Modes-members.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
MaCh3_Modes Member List
+
+
+ +

This is the complete list of members for MaCh3_Modes, including all inherited members.

+ + + + + +
GetNModes()MaCh3_Modesvirtual
Mode_ToFancyString(int i)MaCh3_Modesvirtual
Mode_ToSplineMode(int i)MaCh3_Modesvirtual
Mode_ToString(int i)MaCh3_Modesvirtual
+ + + + diff --git a/classMaCh3__Modes.html b/classMaCh3__Modes.html new file mode 100644 index 00000000..c60a6c6f --- /dev/null +++ b/classMaCh3__Modes.html @@ -0,0 +1,210 @@ + + + + + + + +MaCh3: MaCh3_Modes Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
MaCh3_Modes Class Reference
+
+
+ +

#include <Structs.h>

+ + + + + + + + + + +

+Public Member Functions

virtual int GetNModes ()
 
virtual std::string Mode_ToString (int i)
 
virtual std::string Mode_ToFancyString (int i)
 
virtual int Mode_ToSplineMode (int i)
 
+

Detailed Description

+
+

Definition at line 1042 of file Structs.h.

+

Member Function Documentation

+ +

◆ GetNModes()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int MaCh3_Modes::GetNModes ()
+
+virtual
+
+ +
+
+ +

◆ Mode_ToFancyString()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::string MaCh3_Modes::Mode_ToFancyString (int i)
+
+virtual
+
+ +
+
+ +

◆ Mode_ToSplineMode()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int MaCh3_Modes::Mode_ToSplineMode (int i)
+
+virtual
+
+ +
+
+ +

◆ Mode_ToString()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::string MaCh3_Modes::Mode_ToString (int i)
+
+virtual
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classMinuitFit-members.html b/classMinuitFit-members.html new file mode 100644 index 00000000..09a6f77a --- /dev/null +++ b/classMinuitFit-members.html @@ -0,0 +1,136 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
MinuitFit Member List
+
+
+ +

This is the complete list of members for MinuitFit, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accCountFitterBaseprotected
accProbFitterBaseprotected
addOscHandler(covarianceOsc *oscf)FitterBase
addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)FitterBase
addSamplePDF(samplePDFBase *sample)FitterBase
addSystObj(covarianceBase *cov)FitterBase
auto_saveFitterBaseprotected
CalcChi2(const double *x)LikelihoodFitvirtual
clockFitterBaseprotected
CovFolderFitterBaseprotected
FileSavedFitterBaseprotected
fitManFitterBaseprotected
FitterBase(manager *const fitMan)FitterBase
fMirroringLikelihoodFitprotected
fTestLikelihoodFitterBaseprotected
GetName() constMinuitFitinlinevirtual
GetNPars()LikelihoodFitinline
LikelihoodFit(manager *const fitMan)LikelihoodFit
logLCurrFitterBaseprotected
logLPropFitterBaseprotected
minuitMinuitFitprivate
MinuitFit(manager *const fitMan)MinuitFit
NParsLikelihoodFitprotected
NParsPCALikelihoodFitprotected
oscFitterBaseprotected
osc2FitterBaseprotected
osc_llhFitterBaseprotected
outputFileFitterBaseprotected
OutputPreparedFitterBaseprotected
outTreeFitterBaseprotected
PrepareFit()LikelihoodFitprotected
PrepareOutput()FitterBaseprotected
randomFitterBaseprotected
Run2DLLHScan()FitterBase
RunLLHScan()FitterBase
runMCMC() overrideMinuitFitvirtual
sample_llhFitterBaseprotected
samplesFitterBaseprotected
save_nominalFitterBaseprotected
SaveOutput()FitterBaseprotected
SaveSettings()FitterBaseprotected
SettingsSavedFitterBaseprotected
stepFitterBaseprotected
stepClockFitterBaseprotected
stepTimeFitterBaseprotected
syst_llhFitterBaseprotected
systematicsFitterBaseprotected
~FitterBase()FitterBasevirtual
~LikelihoodFit()LikelihoodFitvirtual
~MinuitFit()MinuitFitvirtual
+ + + + diff --git a/classMinuitFit.html b/classMinuitFit.html new file mode 100644 index 00000000..b4904d7e --- /dev/null +++ b/classMinuitFit.html @@ -0,0 +1,607 @@ + + + + + + + +MaCh3: MinuitFit Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
MinuitFit Class Reference
+
+
+ +

#include <MinuitFit.h>

+
+Inheritance diagram for MinuitFit:
+
+
+ + +LikelihoodFit +FitterBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MinuitFit (manager *const fitMan)
 Constructor.
 
virtual ~MinuitFit ()
 Destructor.
 
void runMCMC () override
 Actual implementation of Minuit Fit algorithm.
 
std::string GetName () const
 Get name of class.
 
- Public Member Functions inherited from LikelihoodFit
 LikelihoodFit (manager *const fitMan)
 Constructor.
 
virtual ~LikelihoodFit ()
 Destructor.
 
virtual double CalcChi2 (const double *x)
 Chi2 calculation over all included samples and syst objects.
 
int GetNPars ()
 Get total number of params, this sums over all covariance objects.
 
- Public Member Functions inherited from FitterBase
 FitterBase (manager *const fitMan)
 Constructor.
 
virtual ~FitterBase ()
 Destructor.
 
void addSamplePDF (samplePDFBase *sample)
 This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.
 
void addSystObj (covarianceBase *cov)
 This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.
 
void addOscHandler (covarianceOsc *oscf)
 Adds an oscillation handler for covariance objects.
 
void addOscHandler (covarianceOsc *osca, covarianceOsc *oscb)
 Adds two oscillation handlers for covariance objects.
 
void RunLLHScan ()
 Perform a 1D likelihood scan.
 
void Run2DLLHScan ()
 Perform a 2D likelihood scan.
 
+ + + + +

+Private Attributes

ROOT::Math::Minimizer * minuit
 Pointer to minimizer, which most often is Minuit.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from LikelihoodFit
void PrepareFit ()
 prepare output and perform sanity checks
 
- Protected Member Functions inherited from FitterBase
void PrepareOutput ()
 Prepare the output file.
 
void SaveOutput ()
 Save output and close files.
 
void SaveSettings ()
 Save the settings that the MCMC was run with.
 
- Protected Attributes inherited from LikelihoodFit
int NPars
 Number of all parameters from all covariances.
 
int NParsPCA
 Number of all parameters from all covariances in PCA base.
 
bool fMirroring
 Flag telling if mirroring is used or not.
 
- Protected Attributes inherited from FitterBase
managerfitMan
 The manager.
 
unsigned int step
 current state
 
double logLCurr
 current likelihood
 
double logLProp
 proposed likelihood
 
double accProb
 current acceptance prob
 
int accCount
 counts accepted steps
 
double osc_llh
 
doublesample_llh
 store the llh breakdowns
 
doublesyst_llh
 systematic llh breakdowns
 
std::vector< samplePDFBase * > samples
 Sample holder.
 
std::vector< covarianceBase * > systematics
 Systematic holder.
 
covarianceOscosc
 handles oscillation parameters
 
covarianceOscosc2
 handles oscillation parameters
 
TStopwatchclock
 tells global time how long fit took
 
TStopwatchstepClock
 tells how long single step/fit iteration took
 
double stepTime
 Time of single step.
 
TRandom3random
 Random number.
 
TFileoutputFile
 Output.
 
TDirectoryCovFolder
 Output cov folder.
 
TTreeoutTree
 Output tree with posteriors.
 
int auto_save
 auto save every N steps
 
bool fTestLikelihood
 Necessary for some fitting algorithms like PSO.
 
bool save_nominal
 save nominal matrix info or not
 
bool FileSaved
 Checks if file saved not repeat some operations.
 
bool SettingsSaved
 Checks if setting saved not repeat some operations.
 
bool OutputPrepared
 Checks if output prepared not repeat some operations.
 
+

Detailed Description

+
+

Definition at line 8 of file MinuitFit.h.

+

Constructor & Destructor Documentation

+ +

◆ MinuitFit()

+ +
+
+ + + + + + + + +
MinuitFit::MinuitFit (manager *const fitMan)
+
+ +

Constructor.

+ +

Definition at line 5 of file MinuitFit.cpp.

+
+
6// *******************
+
7
+
8 MACH3LOG_INFO("Creating instance of Minimizer with Minuit2 and Migrad");
+
9
+
10 //Other then Migrad available are Simplex,Combined,Scan
+
11 minuit = ROOT::Math::Factory::CreateMinimizer("Minuit2", "Migrad");
+
12}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
ROOT::Math::Minimizer * minuit
Pointer to minimizer, which most often is Minuit.
Definition MinuitFit.h:23
+
+
+
+ +

◆ ~MinuitFit()

+ +
+
+ + + + + +
+ + + + + + + +
MinuitFit::~MinuitFit ()
+
+virtual
+
+ +

Destructor.

+ +

Definition at line 16 of file MinuitFit.cpp.

+
16 {
+
17// *************************
+
18 if(minuit != NULL) delete minuit;
+
19}
+
+
+
+

Member Function Documentation

+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string MinuitFit::GetName () const
+
+inlinevirtual
+
+ +

Get name of class.

+ +

Reimplemented from LikelihoodFit.

+ +

Definition at line 19 of file MinuitFit.h.

+
19{return "MinuitFit";};
+
+
+
+ +

◆ runMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void MinuitFit::runMCMC ()
+
+overridevirtual
+
+ +

Actual implementation of Minuit Fit algorithm.

+ +

Implements LikelihoodFit.

+ +

Definition at line 24 of file MinuitFit.cpp.

+
24 {
+
25// *******************
+
26
+
27 PrepareFit();
+
28
+
29 //KS: For none PCA this will be equal to normal parameters
+
30 const int NparsMinuitFull = NPars;
+
31 const int NparsMinuit = NParsPCA;
+
32
+
33 //KS: Set SetFunction we will Minimize
+
34 ROOT::Math::Functor fChi2(this, &MinuitFit::CalcChi2, NparsMinuit);
+
35 minuit->SetFunction(fChi2);
+
36
+
37 //KS: add config or something
+
38 minuit->SetPrintLevel(2);
+
39 minuit->SetTolerance(0.01);
+
40 minuit->SetMaxFunctionCalls(fitMan->raw()["General.NSteps"].as<double>());
+
41 minuit->SetMaxIterations(10000);
+
42
+
43 MACH3LOG_INFO("Preparing Minuit");
+
44 int ParCounter = 0;
+
45
+
46 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
47 {
+
48 if(!(*it)->IsPCA())
+
49 {
+
50 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
51 {
+
52 //KS: Index, name, prior, step scale [differrent to MCMC],
+
53 minuit->SetVariable(ParCounter, ((*it)->GetParName(i)), (*it)->getParInit(i), (*it)->getDiagonalError(i)/10);
+
54 minuit->SetVariableValue(ParCounter, (*it)->getParInit(i));
+
55 //KS: lower bound, upper bound, if Mirroring eneabled then ignore
+
56 if(!fMirroring) minuit->SetVariableLimits(ParCounter, (*it)->GetLowerBound(i), (*it)->GetUpperBound(i));
+
57 if((*it)->isParameterFixed(i))
+
58 {
+
59 minuit->FixVariable(ParCounter);
+
60 }
+
61 }
+
62 }
+
63 else
+
64 {
+
65 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
66 {
+
67 minuit->SetVariable(ParCounter, Form("%i_PCA", i), (*it)->getParProp_PCA(i), (*it)->getEigenValuesMaster()[i]/10);
+
68 if((*it)->isParameterFixedPCA(i))
+
69 {
+
70 minuit->FixVariable(ParCounter);
+
71 }
+
72 }
+
73 }
+
74 }
+
75
+
76 minuit->SetPrintLevel(2);
+
77
+
78 MACH3LOG_INFO("Starting MIGRAD");
+
79 minuit->Minimize();
+
80
+
81 MACH3LOG_INFO("Starting HESSE");
+
82 minuit->Hesse();
+
83 outputFile->cd();
+
84
+ + + +
88
+
89 for(int i = 0; i < NparsMinuitFull; ++i)
+
90 {
+
91 (*MinuitParValue)(i) = 0;
+
92 (*MinuitParError)(i) = 0;
+
93 for(int j = 0; j < NparsMinuitFull; ++j)
+
94 {
+
95 (*Postmatrix)(i,j) = 0;
+
96 (*Postmatrix)(i,j) = minuit->CovMatrix(i,j);
+
97 }
+
98 }
+
99
+
100 ParCounter = 0;
+
101 const double *X = minuit->X();
+
102 const double *err = minuit->Errors();
+
103 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
104 {
+
105 if(!(*it)->IsPCA())
+
106 {
+
107 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
108 {
+
109 double ParVal = X[ParCounter];
+
110 //KS: Basically apply mirroring for parameters out of bounds
+
111 if(fMirroring)
+
112 {
+
113 if(ParVal < (*it)->GetLowerBound(i))
+
114 {
+
115 ParVal = (*it)->GetLowerBound(i) + ((*it)->GetLowerBound(i) - ParVal);
+
116 }
+
117 else if (ParVal > (*it)->GetUpperBound(i))
+
118 {
+
119 ParVal = (*it)->GetUpperBound(i) - ( ParVal - (*it)->GetUpperBound(i));
+
120 }
+
121 }
+
122 (*MinuitParValue)(ParCounter) = ParVal;
+
123 (*MinuitParError)(ParCounter) = err[ParCounter];
+
124 //KS: For fixed params HESS will not calcuate error so we need to pass prior error
+
125 if((*it)->isParameterFixed(i))
+
126 {
+
127 (*MinuitParError)(ParCounter) = (*it)->getDiagonalError(i);
+ +
129 }
+
130 }
+
131 }
+
132 else
+
133 {
+
134 //KS: We need to convert parameters from PCA to normal base
+
135 TVectorD ParVals((*it)->getSize());
+
136 TVectorD ParVals_PCA((*it)->getNpars());
+
137
+
138 TVectorD ErrorVals((*it)->getSize());
+
139 TVectorD ErrorVals_PCA((*it)->getNpars());
+
140
+
141 TMatrixD MatrixVals((*it)->getSize(), (*it)->getSize());
+
142 TMatrixD MatrixVals_PCA((*it)->getNpars(), (*it)->getNpars());
+
143
+
144 //First save them
+
145 //KS: This code is super convoluted as MaCh3 can store separate matrices while Minuit has one matrix. In future this will be simplified, keep it like this for now.
+
146 const int StartVal = ParCounter;
+
147 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
148 {
+ + + +
152 for(int j = 0; j < (*it)->getNpars(); ++j, ++ParCounterMatrix)
+
153 {
+ +
155 }
+
156 }
+
157 ParVals = ((*it)->getTransferMatrix())*ParVals_PCA;
+
158 ErrorVals = ((*it)->getTransferMatrix())*ErrorVals_PCA;
+
159 MatrixVals.Mult(((*it)->getTransferMatrix()),MatrixVals_PCA);
+
160
+ +
162 //KS: Now after going from PCA to normal let';s save it
+
163 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
164 {
+
165 (*MinuitParValue)(ParCounter) = ParVals(i);
+
166 (*MinuitParError)(ParCounter) = std::fabs(ErrorVals(i));
+ +
168 for(int j = 0; j < (*it)->getSize(); ++j, ++ParCounterMatrix)
+
169 {
+
170 (*Postmatrix)(ParCounter,ParCounterMatrix) = MatrixVals(i,j);
+
171 }
+
172 //If fixed take prior
+
173 if((*it)->isParameterFixedPCA(i))
+
174 {
+
175 (*MinuitParError)(ParCounter) = (*it)->getDiagonalError(i);
+ +
177 }
+
178 }
+
179 }
+
180 }
+
181
+
182 MinuitParValue->Write("MinuitParValue");
+
183 MinuitParError->Write("MinuitParError");
+
184 Postmatrix->Write("Postmatrix");
+
185 delete MinuitParValue;
+
186 delete MinuitParError;
+
187 delete Postmatrix;
+
188 // Save all the output
+
189 SaveOutput();
+
190}
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
int NParsPCA
Number of all parameters from all covariances in PCA base.
+
int NPars
Number of all parameters from all covariances.
+
void PrepareFit()
prepare output and perform sanity checks
+
bool fMirroring
Flag telling if mirroring is used or not.
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
+
+
+

Member Data Documentation

+ +

◆ minuit

+ +
+
+ + + + + +
+ + + + +
ROOT::Math::Minimizer* MinuitFit::minuit
+
+private
+
+ +

Pointer to minimizer, which most often is Minuit.

+ +

Definition at line 23 of file MinuitFit.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classMinuitFit.png b/classMinuitFit.png new file mode 100644 index 0000000000000000000000000000000000000000..de3def77991e92142db05e06f51bc0ffe6f6fc44 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^!9d)>!3-qVOjW-Jq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)ziM(Rwdqt%ro)#6~LUqqu7p)KfTl4tiJiAFxvi;7b z-Ll>-t77@!l%&@&!>y(PbKG_QzUkXp7IwXV)}-{Vt8{(%GSBgtKr=P3)>^kpulD*CP@2*`_7nbE!KdO1*v#H3T zbbFe|N4=*Ljnyt%R7ct#De|*?eQJM+-_x1z?_K+DoF2X<`(~`|?ERY}mfM}5y>I!d zpZ~2rr9jpsmy+&E)fRys$AD1NqjOiSD(ji!o+9fnpRBX3e9z-UlFpd{p}85Z@2$U= z$E$C<>LvE><*KZ|eedO1kJ}b!ReoD#6@2c~?xT{Ye@@#h#y9u>iO+)Rt1UvWo!BY4 uc~{xFud$(Dh3~9fm36$|+L`0vH2cJ`u-X$%sVjjAfWgz%&t;ucLK6T2q#I%Y literal 0 HcmV?d00001 diff --git a/classOscillator-members.html b/classOscillator-members.html new file mode 100644 index 00000000..13a9db4c --- /dev/null +++ b/classOscillator-members.html @@ -0,0 +1,215 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Oscillator Member List
+
+
+ +

This is the complete list of members for Oscillator, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArrayConfigOscillatorprivate
CheckEarthDensityFile()Oscillatorprivate
chemicalComposition_NomOscillatorprivate
DefineMiscValues()Oscillatorprivate
DefinePropagatorEnums()Oscillatorprivate
DeleteArrays()Oscillatorprivate
DeleteHistograms()Oscillatorprivate
DeleteOscillogram()Oscillatorprivate
DeletePropagator()Oscillatorprivate
EarthDensityFileOscillatorprivate
fBinningOscillatorprivate
fFillHistogramsOscillatorprivate
FillArrays()Oscillatorprivate
FillArrays_ManyContrib_Area()Oscillatorprivate
FillArrays_Standard()Oscillatorprivate
FillOscillogram(double *oscpar, double prodH, double Yp_Val=0.468)Oscillator
FillPrimaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)Oscillatorprivate
FillPrimaryOscillogram(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)Oscillatorprivate
FillSecondaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)Oscillatorprivate
fineCoarseRatioCoszOscillatorprivate
fineCoarseRatioEnergyOscillatorprivate
foscparOscillatorprivate
fprodHOscillatorprivate
FractionOverlapped(Box Box1, Box Box2)Oscillatorprivate
fYp_ValOscillatorprivate
GetOscillogramNBins(int Switcher)Oscillator
hCoarseCoszOscillatorprivate
hCoarseEnergyOscillatorprivate
hFineCoszOscillatorprivate
hFineEnergyOscillatorprivate
HistogramsInitialisedOscillatorprivate
hPrimaryBinningOscillatorprivate
hPrimaryCounter_ArrOscillatorprivate
hPrimaryOscillogramOscillatorprivate
hPrimaryOscillogram_ArrOscillatorprivate
hProductionHeightRangeOscillatorprivate
hSecondaryBinningOscillatorprivate
hSecondaryOscillogramOscillatorprivate
InitialiseHistograms()Oscillatorprivate
InitOscillogram(TH2D *PrimaryHistTemplate, TH2D *SecondaryHistTemplate)Oscillatorprivate
InitPropagator()Oscillatorprivate
InputFileNameOscillatorprivate
isAlreadyCalculated(double *oscpar, double prodH, double Yp_Val)Oscillatorprivate
isLinear()Oscillatorinline
IsLinearOscillatorprivate
isUsingGPU()Oscillatorprivate
IsValidBox(Box Box1)Oscillatorprivate
lCoarseCoszOscillatorprivate
lCoarseEnergyOscillatorprivate
lFineCoszOscillatorprivate
lFineEnergyOscillatorprivate
linspace(double Emin, double Emax, int nDiv)Oscillatorprivate
logspace(double Emin, double Emax, int nDiv)Oscillatorprivate
lProductionHeightRangeOscillatorprivate
nCoarseCoszOscillatorprivate
nCoarseEnergyOscillatorprivate
NeutrinoFlavourToIndex(int val)Oscillatorinlineprivate
NeutrinoIndexToFlavour(int val)Oscillatorinlineprivate
NeutrinoIndexToSign(int val)Oscillatorinlineprivate
NeutrinoSignToIndex(int val)Oscillatorinlineprivate
NeutrinoTypesOscillatorprivate
NeutrinoTypes_NamesOscillatorprivate
nFinalFlavoursOscillatorprivate
nFineCoszOscillatorprivate
nFineEnergyOscillatorprivate
nInitialFlavoursOscillatorprivate
nLayersOscillatorprivate
nMaxBinOscillatorprivate
nNeutrinoSignsOscillatorprivate
nOscparsOscillatorprivate
nPrimaryBinsOscillatorprivate
nPrimaryBinsXOscillatorprivate
nPrimaryBinsYOscillatorprivate
nPrimaryHistsOscillatorprivate
nProductionHeightAveragingBinsOscillatorprivate
nSecondaryBinsOscillatorprivate
nSecondaryBinsXOscillatorprivate
nSecondaryBinsYOscillatorprivate
OscChannelsOscillatorprivate
OscChannels_NamesOscillatorprivate
Oscillator(std::string ConfigName)Oscillator
PrimaryBinContrib_BinOscillatorprivate
PrimaryBinContrib_WeightOscillatorprivate
PrimaryBinningTemplateNameOscillatorprivate
PrimaryHistKeyOscillatorprivate
PrimaryXBinEdgesOscillatorprivate
PrimaryXBinEvalPointsOscillatorprivate
PrimaryYBinEdgesOscillatorprivate
PrimaryYBinEvalPointsOscillatorprivate
PrintBinning()Oscillator
PrintBox(Box Box1)Oscillatorprivate
PrintOscillatorConfig()Oscillator
ProbListOscillatorprivate
ProductionHeightBinEdgesOscillatorprivate
ProductionHeightFileNameOscillatorprivate
propagatorOscillatorprivate
RebinModeOscillatorprivate
RebinOscillogram(int Switcher, std::vector< double > NewBinning)Oscillator
Reset(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)Oscillatorprivate
ResetSavedParams()Oscillatorprivate
ResizeArrays()Oscillatorprivate
ResizeOscillogram(bool CoarseChanged, bool FineChanged)Oscillatorprivate
retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)Oscillator
ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector< double > CoarseBinning)Oscillatorprivate
ReturnOscillogramArray(int fPrimary)Oscillator
ReturnPrimaryBinning()Oscillatorinline
ReturnPrimaryOscillogram()Oscillatorinline
ReturnProb(double NeutrinoEnergy, double Cosz, int InitialFlavour, int FinalFlavour)Oscillator
ReturnProductionHeightBinEdges()Oscillatorinline
ReturnSecondaryOscillogram()Oscillatorinline
ReturnSecondaryXBinEdges()Oscillatorinline
ReturnSecondaryYBinEdges()Oscillatorinline
SaveOscillogramsToFile(TString FileName)Oscillator
SaveParams(double *oscpar, double prodH, double Yp_Val)Oscillatorprivate
SecondaryBinningTemplateNameOscillatorprivate
SecondaryHistKeyOscillatorprivate
SecondaryXBinEdgesOscillatorprivate
SecondaryXBinEvalPointsOscillatorprivate
SecondaryYBinEdgesOscillatorprivate
SecondaryYBinEvalPointsOscillatorprivate
SetFillHistograms(bool fFillHistograms_=true)Oscillatorinline
SetOscillatorConfig(int ArrayConfig_=0)Oscillator
SetProductionHeightArray()Oscillatorprivate
SetProductionHeightBinEdges()Oscillatorprivate
TemplateInputFileNameOscillatorprivate
UseBinningTemplatesOscillatorprivate
UseChemicalCompositionOscillatorprivate
useFineBinsPerBinOscillatorprivate
UseProductionHeightAveragingOscillatorprivate
+ + + + diff --git a/classOscillator.html b/classOscillator.html new file mode 100644 index 00000000..6bb726b4 --- /dev/null +++ b/classOscillator.html @@ -0,0 +1,5618 @@ + + + + + + + +MaCh3: Oscillator Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <OscClass_CUDAProb3.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Oscillator (std::string ConfigName)
 
int GetOscillogramNBins (int Switcher)
 
void FillOscillogram (double *oscpar, double prodH, double Yp_Val=0.468)
 
double ReturnProb (double NeutrinoEnergy, double Cosz, int InitialFlavour, int FinalFlavour)
 
void RebinOscillogram (int Switcher, std::vector< double > NewBinning)
 
void SetFillHistograms (bool fFillHistograms_=true)
 
void SetOscillatorConfig (int ArrayConfig_=0)
 
std::vector< doubleReturnSecondaryXBinEdges ()
 
std::vector< doubleReturnSecondaryYBinEdges ()
 
std::vector< std::vector< std::vector< TH2D * > > > ReturnPrimaryOscillogram ()
 
std::vector< std::vector< std::vector< TH2D * > > > ReturnSecondaryOscillogram ()
 
std::vector< TH2D * > ReturnOscillogramArray (int fPrimary)
 
bool isLinear ()
 
TH2DReturnPrimaryBinning ()
 
const doubleretPointer (int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)
 
std::vector< FLOAT_TReturnProductionHeightBinEdges ()
 
void PrintBinning ()
 
void PrintOscillatorConfig ()
 
void SaveOscillogramsToFile (TString FileName)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

void isUsingGPU ()
 
void SetProductionHeightArray ()
 
void SetProductionHeightBinEdges ()
 
void DefineMiscValues ()
 
void ResizeArrays ()
 
void ResizeOscillogram (bool CoarseChanged, bool FineChanged)
 
void DeletePropagator ()
 
void DeleteArrays ()
 
void DeleteOscillogram ()
 
void FillArrays ()
 
void FillArrays_ManyContrib_Area ()
 
void FillArrays_Standard ()
 
void InitOscillogram (TH2D *PrimaryHistTemplate, TH2D *SecondaryHistTemplate)
 
void InitPropagator ()
 
void InitialiseHistograms ()
 
void DeleteHistograms ()
 
void Reset (int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
 
void FillPrimaryOscillogram (int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
 
void FillSecondaryHistograms (int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
 
void FillPrimaryHistograms (int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
 
bool isAlreadyCalculated (double *oscpar, double prodH, double Yp_Val)
 
void SaveParams (double *oscpar, double prodH, double Yp_Val)
 
void ResetSavedParams ()
 
void PrintBox (Box Box1)
 
bool IsValidBox (Box Box1)
 
double FractionOverlapped (Box Box1, Box Box2)
 
int NeutrinoIndexToSign (int val)
 
int NeutrinoIndexToFlavour (int val)
 
int NeutrinoSignToIndex (int val)
 
int NeutrinoFlavourToIndex (int val)
 
void DefinePropagatorEnums ()
 
void CheckEarthDensityFile ()
 
std::vector< doublelinspace (double Emin, double Emax, int nDiv)
 
std::vector< doublelogspace (double Emin, double Emax, int nDiv)
 
std::vector< doubleReturnFineBinningFromCoarseBinnnig (int nFine, std::vector< double > CoarseBinning)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

TString EarthDensityFile
 
TString ProductionHeightFileName
 
std::unique_ptr< AtmosCpuPropagator< FLOAT_T > > propagator
 
unsigned int nPrimaryHists
 
double ** hPrimaryOscillogram_Arr
 
doublehPrimaryCounter_Arr
 
int nNeutrinoSigns
 
int nInitialFlavours
 
int nFinalFlavours
 
FLOAT_TProbList
 
std::vector< std::vector< int > > PrimaryBinContrib_Bin
 
std::vector< std::vector< double > > PrimaryBinContrib_Weight
 
std::vector< doublePrimaryXBinEdges
 
std::vector< doublePrimaryYBinEdges
 
std::vector< doubleSecondaryXBinEdges
 
std::vector< doubleSecondaryYBinEdges
 
std::vector< FLOAT_TPrimaryXBinEvalPoints
 
std::vector< FLOAT_TPrimaryYBinEvalPoints
 
std::vector< FLOAT_TSecondaryXBinEvalPoints
 
std::vector< FLOAT_TSecondaryYBinEvalPoints
 
std::vector< NeutrinoType > NeutrinoTypes
 
std::vector< TStringNeutrinoTypes_Names
 
std::vector< std::vector< TString > > OscChannels_Names
 
std::vector< std::vector< ProbType > > OscChannels
 
int nSecondaryBins
 
int nPrimaryBins
 
int nLayers
 
bool fFillHistograms
 
bool HistogramsInitialised
 
int ArrayConfig
 
int nPrimaryBinsX
 
int nPrimaryBinsY
 
int nSecondaryBinsX
 
int nSecondaryBinsY
 
double lCoarseEnergy
 
double hCoarseEnergy
 
int nCoarseEnergy
 
double lFineEnergy
 
double hFineEnergy
 
int nFineEnergy
 
double lCoarseCosz
 
double hCoarseCosz
 
int nCoarseCosz
 
double lFineCosz
 
double hFineCosz
 
int nFineCosz
 
std::vector< std::vector< std::vector< TH2D * > > > hPrimaryOscillogram
 
std::vector< std::vector< std::vector< TH2D * > > > hSecondaryOscillogram
 
TH2DhPrimaryBinning
 
TH2DhSecondaryBinning
 
double fprodH
 
double fYp_Val
 
double foscpar [6]
 
double fBinning [4]
 
int nOscpars
 
bool IsLinear
 
bool useFineBinsPerBin
 
bool RebinMode
 
int nMaxBin
 
std::string InputFileName
 
TString PrimaryHistKey
 
TString SecondaryHistKey
 
bool UseBinningTemplates
 
std::string PrimaryBinningTemplateName
 
std::string SecondaryBinningTemplateName
 
TString TemplateInputFileName
 
bool UseChemicalComposition
 
double fineCoarseRatioCosz
 
double fineCoarseRatioEnergy
 
bool UseProductionHeightAveraging
 
int nProductionHeightAveragingBins
 
double lProductionHeightRange
 
double hProductionHeightRange
 
std::vector< FLOAT_TProductionHeightBinEdges
 
std::vector< FLOAT_TchemicalComposition_Nom
 
+

Detailed Description

+
+

Definition at line 38 of file OscClass_CUDAProb3.h.

+

Constructor & Destructor Documentation

+ +

◆ Oscillator()

+ +
+
+ + + + + + + + +
Oscillator::Oscillator (std::string ConfigName)
+
+ +

Definition at line 5 of file OscClass_CUDAProb3.cpp.

+
5 {
+
6 std::cout << std::setprecision(10);
+
7
+
8 std::vector<FLOAT_T> cosineList;
+
9 cosineList.push_back(-0.99895);
+
10
+
11 std::vector<FLOAT_T> energyList;
+
12 energyList.push_back(0.0035);
+
13
+
14 int n_cosines = 1;
+
15 int n_energies = 1;
+
16
+
17 int nu_flav = -1;
+
18
+
19 const FLOAT_T theta12 = 0.5695951908800630486710466089860865317151404697548723;
+
20 const FLOAT_T theta13 = 0.1608752771983210967007023071793306595103776477788280;
+
21 const FLOAT_T theta23 = 0.7853981633974483096156608458198757210492923498437764;
+
22 const FLOAT_T dcp = 0.0;
+
23
+
24 const FLOAT_T dm12sq = 7.9e-5;
+
25 const FLOAT_T dm23sq = 2.5e-3;
+
26
+
27 int n_threads = 1;
+ +
29 mypropagator = new AtmosCpuPropagator<FLOAT_T>(n_cosines, n_energies, n_threads); // cpu propagator with 4 threads
+
30
+
31 mypropagator->setEnergyList(energyList);
+
32 mypropagator->setCosineList(cosineList);
+
33
+
34 std::string InputLocation = "/models/PREM_4layer.dat";
+
35 if (std::getenv("CUDAProb3_DIR") != NULL)
+
36 {
+
37 InputLocation.insert(0, std::string(std::getenv("CUDAProb3_DIR"))+"/");
+
38 }
+
39 else
+
40 {
+
41 std::cerr<<" Envioremnt CUDAProb3_DIR is not defined, did you source setup.MaCh3.sh?"<<std::endl;
+
42 throw;
+
43 }
+
44 mypropagator->setDensityFromFile(InputLocation);
+
45 mypropagator->setMNSMatrix(theta12, theta13, theta23, dcp, nu_flav);
+
46 mypropagator->setNeutrinoMasses(dm12sq, dm23sq);
+
47 mypropagator->setProductionHeight(22.0);
+
48 mypropagator->calculateProbabilities(cudaprob3::Antineutrino);
+
49 std::cout << mypropagator->getProbability(0,0, ProbType::e_e) << std::endl;
+
50
+
51 throw;
+
52
+
53 //####################################################################################
+
54 //Set definite values
+
55
+
56 nOscpars = 6;
+
57
+ + +
60 nFinalFlavours = 3; //DB =2 if excluding taus, =3 if including taus
+
61
+ + +
64
+
65 //####################################################################################
+
66 //Get FitMan parameters
+
67
+ +
69
+
70 EarthDensityFile = osc_manager->raw()["OscillatorObj"]["OscillatorEarthDensityFile"].as<std::string>();
+
71 ArrayConfig = osc_manager->raw()["OscillatorObj"]["OscillatorArrayConfig"].as<int>();
+
72 fFillHistograms = osc_manager->raw()["OscillatorObj"]["OscillatorFillHistograms"].as<bool>();
+
73
+
74 IsLinear = osc_manager->raw()["OscillatorObj"]["OscillatorIsLinear"].as<bool>();
+
75 useFineBinsPerBin = osc_manager->raw()["OscillatorObj"]["OscillatorUseFineBinsPerCoarseBin"].as<bool>();
+
76
+
77 UseBinningTemplates = osc_manager->raw()["OscillatorObj"]["OscillatorUseBinningTemplates"].as<bool>();
+
78 PrimaryBinningTemplateName = osc_manager->raw()["OscillatorObj"]["OscillatorPrimaryBinningTemplateName"].as<std::string>();
+
79 SecondaryBinningTemplateName = osc_manager->raw()["OscillatorObj"]["OscillatorSecondaryBinningTemplateName"].as<std::string>();
+
80 InputFileName = osc_manager->raw()["OscillatorObj"]["OscillatorInputFileName"].as<std::string>();
+
81
+
82 nCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatornCoarseCosz"].as<int>();
+
83 lCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatorlCoarseCosz"].as<double>();
+
84 hCoarseCosz = osc_manager->raw()["OscillatorObj"]["OscillatorhCoarseCosz"].as<double>();
+
85
+
86 nCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatornCoarseEnergy"].as<int>();
+
87 lCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorlCoarseEnergy"].as<double>();
+
88 hCoarseEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorhCoarseEnergy"].as<double>();
+
89
+
90 nFineCosz = osc_manager->raw()["OscillatorObj"]["OscillatornFineCosz"].as<int>();
+
91 nFineEnergy = osc_manager->raw()["OscillatorObj"]["OscillatornFineEnergy"].as<int>();
+
92 fineCoarseRatioCosz = osc_manager->raw()["OscillatorObj"]["OscillatorfineCoarseRatioCosz"].as<double>();
+
93 fineCoarseRatioEnergy = osc_manager->raw()["OscillatorObj"]["OscillatorfineCoarseRatioEnergy"].as<double>();
+
94
+
95 UseProductionHeightAveraging = osc_manager->raw()["OscillatorObj"]["OscillatorUseProductionHeightAveraging"].as<bool>();
+
96 ProductionHeightFileName = osc_manager->raw()["OscillatorObj"]["OscillatorProductionHeightFileName"].as<std::string>();
+
97 nProductionHeightAveragingBins = osc_manager->raw()["OscillatorObj"]["OscillatornProductionHeightAveragingBins"].as<int>();
+
98 lProductionHeightRange = osc_manager->raw()["OscillatorObj"]["OscillatorlProductionHeightRange"].as<double>();
+
99 hProductionHeightRange = osc_manager->raw()["OscillatorObj"]["OscillatorhProductionHeightRange"].as<double>();
+
100
+
101 UseChemicalComposition = osc_manager->raw()["OscillatorObj"]["OscillatorUseChemicalComposition"].as<bool>();
+
102
+
103 RebinMode = osc_manager->raw()["OscillatorObj"]["OscillatorRebinMode"].as<bool>(); //I do wonder whether I need this as making this work with production height averaging is going to be a pain
+
104 std::cout << std::endl;
+
105
+
106 //####################################################################################
+
107
+ + +
110
+ +
112
+
113 TFile* InFile = new TFile(InputFileName.c_str(),"READ");
+
114 if (InFile->IsZombie()) {
+
115 std::cout << "Oscillator Template file is not found. Given:" << InputFileName << std::endl;
+
116 throw;
+
117 }
+
118
+ +
120 if (!PrimaryHistTemplate) {
+
121 std::cout << "Primary Histogram template not found. Given:" << PrimaryBinningTemplateName << std::endl;
+
122 throw;
+
123 }
+
124 PrimaryHistTemplate->SetDirectory(0);
+
125
+ + +
128 std::cout << "Secondary Histogram template not found. Given:" << SecondaryBinningTemplateName << std::endl;
+
129 throw;
+
130 }
+
131 SecondaryHistTemplate->SetDirectory(0);
+
132
+
133 InFile->Close();
+
134
+
135 nCoarseCosz = PrimaryHistTemplate->GetNbinsY();
+
136 lCoarseCosz = PrimaryHistTemplate->GetYaxis()->GetBinLowEdge(1);
+
137 hCoarseCosz = PrimaryHistTemplate->GetYaxis()->GetBinLowEdge(nCoarseCosz+1);
+
138
+
139 nCoarseEnergy = PrimaryHistTemplate->GetNbinsX();
+
140 lCoarseEnergy = PrimaryHistTemplate->GetXaxis()->GetBinLowEdge(1);
+
141 hCoarseEnergy = PrimaryHistTemplate->GetXaxis()->GetBinLowEdge(nCoarseEnergy+1);
+
142
+
143 nFineCosz = SecondaryHistTemplate->GetNbinsY();
+
144 nFineEnergy = SecondaryHistTemplate->GetNbinsX();
+
145
+ + + + +
150
+
151 std::cout << "Oscillator set to use normal mode" << std::endl;
+
152 std::cout << "Initialising oscillograms in TH2D constuctor" << std::endl;
+
153 std::cout << "--------------------------------------------" << std::endl;
+
154 std::cout << "Using Templates -" << std::endl;
+
155 std::cout << "Primary:" << std::setw(20) << PrimaryBinningTemplateName << std::endl;
+
156 std::cout << "Secondary:" << std::setw(20) << SecondaryBinningTemplateName << std::endl;
+
157 std::cout << "From file:" << std::setw(20) << InputFileName << std::endl;
+
158
+
159 } else {
+
160 if (!IsLinear) {
+ + +
163 }
+
164
+ + + + +
169
+
170 std::vector<double> Energy_Coarse;
+
171 std::vector<double> Cosz_Coarse;
+
172 std::vector<double> Energy_Fine;
+
173 std::vector<double> Cosz_Fine;
+
174
+
175 if (IsLinear) {
+ +
177 } else {
+ +
179 }
+ +
181
+
182 if (!useFineBinsPerBin) {
+
183
+
184 if (IsLinear) {
+ +
186 } else {
+ +
188 }
+ +
190
+
191 } else {
+
192 if (nFineEnergy != floor(nFineEnergy)) {
+
193 std::cerr << "nFineEnergy:" << nFineEnergy << " is not an integer" << std::endl;
+
194 throw;
+
195 }
+
196
+
197 if (nFineCosz != floor(nFineCosz)) {
+
198 std::cerr << "nFineCosz:" << nFineCosz << " is not an integer" << std::endl;
+
199 throw;
+
200 }
+
201
+
202 if (nFineEnergy < 1) {
+
203 std::cerr << "Invalid binning specified. nFineEnergy should be integer >= 1. Given:" << nFineEnergy << std::endl;
+
204 throw;
+
205 }
+
206
+
207 if (nFineCosz < 1) {
+
208 std::cerr << "Invalid binning specified. nFineCosz should be integer >= 1. Given:" << nFineCosz << std::endl;
+
209 throw;
+
210 }
+
211
+ + +
214
+ + +
217 }
+
218
+
219 if (fineCoarseRatioCosz == -1 || fineCoarseRatioEnergy == -1) {
+
220
+
221 PrimaryHistTemplate = new TH2D("hPrimaryBinning","PrimaryBinning",Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
222 SecondaryHistTemplate = new TH2D("hSecondaryBinning","SecondaryBinning",Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
223
+
224 } else if ((fineCoarseRatioCosz > 0 && fineCoarseRatioCosz <= 1.0) && (fineCoarseRatioEnergy > 0 && fineCoarseRatioEnergy <= 1.0)) {
+ + +
227
+ +
229 SecondaryHistTemplate = new TH2D("hSecondaryBinning","SecondaryBinning",nFineEnergy,lFineEnergy,hFineEnergy,nFineCosz,lFineCosz,hFineCosz);
+
230 } else {
+
231 std::cerr << "fineCoarseRatioCosz is an invalid number:" << fineCoarseRatioCosz << std::endl;
+
232 std::cerr << "fineCoarseRatioEnergy is an invalid number:" << fineCoarseRatioEnergy << std::endl;
+
233 std::cerr << "Expected both to be either -1 or 0 > fineCoarseRatio >= 1.0" << std::endl;
+
234 throw;
+
235 }
+
236 }
+
237
+
238 if (RebinMode) {
+
239 nMaxBin = 5000*5000;
+
240 std::cout << "Oscillator set to use RebinMode. Max Bins:" << nMaxBin << std::endl;
+
241 std::cout << "If for whatever reason you need to increase this, go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_)" << std::endl;
+
242
+
243 std::cout << "Production height averaging does not work for a rebinnable oscillator" << std::endl;
+ + +
246 } else {
+
247 std::cout << "Oscillator set to use normal mode" << std::endl;
+
248 }
+
249
+ +
251 if (fFillHistograms) {
+ +
253 }
+
254
+
255 isUsingGPU();
+
256 std::cout << std::endl;
+ +
258 std::cout << std::endl;
+ +
260
+ + + +
264}
+
double FLOAT_T
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ + +
double fineCoarseRatioEnergy
+ + +
std::vector< double > logspace(double Emin, double Emax, int nDiv)
+ +
int nProductionHeightAveragingBins
+ + +
std::vector< double > ReturnFineBinningFromCoarseBinnnig(int nFine, std::vector< double > CoarseBinning)
+ + +
void InitOscillogram(TH2D *PrimaryHistTemplate, TH2D *SecondaryHistTemplate)
+ + +
double lProductionHeightRange
+ +
bool UseProductionHeightAveraging
+ + +
double fineCoarseRatioCosz
+ + +
unsigned int nPrimaryHists
+ + +
std::string InputFileName
+ + +
double hProductionHeightRange
+ +
std::string SecondaryBinningTemplateName
+ +
TString EarthDensityFile
+
std::vector< double > linspace(double Emin, double Emax, int nDiv)
+ + +
TString ProductionHeightFileName
+ + + + + + +
std::string PrimaryBinningTemplateName
+ + + +
+
+
+

Member Function Documentation

+ +

◆ CheckEarthDensityFile()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::CheckEarthDensityFile ()
+
+private
+
+ +

Definition at line 1424 of file OscClass_CUDAProb3.cpp.

+
1425{
+
1426 // If the earth density file is null, set the default
+
1427 if (EarthDensityFile.Length() == 0)
+
1428 {
+
1429 std::string InputLocation = "/models/PREM_4layer_cubic.dat";
+
1430 if (std::getenv("CUDAProb3_DIR") != NULL)
+
1431 {
+
1432 InputLocation.insert(0, std::string(std::getenv("CUDAProb3_DIR"))+"/");
+
1433 }
+
1434 else
+
1435 {
+
1436 std::cerr<<" Envioremnt CUDAProb3_DIR is not defined, did you source setup.MaCh3.sh?"<<std::endl;
+
1437 throw;
+
1438 }
+ +
1440 std::cout << "No specified Earth density file - Defaulting to: " << EarthDensityFile << "\n" << std::endl;
+
1441 }
+
1442}
+
+
+
+ +

◆ DefineMiscValues()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DefineMiscValues ()
+
+private
+
+ +

Definition at line 1376 of file OscClass_CUDAProb3.cpp.

+
1376 {
+ +
1378
+ +
1380 std::cout << "Not using PREM model Chemical composition dial values" << std::endl;
+
1381
+
1382 // Get how many layers are in the propagator's earth file
+
1383 nLayers = propagator->getNlayerBoundaries();
+
1384 chemicalComposition_Nom = std::vector<FLOAT_T>(nLayers);
+
1385 for (int i = 0; i < nLayers; ++i) {
+ +
1387 }
+
1388 }
+
1389}
+ +
std::unique_ptr< AtmosCpuPropagator< FLOAT_T > > propagator
+
std::vector< FLOAT_T > chemicalComposition_Nom
+
void SetProductionHeightBinEdges()
+
+
+
+ +

◆ DefinePropagatorEnums()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DefinePropagatorEnums ()
+
+private
+
+ +

Definition at line 1391 of file OscClass_CUDAProb3.cpp.

+
1391 {
+
1392
+ +
1394 NeutrinoTypes[0] = cudaprob3::Antineutrino;
+
1395 NeutrinoTypes[1] = cudaprob3::Neutrino;
+
1396
+ +
1398 NeutrinoTypes_Names[0] = "Antineutrino";
+
1399 NeutrinoTypes_Names[1] = "Neutrino";
+
1400
+ +
1402 for (int i=0;i<nInitialFlavours;i++) {
+
1403 OscChannels[i].resize(nFinalFlavours);
+
1404 }
+
1405 OscChannels[0][0] = cudaprob3::e_e;
+
1406 OscChannels[0][1] = cudaprob3::e_m;
+
1407 OscChannels[0][2] = cudaprob3::e_t;
+
1408 OscChannels[1][0] = cudaprob3::m_e;
+
1409 OscChannels[1][1] = cudaprob3::m_m;
+
1410 OscChannels[1][2] = cudaprob3::m_t;
+
1411
+ +
1413 for (int i=0;i<nInitialFlavours;i++) {
+ +
1415 }
+
1416 OscChannels_Names[0][0] = "e_e";
+
1417 OscChannels_Names[0][1] = "e_m";
+
1418 OscChannels_Names[0][2] = "e_t";
+
1419 OscChannels_Names[1][0] = "m_e";
+
1420 OscChannels_Names[1][1] = "m_m";
+
1421 OscChannels_Names[1][2] = "m_t";
+
1422}
+
std::vector< std::vector< ProbType > > OscChannels
+
std::vector< TString > NeutrinoTypes_Names
+
std::vector< std::vector< TString > > OscChannels_Names
+
std::vector< NeutrinoType > NeutrinoTypes
+
+
+
+ +

◆ DeleteArrays()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DeleteArrays ()
+
+private
+
+ +

Definition at line 535 of file OscClass_CUDAProb3.cpp.

+
535 {
+
536 for (unsigned int iPrimaryHist=0;iPrimaryHist<nPrimaryHists;iPrimaryHist++) {
+ +
538 }
+ +
540
+
541 delete[] hPrimaryCounter_Arr;
+
542
+
543 for (int iBin=0;iBin<nPrimaryBins;iBin++) {
+ + +
546 }
+
547
+
548 PrimaryXBinEdges = std::vector<double>();
+
549 PrimaryYBinEdges = std::vector<double>();
+
550
+
551 SecondaryXBinEdges = std::vector<double>();
+
552 SecondaryYBinEdges = std::vector<double>();
+
553
+
554}
+
std::vector< double > PrimaryXBinEdges
+
std::vector< double > PrimaryYBinEdges
+
std::vector< std::vector< int > > PrimaryBinContrib_Bin
+
double ** hPrimaryOscillogram_Arr
+
std::vector< std::vector< double > > PrimaryBinContrib_Weight
+ +
std::vector< double > SecondaryYBinEdges
+
double * hPrimaryCounter_Arr
+
std::vector< double > SecondaryXBinEdges
+
+
+
+ +

◆ DeleteHistograms()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DeleteHistograms ()
+
+private
+
+ +

Definition at line 838 of file OscClass_CUDAProb3.cpp.

+
838 {
+
839 for (int i=0;i<nNeutrinoSigns;i++) {
+
840 for (int j=0;j<nInitialFlavours;j++) {
+
841 for (int k=0;k<nFinalFlavours;k++) {
+
842 delete hPrimaryOscillogram[i][j][k];
+
843 }
+
844 }
+
845 }
+
846}
+
std::vector< std::vector< std::vector< TH2D * > > > hPrimaryOscillogram
+
+
+
+ +

◆ DeleteOscillogram()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DeleteOscillogram ()
+
+private
+
+ +

Definition at line 848 of file OscClass_CUDAProb3.cpp.

+
848 {
+ +
850 for (int i=0;i<nNeutrinoSigns;i++) {
+
851 for (int j=0;j<nInitialFlavours;j++) {
+
852 for (int k=0;k<nFinalFlavours;k++) {
+
853 delete hPrimaryOscillogram[i][j][k];
+
854 delete hSecondaryOscillogram[i][j][k];
+
855 }
+
856 hPrimaryOscillogram[i][j].clear();
+
857 hSecondaryOscillogram[i][j].clear();
+
858 }
+
859 hPrimaryOscillogram[i].clear();
+
860 hSecondaryOscillogram[i].clear();
+
861 }
+
862 hPrimaryOscillogram.clear();
+
863 hSecondaryOscillogram.clear();
+
864 }
+
865
+
866 hPrimaryBinning->Reset();
+
867 hSecondaryBinning->Reset();
+
868
+
869 PrimaryXBinEdges.clear();
+
870 PrimaryYBinEdges.clear();
+
871
+
872 SecondaryXBinEdges.clear();
+
873 SecondaryYBinEdges.clear();
+
874
+
875 for (int i=0;i<nPrimaryBins;i++) {
+
876 PrimaryBinContrib_Bin[i].clear();
+ +
878 }
+
879 PrimaryBinContrib_Bin.clear();
+ +
881
+
882 nPrimaryBinsX = -1;
+
883 nPrimaryBinsY = -1;
+
884 nPrimaryBins = -1;
+
885
+
886 nSecondaryBinsX = -1;
+
887 nSecondaryBinsY = -1;
+
888 nSecondaryBins = -1;
+
889
+
890 delete ProbList;
+
891
+ +
893}
+ + + + + +
std::vector< std::vector< std::vector< TH2D * > > > hSecondaryOscillogram
+ + + +
+
+
+ +

◆ DeletePropagator()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::DeletePropagator ()
+
+private
+
+ +

Definition at line 1372 of file OscClass_CUDAProb3.cpp.

+
1372 {
+
1373 delete propagator.release();
+
1374}
+
+
+
+ +

◆ FillArrays()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::FillArrays ()
+
+private
+
+ +

Definition at line 631 of file OscClass_CUDAProb3.cpp.

+
631 {
+
632 if (ArrayConfig == 1) {
+ +
634 } else {
+ +
636 }
+
637
+ +
639 unsigned int nContribs = PrimaryBinContrib_Bin[iPrimaryBin].size();
+
640
+
641 double Val = 0.;
+
642 for (unsigned int iContrib=0;iContrib<nContribs;iContrib++) {
+ +
644 }
+
645 if (Val == 0.) {
+
646 std::cerr << "Coarse Bin found which has no contributions" << std::endl;
+
647 throw;
+
648 }
+
649
+ +
651 }
+
652}
+ +
void FillArrays_ManyContrib_Area()
+
+
+
+ +

◆ FillArrays_ManyContrib_Area()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::FillArrays_ManyContrib_Area ()
+
+private
+
+ +

Definition at line 654 of file OscClass_CUDAProb3.cpp.

+
654 {
+
655
+
656 for (int x=0;x<nSecondaryBinsX;x++) {
+
657 for (int y=0;y<nSecondaryBinsY;y++) {
+
658 int iter = x*nSecondaryBinsY+y;
+
659
+ + + +
663
+
664 if (!IsValidBox(Box_Fine)) {
+
665 std::cout << "Fine Binning Box is not valid!" << std::endl;
+ +
667 throw;
+
668 }
+
669
+
670 for (int yBin=0;yBin<nPrimaryBinsY;yBin++) {
+
671 //If bottom edge of Coarse bin is above than the top edge of the Fine bin
+ +
673 continue;
+
674 }
+
675
+
676 //If top edge of Coarse bin is lower than the bottom edge of the Fine bin
+ +
678 continue;
+
679 }
+
680
+
681 for (int xBin=0;xBin<nPrimaryBinsX;xBin++) {
+
682
+
683 //If left edge of Coarse bin is above than the right edge of the Fine bin
+ +
685 continue;
+
686 }
+
687
+
688 //If right edge of Coarse bin is lower than the left edge of the Fine bin
+ +
690 continue;
+
691 }
+
692
+ + + +
696
+
697 if (!IsValidBox(Box_Coarse)) {
+
698 std::cout << "Coarse Binning Box is not valid!" << std::endl;
+ +
700 throw;
+
701 }
+
702
+ +
704 if (FracOverlapped<1e-6) FracOverlapped = 0.;
+
705
+
706 if (FracOverlapped>1.) {
+ + +
709 throw;
+
710 }
+
711
+
712 if (FracOverlapped != 0.) {
+ + + +
716
+ + +
719 }
+
720
+
721 }
+
722 }
+
723 }
+
724 }
+
725
+
726}
+
bool IsValidBox(Box Box1)
+
void PrintBox(Box Box1)
+
double FractionOverlapped(Box Box1, Box Box2)
+ + +
+
+
+ +

◆ FillArrays_Standard()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::FillArrays_Standard ()
+
+private
+
+ +

Definition at line 728 of file OscClass_CUDAProb3.cpp.

+
728 {
+
729
+
730 for (int x=0;x<nSecondaryBinsX;x++) {
+
731 for (int y=0;y<nSecondaryBinsY;y++) {
+
732 int iter = x*nSecondaryBinsY+y;
+
733
+ + +
736
+ +
738
+
739 if (IsLinear) {
+
740 PrimaryBin_ToAdd_X = hPrimaryBinning->GetXaxis()->FindBin(EnergyEvalPoint)-1;
+
741 } else {
+
742 PrimaryBin_ToAdd_X = hPrimaryBinning->GetXaxis()->FindBin(log10(EnergyEvalPoint))-1;
+
743 }
+
744
+
745 int PrimaryBin_ToAdd_Y = hPrimaryBinning->GetYaxis()->FindBin(CoszEvalPoint)-1;
+ +
747
+ + +
750 }
+
751 }
+
752
+
753}
+
std::vector< FLOAT_T > SecondaryXBinEvalPoints
+
std::vector< FLOAT_T > SecondaryYBinEvalPoints
+
+
+
+ +

◆ FillOscillogram()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::FillOscillogram (doubleoscpar,
double prodH,
double Yp_Val = 0.468 
)
+
+ +

Definition at line 955 of file OscClass_CUDAProb3.cpp.

+
955 {
+ +
957 return;
+
958 }
+
959
+ +
961
+
962 //DB oscpar, as given from MaCh3, expresses the mixing angles in sin^2(theta). The propagator expects them in theta
+
963 for (int iOscPar=0;iOscPar<3;iOscPar++) {
+
964 if (oscpar[iOscPar] < 0) {
+
965 std::cerr << "Invalid oscillation parameter (Can not sqrt this value)!:" << oscpar[iOscPar] << std::endl;
+
966 throw;
+
967 }
+
968 }
+
969
+
970 /*
+
971 // Get how many layers are in the propagator's earth file
+
972 nLayers = propagator->getNlayerBoundaries();
+
973 std::vector<FLOAT_T> chemicalComposition_Dial(nLayers);
+
974 // The electron density in the first layer is pretty well known, so don't change
+
975 chemicalComposition_Dial[0] = 0.497;
+
976 chemicalComposition_Dial[1] = 0.497;
+
977 // Starting layer for different density
+
978 int start = 2;
+
979 if (nLayers == 6) {
+
980 start = 3;
+
981 chemicalComposition_Dial[2] = 0.497;
+
982 }
+
983 for (int i = start; i < nLayers; ++i) {
+
984 chemicalComposition_Dial[i] = Yp_Val;
+
985 }
+
986
+
987 if (UseChemicalComposition) {
+
988 propagator->setChemicalComposition(chemicalComposition_Dial);
+
989 } else {
+
990 propagator->setChemicalComposition(chemicalComposition_Nom);
+
991 }
+
992 */
+
993
+
994 //propagator->setNeutrinoMasses(dm12sq, dm23sq);
+
995 propagator->setNeutrinoMasses(7.9e-5,2.5e-3);
+
996 //propagator->setProductionHeight(prodH);
+
997 propagator->setProductionHeight(22.0);
+
998
+
999 for (int i=0;i<nNeutrinoSigns;i++) {
+
1000
+
1001 if (NeutrinoTypes[i]==cudaprob3::Antineutrino) {
+
1002 // DB, Haven't really thought about it, but prob3++ sets dcp->-dcp here: https://github.com/rogerwendell/Prob3plusplus/blob/fd189e232e96e2c5ebb2f7bd3a5406b288228e41/BargerPropagator.cc#L235
+
1003 // Copying that behaviour gives same behaviour as prob3++/probGPU
+
1004
+
1005 //DB Liban has now implemented a check to deal with the -1 factor inside CUDAProb3::setMNS
+
1006 propagator->setMNSMatrix(0.5695951908800630486710466089860865317151404697548723, 0.1608752771983210967007023071793306595103776477788280, 0.7853981633974483096156608458198757210492923498437764, 0., -1);
+
1007 } else {
+
1008 propagator->setMNSMatrix(0.5695951908800630486710466089860865317151404697548723, 0.1608752771983210967007023071793306595103776477788280, 0.7853981633974483096156608458198757210492923498437764, 0., 1);
+
1009 }
+
1010
+
1011
+
1012 propagator->calculateProbabilities(NeutrinoTypes[i]);
+
1013
+
1014 for (int j=0;j<nInitialFlavours;j++) {
+
1015 for (int k=0;k<nFinalFlavours;k++) {
+
1016
+
1017 FLOAT_T prob = propagator->getProbability(0,0,ProbType::e_e);
+
1018 std::cout << prob << std::endl;
+
1019 throw;
+
1020
+
1021#ifdef DEBUG
+ + + +
1025 FLOAT_T dm12sq = oscpar[3];
+
1026 FLOAT_T dm23sq = oscpar[4];
+
1027 FLOAT_T dcp = oscpar[5];
+
1028
+
1029 //DB This part could be replaced with pointers
+
1030 for (int iter=0;iter<nSecondaryBins;iter++) {
+ + +
1033 FLOAT_T prob = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1034 if (std::isnan(prob)) {
+
1035 std::cerr << "Prob is NAN!" << std::endl;
+
1036 std::cerr << "In Flav:" << j << std::endl;
+
1037 std::cerr << "Out Flav:" << k << std::endl;
+
1038 std::cerr << "NeutrinoType:" << NeutrinoTypes[i] << std::endl;
+
1039
+
1040 std::cerr << "theta12:" << theta12 << std::endl;
+
1041 std::cerr << "theta13:" << theta13 << std::endl;
+
1042 std::cerr << "theta23:" << theta23 << std::endl;
+
1043 std::cerr << "dcp:" << dcp << std::endl;
+
1044
+
1045 std::cerr << "prodH:" << prodH << std::endl;
+
1046 std::cerr << "\n" << std::endl;
+
1047
+
1048 for (int iOscPar=0;iOscPar<3;iOscPar++) {
+
1049 std::cerr << "iOscPar:" << iOscPar << std::endl;
+
1050 std::cerr << "oscpar[iOscPar]:" << oscpar[iOscPar] << std::endl;
+
1051 std::cerr << "sqrt(oscpar[iOscPar]):" << sqrt(oscpar[iOscPar]) << std::endl;
+
1052 std::cerr << "asin(sqrt(oscpar[iOscPar])):" << asin(sqrt(oscpar[iOscPar])) << std::endl;
+
1053 std::cerr << "\n" << std::endl;
+
1054 }
+
1055
+
1056 throw;
+
1057 }
+
1058
+
1059 ProbList[iter] = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1060 }
+
1061
+
1062#else
+
1063 propagator->getProbabilityArr(ProbList, OscChannels[j][k]);
+
1064
+
1065
+
1066 for (int iter=0;iter<nSecondaryBins;iter++) {
+ + +
1069 ProbList[iter] = propagator->getProbability(yBin,xBin,OscChannels[j][k]);
+
1070 std::cout << "xBin:" << xBin << " | yBin:" << yBin << " | iter:" << iter << " | ProbList[iter]:" << ProbList[iter] << std::endl;
+
1071 }
+
1072#endif
+
1073 // Sometimes CUDAProb3 can return *slightly* unphysical oscillation probabilities
+
1074 for (int iter=0;iter<nSecondaryBins;iter++) {
+
1075 ProbList[iter] = ProbList[iter] > 0 ? ProbList[iter] : 0;
+
1076 ProbList[iter] = (fabs(ProbList[iter]-1.0) < 1.0e-4) ? 1.0 : ProbList[iter];
+
1077 }
+
1078
+ +
1080 if (fFillHistograms) {
+ + +
1083 }
+
1084
+
1085 }
+
1086 }
+
1087 }
+
1088
+
1089}
+
void FillPrimaryOscillogram(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
bool isAlreadyCalculated(double *oscpar, double prodH, double Yp_Val)
+
void SaveParams(double *oscpar, double prodH, double Yp_Val)
+
void FillSecondaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
void FillPrimaryHistograms(int NeutrinoSignIndex, int InitialNeutrinoIndex, int FinalNeutrinoIndex)
+
+
+
+ +

◆ FillPrimaryHistograms()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::FillPrimaryHistograms (int NeutrinoSignIndex,
int InitialNeutrinoIndex,
int FinalNeutrinoIndex 
)
+
+private
+
+ +

Definition at line 1109 of file OscClass_CUDAProb3.cpp.

+
1109 {
+
1110 if (hPrimaryOscillogram.size()==0) {
+
1111 std::cout << "Primary oscillograms are not initialised so I'm not going to try and fill them" << std::endl;
+
1112 throw;
+
1113 }
+
1114
+ + +
1117
+
1118 for (int iBin=0;iBin<nPrimaryBins;iBin++) {
+
1119 int xBin = int(iBin%nPrimaryBinsX)+1;
+
1120 int yBin = int(iBin/nPrimaryBinsX)+1;
+
1121
+ +
1123 }
+
1124}
+
+
+
+ +

◆ FillPrimaryOscillogram()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::FillPrimaryOscillogram (int NeutrinoSignIndex,
int InitialNeutrinoIndex,
int FinalNeutrinoIndex 
)
+
+private
+
+ +

Definition at line 1091 of file OscClass_CUDAProb3.cpp.

+
1091 {
+ +
1093
+
1094#ifdef MULTITHREAD
+
1095#pragma omp for
+
1096#endif
+ +
1098 unsigned int nContribs = PrimaryBinContrib_Bin[iPrimaryBin].size();
+
1099
+
1100 double Val = 0.;
+
1101 for (unsigned int iContrib=0;iContrib<nContribs;iContrib++) {
+ +
1103 }
+ +
1105 }
+
1106
+
1107}
+
+
+
+ +

◆ FillSecondaryHistograms()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::FillSecondaryHistograms (int NeutrinoSignIndex,
int InitialNeutrinoIndex,
int FinalNeutrinoIndex 
)
+
+private
+
+ +

Definition at line 1126 of file OscClass_CUDAProb3.cpp.

+
1126 {
+
1127 if (hSecondaryOscillogram.size()==0) {
+
1128 std::cout << "Secondary oscillograms are not initialised so I'm not going to try and fill them" << std::endl;
+
1129 throw;
+
1130 }
+
1131
+ +
1133
+
1134 for (int iter=0;iter<nSecondaryBins;iter++) {
+
1135 int yBin = int(iter%nSecondaryBinsY)+1;
+
1136 int xBin = int(iter/nSecondaryBinsY)+1;
+
1137
+ +
1139 }
+
1140}
+
+
+
+ +

◆ FractionOverlapped()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double Oscillator::FractionOverlapped (Box Box1,
Box Box2 
)
+
+private
+
+ +

Definition at line 1300 of file OscClass_CUDAProb3.cpp.

+
1300 {
+
1301 double Box2_xLength = Box2.UR.x-Box2.BL.x;
+
1302 double Box2_yLength = Box2.UR.y-Box2.BL.y;
+ +
1304
+
1305 double Area_Overlapped = 0;
+
1306 double xLength_Overlapped = std::min(Box1.UR.x,Box2.UR.x) - std::max(Box1.BL.x,Box2.BL.x);
+
1307 double yLength_Overlapped = std::min(Box1.UR.y,Box2.UR.y) - std::max(Box1.BL.y,Box2.BL.y);
+
1308
+
1309 if (xLength_Overlapped > 0 && yLength_Overlapped > 0) {
+ +
1311 }
+
1312
+ +
1314
+ +
1316}
+
+
+
+ +

◆ GetOscillogramNBins()

+ +
+
+ + + + + + + + +
int Oscillator::GetOscillogramNBins (int Switcher)
+
+ +

Definition at line 1634 of file OscClass_CUDAProb3.cpp.

+
1634 {
+
1635
+
1636 switch (Switcher) {
+
1637 case 0:
+
1638 return nCoarseCosz;
+
1639 case 1:
+
1640 return nCoarseEnergy;
+
1641 case 2:
+
1642 if (useFineBinsPerBin) {
+
1643 return nFineCosz/nCoarseCosz;
+
1644 } else {
+
1645 return nFineCosz;
+
1646 }
+
1647 case 3:
+
1648 if (useFineBinsPerBin) {
+ +
1650 } else {
+
1651 return nFineEnergy;
+
1652 }
+
1653 default:
+
1654 std::cerr << "Unknown option given to Ocillator::GetOscillogramNBins :" << Switcher << std::endl;
+
1655 throw;
+
1656 }
+
1657
+
1658 return -1;
+
1659}
+
+
+
+ +

◆ InitialiseHistograms()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::InitialiseHistograms ()
+
+private
+
+ +

Definition at line 799 of file OscClass_CUDAProb3.cpp.

+
799 {
+
800 hPrimaryOscillogram = std::vector< std::vector< std::vector< TH2D* > > >(nNeutrinoSigns);
+
801 hSecondaryOscillogram = std::vector< std::vector< std::vector< TH2D* > > >(nNeutrinoSigns);
+
802
+ + +
805
+
806 for (int i=0;i<nNeutrinoSigns;i++) {
+
807 if (i==0) {NeutrinoSign = "#bar{#nu}";}
+
808 else {NeutrinoSign = "#nu";}
+
809
+ + +
812
+
813 for (int j=0;j<nInitialFlavours;j++) {
+ + +
816
+
817 for (int k=0;k<nFinalFlavours;k++) {
+
818 if (j==0) {HistTitle = NeutrinoSign+"_{e} #rightarrow ";}
+
819 else if (j==1) {HistTitle = NeutrinoSign+"_{#mu} #rightarrow ";}
+
820 else {HistTitle = NeutrinoSign+"_{#tau} #rightarrow ";}
+
821
+
822 if (k==0) {HistTitle += NeutrinoSign+"_{e}";}
+
823 else if (k==1) {HistTitle += NeutrinoSign+"_{#mu}";}
+
824 else {HistTitle += NeutrinoSign+"_{#tau}";}
+
825
+
826 hPrimaryOscillogram[i][j][k] = (TH2D*)hPrimaryBinning->Clone(Form("hPrimaryOscillogram_%i_%i_%i",i,j,k));
+
827 hPrimaryOscillogram[i][j][k]->SetTitle(HistTitle+";log_{10}(E_{#nu}) (GeV);Cosine Zenith");
+
828 hSecondaryOscillogram[i][j][k] = (TH2D*)hSecondaryBinning->Clone(Form("hSecondaryOscillogram_%i_%i_%i",i,j,k));
+
829 hSecondaryOscillogram[i][j][k]->SetTitle(HistTitle+";log_{10}(E_{#nu}) (GeV);Cosine Zenith");
+
830
+
831 }
+
832 }
+
833 }
+
834
+ +
836}
+
+
+
+ +

◆ InitOscillogram()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Oscillator::InitOscillogram (TH2DPrimaryHistTemplate,
TH2DSecondaryHistTemplate 
)
+
+private
+
+ +

Definition at line 755 of file OscClass_CUDAProb3.cpp.

+
755 {
+
756 std::cout << "---------------------------------" << std::endl;
+
757 std::cout << " " << std::setw(7) << "nBins" << " " << std::setw(10) << "LowerEdge" << " " << std::setw(10) << "HigherEdge" << std::endl;
+
758 std::cout << "Coarse Binning: " << std::endl;
+
759 if (IsLinear) {
+
760 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << lCoarseEnergy << " " << std::setw(10) << hCoarseEnergy << std::endl;
+
761 } else {
+
762 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << pow(10,lCoarseEnergy) << " " << std::setw(10) << pow(10,hCoarseEnergy) << std::endl;
+
763 }
+
764 std::cout << "Cosz = " << std::setw(7) << nCoarseCosz << " " << std::setw(10) << lCoarseCosz << " " << std::setw(10) << hCoarseCosz << std::endl;
+
765 std::cout << "\n" << std::endl;
+
766 std::cout << "Fine Binning: " << std::endl;
+
767 if (IsLinear) {
+
768 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << lFineEnergy << " " << std::setw(10) << hFineEnergy << std::endl;
+
769 } else {
+
770 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << pow(10,lFineEnergy) << " " << std::setw(10) << pow(10,hFineEnergy) << std::endl;
+
771 }
+
772 std::cout << "Cosz = " << std::setw(7) << nFineCosz << " " << std::setw(10) << lFineCosz << " " << std::setw(10) << hFineCosz << std::endl;
+
773 std::cout << "---------------------------------" << std::endl;
+
774
+
775 hPrimaryBinning = (TH2D*)PrimaryHistTemplate->Clone("hPrimaryBinning");
+
776 hPrimaryBinning->SetTitle("hPrimaryBinning");
+
777 hSecondaryBinning = (TH2D*)SecondaryHistTemplate->Clone("hSecondaryBinning");
+
778 hSecondaryBinning->SetTitle("SecondaryBinning");
+
779
+
780 nPrimaryBinsX = hPrimaryBinning->GetNbinsX();
+
781 nPrimaryBinsY = hPrimaryBinning->GetNbinsY();
+ +
783
+
784 nSecondaryBinsX = hSecondaryBinning->GetNbinsX();
+
785 nSecondaryBinsY = hSecondaryBinning->GetNbinsY();
+ +
787
+
788 if (!RebinMode) {
+ +
790 }
+
791 else {
+
792 ProbList = new FLOAT_T[nMaxBin];
+
793 }
+
794
+
795 ResizeArrays();
+
796 FillArrays();
+
797}
+ + +
+
+
+ +

◆ InitPropagator()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::InitPropagator ()
+
+private
+
+ +

Definition at line 1318 of file OscClass_CUDAProb3.cpp.

+
1318 {
+
1319 std::cout << "-----------------------------" << std::endl;
+
1320 std::cout << "Initialising Propagator:" << std::endl;
+
1321 std::cout << " - nEnergyBins : " << nSecondaryBinsX << std::endl;
+
1322 std::cout << " - nCoszBins : " << nSecondaryBinsY << std::endl;
+
1323 std::cout << std::endl;
+
1324
+
1325 /*
+
1326 int nEnergy = nSecondaryBinsX;
+
1327 int nCosine = nSecondaryBinsY;
+
1328
+
1329#ifdef USE_GPU
+
1330 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCudaPropagatorSingle<FLOAT_T>(0,nCosine, nEnergy)); // Single-GPU propagator
+
1331#else
+
1332 int nThreads = 1;
+
1333 #pragma omp parallel
+
1334 {
+
1335#pragma omp single
+
1336 nThreads = omp_get_num_threads();
+
1337 }
+
1338
+
1339 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCpuPropagator<FLOAT_T>(nCosine, nEnergy, nThreads)); // MultiThread CPU propagator
+
1340#endif
+
1341
+
1342 propagator->setEnergyList(SecondaryXBinEvalPoints);
+
1343 propagator->setCosineList(SecondaryYBinEvalPoints);
+
1344 */
+
1345
+
1346 int nThreads = 1;
+
1347 propagator = std::unique_ptr<AtmosCpuPropagator<FLOAT_T>> ( new AtmosCpuPropagator<FLOAT_T>(1, 1, nThreads));
+
1348
+
1349 std::vector<FLOAT_T> Energy;
+
1350 Energy.push_back(0.0035);
+
1351 propagator->setEnergyList(Energy);
+
1352
+
1353 std::vector<FLOAT_T> Cosine;
+
1354 Cosine.push_back(-0.99895);
+
1355 propagator->setCosineList(Cosine);
+
1356
+ +
1358 std::cout << "Loading Earth density from: " << EarthDensityFile << std::endl;
+
1359
+
1360 propagator->setDensityFromFile(EarthDensityFile.Data());
+
1361
+ + +
1364 } else {
+
1365 std::cout << "Not using production height averaging" << std::endl;
+
1366 }
+
1367
+
1368
+
1369 std::cout << "--------------------------------------------" << std::endl;
+
1370}
+
void SetProductionHeightArray()
+ +
+
+
+ +

◆ isAlreadyCalculated()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool Oscillator::isAlreadyCalculated (doubleoscpar,
double prodH,
double Yp_Val 
)
+
+private
+
+ +

Definition at line 914 of file OscClass_CUDAProb3.cpp.

+
914 {
+
915
+
916 bool fAlreadyCalculated = true;
+
917 for (int i=0;i<nOscpars;i++) {
+
918 if (oscpar[i]!=foscpar[i]) {
+
919 fAlreadyCalculated = false;
+
920 }
+
921 }
+
922 if (prodH!=fprodH) {
+
923 fAlreadyCalculated = false;
+
924 }
+
925 if (Yp_Val!=fYp_Val) {
+
926 fAlreadyCalculated = false;
+
927 }
+
928 if (fBinning[0] != nCoarseCosz) {
+
929 fAlreadyCalculated = false;
+
930 }
+
931 if (fBinning[1] != nCoarseEnergy) {
+
932 fAlreadyCalculated = false;
+
933 }
+
934 if (fBinning[2] != nFineCosz) {
+
935 fAlreadyCalculated = false;
+
936 }
+
937 if (fBinning[3] != nFineEnergy) {
+
938 fAlreadyCalculated = false;
+
939 }
+
940 return fAlreadyCalculated;
+
941}
+ + + + +
+
+
+ +

◆ isLinear()

+ +
+
+ + + + + +
+ + + + + + + +
bool Oscillator::isLinear ()
+
+inline
+
+ +

Definition at line 61 of file OscClass_CUDAProb3.h.

+
61{return IsLinear;}
+
+
+
+ +

◆ isUsingGPU()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::isUsingGPU ()
+
+private
+
+ +

Definition at line 1203 of file OscClass_CUDAProb3.cpp.

+
1203 {
+
1204#ifdef USE_GPU
+
1205 std::cout << "-------------------------" << std::endl;
+
1206 std::cout << "Set Oscillator to use GPU" << std::endl;
+
1207 std::cout << "-------------------------" << std::endl;
+
1208#else
+
1209 std::cout << "-------------------------" << std::endl;
+
1210 std::cout << "Set Oscillator to use CPU" << std::endl;
+
1211 std::cout << "-------------------------" << std::endl;
+
1212#endif
+
1213}
+
+
+
+ +

◆ IsValidBox()

+ +
+
+ + + + + +
+ + + + + + + + +
bool Oscillator::IsValidBox (Box Box1)
+
+private
+
+ +

Definition at line 1293 of file OscClass_CUDAProb3.cpp.

+
1293 {
+
1294 if (Box1.UR.y <= Box1.BL.y) return false;
+
1295 if (Box1.UR.x <= Box1.BL.x) return false;
+
1296 return true;
+
1297}
+
+
+
+ +

◆ linspace()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< double > Oscillator::linspace (double Emin,
double Emax,
int nDiv 
)
+
+private
+
+ +

Definition at line 1661 of file OscClass_CUDAProb3.cpp.

+
1661 {
+
1662 if (nDiv==0) {
+
1663 std::cout << "Requested linear spacing distribution with 0 divisions" << std::endl;
+
1664 throw;
+
1665 }
+
1666
+
1667 std::vector<double> linpoints(nDiv+1, 0.0);
+
1668
+
1669 double step_lin = (Emax - Emin)/double(nDiv);
+
1670
+
1671 double EE = Emin;
+
1672
+
1673 for (int i=0; i<nDiv; i++) {
+
1674 if (fabs(EE)<1e-6) {EE = 0.;}
+
1675
+
1676 linpoints[i] = EE;
+
1677 EE += step_lin;
+
1678 }
+
1679
+
1680 linpoints[nDiv] = Emax;
+
1681
+
1682 return linpoints;
+
1683}
+
+
+
+ +

◆ logspace()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< double > Oscillator::logspace (double Emin,
double Emax,
int nDiv 
)
+
+private
+
+ +

Definition at line 1685 of file OscClass_CUDAProb3.cpp.

+
1685 {
+
1686 if (nDiv==0) {
+
1687 std::cout << "Requested log spacing distribution with 0 divisions" << std::endl;
+
1688 throw;
+
1689 }
+
1690
+
1691 std::vector<double> logpoints(nDiv+1, 0.0);
+
1692 logpoints[0]=Emin;
+
1693
+
1694 if (Emin == 0.) {
+
1695 Emin = 0.01;
+
1696 }
+
1697
+
1698 double Emin_log,Emax_log;
+
1699 Emin_log = log10(Emin);
+
1700 Emax_log = log10(Emax);
+
1701
+
1702 double step_log = (Emax_log - Emin_log)/double(nDiv);
+
1703
+
1704 double EE = Emin_log+step_log;
+
1705
+
1706 for (int i=1; i<nDiv; i++) {
+
1707 logpoints[i] = pow(10.,EE);
+
1708 EE += step_log;
+
1709 }
+
1710
+ +
1712
+
1713 return logpoints;
+
1714}
+
+
+
+ +

◆ NeutrinoFlavourToIndex()

+ +
+
+ + + + + +
+ + + + + + + + +
int Oscillator::NeutrinoFlavourToIndex (int val)
+
+inlineprivate
+
+ +

Definition at line 126 of file OscClass_CUDAProb3.h.

+
126 {
+
127 return (abs(val)-1);
+
128 }
+
+
+
+ +

◆ NeutrinoIndexToFlavour()

+ +
+
+ + + + + +
+ + + + + + + + +
int Oscillator::NeutrinoIndexToFlavour (int val)
+
+inlineprivate
+
+ +

Definition at line 118 of file OscClass_CUDAProb3.h.

+
118 {
+
119 return val+1;
+
120 }
+
+
+
+ +

◆ NeutrinoIndexToSign()

+ +
+
+ + + + + +
+ + + + + + + + +
int Oscillator::NeutrinoIndexToSign (int val)
+
+inlineprivate
+
+ +

Definition at line 114 of file OscClass_CUDAProb3.h.

+
114 {
+
115 return 2*val-1;
+
116 }
+
+
+
+ +

◆ NeutrinoSignToIndex()

+ +
+
+ + + + + +
+ + + + + + + + +
int Oscillator::NeutrinoSignToIndex (int val)
+
+inlineprivate
+
+ +

Definition at line 122 of file OscClass_CUDAProb3.h.

+
122 {
+
123 return (val<0) ? 0 : 1;
+
124 }
+
+
+
+ +

◆ PrintBinning()

+ +
+
+ + + + + + + +
void Oscillator::PrintBinning ()
+
+ +

Definition at line 1612 of file OscClass_CUDAProb3.cpp.

+
1612 {
+
1613 std::cout << "\n" << "Initialising oscillograms with ";
+
1614 if (IsLinear) {
+
1615 std::cout << "Linear Binning:" << std::endl;
+
1616 } else {
+
1617 std::cout << "Logarithmic Binning:" << std::endl;
+
1618 }
+
1619
+
1620 std::cout << "---------------------------------------------------------" << std::endl;
+
1621 std::cout << std::setw(16) << "nCoarseCosz:" << " | " << std::setw(16) <<nCoarseCosz << std::endl;
+
1622 std::cout << std::setw(16) << "lCoarseCosz:" << " | " << std::setw(16) <<lCoarseCosz << std::endl;
+
1623 std::cout << std::setw(16) << "hCoarseCosz:" << " | " << std::setw(16) <<hCoarseCosz << std::endl;
+
1624 std::cout << std::endl;
+
1625 std::cout << std::setw(16) << "nCoarseEnergy:" << " | " << std::setw(16) <<nCoarseEnergy << std::endl;
+
1626 std::cout << std::setw(16) << "lCoarseEnergy:" << " | " << std::setw(16) <<lCoarseEnergy << std::endl;
+
1627 std::cout << std::setw(16) << "hCoarseEnergy:" << " | " << std::setw(16) <<hFineCosz << std::endl;
+
1628 std::cout << std::endl;
+
1629 std::cout << std::setw(16) << "nFineCosz:" << " | " << std::setw(16) <<nFineCosz << std::endl;
+
1630 std::cout << std::setw(16) << "nFineEnergy:" << " | " << std::setw(16) <<nFineEnergy << std::endl;
+
1631 std::cout << std::endl;
+
1632}
+
+
+
+ +

◆ PrintBox()

+ +
+
+ + + + + +
+ + + + + + + + +
void Oscillator::PrintBox (Box Box1)
+
+private
+
+ +

Definition at line 1289 of file OscClass_CUDAProb3.cpp.

+
1289 {
+
1290 std::cout << Box1.BL.x << "," << Box1.BL.y << " | " << Box1.UR.x << "," << Box1.UR.y << std::endl;
+
1291}
+
+
+
+ +

◆ PrintOscillatorConfig()

+ +
+
+ + + + + + + +
void Oscillator::PrintOscillatorConfig ()
+
+ +

Definition at line 1583 of file OscClass_CUDAProb3.cpp.

+
1583 {
+
1584 switch (ArrayConfig) {
+
1585 case 0:
+
1586 std::cout << "Using standard Oscillator configuration where a secondary bin only has one contribution" << std::endl;
+
1587 break;
+
1588 case 1:
+
1589 std::cout << "Using ManyContrib Oscillator configuration where a secondary bin has many contributions weighted by area" << std::endl;
+
1590 break;
+
1591 default:
+
1592 std::cout << "Unknown Oscillator Config:" << ArrayConfig << std::endl;
+
1593 throw;
+
1594 }
+
1595}
+
+
+
+ +

◆ RebinOscillogram()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Oscillator::RebinOscillogram (int Switcher,
std::vector< doubleNewBinning 
)
+
+ +

Definition at line 266 of file OscClass_CUDAProb3.cpp.

+
266 {
+
267 if (!RebinMode) {
+
268 std::cout << "Rebin called when Oscillator not in rebin mode. Skipping.." << std::endl;
+
269 throw;
+
270 }
+
271
+
272 bool CoarseChanged = false;
+
273 bool FineChanged = false;
+
274
+
275 //DB This would only be needed in oscillogram binning studies and in normal running this would not be needed. Hence console output to remind user to call needed function
+
276 std::cout << "Due to the newly implemented pointer method of returning oscillogram weights, please ensure that you call samplePDFSKBase::FindEventOscBin() after Oscillogram::RebinOscillogram() to update the osc_w_pointers" << std::endl;
+
277
+
278 if (Switcher==0) {
+
279 if (NewBinning.size()==2) {
+
280 if ((NewBinning[0]*NewBinning[1]) > nMaxBin) {
+
281 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
282 throw;
+
283 }
+
284
+
285 if (NewBinning[0] > nFineCosz) {
+
286 std::cout << "Requested coarse cosZ binning is larger than the fine cosZ binning" << std::endl;
+
287 throw;
+
288 }
+
289
+
290 if (NewBinning[1] > nFineEnergy) {
+
291 std::cout << "Requested coarse energy binning is larger than the fine energy binning" << std::endl;
+
292 throw;
+
293 }
+
294
+ + +
297 } else {
+
298 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
299 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
300 throw;
+
301 }
+
302
+
303 CoarseChanged = true;
+
304 }
+
305
+
306 else if (Switcher==1) {
+
307 if (NewBinning.size()==2) {
+
308 if ((NewBinning[0]*NewBinning[1]) > nMaxBin) {
+
309 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
310 throw;
+
311 }
+
312
+
313 if (NewBinning[0] < nCoarseCosz) {
+
314 std::cout << "Requested fine cosZ binning is smaller than the coarse cosZ binning" << std::endl;
+
315 throw;
+
316 }
+
317
+
318 if (NewBinning[1] < nCoarseEnergy) {
+
319 std::cout << "Requested fine energy binning is smaller than the coarse energy binning" << std::endl;
+
320 throw;
+
321 }
+
322
+ + +
325 } else {
+
326 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
327 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
328 throw;
+
329 }
+
330
+
331 FineChanged = true;
+
332 }
+
333
+
334 else if (Switcher==2) {
+
335 if (NewBinning.size()==4) {
+
336 if (((NewBinning[0]*NewBinning[1]) > nMaxBin)||((NewBinning[2]*NewBinning[3]) > nMaxBin)) {
+
337 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
338 throw;
+
339 }
+ + + + +
344 } else {
+
345 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
346 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
347 throw;
+
348 }
+
349
+
350 CoarseChanged = true;
+
351 FineChanged = true;
+
352 }
+
353
+
354 else if (Switcher==3) {
+
355 if (NewBinning.size()==2) {
+
356 if ((NewBinning[0]<0)||(NewBinning[0]>1)) {
+
357 std::cout << "Rebinned factorised value for CosZ outside of 0 to 1 range:" << NewBinning[0] << std::endl;
+
358 std::cout << "Skipping.." << std::endl;
+
359 }
+
360 if ((NewBinning[1]<0)||(NewBinning[1]>1)) {
+
361 std::cout << "Rebinned factorised value for Energy outside of 0 to 1 range:" << NewBinning[1] << std::endl;
+
362 std::cout << "Skipping.." << std::endl;
+
363 }
+ + + +
367 std::cout << "Rebinned Binning set too large. Go to Oscillator::Oscillator(bool RebinMode_, TString EarthDensityFile_) to increase nMaxBins. Skipping.." << std::endl;
+
368 throw;
+
369 }
+ + +
372 } else {
+
373 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
374 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
375 throw;
+
376 }
+
377
+
378 CoarseChanged = true;
+
379 }
+
380
+
381 else if (Switcher == 4) {
+
382 if (NewBinning.size()==2) {
+
383 if (NewBinning[0] != floor(NewBinning[0])) {
+
384 std::cerr << "NewBinning[0]:" << NewBinning[0] << " is not an integer" << std::endl;
+
385 throw;
+
386 }
+
387
+
388 if (NewBinning[1] != floor(NewBinning[1])) {
+
389 std::cerr << "NewBinning[1]:" << NewBinning[1] << " is not an integer" << std::endl;
+
390 throw;
+
391 }
+
392
+
393 if (NewBinning[0] < 1) {
+
394 std::cerr << "Invalid binning specified. NewBinning[0] should be integer >= 1. Given:" << NewBinning[0] << std::endl;
+
395 throw;
+
396 }
+
397
+
398 if (NewBinning[1] < 1) {
+
399 std::cerr << "Invalid binning specified. NewBinning[0] should be integer >= 1. Given:" << NewBinning[1] << std::endl;
+
400 throw;
+
401 }
+
402
+ + +
405
+
406 } else {
+
407 std::cout << "Rebin with current params not allowed. Switcher should be 0 or 3 to rebin Primary, 1 or 4 to rebin Secondary or 2 to rebin both. Switcher given:" << Switcher << std::endl;
+
408 std::cout << "Size of binning array should be 2 for Switcher == 0, 1, 3, 4 or 4 for Switcher == 2. Size given:" << sizeof(NewBinning)/sizeof(NewBinning[0]) << std::endl;
+
409 throw;
+
410 }
+
411
+
412 FineChanged = true;
+
413 }
+
414
+
415 else {
+
416 std::cout << "Invalid switcher option given. Switcher given:" << Switcher << std::endl;
+
417 throw;
+
418 }
+
419
+ +
421
+
422 if (fFillHistograms) {
+ + +
425 }
+
426
+ +
428}
+ +
void ResizeOscillogram(bool CoarseChanged, bool FineChanged)
+
+
+
+ +

◆ Reset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::Reset (int NeutrinoSignIndex,
int InitialNeutrinoIndex,
int FinalNeutrinoIndex 
)
+
+private
+
+
+ +

◆ ResetSavedParams()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::ResetSavedParams ()
+
+private
+
+ +

Definition at line 895 of file OscClass_CUDAProb3.cpp.

+
895 {
+
896 for (int i=0;i<6;i++) {
+
897 foscpar[i] = -999;
+
898 }
+
899 fprodH = -999;
+
900 fYp_Val = -1.;
+
901 for (int i=0;i<4;i++) {
+
902 fBinning[i] = -1;
+
903 }
+
904}
+
+
+
+ +

◆ ResizeArrays()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::ResizeArrays ()
+
+private
+
+ +

Definition at line 556 of file OscClass_CUDAProb3.cpp.

+
556 {
+
557
+ +
559 for (unsigned int iPrimaryHist=0;iPrimaryHist<nPrimaryHists;iPrimaryHist++) {
+ +
561 }
+
562 hPrimaryCounter_Arr = new double[nPrimaryBins];
+
563
+ + +
566
+
567 PrimaryXBinEdges.resize(hPrimaryBinning->GetNbinsX()+1);
+
568 PrimaryYBinEdges.resize(hPrimaryBinning->GetNbinsY()+1);
+
569 SecondaryXBinEdges.resize(hSecondaryBinning->GetNbinsX()+1);
+
570 SecondaryYBinEdges.resize(hSecondaryBinning->GetNbinsY()+1);
+
571
+
572 PrimaryXBinEvalPoints.resize(hPrimaryBinning->GetNbinsX());
+
573 PrimaryYBinEvalPoints.resize(hPrimaryBinning->GetNbinsY());
+
574 SecondaryXBinEvalPoints.resize(hSecondaryBinning->GetNbinsX());
+
575 SecondaryYBinEvalPoints.resize(hSecondaryBinning->GetNbinsY());
+
576
+
577 for (int yBin=1;yBin<=hPrimaryBinning->GetNbinsY()+1;yBin++) {
+
578 PrimaryYBinEdges[yBin-1] = hPrimaryBinning->GetYaxis()->GetBinLowEdge(yBin);
+
579 }
+
580
+
581 for (int yBin=1;yBin<=hSecondaryBinning->GetNbinsY()+1;yBin++) {
+
582 SecondaryYBinEdges[yBin-1] = hSecondaryBinning->GetYaxis()->GetBinLowEdge(yBin);
+
583 }
+
584
+
585 for (int yBin=1;yBin<=hPrimaryBinning->GetNbinsY();yBin++) {
+
586 PrimaryYBinEvalPoints[yBin-1] = hPrimaryBinning->GetYaxis()->GetBinCenter(yBin);
+
587 }
+
588
+
589 for (int yBin=1;yBin<=hSecondaryBinning->GetNbinsY();yBin++) {
+
590 SecondaryYBinEvalPoints[yBin-1] = hSecondaryBinning->GetYaxis()->GetBinCenter(yBin);
+ +
592 }
+
593
+
594 if (IsLinear) {
+
595 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX()+1;xBin++) {
+
596 PrimaryXBinEdges[xBin-1] = hPrimaryBinning->GetXaxis()->GetBinLowEdge(xBin);
+
597 }
+
598
+
599 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX()+1;xBin++) {
+
600 SecondaryXBinEdges[xBin-1] = hSecondaryBinning->GetXaxis()->GetBinLowEdge(xBin);
+
601 }
+
602
+
603 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX();xBin++) {
+
604 PrimaryXBinEvalPoints[xBin-1] = hPrimaryBinning->GetXaxis()->GetBinCenter(xBin);
+
605 }
+
606
+
607 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX();xBin++) {
+
608 SecondaryXBinEvalPoints[xBin-1] = hSecondaryBinning->GetXaxis()->GetBinCenter(xBin);
+
609 }
+
610
+
611 } else {
+
612 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX()+1;xBin++) {
+
613 PrimaryXBinEdges[xBin-1] = pow(10.0,hPrimaryBinning->GetXaxis()->GetBinLowEdge(xBin));
+
614 }
+
615
+
616 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX()+1;xBin++) {
+
617 SecondaryXBinEdges[xBin-1] = pow(10.0,hSecondaryBinning->GetXaxis()->GetBinLowEdge(xBin));
+
618 }
+
619
+
620 for (int xBin=1;xBin<=hPrimaryBinning->GetNbinsX();xBin++) {
+
621 PrimaryXBinEvalPoints[xBin-1] = pow(10.0,hPrimaryBinning->GetXaxis()->GetBinCenter(xBin));
+
622 }
+
623
+
624 for (int xBin=1;xBin<=hSecondaryBinning->GetNbinsX();xBin++) {
+
625 SecondaryXBinEvalPoints[xBin-1] = pow(10.0,hSecondaryBinning->GetXaxis()->GetBinCenter(xBin));
+
626 }
+
627 }
+
628
+
629}
+
std::vector< FLOAT_T > PrimaryXBinEvalPoints
+
std::vector< FLOAT_T > PrimaryYBinEvalPoints
+
+
+
+ +

◆ ResizeOscillogram()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Oscillator::ResizeOscillogram (bool CoarseChanged,
bool FineChanged 
)
+
+private
+
+ +

Definition at line 430 of file OscClass_CUDAProb3.cpp.

+
430 {
+
431 DeleteArrays();
+
432
+
433 std::vector<double> Energy_Coarse;
+
434 std::vector<double> Cosz_Coarse;
+
435 std::vector<double> Energy_Fine;
+
436 std::vector<double> Cosz_Fine;
+
437
+
438 if (CoarseChanged) {
+
439 if (IsLinear) {
+ +
441 } else {
+ +
443 }
+
444
+ +
446 } else {
+
447 Energy_Coarse.resize(hPrimaryBinning->GetNbinsX()+1);
+
448 for (int i=0;i<=hPrimaryBinning->GetNbinsX();i++) {
+
449 Energy_Coarse[i] = hPrimaryBinning->GetXaxis()->GetBinLowEdge(i+1);
+
450 }
+
451
+
452 Cosz_Coarse.resize(hPrimaryBinning->GetNbinsY()+1);
+
453 for (int i=0;i<=hPrimaryBinning->GetNbinsY();i++) {
+
454 Cosz_Coarse[i] = hPrimaryBinning->GetYaxis()->GetBinLowEdge(i+1);
+
455 }
+
456 }
+
457
+
458 if (FineChanged) {
+
459
+
460 if (!useFineBinsPerBin) {
+
461 if (IsLinear) {
+ +
463 } else {
+ +
465 }
+ +
467 } else {
+ + +
470 }
+
471
+
472 } else {
+
473 Energy_Fine.resize(hSecondaryBinning->GetNbinsX()+1);
+
474 for (int i=0;i<=hSecondaryBinning->GetNbinsX();i++) {
+
475 Energy_Fine[i] = hSecondaryBinning->GetXaxis()->GetBinLowEdge(i+1);
+
476 }
+
477
+
478 Cosz_Fine.resize(hSecondaryBinning->GetNbinsY()+1);
+
479 for (int i=0;i<=hSecondaryBinning->GetNbinsY();i++) {
+
480 Cosz_Fine[i] = hSecondaryBinning->GetYaxis()->GetBinLowEdge(i+1);
+
481 }
+
482 }
+
483
+
484 hPrimaryBinning->SetBins(Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
485 hSecondaryBinning->SetBins(Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
486
+
487 nPrimaryBinsX = hPrimaryBinning->GetNbinsX();
+
488 nPrimaryBinsY = hPrimaryBinning->GetNbinsY();
+ +
490
+
491 nSecondaryBinsX = hSecondaryBinning->GetNbinsX();
+
492 nSecondaryBinsY = hSecondaryBinning->GetNbinsY();
+ +
494
+
495 std::cout << "---------------------------------" << std::endl;
+
496 std::cout << " " << std::setw(7) << "nBins" << " " << std::setw(10) << "LowerEdge" << " " << std::setw(10) << "HigherEdge" << std::endl;
+
497 std::cout << "Coarse Oscillogram Binning: " << std::endl;
+
498 if (IsLinear) {
+
499 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << lCoarseEnergy << " " << std::setw(10) << hCoarseEnergy << std::endl;
+
500 } else {
+
501 std::cout << "Energy = " << std::setw(7) << nCoarseEnergy << " " << std::setw(10) << pow(10,lCoarseEnergy) << " " << std::setw(10) << pow(10,hCoarseEnergy) << std::endl;
+
502 }
+
503 std::cout << "Cosz = " << std::setw(7) << nCoarseCosz << " " << std::setw(10) << lCoarseCosz << " " << std::setw(10) << hCoarseCosz << std::endl;
+
504 std::cout << "\n" << std::endl;
+
505 std::cout << "Fine Oscillogram Binning: " << std::endl;
+
506 if (IsLinear) {
+
507 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << lFineEnergy << " " << std::setw(10) << hFineEnergy << std::endl;
+
508 } else {
+
509 std::cout << "Energy = " << std::setw(7) << nFineEnergy << " " << std::setw(10) << pow(10,lFineEnergy) << " " << std::setw(10) << pow(10,hFineEnergy) << std::endl;
+
510 }
+
511 std::cout << "Cosz = " << std::setw(7) << nFineCosz << " " << std::setw(10) << lFineCosz << " " << std::setw(10) << hFineCosz << std::endl;
+
512 std::cout << "---------------------------------" << std::endl;
+
513
+
514 if (hPrimaryOscillogram.size()!=0) {
+
515 for (int i=0;i<nNeutrinoSigns;i++) {
+
516 for (int j=0;j<nInitialFlavours;j++) {
+
517 for (int k=0;k<nFinalFlavours;k++) {
+
518
+
519 hPrimaryOscillogram[i][j][k]->SetBins(Energy_Coarse.size()-1,Energy_Coarse.data(),Cosz_Coarse.size()-1,Cosz_Coarse.data());
+
520 hSecondaryOscillogram[i][j][k]->SetBins(Energy_Fine.size()-1,Energy_Fine.data(),Cosz_Fine.size()-1,Cosz_Fine.data());
+
521
+
522 }
+
523 }
+
524 }
+
525 }
+
526
+
527 ResizeArrays();
+
528
+
529 //DB According to LP, unique pointers should auto manage their own memory usage and once a new object is help in a unique pointer, it will 'delete' the old object
+ + +
532 FillArrays();
+
533}
+ + +
+
+
+ +

◆ retPointer()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
const double * Oscillator::retPointer (int GenNeutrinoFlavour,
int DetNeutrinoFlavour,
double NeutrinoEnergy,
double TrueCZ 
)
+
+ +

Definition at line 1247 of file OscClass_CUDAProb3.cpp.

+
1247 {
+ +
1249 std::cout << "Generated and Detected neutrino flavour are different signs - Quitting" << std::endl;
+
1250 std::cout << "GenNeutrinoFlavour:" << GenNeutrinoFlavour << std::endl;
+
1251 std::cout << "DetNeutrinoFlavour:" << DetNeutrinoFlavour << std::endl;
+
1252 throw;
+
1253 }
+
1254
+ + + +
1258
+ +
1260
+
1261 int xBin = -999;
+
1262 if (IsLinear) {
+
1263 xBin = hPrimaryBinning->GetXaxis()->FindBin(NeutrinoEnergy)-1;
+
1264 } else {
+
1265 xBin = hPrimaryBinning->GetXaxis()->FindBin(log10(NeutrinoEnergy))-1;
+
1266 }
+
1267 int yBin = hPrimaryBinning->GetYaxis()->FindBin(TrueCZ)-1;
+
1268
+
1269 if (xBin==-999) {
+
1270 std::cout << "xBin not set in Oscillator::ReturnProb. Quitting.." << std::endl;
+
1271 throw;
+
1272 }
+
1273
+
1274 int Bin = yBin*nPrimaryBinsX+xBin;
+
1275
+ +
1277 std::cout << "iPrimaryHist out of range - Given:" << iPrimaryHist << std::endl;
+
1278 throw;
+
1279 }
+
1280
+
1281 if ((Bin<0)||(Bin>nPrimaryBins)) {
+
1282 std::cout << "Bin out of range - Given:" << Bin << std::endl;
+
1283 throw;
+
1284 }
+
1285
+ +
1287}
+
int NeutrinoFlavourToIndex(int val)
+
int NeutrinoSignToIndex(int val)
+
+
+
+ +

◆ ReturnFineBinningFromCoarseBinnnig()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< double > Oscillator::ReturnFineBinningFromCoarseBinnnig (int nFine,
std::vector< doubleCoarseBinning 
)
+
+private
+
+ +

Definition at line 1716 of file OscClass_CUDAProb3.cpp.

+
1716 {
+
1717
+
1718 std::vector<double> ReturnVec;
+
1719 int nCoarse = (int)CoarseBinning.size()-1;
+ +
1721
+
1722 for (int iCoarseBin=0;iCoarseBin<nCoarse;iCoarseBin++) {
+ +
1724
+ +
1726 ReturnVec.push_back(tmpVec[iFineBin]);
+
1727 }
+
1728 }
+
1729 ReturnVec.push_back(CoarseBinning[nCoarse]);
+
1730
+
1731 return ReturnVec;
+
1732}
+
+
+
+ +

◆ ReturnOscillogramArray()

+ +
+
+ + + + + + + + +
std::vector< TH2D * > Oscillator::ReturnOscillogramArray (int fPrimary)
+
+ +

Definition at line 1142 of file OscClass_CUDAProb3.cpp.

+
1142 {
+
1143 if (hPrimaryOscillogram.size()==0) {
+
1144 std::cout << "Oscillograms are not initialised so I'm not going to try and return them" << std::endl;
+
1145 throw;
+
1146 }
+
1147
+
1148
+
1149 std::vector<TH2D*> Array;
+
1150 TH2D* Hist;
+
1151
+ +
1153
+
1154 for (int i=0;i<nNeutrinoSigns;i++) {
+
1155 for (int j=0;j<nInitialFlavours;j++) {
+
1156 for (int k=0;k<nFinalFlavours;k++) {
+
1157
+
1158 if (fPrimary) {
+
1159 Hist = (TH2D*)hPrimaryOscillogram[i][j][k]->Clone(Form("hPrimaryArray_%i_%i_%i",i,j,k));
+
1160 }
+
1161 else {
+
1162 Hist = (TH2D*)hSecondaryOscillogram[i][j][k]->Clone(Form("hSecondaryArray_%i_%i_%i",i,j,k));
+
1163 }
+
1164
+
1165 Array.push_back(Hist);
+
1166 }
+
1167 }
+
1168 }
+
1169
+
1170 return Array;
+
1171}
+
+
+
+ +

◆ ReturnPrimaryBinning()

+ +
+
+ + + + + +
+ + + + + + + +
TH2D * Oscillator::ReturnPrimaryBinning ()
+
+inline
+
+ +

Definition at line 62 of file OscClass_CUDAProb3.h.

+
62{return hPrimaryBinning;}
+
+
+
+ +

◆ ReturnPrimaryOscillogram()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< std::vector< std::vector< TH2D * > > > Oscillator::ReturnPrimaryOscillogram ()
+
+inline
+
+ +

Definition at line 57 of file OscClass_CUDAProb3.h.

+
57{return hPrimaryOscillogram;}
+
+
+
+ +

◆ ReturnProb()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double Oscillator::ReturnProb (double NeutrinoEnergy,
double Cosz,
int InitialFlavour,
int FinalFlavour 
)
+
+ +

Definition at line 1173 of file OscClass_CUDAProb3.cpp.

+
1173 {
+ + + +
1177
+ +
1179
+ +
1181 std::cout << "Something is wrong! Oscillation probability not calculated for neutrino flavour requested" << std::endl;
+
1182 std::cout << "NInitialFlavours:" << nInitialFlavours << " | Requested Flavour:" << InitialNeutrinoIndex << std::endl;
+
1183 std::cout << "NFinalFlavours:" << nFinalFlavours << " | Requested Flavour:" << FinalNeutrinoIndex << std::endl;
+
1184 std::exit(-1);
+
1185 }
+
1186
+
1187 int xBin = -999;
+
1188 if (IsLinear) {
+
1189 xBin = hPrimaryBinning->GetXaxis()->FindBin(NeutrinoEnergy);
+
1190 } else {
+
1191 xBin = hPrimaryBinning->GetXaxis()->FindBin(log10(NeutrinoEnergy));
+
1192 }
+
1193 int yBin = hPrimaryBinning->GetYaxis()->FindBin(Cosz);
+
1194
+
1195 if (xBin==-999) {
+
1196 std::cout << "xBin not set in Oscillator::ReturnProb. Quitting.." << std::endl;
+
1197 throw;
+
1198 }
+
1199
+ +
1201}
+
+
+
+ +

◆ ReturnProductionHeightBinEdges()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< FLOAT_T > Oscillator::ReturnProductionHeightBinEdges ()
+
+inline
+
+ +

Definition at line 66 of file OscClass_CUDAProb3.h.

+
+
std::vector< FLOAT_T > ProductionHeightBinEdges
+
+
+
+ +

◆ ReturnSecondaryOscillogram()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< std::vector< std::vector< TH2D * > > > Oscillator::ReturnSecondaryOscillogram ()
+
+inline
+
+ +

Definition at line 58 of file OscClass_CUDAProb3.h.

+
+
+
+
+ +

◆ ReturnSecondaryXBinEdges()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > Oscillator::ReturnSecondaryXBinEdges ()
+
+inline
+
+ +

Definition at line 54 of file OscClass_CUDAProb3.h.

+
54{return SecondaryXBinEdges;}
+
+
+
+ +

◆ ReturnSecondaryYBinEdges()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > Oscillator::ReturnSecondaryYBinEdges ()
+
+inline
+
+ +

Definition at line 55 of file OscClass_CUDAProb3.h.

+
55{return SecondaryYBinEdges;}
+
+
+
+ +

◆ SaveOscillogramsToFile()

+ +
+
+ + + + + + + + +
void Oscillator::SaveOscillogramsToFile (TString FileName)
+
+ +

Definition at line 1215 of file OscClass_CUDAProb3.cpp.

+
1215 {
+
1216 if (hPrimaryOscillogram.size()==0) {
+
1217 std::cout << "Oscillograms are not initialised so I'm not going to try and save them" << std::endl;
+
1218 throw;
+
1219 }
+
1220
+
1221 std::cout << "Saving Oscillograms to:" << FileName << std::endl;
+
1222 TFile* File = new TFile(FileName,"RECREATE");
+
1223
+
1224 File->mkdir("FineOsc");
+
1225 File->cd("FineOsc");
+
1226 for (int i=0;i<nNeutrinoSigns;i++) {
+
1227 for (int j=0;j<nInitialFlavours;j++) {
+
1228 for (int k=0;k<nFinalFlavours;k++) {
+
1229 hPrimaryOscillogram[i][j][k]->Write();
+
1230 }
+
1231 }
+
1232 }
+
1233
+
1234 File->mkdir("CoarseOsc");
+
1235 File->cd("CoarseOsc");
+
1236 for (int i=0;i<nNeutrinoSigns;i++) {
+
1237 for (int j=0;j<nInitialFlavours;j++) {
+
1238 for (int k=0;k<nFinalFlavours;k++) {
+
1239 hSecondaryOscillogram[i][j][k]->Write();
+
1240 }
+
1241 }
+
1242 }
+
1243
+
1244 File->Close();
+
1245}
+
+
+
+ +

◆ SaveParams()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Oscillator::SaveParams (doubleoscpar,
double prodH,
double Yp_Val 
)
+
+private
+
+ +

Definition at line 943 of file OscClass_CUDAProb3.cpp.

+
943 {
+
944 for (int i=0;i<nOscpars;i++) {
+
945 foscpar[i] = oscpar[i];
+
946 }
+
947 fprodH = prodH;
+
948 fYp_Val = Yp_Val;
+ + +
951 fBinning[2] = nFineCosz;
+ +
953}
+
+
+
+ +

◆ SetFillHistograms()

+ +
+
+ + + + + +
+ + + + + + + + +
void Oscillator::SetFillHistograms (bool fFillHistograms_ = true)
+
+inline
+
+
+ +

◆ SetOscillatorConfig()

+ +
+
+ + + + + + + + +
void Oscillator::SetOscillatorConfig (int ArrayConfig_ = 0)
+
+ +

Definition at line 1597 of file OscClass_CUDAProb3.cpp.

+
1597 {
+
1598 bool ApplyChanges = false;
+
1599 if (ArrayConfig_ != ArrayConfig) {ApplyChanges = true;}
+
1600
+ + +
1603
+
1604 if (ApplyChanges) {
+
1605 DeleteArrays();
+
1606 ResizeArrays();
+
1607 FillArrays();
+
1608 }
+
1609
+
1610}
+
+
+
+ +

◆ SetProductionHeightArray()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::SetProductionHeightArray ()
+
+private
+
+ +

Definition at line 1444 of file OscClass_CUDAProb3.cpp.

+
1444 {
+
1445 std::cout << "Loading Production Height Probabilities from: " << ProductionHeightFileName << std::endl;
+
1446
+ +
1448 if (!File || File->IsZombie()) {
+
1449 std::cerr << "Can not find file:" << ProductionHeightFileName << std::endl;
+
1450 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1451 throw;
+
1452 }
+
1453
+
1454 int nNuTypes = 2;
+
1455 int nNuFlav = 3;
+
1456
+
1457 std::vector< std::vector<TString> > NuFlavNames(2);
+
1458 NuFlavNames[0].resize(3);
+
1459 NuFlavNames[1].resize(3);
+
1460
+
1461 NuFlavNames[0][0] = "nue";
+
1462 NuFlavNames[0][1] = "numu";
+
1463 NuFlavNames[0][2] = "nutau";
+
1464 NuFlavNames[1][0] = "nuebar";
+
1465 NuFlavNames[1][1] = "numubar";
+
1466 NuFlavNames[1][2] = "nutaubar";
+
1467
+
1468 std::vector< std::vector<TH3D*> > vecHist;
+
1469 vecHist.resize(nNuTypes);
+
1470 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1471 vecHist[iNuType].resize(nNuFlav);
+
1472 }
+
1473
+
1474 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1475 for (int iNuFlav=0;iNuFlav<nNuFlav;iNuFlav++) {
+
1476 TString HistName = "ProductionHeight_"+NuFlavNames[iNuType][iNuFlav];
+
1477 TH3D* Hist = (TH3D*)File->Get(HistName);
+
1478
+
1479 if (!Hist) {
+
1480 std::cerr << HistName << " not found in File:" << ProductionHeightFileName << std::endl;
+
1481 File->ls();
+
1482 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1483 throw;
+
1484 }
+
1485
+ +
1487
+ +
1489 std::cerr << HistName << " has different number of Z bins:" << vecHist[iNuType][iNuFlav]->GetNbinsZ() << std::endl;
+
1490 std::cerr << "Expected:" << nProductionHeightAveragingBins << std::endl;
+
1491 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1492 throw;
+
1493 }
+
1494
+ +
1496 std::cerr << HistName << " has different number of X bins:" << vecHist[iNuType][iNuFlav]->GetNbinsX() << std::endl;
+
1497 std::cerr << "Expected:" << nSecondaryBinsX << std::endl;
+
1498 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1499 throw;
+
1500 }
+
1501
+ +
1503 std::cerr << HistName << " has different number of Y bins:" << vecHist[iNuType][iNuFlav]->GetNbinsY() << std::endl;
+
1504 std::cerr << "Expected:" << nSecondaryBinsY << std::endl;
+
1505 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1506 throw;
+
1507 }
+
1508 }
+
1509 }
+
1510
+ + +
1513
+
1514 int index = 0;
+
1515 for (int iNuType=0;iNuType<nNuTypes;iNuType++) {
+
1516 for(int iNuFlav=0;iNuFlav<nNuFlav;iNuFlav++) {
+ + +
1519 double Total = 0.;
+
1520
+ +
1522 double dP_dh = vecHist[iNuType][iNuFlav]->GetBinContent(iSecondaryBinsX+1,iSecondaryBinsY+1,iProductionHeight+1); //Taken from MTuple
+
1523 //double dP_dh = (1.0/(double)nProductionHeightAveragingBins)/vecHist[iNuType][iNuFlav]->GetZaxis()->GetBinWidth(iProductionHeight+1); //Flat Probability
+
1524
+
1525 double dh = vecHist[iNuType][iNuFlav]->GetZaxis()->GetBinWidth(iProductionHeight+1);
+
1526
+ + +
1529
+
1530 index += 1;
+
1531 }
+
1532
+
1533 if (fabs(Total-1.) > 1e-6) {
+
1534 std::cerr << "Probabilities integrated over production height do not sum to 1" << std::endl;
+
1535 std::cerr << "Total:" << Total << std::endl;
+ +
1537 std::cout << "iProductionHeight:" << iProductionHeight << " | dP_dh:" << vecHist[iNuType][iNuFlav]->GetBinContent(iSecondaryBinsX+1,iSecondaryBinsY+1,iProductionHeight+1) << std::endl;
+
1538 }
+
1539 std::cerr << __LINE__ << " : " << __FILE__ << std::endl;
+
1540 throw;
+
1541 }
+
1542 }
+
1543 }
+
1544 }
+
1545 }
+
1546
+ + + +
1550 std::cerr << "Invalid Production height bin edges found in TH3Ds from File:" << ProductionHeightFileName << std::endl;
+
1551 std::cerr << "Expected:" << std::endl;
+ +
1553 std::cerr << ProductionHeightBinEdges[jBin] << ", ";
+
1554 }
+
1555 std::cerr << std::endl;
+
1556 std::cerr << "Got:" << std::endl;
+ +
1558 std::cerr << vecHist[0][0]->GetZaxis()->GetBinLowEdge(jBin) << ", ";
+
1559 }
+
1560 std::cerr << std::endl;
+
1561 throw;
+
1562 }
+
1563 }
+
1564
+
1565 File->Close();
+
1566
+
1567 /*
+
1568 propagator->SetNumberOfProductionHeightBinsForAveraging(nProductionHeightAveragingBins);
+
1569 propagator->setProductionHeightList(ProductionHeightProbabilities,ProductionHeightBinEdges);
+
1570 */
+
1571}
+
+
+
+ +

◆ SetProductionHeightBinEdges()

+ +
+
+ + + + + +
+ + + + + + + +
void Oscillator::SetProductionHeightBinEdges ()
+
+private
+
+
+

Member Data Documentation

+ +

◆ ArrayConfig

+ +
+
+ + + + + +
+ + + + +
int Oscillator::ArrayConfig
+
+private
+
+ +

Definition at line 186 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ chemicalComposition_Nom

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::chemicalComposition_Nom
+
+private
+
+ +

Definition at line 247 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ EarthDensityFile

+ +
+
+ + + + + +
+ + + + +
TString Oscillator::EarthDensityFile
+
+private
+
+ +

Definition at line 141 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fBinning

+ +
+
+ + + + + +
+ + + + +
double Oscillator::fBinning[4]
+
+private
+
+ +

Definition at line 218 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fFillHistograms

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::fFillHistograms
+
+private
+
+ +

Definition at line 184 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fineCoarseRatioCosz

+ +
+
+ + + + + +
+ + + + +
double Oscillator::fineCoarseRatioCosz
+
+private
+
+ +

Definition at line 238 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fineCoarseRatioEnergy

+ +
+
+ + + + + +
+ + + + +
double Oscillator::fineCoarseRatioEnergy
+
+private
+
+ +

Definition at line 239 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ foscpar

+ +
+
+ + + + + +
+ + + + +
double Oscillator::foscpar[6]
+
+private
+
+ +

Definition at line 217 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fprodH

+ +
+
+ + + + + +
+ + + + +
double Oscillator::fprodH
+
+private
+
+ +

Definition at line 215 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ fYp_Val

+ +
+
+ + + + + +
+ + + + +
double Oscillator::fYp_Val
+
+private
+
+ +

Definition at line 216 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hCoarseCosz

+ +
+
+ + + + + +
+ + + + +
double Oscillator::hCoarseCosz
+
+private
+
+ +

Definition at line 203 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hCoarseEnergy

+ +
+
+ + + + + +
+ + + + +
double Oscillator::hCoarseEnergy
+
+private
+
+ +

Definition at line 195 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hFineCosz

+ +
+
+ + + + + +
+ + + + +
double Oscillator::hFineCosz
+
+private
+
+ +

Definition at line 207 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hFineEnergy

+ +
+
+ + + + + +
+ + + + +
double Oscillator::hFineEnergy
+
+private
+
+ +

Definition at line 199 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ HistogramsInitialised

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::HistogramsInitialised
+
+private
+
+ +

Definition at line 185 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hPrimaryBinning

+ +
+
+ + + + + +
+ + + + +
TH2D* Oscillator::hPrimaryBinning
+
+private
+
+ +

Definition at line 212 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hPrimaryCounter_Arr

+ +
+
+ + + + + +
+ + + + +
double* Oscillator::hPrimaryCounter_Arr
+
+private
+
+ +

Definition at line 149 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hPrimaryOscillogram

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector< std::vector<TH2D*> > > Oscillator::hPrimaryOscillogram
+
+private
+
+ +

Definition at line 210 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hPrimaryOscillogram_Arr

+ +
+
+ + + + + +
+ + + + +
double** Oscillator::hPrimaryOscillogram_Arr
+
+private
+
+ +

Definition at line 147 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hProductionHeightRange

+ +
+
+ + + + + +
+ + + + +
double Oscillator::hProductionHeightRange
+
+private
+
+ +

Definition at line 244 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hSecondaryBinning

+ +
+
+ + + + + +
+ + + + +
TH2D* Oscillator::hSecondaryBinning
+
+private
+
+ +

Definition at line 213 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ hSecondaryOscillogram

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector< std::vector<TH2D*> > > Oscillator::hSecondaryOscillogram
+
+private
+
+ +

Definition at line 211 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ InputFileName

+ +
+
+ + + + + +
+ + + + +
std::string Oscillator::InputFileName
+
+private
+
+ +

Definition at line 227 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ IsLinear

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::IsLinear
+
+private
+
+ +

Definition at line 222 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ lCoarseCosz

+ +
+
+ + + + + +
+ + + + +
double Oscillator::lCoarseCosz
+
+private
+
+ +

Definition at line 202 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ lCoarseEnergy

+ +
+
+ + + + + +
+ + + + +
double Oscillator::lCoarseEnergy
+
+private
+
+ +

Definition at line 194 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ lFineCosz

+ +
+
+ + + + + +
+ + + + +
double Oscillator::lFineCosz
+
+private
+
+ +

Definition at line 206 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ lFineEnergy

+ +
+
+ + + + + +
+ + + + +
double Oscillator::lFineEnergy
+
+private
+
+ +

Definition at line 198 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ lProductionHeightRange

+ +
+
+ + + + + +
+ + + + +
double Oscillator::lProductionHeightRange
+
+private
+
+ +

Definition at line 243 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nCoarseCosz

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nCoarseCosz
+
+private
+
+ +

Definition at line 204 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nCoarseEnergy

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nCoarseEnergy
+
+private
+
+ +

Definition at line 196 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ NeutrinoTypes

+ +
+
+ + + + + +
+ + + + +
std::vector<NeutrinoType> Oscillator::NeutrinoTypes
+
+private
+
+ +

Definition at line 172 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ NeutrinoTypes_Names

+ +
+
+ + + + + +
+ + + + +
std::vector<TString> Oscillator::NeutrinoTypes_Names
+
+private
+
+ +

Definition at line 173 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nFinalFlavours

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nFinalFlavours
+
+private
+
+ +

Definition at line 153 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nFineCosz

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nFineCosz
+
+private
+
+ +

Definition at line 208 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nFineEnergy

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nFineEnergy
+
+private
+
+ +

Definition at line 200 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nInitialFlavours

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nInitialFlavours
+
+private
+
+ +

Definition at line 152 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nLayers

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nLayers
+
+private
+
+ +

Definition at line 182 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nMaxBin

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nMaxBin
+
+private
+
+ +

Definition at line 225 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nNeutrinoSigns

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nNeutrinoSigns
+
+private
+
+ +

Definition at line 151 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nOscpars

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nOscpars
+
+private
+
+ +

Definition at line 220 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nPrimaryBins

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nPrimaryBins
+
+private
+
+ +

Definition at line 179 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nPrimaryBinsX

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nPrimaryBinsX
+
+private
+
+ +

Definition at line 188 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nPrimaryBinsY

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nPrimaryBinsY
+
+private
+
+ +

Definition at line 189 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nPrimaryHists

+ +
+
+ + + + + +
+ + + + +
unsigned int Oscillator::nPrimaryHists
+
+private
+
+ +

Definition at line 146 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nProductionHeightAveragingBins

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nProductionHeightAveragingBins
+
+private
+
+ +

Definition at line 242 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nSecondaryBins

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nSecondaryBins
+
+private
+
+ +

Definition at line 178 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nSecondaryBinsX

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nSecondaryBinsX
+
+private
+
+ +

Definition at line 191 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ nSecondaryBinsY

+ +
+
+ + + + + +
+ + + + +
int Oscillator::nSecondaryBinsY
+
+private
+
+ +

Definition at line 192 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ OscChannels

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<ProbType> > Oscillator::OscChannels
+
+private
+
+ +

Definition at line 176 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ OscChannels_Names

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<TString> > Oscillator::OscChannels_Names
+
+private
+
+ +

Definition at line 175 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryBinContrib_Bin

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<int> > Oscillator::PrimaryBinContrib_Bin
+
+private
+
+ +

Definition at line 157 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryBinContrib_Weight

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<double> > Oscillator::PrimaryBinContrib_Weight
+
+private
+
+ +

Definition at line 158 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryBinningTemplateName

+ +
+
+ + + + + +
+ + + + +
std::string Oscillator::PrimaryBinningTemplateName
+
+private
+
+ +

Definition at line 232 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryHistKey

+ +
+
+ + + + + +
+ + + + +
TString Oscillator::PrimaryHistKey
+
+private
+
+ +

Definition at line 228 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryXBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> Oscillator::PrimaryXBinEdges
+
+private
+
+ +

Definition at line 160 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryXBinEvalPoints

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::PrimaryXBinEvalPoints
+
+private
+
+ +

Definition at line 166 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryYBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> Oscillator::PrimaryYBinEdges
+
+private
+
+ +

Definition at line 161 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ PrimaryYBinEvalPoints

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::PrimaryYBinEvalPoints
+
+private
+
+ +

Definition at line 167 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ ProbList

+ +
+
+ + + + + +
+ + + + +
FLOAT_T* Oscillator::ProbList
+
+private
+
+ +

Definition at line 155 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ ProductionHeightBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::ProductionHeightBinEdges
+
+private
+
+ +

Definition at line 246 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ ProductionHeightFileName

+ +
+
+ + + + + +
+ + + + +
TString Oscillator::ProductionHeightFileName
+
+private
+
+ +

Definition at line 142 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ propagator

+ +
+
+ + + + + +
+ + + + +
std::unique_ptr<AtmosCpuPropagator<FLOAT_T> > Oscillator::propagator
+
+private
+
+ +

Definition at line 144 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ RebinMode

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::RebinMode
+
+private
+
+ +

Definition at line 224 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryBinningTemplateName

+ +
+
+ + + + + +
+ + + + +
std::string Oscillator::SecondaryBinningTemplateName
+
+private
+
+ +

Definition at line 233 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryHistKey

+ +
+
+ + + + + +
+ + + + +
TString Oscillator::SecondaryHistKey
+
+private
+
+ +

Definition at line 229 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryXBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> Oscillator::SecondaryXBinEdges
+
+private
+
+ +

Definition at line 163 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryXBinEvalPoints

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::SecondaryXBinEvalPoints
+
+private
+
+ +

Definition at line 169 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryYBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> Oscillator::SecondaryYBinEdges
+
+private
+
+ +

Definition at line 164 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ SecondaryYBinEvalPoints

+ +
+
+ + + + + +
+ + + + +
std::vector<FLOAT_T> Oscillator::SecondaryYBinEvalPoints
+
+private
+
+ +

Definition at line 170 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ TemplateInputFileName

+ +
+
+ + + + + +
+ + + + +
TString Oscillator::TemplateInputFileName
+
+private
+
+ +

Definition at line 234 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ UseBinningTemplates

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::UseBinningTemplates
+
+private
+
+ +

Definition at line 231 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ UseChemicalComposition

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::UseChemicalComposition
+
+private
+
+ +

Definition at line 236 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ useFineBinsPerBin

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::useFineBinsPerBin
+
+private
+
+ +

Definition at line 223 of file OscClass_CUDAProb3.h.

+ +
+
+ +

◆ UseProductionHeightAveraging

+ +
+
+ + + + + +
+ + + + +
bool Oscillator::UseProductionHeightAveraging
+
+private
+
+ +

Definition at line 241 of file OscClass_CUDAProb3.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classPSO-members.html b/classPSO-members.html new file mode 100644 index 00000000..9579fdc5 --- /dev/null +++ b/classPSO-members.html @@ -0,0 +1,170 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
PSO Member List
+
+
+ +

This is the complete list of members for PSO, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accCountFitterBaseprotected
accProbFitterBaseprotected
addOscHandler(covarianceOsc *oscf)FitterBase
addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)FitterBase
addSamplePDF(samplePDFBase *sample)FitterBase
addSystObj(covarianceBase *cov)FitterBase
auto_saveFitterBaseprotected
best_particlePSOprivate
bisection(std::vector< double >position, double minimum, double range, double precision)PSO
calc_uncertainty(std::vector< double >position, double minimum)PSO
CalcChi(std::vector< double > x)PSOinline
CalcChi2(const double *x)PSOvirtual
clockFitterBaseprotected
CovFolderFitterBaseprotected
fBestValuePSOprivate
fConstrictionPSOprivate
fConvergencePSOprivate
fDimPSOprivate
FileSavedFitterBaseprotected
fInertiaPSOprivate
fIterationsPSOprivate
fitManFitterBaseprotected
FitterBase(manager *const fitMan)FitterBase
fixedPSOprivate
fMirroringLikelihoodFitprotected
fOnePSOprivate
four_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3, std::vector< double > vec4)PSOinline
fParticlesPSOprivate
fTestLikelihoodFitterBaseprotected
fTwoPSOprivate
get_best_particle()PSOinline
GetName() constPSOinlinevirtual
GetNPars()LikelihoodFitinline
init()PSO
kMaxParticlesPSOprivatestatic
LikelihoodFit(manager *const fitMan)LikelihoodFit
logLCurrFitterBaseprotected
logLPropFitterBaseprotected
NParsLikelihoodFitprotected
NParsPCALikelihoodFitprotected
oscFitterBaseprotected
osc2FitterBaseprotected
osc_llhFitterBaseprotected
outputFileFitterBaseprotected
OutputPreparedFitterBaseprotected
outTreeFitterBaseprotected
parPSOprivate
paramlistPSOprivate
PrepareFit()LikelihoodFitprotected
PrepareOutput()FitterBaseprotected
priorPSOprivate
PSO(manager *const fitMan)PSO
randomFitterBaseprotected
ranges_maxPSOprivate
ranges_minPSOprivate
rastriginFunc(const double *x)PSO
run()PSO
Run2DLLHScan()FitterBase
RunLLHScan()FitterBase
runMCMC() overridePSOvirtual
sample_llhFitterBaseprotected
samplesFitterBaseprotected
save_nominalFitterBaseprotected
SaveOutput()FitterBaseprotected
SaveSettings()FitterBaseprotected
set_best_particle(particle *n)PSOinline
SettingsSavedFitterBaseprotected
stepFitterBaseprotected
stepClockFitterBaseprotected
stepTimeFitterBaseprotected
swarmIterate()PSO
syst_llhFitterBaseprotected
systemPSOprivate
systematicsFitterBaseprotected
three_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3)PSOinline
uncertaintiesPSOprivate
uncertainty_check(std::vector< double > previous_pos)PSO
vector_add(std::vector< double > v1, std::vector< double > v2)PSOinline
vector_multiply(std::vector< double > velocity, double mul)PSOinline
vector_subtract(std::vector< double > v1, std::vector< double > v2)PSOinline
velPSOprivate
WriteOutput()PSO
~FitterBase()FitterBasevirtual
~LikelihoodFit()LikelihoodFitvirtual
+ + + + diff --git a/classPSO.html b/classPSO.html new file mode 100644 index 00000000..a2f4b2d2 --- /dev/null +++ b/classPSO.html @@ -0,0 +1,2041 @@ + + + + + + + +MaCh3: PSO Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <PSO.h>

+
+Inheritance diagram for PSO:
+
+
+ + +LikelihoodFit +FitterBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PSO (manager *const fitMan)
 
particleget_best_particle ()
 
void set_best_particle (particle *n)
 
std::vector< std::vector< double > > bisection (std::vector< double >position, double minimum, double range, double precision)
 
std::vector< std::vector< double > > calc_uncertainty (std::vector< double >position, double minimum)
 
void init ()
 
void uncertainty_check (std::vector< double > previous_pos)
 
void run ()
 
void WriteOutput ()
 
void runMCMC () override
 Implementation of fitting algorithm.
 
double CalcChi2 (const double *x)
 Chi2 calculation over all included samples and syst objects.
 
double rastriginFunc (const double *x)
 
double swarmIterate ()
 
std::vector< doublevector_multiply (std::vector< double > velocity, double mul)
 
std::vector< doublevector_add (std::vector< double > v1, std::vector< double > v2)
 
std::vector< doublevector_subtract (std::vector< double > v1, std::vector< double > v2)
 
std::vector< doublethree_vector_addition (std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3)
 
std::vector< doublefour_vector_addition (std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3, std::vector< double > vec4)
 
double CalcChi (std::vector< double > x)
 
std::string GetName () const
 Get name of class.
 
- Public Member Functions inherited from LikelihoodFit
 LikelihoodFit (manager *const fitMan)
 Constructor.
 
virtual ~LikelihoodFit ()
 Destructor.
 
int GetNPars ()
 Get total number of params, this sums over all covariance objects.
 
- Public Member Functions inherited from FitterBase
 FitterBase (manager *const fitMan)
 Constructor.
 
virtual ~FitterBase ()
 Destructor.
 
void addSamplePDF (samplePDFBase *sample)
 This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.
 
void addSystObj (covarianceBase *cov)
 This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.
 
void addOscHandler (covarianceOsc *oscf)
 Adds an oscillation handler for covariance objects.
 
void addOscHandler (covarianceOsc *osca, covarianceOsc *oscb)
 Adds two oscillation handlers for covariance objects.
 
void RunLLHScan ()
 Perform a 1D likelihood scan.
 
void Run2DLLHScan ()
 Perform a 2D likelihood scan.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

particlebest_particle
 
double fBestValue
 
std::vector< doubleprior
 
std::vector< boolfixed
 
std::vector< doubleranges_max
 
std::vector< doubleranges_min
 
std::vector< particle * > system
 
double fInertia
 
double fOne
 
double fTwo
 
double fConvergence
 
int fIterations
 
double fConstriction
 
std::vector< std::vector< double > > uncertainties
 
int fParticles
 
std::vector< double * > paramlist
 
double vel [kMaxParticles]
 
doublepar
 
int fDim
 
+ + + +

+Static Private Attributes

static const int kMaxParticles = 10000
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from LikelihoodFit
void PrepareFit ()
 prepare output and perform sanity checks
 
- Protected Member Functions inherited from FitterBase
void PrepareOutput ()
 Prepare the output file.
 
void SaveOutput ()
 Save output and close files.
 
void SaveSettings ()
 Save the settings that the MCMC was run with.
 
- Protected Attributes inherited from LikelihoodFit
int NPars
 Number of all parameters from all covariances.
 
int NParsPCA
 Number of all parameters from all covariances in PCA base.
 
bool fMirroring
 Flag telling if mirroring is used or not.
 
- Protected Attributes inherited from FitterBase
managerfitMan
 The manager.
 
unsigned int step
 current state
 
double logLCurr
 current likelihood
 
double logLProp
 proposed likelihood
 
double accProb
 current acceptance prob
 
int accCount
 counts accepted steps
 
double osc_llh
 
doublesample_llh
 store the llh breakdowns
 
doublesyst_llh
 systematic llh breakdowns
 
std::vector< samplePDFBase * > samples
 Sample holder.
 
std::vector< covarianceBase * > systematics
 Systematic holder.
 
covarianceOscosc
 handles oscillation parameters
 
covarianceOscosc2
 handles oscillation parameters
 
TStopwatchclock
 tells global time how long fit took
 
TStopwatchstepClock
 tells how long single step/fit iteration took
 
double stepTime
 Time of single step.
 
TRandom3random
 Random number.
 
TFileoutputFile
 Output.
 
TDirectoryCovFolder
 Output cov folder.
 
TTreeoutTree
 Output tree with posteriors.
 
int auto_save
 auto save every N steps
 
bool fTestLikelihood
 Necessary for some fitting algorithms like PSO.
 
bool save_nominal
 save nominal matrix info or not
 
bool FileSaved
 Checks if file saved not repeat some operations.
 
bool SettingsSaved
 Checks if setting saved not repeat some operations.
 
bool OutputPrepared
 Checks if output prepared not repeat some operations.
 
+

Detailed Description

+
+

Definition at line 72 of file PSO.h.

+

Constructor & Destructor Documentation

+ +

◆ PSO()

+ +
+
+ + + + + + + + +
PSO::PSO (manager *const fitMan)
+
+

Class PSO, consist of a vector of object Class Particle and global best Takes in the size (number of particle) and number of iteration functions includes: finding global best, updating velocity, actual minimisation function

+ +

Definition at line 3 of file PSO.cpp.

+
+
4
+
5 fConstriction = fitMan->raw()["General"]["PSO"]["Constriction"].as<double>();
+
6 fInertia = fitMan->raw()["General"]["PSO"]["Inertia"].as<double>()*fConstriction;
+
7 fOne = fitMan->raw()["General"]["PSO"]["One"].as<double>()*fConstriction;
+
8 fTwo = fitMan->raw()["General"]["PSO"]["Two"].as<double>()*fConstriction;
+
9 fParticles = fitMan->raw()["General"]["PSO"]["Particles"].as<int>();
+
10 fIterations = fitMan->raw()["General"]["PSO"]["Iterations"].as<int>();
+
11 fConvergence = fitMan->raw()["General"]["PSO"]["Convergence"].as<double>();
+
12
+
13 fDim = 0;
+
14
+ +
16 {
+
17 fDim = fitMan->raw()["General"]["PSO"]["TestLikelihoodDim"].as<int>();
+
18 }
+
19}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
manager * fitMan
The manager.
Definition FitterBase.h:68
+
bool fTestLikelihood
Necessary for some fitting algorithms like PSO.
Definition FitterBase.h:120
+ +
double fConstriction
Definition PSO.h:148
+
double fTwo
Definition PSO.h:145
+
double fInertia
Definition PSO.h:143
+
int fParticles
Definition PSO.h:151
+
double fOne
Definition PSO.h:144
+
int fIterations
Definition PSO.h:147
+
double fConvergence
Definition PSO.h:146
+
int fDim
Definition PSO.h:157
+
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
+
+
+

Member Function Documentation

+ +

◆ bisection()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< std::vector< double > > PSO::bisection (std::vector< doubleposition,
double minimum,
double range,
double precision 
)
+
+ +

Definition at line 144 of file PSO.cpp.

+
144 {
+
145 std::vector<std::vector<double>> uncertainties_list;
+
146 for (unsigned int i = 0; i< position.size(); ++i){
+
147 std::cout << i << std::endl;
+
148 std::vector<double> uncertainties;
+
149 std::vector<double> new_position = position; new_position[i] = position[i]-range;
+
150 double val_1 = CalcChi(new_position)-minimum-1.0;
+
151 while (val_1*-1.0> 0.0){
+
152 new_position[i] -= range;
+ +
154 }
+
155 std::vector<double> bisect_position = position; bisect_position[i] = bisect_position[i] - (position[i]-new_position[i])/2;
+
156 std::vector<std::vector<double>> position_list{new_position,bisect_position,position};
+
157 double val_2 = CalcChi(bisect_position)-minimum-1.0;
+
158 std::vector<double> value_list{val_1,val_2, -1.0};
+
159 double res = 1.0;
+
160 while (res > precision){
+
161 if (value_list[0] * value_list[1] < 0){
+ + + +
165 value_list[2] = value_list[1];
+
166 value_list[1] = new_val;
+ +
168 res = abs(position[2]-position[0]);
+
169 }
+
170 else{
+
171 std::vector<double> new_bisect_position = position_list[1];new_bisect_position[i] += (position_list[2][i]-position_list[1][i])/2;
+ + +
174 value_list[0] = value_list[1];
+
175 value_list[1] = new_val;
+ + +
178 }
+
179 }
+
180 //do the same thing for position uncertainty
+
181 std::vector<double> new_position_p = position; new_position_p[i] = position[i]+range;
+ +
183 while (val_1_p * -1.0 > 0.0){
+ + +
186 }
+
187 std::vector<double> bisect_position_p = position; bisect_position_p[i] = bisect_position_p[i] += (new_position_p[i]-position[i])/2;
+
188 std::vector<std::vector<double>> position_list_p{position,bisect_position_p,new_position_p};
+ +
190 std::vector<double> value_list_p{-1.0,val_2_p, val_1_p};
+
191 double res_p = 1.0;
+
192 while (res_p > precision){
+
193 if (value_list_p[0] * value_list_p[1] < 0){
+ + + + + + +
200 res = abs(position[2]-position[0]);
+ +
202 //std::cout << "Pos midpoint is " << position_list_p[1][i] << std::endl;
+
203 }
+
204 else{
+ + + + + + + +
212 //std::cout << "Pos midpoint is " << position_list_p[1][i] << std::endl;
+
213 }
+
214 }
+
215 uncertainties_list.push_back({abs(position[i]-position_list[1][i]),abs(position[i]-position_list_p[1][i])});
+
216 std::cout << "Uncertainty finished for d = "<< i << std::endl;
+
217 std::cout << setprecision(10)<< "LLR values for ± positive and negative uncertainties are " << CalcChi(position_list[1]) << " and " << CalcChi(position_list_p[1]) << std::endl;
+
218 }
+
219 return uncertainties_list;
+
220}
+
double CalcChi(std::vector< double > x)
Definition PSO.h:128
+
std::vector< std::vector< double > > uncertainties
Definition PSO.h:149
+
+
+
+ +

◆ calc_uncertainty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector< std::vector< double > > PSO::calc_uncertainty (std::vector< doubleposition,
double minimum 
)
+
+ +

Definition at line 222 of file PSO.cpp.

+
222 {
+
223 std::vector<double> pos_uncertainty(position.size());
+
224 std::vector<double> neg_uncertainty(position.size());
+
225 int num = 200;
+
226 std::vector<double> pos = position;
+
227 for (unsigned int i = 0; i < position.size(); ++i) {
+
228
+
229 double curr_ival = pos[i];
+
230
+
231 double neg_stop = position[i] - 5e-2;
+
232 double pos_stop = position[i] + 5e-2;
+
233 double start = position[i];
+
234 std::vector<double> x(num);
+
235 std::vector<double> y(num);
+
236 double step = (start-neg_stop) / (num - 1);
+
237 double value = start;
+
238 for (int j = 0; j < num; ++j) {
+
239 pos[i] = value;
+
240 double LLR = CalcChi(position) - minimum - 1.0;
+
241 x[j] = value;
+
242 y[j] = LLR;
+
243 value -= step;
+
244 }
+
245 pos[i] = curr_ival;
+
246
+
247 int closest_index = 0;
+
248 double closest_value = abs(y[0]); // Initialize with the first element
+
249 for (unsigned int i = 1; i < y.size(); ++i) {
+
250 double abs_y = abs(y[i]);
+
251 if (abs_y < closest_value) {
+ + +
254 }
+
255 }
+ +
257 std::cout << "Neg" << std::endl;
+
258 x.assign(num, 0);
+
259 y.assign(num, 0);
+
260 step = (pos_stop-start) / (num - 1);
+
261 value = start;
+
262 for (int j = 0; j < num; ++j) {
+
263 pos[i] = value;
+
264 double LLR = CalcChi(position) - minimum - 1.0;
+
265 x[j] = value;
+
266 y[j] = LLR;
+
267 value += step;
+
268 }
+
269 pos[i] = curr_ival;
+
270 closest_index = 0;
+
271 closest_value = abs(y[0]); // Initialize with the first element
+
272 for (unsigned int i = 1; i < y.size(); ++i) {
+
273 double abs_y = abs(y[i]);
+
274 if (abs_y < closest_value) {
+ + +
277 }
+
278 }
+ +
280 }
+
281 std::vector<std::vector<double>> res{neg_uncertainty,pos_uncertainty};
+
282 return res;
+
283}
+
unsigned int step
current state
Definition FitterBase.h:71
+
+
+
+ +

◆ CalcChi()

+ +
+
+ + + + + +
+ + + + + + + + +
double PSO::CalcChi (std::vector< doublex)
+
+inline
+
+ +

Definition at line 128 of file PSO.h.

+
128 {
+
129 double* a = &x[0];
+
130 return CalcChi2(a);
+
131 };
+
double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
Definition PSO.cpp:516
+
+
+
+ +

◆ CalcChi2()

+ +
+
+ + + + + +
+ + + + + + + + +
double PSO::CalcChi2 (const doublex)
+
+virtual
+
+ +

Chi2 calculation over all included samples and syst objects.

+ +

Reimplemented from LikelihoodFit.

+ +

Definition at line 516 of file PSO.cpp.

+
516 {
+
517// *******************
+
518
+ +
520 {
+
521 return rastriginFunc(x);
+
522 }
+
523 else
+
524 {
+
525 return LikelihoodFit::CalcChi2(x);
+
526 }
+
527}
+
virtual double CalcChi2(const double *x)
Chi2 calculation over all included samples and syst objects.
+
double rastriginFunc(const double *x)
Definition PSO.cpp:531
+
+
+
+ +

◆ four_vector_addition()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< double > PSO::four_vector_addition (std::vector< doublevec1,
std::vector< doublevec2,
std::vector< doublevec3,
std::vector< doublevec4 
)
+
+inline
+
+ +

Definition at line 121 of file PSO.h.

+
121 {
+
122 for (size_t i = 0; i < vec1.size(); ++i) {
+
123 vec1[i] += vec2[i] + vec3[i] + vec4[i];
+
124 }
+
125 return vec1;
+
126 };
+
+
+
+ +

◆ get_best_particle()

+ +
+
+ + + + + +
+ + + + + + + +
particle * PSO::get_best_particle ()
+
+inline
+
+ +

Definition at line 82 of file PSO.h.

+
82 {
+
83 return best_particle;
+
84 }
+
particle * best_particle
Definition PSO.h:136
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string PSO::GetName () const
+
+inlinevirtual
+
+ +

Get name of class.

+ +

Reimplemented from LikelihoodFit.

+ +

Definition at line 133 of file PSO.h.

+
133{return "PSO";};
+
+
+
+ +

◆ init()

+ +
+
+ + + + + + + +
void PSO::init ()
+
+ +

Definition at line 43 of file PSO.cpp.

+
43 {
+
44
+
45 fBestValue = 1234567890.0;
+
46
+
47 //KS: For none PCA this will be eqaul to normal parameters
+
48 //const int NparsPSOFull = NPars;
+
49 //const int NparsPSO = NParsPCA;
+
50
+
51 std::cout << "Preparing PSO" << std::endl;
+
52
+
53 // Initialise bounds on parameters
+ +
55 for (int i = 0; i < fDim; i++){
+
56 // Test function ranges
+
57 ranges_min.push_back(-5);
+
58 ranges_max.push_back(5);
+
59 fixed.push_back(0);
+
60 }
+
61 }
+
62 else{
+
63 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it){
+
64 if(!(*it)->IsPCA())
+
65 {
+
66 fDim += (*it)->getSize();
+
67 for(int i = 0; i < (*it)->getSize(); ++i)
+
68 {
+
69 double curr = (*it)->getParInit(i);
+
70 double lim = 10.0*(*it)->getDiagonalError(i);
+
71 double low = (*it)->GetLowerBound(i);
+
72 double high = (*it)->GetUpperBound(i);
+
73 if(low > curr - lim) ranges_min.push_back(low);
+
74 else ranges_min.push_back(curr - lim);
+
75 if(high < curr + lim) ranges_min.push_back(high);
+
76 else ranges_min.push_back(curr + lim);
+
77 prior.push_back(curr);
+
78
+
79 if((*it)->isParameterFixed(i)){
+
80 fixed.push_back(1);
+
81 }
+
82 else{
+
83 fixed.push_back(0);
+
84 }
+
85 }
+
86 }
+
87 else
+
88 {
+
89 fDim += (*it)->getNpars();
+
90 for(int i = 0; i < (*it)->getNpars(); ++i)
+
91 {
+
92 ranges_min.push_back(-100.0);
+
93 ranges_max.push_back(100.0);
+
94 prior.push_back((*it)->getParInit(i));
+
95 if((*it)->isParameterFixedPCA(i)){
+
96 fixed.push_back(1);
+
97 }
+
98 else{
+
99 fixed.push_back(0);
+
100 }
+
101 }
+
102 }
+
103 }
+
104 }
+
105
+
106 std::cout << "Printing Minimums and Maximums of Variables to be minimised" << std::endl;
+
107 for (int i =0; i<fDim; i++){
+
108 std::cout << "Variable "<< i<<" :" << ranges_min[i] << ", "<< ranges_max[i] << std::endl;
+
109 }
+
110
+
111 // Initialise particle positions
+
112 for (int i = 0; i < fParticles; ++i){
+
113 std::vector<double> init_position;
+
114 std::vector<double> init_velocity;
+
115
+
116 //Initialising in +/- 5sigma of prior value from BANFF interface
+
117 for (int j=0; j<fDim; ++j){
+
118 if(fixed[j]){
+
119 init_position.push_back(prior[j]);
+
120 init_velocity.push_back(0.0);
+
121 }
+
122 else{
+
123 double dist = fabs(ranges_max[j]-ranges_min[j]);
+
124 //Initialise to random position uniform in space
+
125 init_position.push_back(ranges_min[j] + random->Rndm()*dist);
+
126 //Initialise velocity to random position uniform in space
+
127 init_velocity.push_back((2.0*random->Rndm()-1.0));//*dist);
+
128 }
+
129 }
+
130
+ +
132 new_particle->set_personal_best_position(init_position);
+ +
134 new_particle->set_personal_best_value(new_value);
+
135 new_particle->set_value(new_value);
+
136 system.push_back(new_particle);
+
137 if(new_value < fBestValue){
+ + +
140 }
+
141 }
+
142}
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
std::vector< double > ranges_max
Definition PSO.h:140
+
std::vector< bool > fixed
Definition PSO.h:139
+
void set_best_particle(particle *n)
Definition PSO.h:85
+
std::vector< particle * > system
Definition PSO.h:142
+
double fBestValue
Definition PSO.h:137
+
std::vector< double > ranges_min
Definition PSO.h:141
+
std::vector< double > prior
Definition PSO.h:138
+
Definition PSO.h:13
+
+
+
+ +

◆ rastriginFunc()

+ +
+
+ + + + + + + + +
double PSO::rastriginFunc (const doublex)
+
+ +

Definition at line 531 of file PSO.cpp.

+
531 {
+
532// *************************
+
533
+
534 stepClock->Start();
+
535
+
536 //Search range: [-5.12, 5.12]
+
537 const double A = 10.0;
+
538 double sum = 0.0;
+
539 for (int i = 0; i < fDim; ++i) {
+
540 sum += x[i] * x[i] - A * cos(2.0 * 3.14 * x[i]);
+
541 }
+
542 double llh = A * fDim + sum;
+
543
+
544 accProb = 1;
+
545
+
546 stepClock->Stop();
+
547 stepTime = stepClock->RealTime();
+
548
+
549 return llh;
+
550}
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
+
+
+ +

◆ run()

+ +
+
+ + + + + + + +
void PSO::run ()
+
+ +

Definition at line 381 of file PSO.cpp.

+
381 {
+
382
+
383 double mean_dist_sq = 0;
+
384
+
385 int iter = 0;
+
386 for(int i = 0; i < fIterations; ++i, ++iter){
+ +
388 //double meanVel = std::accumulate(vel, vel + fParticles, 0) / fParticles;
+
389
+
390 // Weight inertia randomly but scaled by total distance of swarm from global minimum - proxy for total velocity
+
391 // fWeight = ((random->Rndm()+1.0)*0.5)*(10.0/meanVel);
+
392
+ +
394
+
395 outTree->Fill();
+
396 // Auto save the output
+
397 if (step % auto_save == 0) outTree->AutoSave();
+
398 step++;
+
399 accCount++;
+
400
+
401 if (i%100 == 0){
+
402 std::cout << "Mean Dist Sq = " << mean_dist_sq <<std::endl;
+
403 std::cout << "Current LLR = " << fBestValue << std::endl;
+
404 std::cout << "Position = " <<std::endl;
+
405 for (int j = 0; j< fDim; ++j){
+
406 std::cout << " Dim " << j << " = " << setprecision(10) << get_best_particle()->get_personal_best_position()[j] << std::endl;
+
407 }
+
408
+
409 }
+
410 if(fConvergence > 0.0){
+ +
412 break;
+
413 }
+
414 }
+
415 }
+
416 std::cout << "Finished after " << iter <<" runs out of "<< fIterations << std::endl;
+
417 std::cout << "Mean Dist " << mean_dist_sq <<std::endl;
+
418 std::cout << "Best LLR " << get_best_particle()->get_personal_best_value() << std::endl;
+
419
+
420 uncertainties = bisection(get_best_particle()->get_personal_best_position(),get_best_particle()->get_personal_best_value(),0.5,0.005);
+
421 std::cout << "Position for Global Minimum = "<<std::endl;
+
422 for (int i = 0; i< fDim; ++i){
+
423 std::cout << " Dim " << i << " = " << setprecision(10) << get_best_particle()->get_personal_best_position()[i] << " +" << uncertainties[i][1] << ", -" << uncertainties[i][0] << std::endl;
+
424 }
+
425}
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+
particle * get_best_particle()
Definition PSO.h:82
+
std::vector< std::vector< double > > bisection(std::vector< double >position, double minimum, double range, double precision)
Definition PSO.cpp:144
+
double swarmIterate()
Definition PSO.cpp:321
+
std::vector< double > get_personal_best_position()
Definition PSO.h:35
+
double get_personal_best_value()
Definition PSO.h:43
+
+
+
+ +

◆ runMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void PSO::runMCMC ()
+
+overridevirtual
+
+ +

Implementation of fitting algorithm.

+ +

Implements LikelihoodFit.

+ +

Definition at line 21 of file PSO.cpp.

+
21 {
+
22
+
23 PrepareFit();
+
24
+
25 if(fTestLikelihood){
+
26 outTree->Branch("nParts", &fParticles, "nParts/I");
+
27 for(int i = 0; i < fDim; ++i){
+
28 par = new double[fParticles];
+
29 paramlist.push_back(par);
+
30 outTree->Branch(Form("Parameter_%d", i), paramlist[i], Form("Parameter_%d[nParts]/D",i));
+
31 }
+
32// vel = new double[fParticles];
+
33 outTree->Branch("vel", vel, "vel[nParts]/D");
+
34 }
+
35
+
36 init();
+
37 run();
+ +
39 return;
+
40}
+
void PrepareFit()
prepare output and perform sanity checks
+
void init()
Definition PSO.cpp:43
+
std::vector< double * > paramlist
Definition PSO.h:153
+
double vel[kMaxParticles]
Definition PSO.h:154
+
double * par
Definition PSO.h:155
+
void run()
Definition PSO.cpp:381
+
void WriteOutput()
Definition PSO.cpp:427
+
+
+
+ +

◆ set_best_particle()

+ +
+
+ + + + + +
+ + + + + + + + +
void PSO::set_best_particle (particlen)
+
+inline
+
+ +

Definition at line 85 of file PSO.h.

+
85 {
+ +
87 }
+
+
+
+ +

◆ swarmIterate()

+ +
+
+ + + + + + + +
double PSO::swarmIterate ()
+
+ +

Definition at line 321 of file PSO.cpp.

+
321 {
+
322
+
323 std::vector<double> total_pos(fDim,0.0);
+
324
+
325 for (int i = 0; i < fParticles; ++i) {
+
326
+
327 std::vector<double> part1 = vector_multiply(system[i]->get_velocity(), fInertia);
+
328 std::vector<double> part2 = vector_multiply(vector_subtract(system[i]->get_personal_best_position(), system[i]->get_position()), (fOne * random->Rndm()));
+
329 std::vector<double> part3 = vector_multiply(vector_subtract(get_best_particle()->get_personal_best_position(), system[i]->get_position()),(fTwo * random->Rndm()));
+
330 std::vector<double> new_velocity = three_vector_addition(part1, part2, part3);
+
331 std::vector<double> new_pos = vector_add(system[i]->get_position(), new_velocity);
+
332 transform(total_pos.begin(), total_pos.end(), new_pos.begin(), total_pos.begin(),[](double x, double y) {return x+y;});
+
333
+
334 for (int j = 0; j < fDim; ++j) {
+
335 // Check if out of bounds and reflect if so
+
336 if(ranges_min[j] > new_pos[j]){
+
337 new_pos[j] = ranges_min[j];
+
338 }
+
339 else if(new_pos[j] > ranges_max[j]) {
+
340 new_pos[j] = ranges_max[j];
+
341 }
+
342 // If parameter fixed don't update it
+
343 if(fixed[j]) new_pos[j] = system[i]->get_position()[j];
+
344 }
+
345
+
346 if(fTestLikelihood){
+
347 double velo = 0.0;
+
348 for (int j = 0; j < fDim; ++j) {
+
349 paramlist[j][i] = new_pos[j];
+ +
351 }
+
352 vel[i] = sqrt(velo);
+
353 }
+
354
+
355 system[i]->set_velocity(new_velocity);
+
356 system[i]->set_position(new_pos);
+
357 double new_value = CalcChi(new_pos);
+
358 if(new_value <= system[i]->get_personal_best_value()) {
+
359 system[i]->set_personal_best_value(new_value);
+
360 system[i]->set_personal_best_position(new_pos);
+
361 if(new_value < fBestValue){
+ + +
364 }
+
365 }
+
366 }
+
367
+
368 std::vector<double> best_pos = get_best_particle()->get_personal_best_position();
+
369 std::vector<double> result(best_pos.size(), 0.0);
+
370 transform(total_pos.begin(), total_pos.end(), total_pos.begin(), [=](double val){return val/fParticles;});
+
371 transform(total_pos.begin(),total_pos.end(),best_pos.begin(),result.begin(),[](double x, double y) {return x-y;});
+
372
+
373 double mean_dist_sq = 0;
+
374 for (int i = 0; i<fDim; i++){
+ +
376 }
+
377
+
378 return mean_dist_sq;
+
379}
+
std::vector< double > vector_add(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:105
+
std::vector< double > vector_subtract(std::vector< double > v1, std::vector< double > v2)
Definition PSO.h:110
+
std::vector< double > vector_multiply(std::vector< double > velocity, double mul)
Definition PSO.h:100
+
std::vector< double > three_vector_addition(std::vector< double > vec1, std::vector< double > vec2, std::vector< double > vec3)
Definition PSO.h:115
+
+
+
+ +

◆ three_vector_addition()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< double > PSO::three_vector_addition (std::vector< doublevec1,
std::vector< doublevec2,
std::vector< doublevec3 
)
+
+inline
+
+ +

Definition at line 115 of file PSO.h.

+
115 {
+
116 for (size_t i = 0; i < vec1.size(); ++i) {
+
117 vec1[i] += vec2[i] + vec3[i];
+
118 }
+
119 return vec1;
+
120 };
+
+
+
+ +

◆ uncertainty_check()

+ +
+
+ + + + + + + + +
void PSO::uncertainty_check (std::vector< doubleprevious_pos)
+
+ +

Definition at line 285 of file PSO.cpp.

+
285 {
+
286 std::vector<std::vector<double >> x_list;
+
287 std::vector<std::vector<double >> y_list;
+
288 std::vector<double> position = previous_pos;
+
289 int num = 5000;
+
290 for (unsigned int i = 0;i<previous_pos.size();++i){
+
291 double curr_ival = position[i];
+
292 double start = previous_pos[i] - 1e-1;
+
293 double stop = previous_pos[i] + 1e-1;
+
294 std::vector<double> x(num);
+
295 std::vector<double> y(num);
+
296 double step = (stop - start) / (num - 1);
+
297 double value = start;
+
298 // std::cout << "result for fDim " << 1 << std::endl;
+
299 for (int j =0;j< num; ++j){
+
300 position[i] = value;
+
301 double LLR = CalcChi(position);
+
302 x[j] = value;
+
303 y[j] = LLR;
+
304 value +=step;
+
305 }
+
306 position[i] = curr_ival;
+
307 std::cout << " " << std::endl;
+
308 std::cout << "For fDim" << i+1 << " x list is " ;
+
309 for (unsigned int k= 0;k<x.size(); ++k){
+
310 std::cout << x[k] << " , " ;
+
311 } std::cout << " " << std::endl;
+
312 std::cout << " " << std::endl;
+
313 std::cout << "For fDim" << i+1 << " y list is " ;
+
314 for (unsigned int k= 0;k<x.size(); ++k){
+
315 std::cout << y[k] << " , " ;
+
316 } std::cout << " " << std::endl;
+
317 std::cout << " " <<std::endl;
+
318 }
+
319}
+
+
+
+ +

◆ vector_add()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< double > PSO::vector_add (std::vector< doublev1,
std::vector< doublev2 
)
+
+inline
+
+ +

Definition at line 105 of file PSO.h.

+
105 {
+
106 std::vector<double> v3;
+
107 transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), plus<double>());
+
108 return v3;
+
109 };
+
+
+
+ +

◆ vector_multiply()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< double > PSO::vector_multiply (std::vector< doublevelocity,
double mul 
)
+
+inline
+
+ +

Definition at line 100 of file PSO.h.

+
100 {
+
101 transform(velocity.begin(),velocity.end(),velocity.begin(),std::bind1st(std::multiplies<double>(),mul));
+
102 return velocity;
+
103 };
+
+
+
+ +

◆ vector_subtract()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< double > PSO::vector_subtract (std::vector< doublev1,
std::vector< doublev2 
)
+
+inline
+
+ +

Definition at line 110 of file PSO.h.

+
110 {
+
111 std::vector<double> v3 ;
+
112 transform(v1.begin(), v1.end(), v2.begin(), back_inserter(v3), minus<double>());
+
113 return v3;
+
114 };
+
+
+
+ +

◆ WriteOutput()

+ +
+
+ + + + + + + +
void PSO::WriteOutput ()
+
+ +

Definition at line 427 of file PSO.cpp.

+
427 {
+
428
+
429 outputFile->cd();
+
430
+ + +
433
+
434 for(int i = 0; i < fDim; ++i)
+
435 {
+
436 (*PSOParValue)(i) = 0;
+
437 (*PSOParError)(i) = 0;
+
438 }
+
439
+
440 std::vector<double> minimum = get_best_particle()->get_personal_best_position();
+
441
+
442 int ParCounter = 0;
+
443
+
444 if(fTestLikelihood){
+
445 for(int i = 0; i < fDim; ++i){
+
446 (*PSOParValue)(i) = minimum[i];
+
447 (*PSOParError)(i) = (uncertainties[i][0]+uncertainties[i][1])/2.0;
+
448 }
+
449 }
+
450 else{
+
451 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it)
+
452 {
+
453 if(!(*it)->IsPCA())
+
454 {
+
455 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
456 {
+
457 double ParVal = minimum[ParCounter];
+
458 //KS: Basically apply mirroring for parameters out of bounds
+
459 (*PSOParValue)(ParCounter) = ParVal;
+
460 (*PSOParError)(ParCounter) = (uncertainties[ParCounter][0]+uncertainties[ParCounter][1])/2.0;
+
461 //KS: For fixed params HESS will not calcuate error so we need to pass prior error
+
462 if((*it)->isParameterFixed(i))
+
463 {
+
464 (*PSOParError)(ParCounter) = (*it)->getDiagonalError(i);
+
465 }
+
466 }
+
467 }
+
468 else
+
469 {
+
470 //KS: We need to convert parameters from PCA to normal base
+
471 TVectorD ParVals((*it)->getSize());
+
472 TVectorD ParVals_PCA((*it)->getNpars());
+
473
+
474 TVectorD ErrorVals((*it)->getSize());
+
475 TVectorD ErrorVals_PCA((*it)->getNpars());
+
476
+
477 //First save them
+
478 //KS: This code is super convoluted as MaCh3 can store separate matrices while PSO has one matrix. In future this will be simplified, keep it like this for now.
+
479 const int StartVal = ParCounter;
+
480 for(int i = 0; i < (*it)->getNpars(); ++i, ++ParCounter)
+
481 {
+ + +
484 }
+
485 ParVals = ((*it)->getTransferMatrix())*ParVals_PCA;
+
486 ErrorVals = ((*it)->getTransferMatrix())*ErrorVals_PCA;
+
487
+ +
489 //KS: Now after going from PCA to normal let';s save it
+
490 for(int i = 0; i < (*it)->getSize(); ++i, ++ParCounter)
+
491 {
+
492 (*PSOParValue)(ParCounter) = ParVals(i);
+
493 (*PSOParError)(ParCounter) = std::fabs(ErrorVals(i));
+
494 //int ParCounterMatrix = StartVal;
+
495 //If fixed take prior
+
496 if((*it)->isParameterFixedPCA(i))
+
497 {
+
498 (*PSOParError)(ParCounter) = (*it)->getDiagonalError(i);
+
499 }
+
500 }
+
501 }
+
502 }
+
503 }
+
504
+
505 PSOParValue->Write("PSOParValue");
+
506 PSOParError->Write("PSOParError");
+
507 delete PSOParValue;
+
508 delete PSOParError;
+
509 // Save all the output
+
510 SaveOutput();
+
511}
+
void SaveOutput()
Save output and close files.
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+
+
+
+

Member Data Documentation

+ +

◆ best_particle

+ +
+
+ + + + + +
+ + + + +
particle* PSO::best_particle
+
+private
+
+ +

Definition at line 136 of file PSO.h.

+ +
+
+ +

◆ fBestValue

+ +
+
+ + + + + +
+ + + + +
double PSO::fBestValue
+
+private
+
+ +

Definition at line 137 of file PSO.h.

+ +
+
+ +

◆ fConstriction

+ +
+
+ + + + + +
+ + + + +
double PSO::fConstriction
+
+private
+
+ +

Definition at line 148 of file PSO.h.

+ +
+
+ +

◆ fConvergence

+ +
+
+ + + + + +
+ + + + +
double PSO::fConvergence
+
+private
+
+ +

Definition at line 146 of file PSO.h.

+ +
+
+ +

◆ fDim

+ +
+
+ + + + + +
+ + + + +
int PSO::fDim
+
+private
+
+ +

Definition at line 157 of file PSO.h.

+ +
+
+ +

◆ fInertia

+ +
+
+ + + + + +
+ + + + +
double PSO::fInertia
+
+private
+
+ +

Definition at line 143 of file PSO.h.

+ +
+
+ +

◆ fIterations

+ +
+
+ + + + + +
+ + + + +
int PSO::fIterations
+
+private
+
+ +

Definition at line 147 of file PSO.h.

+ +
+
+ +

◆ fixed

+ +
+
+ + + + + +
+ + + + +
std::vector<bool> PSO::fixed
+
+private
+
+ +

Definition at line 139 of file PSO.h.

+ +
+
+ +

◆ fOne

+ +
+
+ + + + + +
+ + + + +
double PSO::fOne
+
+private
+
+ +

Definition at line 144 of file PSO.h.

+ +
+
+ +

◆ fParticles

+ +
+
+ + + + + +
+ + + + +
int PSO::fParticles
+
+private
+
+ +

Definition at line 151 of file PSO.h.

+ +
+
+ +

◆ fTwo

+ +
+
+ + + + + +
+ + + + +
double PSO::fTwo
+
+private
+
+ +

Definition at line 145 of file PSO.h.

+ +
+
+ +

◆ kMaxParticles

+ +
+
+ + + + + +
+ + + + +
const int PSO::kMaxParticles = 10000
+
+staticprivate
+
+ +

Definition at line 152 of file PSO.h.

+ +
+
+ +

◆ par

+ +
+
+ + + + + +
+ + + + +
double* PSO::par
+
+private
+
+ +

Definition at line 155 of file PSO.h.

+ +
+
+ +

◆ paramlist

+ +
+
+ + + + + +
+ + + + +
std::vector<double*> PSO::paramlist
+
+private
+
+ +

Definition at line 153 of file PSO.h.

+ +
+
+ +

◆ prior

+ +
+
+ + + + + +
+ + + + +
std::vector<double> PSO::prior
+
+private
+
+ +

Definition at line 138 of file PSO.h.

+ +
+
+ +

◆ ranges_max

+ +
+
+ + + + + +
+ + + + +
std::vector<double> PSO::ranges_max
+
+private
+
+ +

Definition at line 140 of file PSO.h.

+ +
+
+ +

◆ ranges_min

+ +
+
+ + + + + +
+ + + + +
std::vector<double> PSO::ranges_min
+
+private
+
+ +

Definition at line 141 of file PSO.h.

+ +
+
+ +

◆ system

+ +
+
+ + + + + +
+ + + + +
std::vector<particle*> PSO::system
+
+private
+
+ +

Definition at line 142 of file PSO.h.

+ +
+
+ +

◆ uncertainties

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<double> > PSO::uncertainties
+
+private
+
+ +

Definition at line 149 of file PSO.h.

+ +
+
+ +

◆ vel

+ +
+
+ + + + + +
+ + + + +
double PSO::vel[kMaxParticles]
+
+private
+
+ +

Definition at line 154 of file PSO.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /github/workspace/mcmc/PSO.h
  • +
  • /github/workspace/mcmc/PSO.cpp
  • +
+
+ + + + diff --git a/classPSO.png b/classPSO.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f00f7fbe74973069391e37f7afe0f30fa6f27d GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^!9d)>!3-qVOjW-Jq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)F z+XjRG^&6*3PT6te+QA!wF-Z}NEFAY8KI6mFqq4MRvP$Web0+qWcl?#DQ#o19cP{Ie z)ofvv%0p9)pLR^YaIE*uop0C5i_dP|>`{O5iN*E3zYaLt`p@;X{eG&%g1_*Y_o_SF zZ}>}HpIR;IH}&1de)+4PU%XkD{%}rJ{Fl8R#ZuFRZEMv}=5wlhzWPzPeCA9sh8M{U z42Jp^?T-4j2Q9UpUNWEaf7$zoEDVZ3EQ^X8+|Qgja=;_V%fd70_&cB98_u07-Fo$( zjs4S&*CNk;JGyqWZH?gbEi?4*U;mtR_q6lNIp=gf2S3+3EiSS%^zg3xEj7<#npVtN zyGCYOQJLlGQ}?ZQKe|)A{`K#BB3eY0}j)$nasR`z~g_&)pUqyKYNT0z0l<7aHF z%W&a114B|=0bg_6ucqRVQ%mzL{`=lP%*o(%h?Btz4fijZGD$+Eyj=5PN%{4U59Zw7 z;rmUt{JZqLIj^&&KOedKx5{7qT`$z9D-~Ib| k%jLVV$NQ~=y*y9LTkVX9%+twX0md(br>mdKI;Vst0Qemf4FCWD literal 0 HcmV?d00001 diff --git a/classSKEScale-members.html b/classSKEScale-members.html new file mode 100644 index 00000000..d664f114 --- /dev/null +++ b/classSKEScale-members.html @@ -0,0 +1,95 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
SKEScale Member List
+
+
+ +

This is the complete list of members for SKEScale, including all inherited members.

+ + + + + + + + + + +
Apply()SKEScaleinlineprotectedvirtual
BaseFuncPar()BaseFuncParinline
blahBaseFuncPar
Param_posBaseFuncPar
ScaleUncertaintyBaseFuncPar
SetUncertainty(double sigma)BaseFuncParinline
setup()BaseFuncPar
syst_posBaseFuncPar
~BaseFuncPar()BaseFuncPar
+ + + + diff --git a/classSKEScale.html b/classSKEScale.html new file mode 100644 index 00000000..43fe0c63 --- /dev/null +++ b/classSKEScale.html @@ -0,0 +1,161 @@ + + + + + + + +MaCh3: SKEScale Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
SKEScale Class Reference
+
+
+ +

#include <ShiftFunctors.h>

+
+Inheritance diagram for SKEScale:
+
+
+ + +BaseFuncPar + +
+ + + + +

+Protected Member Functions

void Apply ()
 
+ + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from BaseFuncPar
 BaseFuncPar ()
 
 ~BaseFuncPar ()
 
void SetUncertainty (double sigma)
 
void setup ()
 
- Public Attributes inherited from BaseFuncPar
double ScaleUncertainty = 1.0
 
doubleParam_pos
 
std::vector< doublesyst_pos
 
fdmc_baseblah
 
+

Detailed Description

+
+

Definition at line 21 of file ShiftFunctors.h.

+

Member Function Documentation

+ +

◆ Apply()

+ +
+
+ + + + + +
+ + + + + + + +
void SKEScale::Apply ()
+
+inlineprotectedvirtual
+
+ +

Implements BaseFuncPar.

+ +

Definition at line 26 of file ShiftFunctors.h.

+
26{};
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classSKEScale.png b/classSKEScale.png new file mode 100644 index 0000000000000000000000000000000000000000..45169562b37379a3ddced4fd7dbc0fa6d9621817 GIT binary patch literal 464 zcmV;>0WbcEP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~00047 zNkl_F_ zoc5oH$U;Z#HYg%8sFT}6M8xU}dYd?t%MR-Ea4E<`X%6bd^7%w=*>+;cbFfd#suy)` zu!ic}o7Ni=+cuWfXiJx@sTzi?TX{$B!8!SstPb^7o$C=Uo3J3)a_y!d#=EgQO|OPv zi^l(kh?o)N49=DA~*83d7<6N53m#3kNhw1MvwvY5#%5Pz)C?5G61X; z + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
SMonolith Member List
+
+
+ +

This is the complete list of members for SMonolith, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_max_knotsSMonolithprivate
CalcSplineWeights()SMonolithinlineprivate
CalcSplineWeights_TF1()SMonolithinlineprivate
cpu_coeff_manySMonolithprivate
cpu_coeff_xSMonolithprivate
cpu_nKnots_arrSMonolithprivate
cpu_nParamPerEventSMonolithprivate
cpu_nPoints_arrSMonolithprivate
cpu_paramNo_arrSMonolithprivate
cpu_total_weightsSMonolith
cpu_weightsSMonolith
cpu_weights_varSMonolithprivate
Evaluate()SMonolith
Evaluate_TF1()SMonolith
FindSplineSegment()SMonolithinlineprivate
getSplineCoeff_SepMany(TSpline3_red *&spl, int &nPoints, float *&xArray, float *&manyArray)SMonolithinlineprivate
getTF1Coeff(TF1_red *&spl, int &nPoints, float *&coeffs)SMonolithinlineprivate
gpu_coeff_manySMonolithprivate
gpu_coeff_xSMonolithprivate
gpu_nKnots_arrSMonolithprivate
gpu_nParamPerEventSMonolithprivate
gpu_nPoints_arrSMonolithprivate
gpu_paramNo_arrSMonolithprivate
gpu_total_weightsSMonolithprivate
gpu_weightsSMonolithprivate
index_cpuSMonolithprivate
Initialise()SMonolithinlineprivate
isFlat(TSpline3_red *&spl)SMonolithinlineprivate
LoadSplineFile(std::string FileName)SMonolithinlineprivate
ModifyWeights()SMonolithinlineprivate
ModifyWeights_GPU()SMonolithinlineprivate
NEventsSMonolithprivate
nKnotsSMonolithprivate
nParamsSMonolithprivate
NSplines_totalSMonolithprivate
NSplines_total_largeSMonolithprivate
NSplines_validSMonolithprivate
PrepareForGPU(std::vector< std::vector< TSpline3_red * > > &MasterSpline)SMonolithinlineprivate
PrepareForGPU(std::vector< std::vector< TF1_red * > > &MasterSpline)SMonolithinlineprivate
PrepareForGPU_TF1()SMonolithinlineprivate
PrepareForGPU_TSpline3()SMonolithinlineprivate
PrepareSplineFile()SMonolithinlineprivate
ReduceTF1(std::vector< std::vector< TF1 * > > &MasterSpline)SMonolithinlineprivate
ReduceTSpline3(std::vector< std::vector< TSpline3 * > > &MasterSpline)SMonolithinlineprivate
retPointer(const int event)SMonolithinline
SaveSplineFileSMonolithprivate
ScanMasterSpline(std::vector< std::vector< TSpline3_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots)SMonolithinlineprivate
ScanMasterSpline(std::vector< std::vector< TF1_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams)SMonolithinlineprivate
segmentsSMonolithprivate
setSplinePointers(std::vector< const double * > spline_ParsPointers)SMonolithinline
SMonolith(std::vector< std::vector< TSpline3 * > > &MasterSpline)SMonolith
SMonolith(std::vector< std::vector< TSpline3_red * > > &MasterSpline)SMonolith
SMonolith(std::vector< std::vector< TF1 * > > &MasterSpline)SMonolith
SMonolith(std::vector< std::vector< TF1_red * > > &MasterSpline)SMonolith
SMonolith(std::string FileName)SMonolith
SplineInfoArraySMonolithprivate
splineParsPointerSMonolithprivate
SynchroniseMemTransfer()SMonolithinline
valsSMonolithprivate
~SMonolith()SMonolith
+ + + + diff --git a/classSMonolith.html b/classSMonolith.html new file mode 100644 index 00000000..3a9ba69d --- /dev/null +++ b/classSMonolith.html @@ -0,0 +1,3499 @@ + + + + + + + +MaCh3: SMonolith Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <SplineMonolith.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SMonolith (std::vector< std::vector< TSpline3 * > > &MasterSpline)
 Constructor.
 
 SMonolith (std::vector< std::vector< TSpline3_red * > > &MasterSpline)
 Constructor.
 
 SMonolith (std::vector< std::vector< TF1 * > > &MasterSpline)
 Constructor.
 
 SMonolith (std::vector< std::vector< TF1_red * > > &MasterSpline)
 Constructor.
 
 SMonolith (std::string FileName)
 Constructor where you pass path to preprocessed root FileName.
 
 ~SMonolith ()
 Destructor for SMonolith class.
 
void Evaluate ()
 CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; probably the best one here! Same thing but pass parameter spline segments instead of variations.
 
void Evaluate_TF1 ()
 CW: Evaluate weights on the CPU/GPU.
 
void SynchroniseMemTransfer ()
 KS: After calculations are done on GPU we copy memory to CPU. This operation is asynchronous meaning while memory is being copied some operations are being carried. Memory must be copied before actual reweight. This function make sure all has been copied.
 
const floatretPointer (const int event)
 KS: Get pointer to total weight to make fit faster wrooom!
 
void setSplinePointers (std::vector< const double * > spline_ParsPointers)
 KS: Set pointers to spline params.
 
+ + + + + + + +

+Public Attributes

floatcpu_weights
 The returned gpu weights, read by the GPU.
 
floatcpu_total_weights
 KS: This holds the total CPU weights that gets read in samplePDFND.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

void Initialise ()
 KS: Set everything to null etc.
 
void ScanMasterSpline (std::vector< std::vector< TSpline3_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots)
 CW: Function to scan through the MasterSpline of TSpline3.
 
void ScanMasterSpline (std::vector< std::vector< TF1_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams)
 CW: Function to scan through the MasterSpline of TF1.
 
void PrepareForGPU (std::vector< std::vector< TSpline3_red * > > &MasterSpline)
 CW: Prepare the TSpline3_red objects for the GPU.
 
void PrepareForGPU_TSpline3 ()
 
void PrepareForGPU (std::vector< std::vector< TF1_red * > > &MasterSpline)
 CW: Prepare the TF1_red objects for the GPU.
 
void PrepareForGPU_TF1 ()
 
std::vector< std::vector< TSpline3_red * > > ReduceTSpline3 (std::vector< std::vector< TSpline3 * > > &MasterSpline)
 CW: Reduced the TSpline3 to TSpline3_red.
 
std::vector< std::vector< TF1_red * > > ReduceTF1 (std::vector< std::vector< TF1 * > > &MasterSpline)
 CW: Reduced the TF1 to TF1_red.
 
void getSplineCoeff_SepMany (TSpline3_red *&spl, int &nPoints, float *&xArray, float *&manyArray)
 CW: This loads up coefficients into two arrays: one x array and one yabcd array.
 
bool isFlat (TSpline3_red *&spl)
 CW: Helper function used in the constructor, tests to see if the spline is flat.
 
void getTF1Coeff (TF1_red *&spl, int &nPoints, float *&coeffs)
 CW: Gets the polynomial coefficients for TF1.
 
void FindSplineSegment ()
 CW:Code used in step by step reweighting, Find Spline Segment for each param.
 
void CalcSplineWeights ()
 CPU based code which eval weight for each spline.
 
void CalcSplineWeights_TF1 ()
 Same but TF1.
 
void ModifyWeights ()
 Calc total event weight.
 
void ModifyWeights_GPU ()
 Conversion from valid splines to all.
 
void PrepareSplineFile ()
 KS: Prepare spline file that can be used for fast loading.
 
void LoadSplineFile (std::string FileName)
 KS: Load preprocessed spline file.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

FastSplineInfoSplineInfoArray
 
short intsegments
 
floatvals
 
std::vector< const double * > splineParsPointer
 This holds pointer to parameter position which we later copy paste it to GPU.
 
unsigned int NEvents
 Number of events.
 
short int nParams
 Number of NIWG parameters that have splines.
 
int _max_knots
 Max knots for production.
 
intindex_cpu
 holds the index for good splines; don't do unsigned since starts with negative value!
 
unsigned int NSplines_valid
 Number of valid splines.
 
unsigned int NSplines_total
 Number of total splines we can maximally have, if each event had the maximum number of splines found across all events.
 
unsigned int NSplines_total_large
 Number of total splines if each event had every parameter's spline.
 
unsigned int nKnots
 Sum of all knots over all splines.
 
floatgpu_weights
 
floatgpu_total_weights
 
floatcpu_weights_var
 
std::vector< unsigned intcpu_nParamPerEvent
 KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}.
 
unsigned intgpu_nParamPerEvent
 
std::vector< short intcpu_nPoints_arr
 
short intgpu_nPoints_arr
 
std::vector< short intcpu_paramNo_arr
 
short intgpu_paramNo_arr
 
std::vector< unsigned intcpu_nKnots_arr
 
unsigned intgpu_nKnots_arr
 
std::vector< floatcpu_coeff_x
 
floatgpu_coeff_x
 
std::vector< floatcpu_coeff_many
 
floatgpu_coeff_many
 
bool SaveSplineFile
 
+

Detailed Description

+
+

Definition at line 37 of file SplineMonolith.h.

+

Constructor & Destructor Documentation

+ +

◆ SMonolith() [1/5]

+ +
+
+ + + + + + + + +
SMonolith::SMonolith (std::vector< std::vector< TSpline3 * > > & MasterSpline)
+
+ +

Constructor.

+
Parameters
+ + +
MasterSplineVector of TSpline3 pointers which we strip back
+
+
+ +

Definition at line 189 of file SplineMonolith.cpp.

+
189 {
+
190 Initialise();
+
191 MACH3LOG_INFO("Using full TSpline3, about to reduce it and send to GPU");
+
192 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
193 std::vector<std::vector<TSpline3_red*> > ReducedSpline = ReduceTSpline3(MasterSpline);
+ +
195}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
std::vector< std::vector< TSpline3_red * > > ReduceTSpline3(std::vector< std::vector< TSpline3 * > > &MasterSpline)
CW: Reduced the TSpline3 to TSpline3_red.
+
void Initialise()
KS: Set everything to null etc.
+
void PrepareForGPU(std::vector< std::vector< TSpline3_red * > > &MasterSpline)
CW: Prepare the TSpline3_red objects for the GPU.
+
+
+
+ +

◆ SMonolith() [2/5]

+ +
+
+ + + + + + + + +
SMonolith::SMonolith (std::vector< std::vector< TSpline3_red * > > & MasterSpline)
+
+ +

Constructor.

+
Parameters
+ + +
MasterSplineVector of TSpline3_red pointers which we strip back
+
+
+ +

Definition at line 199 of file SplineMonolith.cpp.

+
199 {
+
200// *****************************************
+
201 Initialise();
+
202 MACH3LOG_INFO("-- GPUING WITH {X} and {Y,B,C,D} arrays and master spline containing TSpline3_red");
+ +
204}
+
+
+
+ +

◆ SMonolith() [3/5]

+ +
+
+ + + + + + + + +
SMonolith::SMonolith (std::vector< std::vector< TF1 * > > & MasterSpline)
+
+ +

Constructor.

+
Parameters
+ + +
MasterSplineVector of TF1 pointers which we strip back
+
+
+ +

Definition at line 209 of file SplineMonolith.cpp.

+
209 {
+
210// *****************************************
+
211 Initialise();
+
212 MACH3LOG_INFO("Using full TF1, about to reduce it and send to GPU");
+
213 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
214 std::vector<std::vector<TF1_red*> > ReducedSpline = ReduceTF1(MasterSpline);
+ +
216}
+
std::vector< std::vector< TF1_red * > > ReduceTF1(std::vector< std::vector< TF1 * > > &MasterSpline)
CW: Reduced the TF1 to TF1_red.
+
+
+
+ +

◆ SMonolith() [4/5]

+ +
+
+ + + + + + + + +
SMonolith::SMonolith (std::vector< std::vector< TF1_red * > > & MasterSpline)
+
+ +

Constructor.

+
Parameters
+ + +
MasterSplineVector of TF1_red pointers which we strip back
+
+
+ +

Definition at line 221 of file SplineMonolith.cpp.

+
221 {
+
222// *****************************************
+
223 Initialise();
+
224 MACH3LOG_INFO("-- GPUING WITH TF1_red");
+
225 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+ +
227}
+
+
+
+ +

◆ SMonolith() [5/5]

+ +
+
+ + + + + + + + +
SMonolith::SMonolith (std::string FileName)
+
+ +

Constructor where you pass path to preprocessed root FileName.

+
Parameters
+ + +
FileNamepath to pre-processed root file containing stripped monolith info
+
+
+ +

Definition at line 232 of file SplineMonolith.cpp.

+
232 {
+
233// *****************************************
+
234 Initialise();
+
235 MACH3LOG_INFO("-- GPUING WITH {X} and {Y,B,C,D} arrays and master spline containing TSpline3_red");
+
236 // Convert the TSpline3 pointers to the reduced form and call the reduced constructor
+
237 LoadSplineFile(FileName);
+
238}
+
void LoadSplineFile(std::string FileName)
KS: Load preprocessed spline file.
+
+
+
+ +

◆ ~SMonolith()

+ +
+
+ + + + + + + +
SMonolith::~SMonolith ()
+
+ +

Destructor for SMonolith class.

+ +

Definition at line 1232 of file SplineMonolith.cpp.

+
1232 {
+
1233// *****************************************
+
1234
+
1235#ifdef CUDA
+ + + +
1239
+ + +
1242
+ + + + +
1247 #endif
+
1248 gpu_weights);
+
1249
+
1250 //KS: Since we declared them using CUDA alloc we have to free memory using also cuda functions
+ +
1252#else
+
1253 if(segments != NULL) delete[] segments;
+
1254 if(vals != NULL) delete[] vals;
+
1255#endif
+
1256
+
1257 if(SplineInfoArray != NULL) delete[] SplineInfoArray;
+
1258
+ +
1260
+
1261#ifdef Weight_On_SplineBySpline_Basis
+
1262 if(cpu_weights != NULL) delete[] cpu_weights;
+
1263 if(cpu_weights_var != NULL) delete[] cpu_weights_var;
+
1264#endif
+
1265 if(index_cpu != NULL) delete[] index_cpu;
+
1266
+
1267 //KS: Those might be deleted or not depending on GPU/CPU TSpline3/TF1 DEBUG or not hence we check if not NULL
+
1268 cpu_coeff_x.clear();
+
1269 cpu_coeff_x.shrink_to_fit();
+
1270 cpu_coeff_many.clear();
+
1271 cpu_coeff_many.shrink_to_fit();
+
1272 cpu_paramNo_arr.clear();
+
1273 cpu_paramNo_arr.shrink_to_fit();
+
1274 cpu_nKnots_arr.clear();
+
1275 cpu_nKnots_arr.shrink_to_fit();
+
1276 #ifndef Weight_On_SplineBySpline_Basis
+
1277 cpu_nParamPerEvent.clear();
+
1278 cpu_nParamPerEvent.shrink_to_fit();
+
1279 #endif
+
1280 cpu_nPoints_arr.clear();
+
1281 cpu_nPoints_arr.shrink_to_fit();
+
1282}
+
std::vector< unsigned int > cpu_nParamPerEvent
KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of ...
+
unsigned int * gpu_nKnots_arr
+
float * gpu_weights
+
std::vector< short int > cpu_nPoints_arr
+
std::vector< short int > cpu_paramNo_arr
+
float * gpu_coeff_x
+
std::vector< float > cpu_coeff_many
+
float * gpu_total_weights
+
FastSplineInfo * SplineInfoArray
+
short int * segments
+
short int * gpu_paramNo_arr
+
std::vector< unsigned int > cpu_nKnots_arr
+
float * cpu_weights
The returned gpu weights, read by the GPU.
+ +
float * cpu_total_weights
KS: This holds the total CPU weights that gets read in samplePDFND.
+
float * cpu_weights_var
+
unsigned int * gpu_nParamPerEvent
+
float * gpu_coeff_many
+
int * index_cpu
holds the index for good splines; don't do unsigned since starts with negative value!
+
std::vector< float > cpu_coeff_x
+
+
+
+

Member Function Documentation

+ +

◆ CalcSplineWeights()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::CalcSplineWeights ()
+
+inlineprivate
+
+ +

CPU based code which eval weight for each spline.

+ +

Definition at line 1602 of file SplineMonolith.cpp.

+
1602 {
+
1603//*********************************************************
+
1604 #ifdef MULTITHREAD
+
1605 #pragma omp parallel for simd
+
1606 #endif
+
1607 for (unsigned int splineNum = 0; splineNum < NSplines_valid; ++splineNum)
+
1608 {
+
1609 //CW: Which Parameter we are accessing
+
1610 const short int Param = cpu_paramNo_arr[splineNum];
+
1611
+
1612 //CW: Avoids doing costly binary search on GPU
+
1613 const short int segment = segments[Param];
+
1614
+
1615 //KS: Segment for coeff_x is simply parameter*max knots + segment as each parameters has the same spacing
+
1616 const short int segment_X = Param*_max_knots+segment;
+
1617
+
1618 //KS: Find knot position in out monolithical structure
+ +
1620
+
1621 // We've read the segment straight from CPU and is saved in segment_gpu
+
1622 // polynomial parameters from the monolithic splineMonolith
+
1623 const float fY = cpu_coeff_many[CurrentKnotPos];
+
1624 const float fB = cpu_coeff_many[CurrentKnotPos+1];
+
1625 const float fC = cpu_coeff_many[CurrentKnotPos+2];
+
1626 const float fD = cpu_coeff_many[CurrentKnotPos+3];
+
1627 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
1628 const float dx = vals[Param] - cpu_coeff_x[segment_X];
+
1629
+
1630 //CW: Wooow, let's use some fancy intrinsic and pull down the processing time by <1% from normal multiplication! HURRAY
+
1631 cpu_weights_var[splineNum] = fmaf(dx, fmaf(dx, fmaf(dx, fD, fC), fB), fY);
+
1632 // Or for the more "easy to read" version:
+
1633 //cpu_weights_var[splineNum] = (fY+dx*(fB+dx*(fC+dx*fD)));
+
1634 }
+
1635 return;
+
1636}
+
#define _nCoeff_
+
unsigned int NSplines_valid
Number of valid splines.
+
int _max_knots
Max knots for production.
+
+
+
+ +

◆ CalcSplineWeights_TF1()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::CalcSplineWeights_TF1 ()
+
+inlineprivate
+
+ +

Same but TF1.

+ +

Definition at line 1693 of file SplineMonolith.cpp.

+
1693 {
+
1694//*********************************************************
+
1695
+
1696 #ifdef MULTITHREAD
+
1697 #pragma omp parallel for
+
1698 #endif
+
1699 for (unsigned int splineNum = 0; splineNum < NSplines_valid; ++splineNum)
+
1700 {
+
1701 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
1702 const float x = vals[cpu_paramNo_arr[splineNum]];
+
1703
+
1704 // Read the coefficients
+
1705 const float a = cpu_coeff_many[splineNum*_max_knots];
+
1706 const float b = cpu_coeff_many[splineNum*_max_knots+1];
+
1707 const float c = cpu_coeff_many[splineNum*_max_knots+2];
+
1708 const float d = cpu_coeff_many[splineNum*_max_knots+3];
+
1709 const float e = cpu_coeff_many[splineNum*_max_knots+4];
+
1710
+
1711 // Match these with form in SetSplines
+
1712 // Might not be great to have this if statement: maybe split two kernels?
+
1713 if (gpu_nPoints_arr[splineNum] == 5) {
+
1714 cpu_weights_var[splineNum] = 1 + a*x + b*x*x + c*x*x*x + d*x*x*x*x + e*x*x*x*x*x;
+
1715 } else if (gpu_nPoints_arr[splineNum] == 2) {
+
1716 cpu_weights_var[splineNum] = (x<=0)*(1+a*x) + (x>0)*(1+b*x);
+
1717 } else {
+
1718 printf("Big problems, I found a nPoints array which is not 5 or 2 on GPU!\n");
+
1719 }
+
1720 }
+
1721 return;
+
1722}
+
short int * gpu_nPoints_arr
+
+
+
+ +

◆ Evaluate()

+ +
+
+ + + + + + + +
void SMonolith::Evaluate ()
+
+ +

CW: This Eval should be used when using two separate x,{y,a,b,c,d} arrays to store the weights; probably the best one here! Same thing but pass parameter spline segments instead of variations.

+ +

Definition at line 1500 of file SplineMonolith.cpp.

+
1500 {
+
1501// *****************************************
+
1502
+
1503 // There's a parameter mapping that goes from spline parameter to a global parameter index
+
1504 // Find the spline segments
+ +
1506
+
1507 //KS: Huge MP loop over all valid splines
+ +
1509
+
1510 //KS: Huge MP loop over all events calculating total weight
+
1511 ModifyWeights();
+
1512
+
1513 return;
+
1514}
+
void CalcSplineWeights()
CPU based code which eval weight for each spline.
+
void FindSplineSegment()
CW:Code used in step by step reweighting, Find Spline Segment for each param.
+
void ModifyWeights()
Calc total event weight.
+
+
+
+ +

◆ Evaluate_TF1()

+ +
+
+ + + + + + + +
void SMonolith::Evaluate_TF1 ()
+
+ +

CW: Evaluate weights on the CPU/GPU.

+ +

Definition at line 1673 of file SplineMonolith.cpp.

+
1673 {
+
1674// *****************************************
+
1675
+
1676 // Feed the parameter variations
+
1677 for (__int__ i = 0; i < nParams; ++i) {
+
1678 // Update the values and which segment it belongs to
+ +
1680 }
+
1681
+
1682 //KS: Huge MP loop over all valid splines
+ +
1684
+
1685 //KS: Huge MP loop over all events calculating total weight
+
1686 ModifyWeights();
+
1687
+
1688 return;
+
1689}
+
#define __int__
Definition Structs.h:14
+
void CalcSplineWeights_TF1()
Same but TF1.
+
short int nParams
Number of NIWG parameters that have splines.
+
std::vector< const double * > splineParsPointer
This holds pointer to parameter position which we later copy paste it to GPU.
+
+
+
+ +

◆ FindSplineSegment()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::FindSplineSegment ()
+
+inlineprivate
+
+ +

CW:Code used in step by step reweighting, Find Spline Segment for each param.

+ +

Definition at line 1521 of file SplineMonolith.cpp.

+
1521 {
+
1522// *************************
+
1523
+
1524 // Loop over the splines
+
1525 //KS: Tried multithreading here with 48 splines and it is faster with one thread, maybe in future multithreading will be worth revisiting
+
1526 for (__int__ i = 0; i < nParams; ++i)
+
1527 {
+
1528 const __int__ nPoints = SplineInfoArray[i].nPts;
+ +
1530
+
1531 // EM: if we have a parameter that has no response for any event (i.e. all splines have just one knot), then skip it and avoid a seg fault here
+
1532 // In principle, such parameters shouldn't really be included in the first place, but with new det syst splines this
+
1533 // could happen if say you were just running on one FHC run, then all RHC parameters would be flat and the code below would break.
+
1534 if(xArray == NULL) continue;
+
1535
+
1536 // Get the variation for this reconfigure for the ith parameter
+ +
1538 vals[i] = xvar;
+
1539
+
1540 // The segment we're interested in (klow in ROOT code)
+
1541 __int__ segment = 0;
+
1542 __int__ kHigh = nPoints-1;
+
1543 //KS: We expect new segment is very close to previous
+ +
1545
+
1546 //KS: It is quite probable the new segment is same as in previous step so try to avoid binary search
+ +
1548 // If the variation is below the lowest saved spline point
+
1549 else if (xvar <= xArray[0]) {
+
1550 segment = 0;
+
1551 // If the variation is above the highest saved spline point
+
1552 } else if (xvar >= xArray[nPoints-1]) {
+
1553 //CW: Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651
+
1554 segment = kHigh;
+
1555 // If the variation is between the maximum and minimum, perform a binary search
+
1556 } else {
+
1557 // The top point we've got
+
1558 __int__ kHalf = 0;
+
1559 // While there is still a difference in the points (we haven't yet found the segment)
+
1560 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
1561 while (kHigh - segment > 1) {
+
1562 // Increment the half-step
+
1563 kHalf = (segment + kHigh)/2;
+
1564 // If our variation is above the kHalf, set the segment to kHalf
+
1565 if (xvar > xArray[kHalf]) {
+
1566 segment = kHalf;
+
1567 // Else move kHigh down
+
1568 } else {
+
1569 kHigh = kHalf;
+
1570 }
+
1571 } // End the while: we've now done our binary search
+
1572 } // End the else: we've now found our point
+
1573
+
1574 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
1575
+
1576 //CW: This way we avoid doing 1.2M+ binary searches on the GPU
+
1577 // and literally just multiply lots of numbers together on the GPU without any algorithm
+
1578 // Update the values and which segment it belongs to
+ + +
1581
+
1582#ifdef DEBUG
+
1583 if (SplineInfoArray[i].xPts[segment] > xvar && segment != 0) {
+
1584 std::cerr << "Found a segment which is _ABOVE_ the variation!" << std::endl;
+
1585 std::cerr << "IT SHOULD ALWAYS BE BELOW! (except when segment 0)" << std::endl;
+
1586 std::cerr << "Spline: "<< i << std::endl;
+
1587
+
1588 std::cerr << "Found segment = " << segment << std::endl;
+
1589 std::cerr << "Doing variation = " << xvar << std::endl;
+
1590 std::cerr << "x in spline = " << SplineInfoArray[i].xPts[segment] << std::endl;
+
1591 for (__int__ j = 0; j < SplineInfoArray[j].nPts; ++j) {
+
1592 std::cerr << " " << j << " = " << SplineInfoArray[i].xPts[j] << std::endl;
+
1593 }
+
1594 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1595 throw;
+
1596 }
+
1597#endif
+
1598 } //end loop over params
+
1599}
+
#define __float__
Definition Structs.h:13
+
__float__ * xPts
Definition Structs.h:113
+
__int__ nPts
Definition Structs.h:110
+
const double * splineParsPointer
Definition Structs.h:120
+
__int__ CurrSegment
Definition Structs.h:117
+
+
+
+ +

◆ getSplineCoeff_SepMany()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SMonolith::getSplineCoeff_SepMany (TSpline3_red *& spl,
intnPoints,
float *& xArray,
float *& manyArray 
)
+
+inlineprivate
+
+ +

CW: This loads up coefficients into two arrays: one x array and one yabcd array.

+

CW: This should maximize our cache hits!

+ +

Definition at line 1362 of file SplineMonolith.cpp.

+
1362 {
+
1363// *****************************************
+
1364 // Initialise all arrays to 1.0
+
1365 for (int i = 0; i < _max_knots; ++i) {
+
1366 xArray[i] = 1.0;
+
1367 for (int j = 0; j < _nCoeff_; j++) {
+
1368 manyArray[i*_nCoeff_+j] = 1.0;
+
1369 }
+
1370 }
+
1371 // Get number of points in spline
+
1372 int Np = spl->GetNp();
+
1373 // If spline is flat, set number of knots to 1.0,
+
1374 // This is used later to expedite the calculations for flat splines
+
1375 // tmpArray[0] is number of knots
+
1376 if (isFlat(spl)) {
+
1377 nPoints = 1;
+
1378 } else {
+
1379 nPoints = Np;
+
1380 if (Np > _max_knots) {
+
1381 MACH3LOG_ERROR("Error, number of points is greater than saved {}", _max_knots);
+
1382 MACH3LOG_ERROR("This _WILL_ cause problems with GPU splines and _SHOULD_ be fixed!");
+
1383 MACH3LOG_ERROR("nPoints = {}, _max_knots = {}", nPoints, _max_knots);
+
1384 throw;
+
1385 }
+
1386 }
+
1387
+
1388 // The coefficients we're writing to
+
1389 __float__ x, y, b, c, d;
+
1390 // TSpline3 can only take doubles, not floats
+
1391 // But our GPU is slow with doubles, so need to cast to float
+
1392 for(int i = 0; i < Np; i++) {
+
1393 // Get the coefficients from the TSpline3 object
+
1394 spl->GetCoeff(i, x, y, b, c, d);
+
1395 // Write the arrays
+
1396 xArray[i] = float(x);
+
1397 manyArray[i*_nCoeff_] = float(y); // 4 because manyArray stores y,b,c,d
+
1398 manyArray[i*_nCoeff_+1] = float(b);
+
1399 manyArray[i*_nCoeff_+2] = float(c);
+
1400 manyArray[i*_nCoeff_+3] = float(d);
+
1401
+
1402 if((xArray[i] == -999) | (manyArray[i*_nCoeff_] == -999) | (manyArray[i*4+1] == -999) | (manyArray[i*_nCoeff_+2] == -999) | (manyArray[i*_nCoeff_+3] == -999)){
+
1403 std::cerr << "*********** Bad params in getSplineCoeff_SepMany() ************"<<std::endl;
+
1404 std::cerr << "pre cast to float (x, y, b, c, d) = "<<x<<", "<<y<<", "<<b<<", "<<c<<", "<<d<<std::endl;
+
1405 std::cerr << "post cast to float (x, y, b, c, d) = "<<xArray[i]<<", "<<manyArray[i*4]<<", "<<manyArray[i*4+1]<<", "<<manyArray[i*4+2]<<", "<<manyArray[i*_nCoeff_+3]<<std::endl;
+
1406 std::cerr << "This will cause problems when preparing for GPU"<<std::endl;
+
1407 std::cerr << "***************************************************************"<<std::endl;
+
1408 }
+
1409 }
+
1410 // The structure is now xarray ={x1,x2,x3}
+
1411 // manyArr ={y1,y2,y3, b1,b2,b3, c1,c2,c3, d1,d2,d3}
+
1412 #ifndef DEBUG
+
1413 delete spl;
+
1414 spl = NULL;
+
1415 #endif
+
1416}
+
std::vector< bool > isFlat
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
+
+
+ +

◆ getTF1Coeff()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void SMonolith::getTF1Coeff (TF1_red *& spl,
intnPoints,
float *& coeffs 
)
+
+inlineprivate
+
+ +

CW: Gets the polynomial coefficients for TF1.

+ +

Definition at line 1422 of file SplineMonolith.cpp.

+
1422 {
+
1423// *****************************************
+
1424
+
1425 // Initialise all arrays to 1.0
+
1426 for (int i = 0; i < _max_knots; ++i) {
+
1427 coeffs[i] = 0.0;
+
1428 }
+
1429
+
1430 // Get number of points in spline
+
1431 nPoints = spl->GetSize();
+
1432
+
1433 // TSpline3 can only take doubles, not floats
+
1434 // But our GPU is slow with doubles, so need to cast to float
+
1435 for (int i = 0; i < nPoints; i++) {
+
1436 coeffs[i] = spl->GetParameter(i);
+
1437 }
+
1438 // The structure is now coeffs = {a,b,c,d,e}
+
1439 delete spl;
+
1440 spl = NULL;
+
1441}
+
+
+
+ +

◆ Initialise()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::Initialise ()
+
+inlineprivate
+
+ +

KS: Set everything to null etc.

+ +

Definition at line 147 of file SplineMonolith.cpp.

+
147 {
+
148// *****************************************
+
149
+
150#ifdef CUDA
+
151 MACH3LOG_INFO("Using GPU version event by event monolith");
+
152#endif
+
153 //KS: If true it will save spline monolith into huge ROOT file
+
154 SaveSplineFile = false;
+
155
+
156 nKnots = 0;
+
157 NEvents = 0;
+
158 _max_knots = 0;
+
159 nParams = 0;
+
160 NSplines_total = 0;
+
161 NSplines_valid = 0;
+ +
163
+
164 index_cpu = NULL;
+ +
166 gpu_weights = nullptr;
+
167
+ +
169 gpu_total_weights = nullptr;
+
170 gpu_nParamPerEvent = nullptr;
+
171 gpu_nPoints_arr = nullptr;
+
172 gpu_paramNo_arr = nullptr;
+
173 gpu_nKnots_arr = nullptr;
+
174 gpu_coeff_x = nullptr;
+
175 gpu_coeff_many = nullptr;
+
176
+ +
178 segments = NULL;
+
179 vals = NULL;
+
180
+
181 return;
+
182}
+
unsigned int NSplines_total
Number of total splines we can maximally have, if each event had the maximum number of splines found ...
+
bool SaveSplineFile
+
unsigned int NEvents
Number of events.
+
unsigned int NSplines_total_large
Number of total splines if each event had every parameter's spline.
+
unsigned int nKnots
Sum of all knots over all splines.
+
+
+
+ +

◆ isFlat()

+ +
+
+ + + + + +
+ + + + + + + + +
bool SMonolith::isFlat (TSpline3_red *& spl)
+
+inlineprivate
+
+ +

CW: Helper function used in the constructor, tests to see if the spline is flat.

+ +

Definition at line 1445 of file SplineMonolith.cpp.

+
1445 {
+
1446// *****************************************
+
1447 int Np = spl->GetNp();
+
1448 __float__ x, y, b, c, d;
+
1449 // Go through spline segment parameters,
+
1450 // Get y values for each spline knot,
+
1451 // Every knot must evaluate to 1.0 to create a flat spline
+
1452 for(int i = 0; i < Np; i++) {
+
1453 spl->GetCoeff(i, x, y, b, c, d);
+
1454 if (y != 1) {
+
1455 return false;
+
1456 }
+
1457 }
+
1458 return true;
+
1459}
+
+
+
+ +

◆ LoadSplineFile()

+ +
+
+ + + + + +
+ + + + + + + + +
void SMonolith::LoadSplineFile (std::string FileName)
+
+inlineprivate
+
+ +

KS: Load preprocessed spline file.

+ +

Definition at line 475 of file SplineMonolith.cpp.

+
475 {
+
476// *****************************************
+
477
+
478 #ifdef Weight_On_SplineBySpline_Basis
+
479 MACH3LOG_ERROR("Trying to load Monolith from file using weight by weight base, this is not supported right now, sorry");
+
480 throw;
+
481 #endif
+
482
+
483 if (std::getenv("MACH3") != NULL) {
+
484 FileName.insert(0, std::string(std::getenv("MACH3"))+"/");
+
485 }
+
486
+
487 TFile *SplineFile = new TFile(FileName.c_str(), "OPEN");
+
488 TTree *Settings = (TTree*)SplineFile->Get("Settings");
+
489 TTree *Monolith = (TTree*)SplineFile->Get("Monolith");
+
490 TTree *ParamInfo = (TTree*)SplineFile->Get("ParamInfo");
+
491 TTree *XKnots = (TTree*)SplineFile->Get("XKnots");
+
492 TTree *EventInfo = (TTree*)SplineFile->Get("EventInfo");
+
493 TTree *FastSplineInfoTree = (TTree*)SplineFile->Get("FastSplineInfoTree");
+
494
+
495 unsigned int NEvents_temp;
+
496 short int nParams_temp;
+
497 int _max_knots_temp;
+
498 unsigned int nKnots_temp;
+
499 unsigned int NSplines_valid_temp;
+
500
+
501 Settings->SetBranchAddress("NEvents", &NEvents_temp);
+
502 Settings->SetBranchAddress("nParams", &nParams_temp);
+
503 Settings->SetBranchAddress("_max_knots", &_max_knots_temp);
+
504 Settings->SetBranchAddress("nKnots", &nKnots_temp);
+
505 Settings->SetBranchAddress("NSplines_valid", &NSplines_valid_temp);
+
506
+
507 Settings->GetEntry(0);
+
508
+ + + + + +
514
+
515 unsigned int event_size_max = _max_knots * nParams;
+ +
517
+
518 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
519#ifdef CUDA
+ + +
522#else
+
523 segments = new short int[nParams]();
+
524 vals = new float[nParams]();
+
525#endif
+
526
+ + +
529 //KS: And array which tells where each spline stars in a big monolith array, sort of knot map
+ +
531
+
532 cpu_coeff_many.resize(nKnots*_nCoeff_); // *4 because we store y,b,c,d parameters in this array
+ +
534
+
535 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
536#ifndef CUDA
+
537 cpu_total_weights = new float[NEvents]();
+
538 cpu_weights_var = new float[NSplines_valid]();
+
539#endif
+
540
+
541 float coeff = 0.;
+
542 Monolith->SetBranchAddress("cpu_coeff_many", &coeff);
+
543 for(unsigned int i = 0; i < nKnots*_nCoeff_; i++)
+
544 {
+
545 Monolith->GetEntry(i);
+ +
547 }
+
548
+
549 short int paramNo_arr = 0;
+
550 unsigned int nKnots_arr = 0;
+
551 ParamInfo->SetBranchAddress("cpu_paramNo_arr", &paramNo_arr);
+
552 ParamInfo->SetBranchAddress("cpu_nKnots_arr", &nKnots_arr);
+
553 for(unsigned int i = 0; i < NSplines_valid; i++)
+
554 {
+
555 ParamInfo->GetEntry(i);
+ + +
558 }
+
559
+
560 float coeff_x = 0.;
+
561 XKnots->SetBranchAddress("cpu_coeff_x", &coeff_x);
+
562 for(unsigned int i = 0; i < event_size_max; i++)
+
563 {
+
564 XKnots->GetEntry(i);
+ +
566 }
+
567
+
568 unsigned int nParamPerEvent = 0;
+
569 EventInfo->SetBranchAddress("cpu_nParamPerEvent", &nParamPerEvent);
+
570 for(unsigned int i = 0; i < 2*NSplines_total; i++)
+
571 {
+
572 EventInfo->GetEntry(i);
+ +
574 }
+
575
+
576 __int__ nPoints = 0;
+
577 float xtemp[20];
+
578 FastSplineInfoTree->SetBranchAddress("nPts", &nPoints);
+
579 FastSplineInfoTree->SetBranchAddress("xPts", &xtemp);
+
580
+ +
582 for (__int__ i = 0; i < nParams; ++i) {
+
583 FastSplineInfoTree->GetEntry(i);
+
584 SplineInfoArray[i].nPts = -999;
+ + + +
588
+
589 // Fill the number of points
+
590 SplineInfoArray[i].nPts = nPoints;
+
591 if(nPoints == -999) continue;
+ +
593 for (__int__ k = 0; k < SplineInfoArray[i].nPts; ++k)
+
594 {
+ +
596 }
+
597 }
+
598
+
599 SplineFile->Close();
+
600 delete SplineFile;
+
601
+
602 // Print some info; could probably make this to a separate function
+
603 MACH3LOG_INFO("--- INITIALISED (X), (YBCD) ARRAYS ---");
+
604 MACH3LOG_INFO("{} events with {} splines", NEvents, NSplines_valid);
+
605 MACH3LOG_INFO("On average {:.2f} splines per event ({}/{})", float(NSplines_valid)/float(NEvents), NSplines_valid, NEvents);
+
606 MACH3LOG_INFO("Size of x array = {:.4f} MB", double(sizeof(float)*event_size_max)/1.E6);
+
607 MACH3LOG_INFO("Size of coefficient (y,b,c,d) array = {:.2f} MB", double(sizeof(float)*nKnots*_nCoeff_)/1.E6);
+
608 MACH3LOG_INFO("Size of parameter # array = {:.2f} MB", double(sizeof(short int)*NSplines_valid)/1.E6);
+
609
+ +
611}
+
void PrepareForGPU_TSpline3()
+ +
+
+
+ +

◆ ModifyWeights()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::ModifyWeights ()
+
+inlineprivate
+
+ +

Calc total event weight.

+ +

Definition at line 1726 of file SplineMonolith.cpp.

+
1726 {
+
1727//*********************************************************
+
1728#ifndef Weight_On_SplineBySpline_Basis
+
1729 #ifdef MULTITHREAD
+
1730 #pragma omp parallel for
+
1731 #endif
+
1732 for (unsigned int EventNum = 0; EventNum < NEvents; ++EventNum)
+
1733 {
+
1734 float totalWeight = 1.0f; // Initialize total weight for each event
+
1735
+
1736 // Extract the parameters for the current event
+
1737 const unsigned int startIndex = cpu_nParamPerEvent[2 * EventNum + 1];
+
1738 const unsigned int numParams = cpu_nParamPerEvent[2 * EventNum];
+
1739
+
1740 // Compute total weight for the current event
+
1741 for (unsigned int id = 0; id < numParams; ++id)
+
1742 {
+ +
1744 }
+
1745
+
1746 // Store the total weight for the current event
+ +
1748 }
+
1749#else
+
1750 //KS: Name is confusing but what it does it make a nice mapping used for debugging
+ +
1752#endif
+
1753 return;
+
1754}
+
void ModifyWeights_GPU()
Conversion from valid splines to all.
+
+
+
+ +

◆ ModifyWeights_GPU()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::ModifyWeights_GPU ()
+
+inlineprivate
+
+ +

Conversion from valid splines to all.

+ +

Definition at line 1758 of file SplineMonolith.cpp.

+
1758 {
+
1759//*********************************************************
+
1760
+
1761#ifdef Weight_On_SplineBySpline_Basis
+
1762 // Multi-thread here because _numIndex is really quite large!
+
1763 #ifdef MULTITHREAD
+
1764 #pragma omp parallel for
+
1765 #endif
+
1766 for (unsigned int i = 0; i < NSplines_total; ++i) {
+
1767 if (index_cpu[i] >= 0) {
+ +
1769 } else {
+
1770 cpu_weights[i] = 1.;
+
1771 }
+
1772 }
+
1773#endif
+
1774 return;
+
1775}
+
+
+
+ +

◆ PrepareForGPU() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void SMonolith::PrepareForGPU (std::vector< std::vector< TF1_red * > > & MasterSpline)
+
+inlineprivate
+
+ +

CW: Prepare the TF1_red objects for the GPU.

+ +

Definition at line 812 of file SplineMonolith.cpp.

+
812 {
+
813// *****************************************
+
814
+
815 // Scan for the max number of knots, the number of events (number of splines), and number of parameters
+ +
817 MACH3LOG_INFO("Found {} events", NEvents);
+
818 MACH3LOG_INFO("Found {} polynomial at max", _max_knots);
+
819 MACH3LOG_INFO("Found {} parameters", nParams);
+
820
+
821 // Can pass the spline segments to the GPU instead of the values
+
822 // Make these here and only refill them for each loop, avoiding unnecessary new/delete on each reconfigure
+
823 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
824#ifdef CUDA
+ +
826#else
+
827 vals = new float[nParams]();
+
828#endif
+
829 for (__int__ j = 0; j < nParams; j++)
+
830 {
+
831 vals[j] = -999;
+
832 }
+
833
+
834 // Every event maximally has nParams TF1s which we've saved
+ +
836
+
837 //CW: With TF1 we only save the coefficients and the order of the polynomial
+
838 // Makes most sense to have one large monolithic array, but then it becomes impossible to tell apart a coefficient from a "number of points". So have two arrays: one of coefficients and one of number of points
+
839 // Let's first assume all are of _max_knots size
+
840 short int *nPoints_big = new short int[NSplines_total];
+
841 float *coeffs_big = new float[NSplines_total*_nTF1Coeff_]; // *5 because we store a,b,c,d,e coefficients of fifth order polynomial in this array
+
842
+
843 // Set all the big arrays to -999 to keep us safe...
+
844#ifdef MULTITHREAD
+
845#pragma omp parallel for
+
846#endif
+
847 for (unsigned int j = 0; j < NSplines_total; j++) {
+
848 // 1 number of points for each spline
+
849 nPoints_big[j] = -999;
+
850 // 5 coefficients for each spline
+
851 for (int k = 0; k < _nTF1Coeff_; k++) {
+
852 coeffs_big[j*_nTF1Coeff_+k] = -999;
+
853 }
+
854 }
+
855
+
856 // Will hold what spline number a certain spline has
+
857 short int *paramNo_big = new short int[NSplines_total];
+
858
+
859 // This holds the index of each spline
+
860 index_cpu = new int[NSplines_total];
+
861#ifdef Weight_On_SplineBySpline_Basis
+
862 //This holds the CPU weights for EACH SPLINE that gets read in samplePDFND
+
863 cpu_weights = new float[NSplines_total];
+
864#else
+
865 //KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}
+ +
867 int ParamCounter = 0;
+
868 int ParamCounterGlobal = 0;
+
869 #ifdef MULTITHREAD
+
870 #pragma omp parallel for
+
871 #endif
+
872 for (unsigned int j = 0; j < 2*NSplines_total; j++) {
+
873 cpu_nParamPerEvent[j] = -1;
+
874 }
+
875#endif
+
876 // Set index array and number of points arrays to something silly, again to be safe...
+
877#ifdef MULTITHREAD
+
878#pragma omp parallel for
+
879#endif
+
880 for (unsigned int j = 0; j < NSplines_total; j++) {
+
881 index_cpu[j] = -1;
+
882 paramNo_big[j] = -1;
+
883 #ifndef Weight_On_SplineBySpline_Basis
+
884 cpu_nParamPerEvent[j*2] = -1;
+
885 cpu_nParamPerEvent[j*2+1] = -1;
+
886 #endif
+
887 }
+
888
+
889 // Temporary arrays to hold the coefficients for each spline
+
890 // We get one a,b,c,d,e for each spline so need 5
+
891 float *temp_coeffs = new float[_max_knots]();
+
892 NSplines_valid = 0;
+
893
+
894 std::vector<std::vector<TF1_red*> >::iterator OuterIt;
+
895 std::vector<TF1_red*>::iterator InnerIt;
+
896 unsigned int EventCounter = 0;
+
897 // Loop over events and extract the spline coefficients
+
898 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++EventCounter) {
+
899 // Structure of MasterSpline is std::vector<std::vector<TSpline3*>>
+
900 // A conventional iterator to count which parameter a given spline should be applied to
+
901 int ParamNumber = 0;
+
902 for (InnerIt = (*OuterIt).begin(); InnerIt != (*OuterIt).end(); ++InnerIt, ++ParamNumber) {
+
903 // Don't actually use this ever -- we give each spline the maximum number of points found in all splines
+
904 int nPoints_tmp = 0;
+
905 // Get a pointer to the current spline for this event
+
906 TF1_red* CurrSpline = (*InnerIt);
+
907 // If NULL we don't have this spline for the event, so move to next spline
+
908 if (CurrSpline == NULL) continue;
+
909
+
910 // If the number of knots are greater than 2 the spline is not a dummy and we should extract coefficients to load onto the GPU
+ +
912 (*InnerIt) = CurrSpline;
+
913 for (int j = 0; j < _max_knots; ++j) {
+ +
915 }
+
916 // Save the number of points for this spline
+ +
918
+
919 // Set the parameter number for this spline
+ +
921 // Set the index of the spline so we can tell apart from flat splines
+ +
923 // Increment the counter for the number of good splines we have
+ +
925 #ifndef Weight_On_SplineBySpline_Basis
+
926 ParamCounter++;
+
927 #endif
+
928 } // End the loop over the parameters in the MasterSpline
+
929 #ifndef Weight_On_SplineBySpline_Basis
+ + + +
933 ParamCounter = 0;
+
934 #endif
+
935 } // End the loop over the number of events
+
936 // Delete the temporary arrays
+
937 delete[] temp_coeffs;
+
938
+
939 // Now that we have looped through all events we can make the number of splines smaller
+
940 // Going from number of events * number of points per spline * number of NIWG params to spln_counter (=valid splines)
+
941 MACH3LOG_INFO("Number of splines = {}", NSplines_valid);
+
942
+
943 // Now declare the arrays for each point in the valid splines which the event actually has (i.e. include the splines that the event undergoes)
+
944 // Also make array with the number of points per spline (not per spline point!)
+
945 // float because GPU precision (could change to double, but will incur significant speed reduction on GPU unless you're very rich!)
+ +
947 cpu_coeff_many.resize(NSplines_valid*_nTF1Coeff_); // *5 because this array holds a,b,c,d,e parameters
+ +
949
+
950#ifdef MULTITHREAD
+
951#pragma omp parallel for
+
952#endif
+
953 for (unsigned int i = 0; i < NSplines_valid; i++) {
+ + +
956 for (unsigned int j = 0; j < _nTF1Coeff_; ++j) {
+ +
958 if (cpu_coeff_many[i*_nTF1Coeff_+j] == -999) {
+
959 std::cerr << "***** BAD COEFFICIENT OF POLY!!! ***** \n" << "On spline " << i << " = " << cpu_coeff_many[i*_nTF1Coeff_+j] << std::endl;
+
960 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
961 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
962 throw;
+
963 }
+
964 }
+
965
+
966 // Perform checks that all array entries have been changed from negative numbers and no number of points is greater than max knots, inputted by user
+
967 // Don't do this for the index array since some entries there should be -1 so we know what splines to include and not include in each event for loading onto the GPU
+
968 if (cpu_paramNo_arr[i] < 0) {
+
969 std::cerr << "***** NEGATIVE PARAMETER NUMBER!!! ***** \n" << "On spline " << i << " = " << cpu_paramNo_arr[i] << std::endl;
+
970 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
971 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
972 throw;
+
973 }
+
974
+
975 if (cpu_nPoints_arr[i] < 0) {
+
976 std::cerr << "***** NEGATIVE NUMBER OF POINTS!!! ***** \n" << "On spline " << i << " = " << cpu_nPoints_arr[i] << std::endl;
+
977 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
978 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
979 throw;
+
980 }
+
981 }
+
982 // Delete allocated memory
+
983 delete[] paramNo_big;
+
984 delete[] nPoints_big;
+
985 delete[] coeffs_big;
+
986
+
987 // Print some info; could probably make this to a separate function
+
988 MACH3LOG_INFO("--- INITIALISED TF1 ARRAYS ---");
+
989 std::cout << " " << NEvents << " events with " << NSplines_valid << " splines" << std::endl;
+
990
+
991 std::cout << " On average " << float(NSplines_valid)/float(NEvents) << " splines per event (" << NSplines_valid << "/" << NEvents << ")" << std::endl;
+
992 std::cout << " Size of coefficient {a,b,c,d,e} array = " << double(sizeof(float)*NSplines_valid*_nTF1Coeff_)/1.E6 << " MB" << std::endl;
+
993 std::cout << " Size of parameter # array = " << double(sizeof(short int)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
994 std::cout << " Size of polynomial type array = " << double(sizeof(short int)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
995
+
996 #ifdef Weight_On_SplineBySpline_Basis
+
997 // Make the array that holds all the returned weights from the GPU to pass to the CPU
+
998 cpu_weights_var = new float[NSplines_valid]();
+
999#else
+
1000 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
1001 #ifndef CUDA
+
1002 cpu_total_weights = new float[NEvents]();
+
1003 cpu_weights_var = new float[NSplines_valid]();
+
1004 #endif
+
1005#endif
+
1006
+ +
1008}
+
#define _nTF1Coeff_
+
void getTF1Coeff(TF1_red *&spl, int &nPoints, float *&coeffs)
CW: Gets the polynomial coefficients for TF1.
+
void PrepareForGPU_TF1()
+
void ScanMasterSpline(std::vector< std::vector< TSpline3_red * > > &MasterSpline, unsigned int &NEvents, int &MaxPoints, short int &nParams, int &nSplines, unsigned int &nKnots)
CW: Function to scan through the MasterSpline of TSpline3.
+ +
+
+
+ +

◆ PrepareForGPU() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void SMonolith::PrepareForGPU (std::vector< std::vector< TSpline3_red * > > & MasterSpline)
+
+inlineprivate
+
+ +

CW: Prepare the TSpline3_red objects for the GPU.

+ +

Definition at line 242 of file SplineMonolith.cpp.

+
242 {
+
243// *****************************************
+
244
+
245 // Scan for the max number of knots, the number of events (number of splines), and number of parameters
+
246 int nSplines = 0;
+ +
248 MACH3LOG_INFO("Found {} events", NEvents);
+
249 MACH3LOG_INFO("Found {} knots at max", _max_knots);
+
250 MACH3LOG_INFO("Found {} parameters", nParams);
+
251 MACH3LOG_INFO("Found {} maximum number of splines in an event", nSplines);
+
252 MACH3LOG_INFO("Found total {} knots in all splines", nKnots);
+
253
+
254 // Can pass the spline segments to the GPU instead of the values
+
255 // Make these here and only refill them for each loop, avoiding unnecessary new/delete on each reconfigure
+
256 //KS: Since we are going to copy it each step use fancy CUDA memory allocation
+
257#ifdef CUDA
+ + +
260#else
+
261 segments = new short int[nParams]();
+
262 vals = new float[nParams]();
+
263#endif
+
264
+
265 for (__int__ j = 0; j < nParams; j++)
+
266 {
+
267 segments[j] = 0;
+
268 vals[j] = -999;
+
269 }
+
270 // Total number of events in our Spline, read from TSpline3 entries
+
271 // Number of TSpline3 we have in total if each event had the maximal number of splines (nSplines written by ScanMasterSpline)
+ +
273 // Number of TSpline3 we have in total if each event has *EVERY* spline. Needed for some arrays
+ +
275
+
276 unsigned int event_size_max = _max_knots * nParams;
+
277 // Declare the {x}, {y,b,c,d} arrays for all possible splines which the event has
+
278 // We'll filter off the flat and "disabled" (e.g. CCQE event should not have MARES spline) ones in the next for loop, but need to declare these beasts here
+
279
+
280 // Declare the {y,b,c,d} for each knot
+
281 // float because GPU precision (could change to double, but will incur significant speed reduction on GPU unless you're very rich!)
+
282 cpu_coeff_many.resize(nKnots*_nCoeff_); // *4 because we store y,b,c,d parameters in this array
+
283 //KS: For x coeff we assume that for given dial (MAQE) spacing is identical, here we are sloppy and assume each dial has the same number of knots, not a big problem
+ +
285
+
286 // Set all the big arrays to -999 to keep us safe...
+
287#ifdef MULTITHREAD
+
288#pragma omp parallel for
+
289#endif
+
290 for (unsigned int j = 0; j < nKnots; j++) {
+
291 for (int k = 0; k < _nCoeff_; k++) {
+
292 cpu_coeff_many[j*_nCoeff_+k] = -999;
+
293 }
+
294 }
+
295
+
296 for (unsigned int j = 0; j < event_size_max; j++) {
+
297 cpu_coeff_x[j] = -999;
+
298 }
+
299 // Will hold what spline number a certain spline has
+
300 short int *paramNo_big = new short int[NSplines_total];
+
301 // Will hold map where given spline starts
+
302 unsigned int *knotNo_big = new unsigned int[NSplines_total];
+
303
+
304 // This holds the index of each spline
+ +
306 // This holds the total CPU weights that gets read in samplePDFND
+
307#ifdef Weight_On_SplineBySpline_Basis
+ +
309#else
+
310 //KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}
+ +
312 int ParamCounter = 0;
+
313 int ParamCounterGlobal = 0;
+
314 #ifdef MULTITHREAD
+
315 #pragma omp parallel for
+
316 #endif
+
317 for (unsigned int j = 0; j < 2*NSplines_total; j++) {
+
318 cpu_nParamPerEvent[j] = -1;
+
319 }
+
320#endif
+
321 // Set index array and number of points arrays to something silly, again to be safe...
+
322#ifdef MULTITHREAD
+
323#pragma omp parallel
+
324{
+
325//KS: Gain from nowait is minimal mostly done as I am learning how to better utilise OMP
+
326 #pragma omp for nowait
+
327#endif
+
328 for (unsigned int j = 0; j < NSplines_total_large; j++) {
+
329 index_cpu[j] = -1;
+
330 }
+
331
+
332 #ifdef MULTITHREAD
+
333 #pragma omp for
+
334 #endif
+
335 for (unsigned int j = 0; j < NSplines_total; j++) {
+
336 paramNo_big[j] = -1;
+
337 knotNo_big[j] = -1;
+
338 }
+
339#ifdef MULTITHREAD
+
340} //end parallel region
+
341#endif
+
342 // Temporary arrays to hold the coefficients for each spline
+
343 // We get one x, one y, one b,... for each point, so only need to be _max_knots big
+
344 //KS: Some params has less splines but this is all right main array will get proper number while this temp will be deleted
+
345 float *x_tmp = new float[_max_knots]();
+
346 float *many_tmp = new float[_max_knots*_nCoeff_]();
+
347 // Number of valid splines in total for our entire ensemble of events
+
348 NSplines_valid = 0;
+
349
+
350 std::vector<std::vector<TSpline3_red*> >::iterator OuterIt;
+
351 std::vector<TSpline3_red*>::iterator InnerIt;
+
352 // Count the number of events
+
353 unsigned int EventCounter = 0;
+
354 unsigned int KnotCounter = 0;
+
355 // Loop over events and extract the spline coefficients
+
356 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++EventCounter) {
+
357 // Structure of MasterSpline is std::vector<std::vector<TSpline3*>>
+
358 // A conventional iterator to count which parameter a given spline should be applied to
+
359 int ParamNumber = 0;
+
360 for (InnerIt = (*OuterIt).begin(); InnerIt != (*OuterIt).end(); ++InnerIt, ++ParamNumber) {
+
361 //KS: how much knots each spline has
+
362 int nPoints_tmp = 0;
+
363 // Get a pointer to the current spline for this event
+
364 TSpline3_red* CurrSpline = (*InnerIt);
+
365 // If NULL we don't have this spline for the event, so move to next spline
+
366 if (CurrSpline == NULL) continue;
+
367
+
368 // If the number of knots are greater than 2 the spline is not a dummy and we should extract coefficients to load onto the GPU
+ +
370
+
371 //KS: One knot means flat spline so ignore
+
372 if (nPoints_tmp == 1) continue;
+
373
+
374 (*InnerIt) = CurrSpline;
+
375 for (int j = 0; j < _max_knots; ++j) {
+ +
377 }
+
378 //KS: Contrary to X coeff we keep for other coeff only filled knots, there is no much gain for doing so for x coeff
+
379 for (int j = 0; j < nPoints_tmp; ++j) {
+
380 for (int k = 0; k < _nCoeff_; k++) {
+ +
382 }
+
383 }
+
384
+
385 // Set the parameter number for this spline
+ +
387 //KS: Fill map when each spline starts
+ +
389
+ +
391 // Set the index of the spline so we can tell apart from flat splines
+ +
393 #ifndef Weight_On_SplineBySpline_Basis
+
394 ParamCounter++;
+
395 #endif
+
396 // Increment the counter for the number of good splines we have
+ +
398 } // End the loop over the parameters in the MasterSpline
+
399 #ifndef Weight_On_SplineBySpline_Basis
+ + + +
403 ParamCounter = 0;
+
404 #endif
+
405 } // End the loop over the number of events
+
406 delete[] many_tmp;
+
407 delete[] x_tmp;
+
408
+
409 // Now that we have looped through all events we can make the number of splines smaller
+
410 // Going from number of events * number of points per spline * number of NIWG params to spln_counter (=valid splines)
+
411
+
412 MACH3LOG_INFO("Number of splines = {}", NSplines_valid);
+
413
+
414 // Make array with the number of points per spline (not per spline point!)
+ +
416 //KS: And array which tells where each spline stars in a big monolith array, sort of knot map
+ +
418
+
419#ifdef MULTITHREAD
+
420#pragma omp parallel for
+
421#endif
+
422 for (unsigned int i = 0; i < NSplines_valid; i++) {
+ + +
425 // Perform checks that all array entries have been changed from negative numbers and no number of points is greater than max knots, inputted by user
+
426 // Don't do this for the index array since some entries there should be -1 so we know what splines to include and not include in each event for loading onto the GPU
+
427 if (cpu_paramNo_arr[i] < 0) {
+
428 std::cerr << "***** NEGATIVE PARAMETER NUMBER!!! ***** \n" << "On spline " << i << " " << cpu_paramNo_arr[i] << std::endl;
+
429 std::cerr << "Indicates bad reading and stripping back of splines pre-GPU" << std::endl;
+
430 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
431 throw;
+
432 }
+
433 }
+
434 delete[] paramNo_big;
+
435 delete[] knotNo_big;
+
436
+
437 int BadXCounter = 0;
+
438 for (unsigned int j = 0; j < event_size_max; j++) {
+
439 if (cpu_coeff_x[j] == -999) BadXCounter++;
+
440 // Perform checks that all entries have been modified from initial values
+
441 if (cpu_coeff_x[j] == -999 && BadXCounter < 5) {
+
442 MACH3LOG_WARN("***** BAD X !! *****");
+
443 MACH3LOG_WARN("Indicates some parameter doesn't have a single spline");
+
444 MACH3LOG_WARN("j = {}");
+
445 //throw;
+
446 }
+
447 if(BadXCounter == 5) MACH3LOG_WARN("There is more unutilised knots although I will stop spamming");
+
448 }
+
449 MACH3LOG_WARN("Found in total {} BAD X", BadXCounter);
+
450#ifdef Weight_On_SplineBySpline_Basis
+
451 // Make the array that holds all the returned weights from the GPU to pass to the CPU
+
452 cpu_weights_var = new float[NSplines_valid]();
+
453#else
+
454 //KS: This is tricky as this variable use both by CPU and GPU, however if use CUDA we use cudaMallocHost
+
455 #ifndef CUDA
+
456 cpu_total_weights = new float[NEvents]();
+
457 cpu_weights_var = new float[NSplines_valid]();
+
458 #endif
+
459#endif
+
460 // Print some info; could probably make this to a separate function
+
461 MACH3LOG_INFO("--- INITIALISED (X), (YBCD) ARRAYS ---");
+
462 MACH3LOG_INFO("{} events with {} splines", NEvents, NSplines_valid);
+
463 MACH3LOG_INFO("On average {:.2f} splines per event ({}/{})", float(NSplines_valid)/float(NEvents), NSplines_valid, NEvents);
+
464 MACH3LOG_INFO("Size of x array = {:.4f} MB", double(sizeof(float)*event_size_max)/1.E6);
+
465 MACH3LOG_INFO("Size of coefficient (y,b,c,d) array = {:.2f} MB", double(sizeof(float)*nKnots*_nCoeff_)/1.E6);
+
466 MACH3LOG_INFO("Size of parameter # array = {:.2f} MB", double(sizeof(short int)*NSplines_valid)/1.E6);
+
467
+ +
469
+ +
471}
+
#define MACH3LOG_WARN
Definition MaCh3Logger.h:10
+
void PrepareSplineFile()
KS: Prepare spline file that can be used for fast loading.
+
void getSplineCoeff_SepMany(TSpline3_red *&spl, int &nPoints, float *&xArray, float *&manyArray)
CW: This loads up coefficients into two arrays: one x array and one yabcd array.
+ +
+
+
+ +

◆ PrepareForGPU_TF1()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::PrepareForGPU_TF1 ()
+
+inlineprivate
+
+ +

Definition at line 1013 of file SplineMonolith.cpp.

+
1013 {
+
1014// *****************************************
+
1015
+
1016#ifdef CUDA
+
1017 std::cout << " Total size = " << (double(sizeof(float)*NSplines_valid*_nTF1Coeff_)+double(2.0*sizeof(short int)*NSplines_valid))/1.E6 << " MB memory on CPU to move to GPU" << std::endl;
+
1018 std::cout << " GPU weight array (GPU->CPU every step) = " << double(sizeof(float)*NSplines_valid)/1.E6 << " MB" << std::endl;
+
1019 std::cout << " Parameter value array (CPU->GPU every step) = " << double(sizeof(float)*nParams)/1.E6 << " MB" << std::endl;
+
1020 // With the new set-up we have: 1 coefficient array of size coeff_array_size, all same size
+
1021 // 1 coefficient array of size coeff_array_size*4, holding y,b,c,d in order (y11,b11,c11,d11; y12,b12,c12,d12;...) where ynm is n = spline number, m = spline point. Should really make array so that order is (y11,b11,c11,d11; y21,b21,c21,d21;...) because it will optimise cache hits I think; try this if you have time
+
1022 // return gpu_weights
+
1023
+
1024 // The gpu_XY arrays don't actually need initialising, since they are only placeholders for what we'll move onto the GPU. As long as we cudaMalloc the size of the arrays correctly there shouldn't be any problems
+
1025 // Can probably make this a bit prettier but will do for now
+
1026 // Could be a lot smaller of a function...
+ + + + +
1031
+
1032 &gpu_weights,
+
1033
+ + + +
1037 NEvents,
+ +
1039#endif
+
1040 NSplines_valid); // What's the number of splines we have (also number of entries in gpu_nPoints_arr)
+
1041
+
1042 // Move number of splines and spline size to constant GPU memory; every thread does not need a copy...
+
1043 // The implementation lives in splines/gpuSplineUtils.cu
+
1044 // The GPU splines don't actually need declaring but is good for demonstration, kind of
+
1045 // fixed by passing const reference
+ + + + +
1050
+ + + + +
1055 NEvents,
+ + +
1058#endif
+
1059 nParams,
+ +
1061 _max_knots);
+
1062
+
1063 // Delete all the coefficient arrays from the CPU once they are on the GPU
+
1064 cpu_coeff_many.clear();
+
1065 cpu_coeff_many.shrink_to_fit();
+
1066 cpu_nPoints_arr.clear();
+
1067 cpu_nPoints_arr.shrink_to_fit();
+
1068 cpu_paramNo_arr.clear();
+
1069 cpu_paramNo_arr.shrink_to_fit();
+
1070 #ifndef Weight_On_SplineBySpline_Basis
+
1071 cpu_nParamPerEvent.clear();
+
1072 cpu_nParamPerEvent.shrink_to_fit();
+
1073 #endif
+
1074 MACH3LOG_INFO("Good TF1 GPU loading");
+
1075#endif
+
1076
+
1077 return;
+
1078}
+
+
+
+ +

◆ PrepareForGPU_TSpline3()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::PrepareForGPU_TSpline3 ()
+
+inlineprivate
+
+ +

Definition at line 727 of file SplineMonolith.cpp.

+
727 {
+
728// *****************************************
+
729 #ifdef CUDA
+
730 unsigned int event_size_max = _max_knots * nParams;
+
731 MACH3LOG_INFO("Total size = {:.2f} MB memory on CPU to move to GPU",
+
732 (double(sizeof(float) * nKnots * _nCoeff_) + double(sizeof(float) * event_size_max) / 1.E6 +
+
733 double(sizeof(short int) * NSplines_valid)) / 1.E6);
+
734 MACH3LOG_INFO("GPU weight array (GPU->CPU every step) = {:.2f} MB", double(sizeof(float) * NSplines_valid) / 1.E6);
+
735 #ifndef Weight_On_SplineBySpline_Basis
+
736 MACH3LOG_INFO("Since you are running Total event weight mode then GPU weight array (GPU->CPU every step) = {:.2f} MB",
+
737 double(sizeof(float) * NEvents) / 1.E6);
+
738 #endif
+
739 MACH3LOG_INFO("Parameter value array (CPU->GPU every step) = {:.4f} MB", double(sizeof(float) * nParams) / 1.E6);
+
740
+
741
+
742 //CW: With the new set-up we have: 1 coefficient array of size coeff_array_size, all same size
+
743 // 1 coefficient array of size coeff_array_size*4, holding y,b,c,d in order (y11,b11,c11,d11; y12,b12,c12,d12;...) where ynm is n = spline number, m = spline point. Should really make array so that order is (y11,b11,c11,d11; y21,b21,c21,d21;...) because it will optimise cache hits I think; try this if you have time
+
744 // return gpu_weights
+
745
+
746 // The gpu_XY arrays don't actually need initialising, since they are only placeholders for what we'll move onto the GPU. As long as we cudaMalloc the size of the arrays correctly there shouldn't be any problems
+
747 // Can probably make this a bit prettier but will do for now
+
748 // Could be a lot smaller of a function...
+ + + + +
753
+ + + + + +
759 NEvents,
+
760
+ +
762#endif
+
763 nKnots, // How many entries in coefficient array (*4 for the "many" array)
+
764 NSplines_valid, // What's the number of splines we have (also number of entries in gpu_nPoints_arr)
+
765 event_size_max //Knots times event number of unique splines
+
766);
+
767
+
768 // Move number of splines and spline size to constant GPU memory; every thread does not need a copy...
+
769 // The implementation lives in splines/gpuSplineUtils.cu
+
770 // The GPU splines don't actually need declaring but is good for demonstration, kind of
+
771 // fixed by passing const reference
+ + + + + +
777
+ + + + + +
783 NEvents,
+ + +
786#endif
+
787 nParams,
+ + +
790 nKnots);
+
791
+
792 // Delete all the coefficient arrays from the CPU once they are on the GPU
+
793 cpu_coeff_x.clear();
+
794 cpu_coeff_x.shrink_to_fit();
+
795 cpu_coeff_many.clear();
+
796 cpu_coeff_many.shrink_to_fit();
+
797 cpu_paramNo_arr.clear();
+
798 cpu_paramNo_arr.shrink_to_fit();
+
799 cpu_nKnots_arr.clear();
+
800 cpu_nKnots_arr.shrink_to_fit();
+
801 #ifndef Weight_On_SplineBySpline_Basis
+
802 cpu_nParamPerEvent.clear();
+
803 cpu_nParamPerEvent.shrink_to_fit();
+
804 #endif
+
805 MACH3LOG_INFO("Good GPU loading");
+
806#endif
+
807 return;
+
808}
+
+
+
+ +

◆ PrepareSplineFile()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::PrepareSplineFile ()
+
+inlineprivate
+
+ +

KS: Prepare spline file that can be used for fast loading.

+ +

Definition at line 615 of file SplineMonolith.cpp.

+
615 {
+
616// *****************************************
+
617
+
618 std::string FileName = "inputs/SplineFile.root";
+
619 if (std::getenv("MACH3") != NULL) {
+
620 FileName.insert(0, std::string(std::getenv("MACH3"))+"/");
+
621 }
+
622
+
623 TFile *SplineFile = new TFile(FileName.c_str(), "recreate");
+
624 TTree *Settings = new TTree("Settings", "Settings");
+
625 TTree *Monolith = new TTree("Monolith", "Monolith");
+
626 TTree *ParamInfo = new TTree("ParamInfo", "ParamInfo");
+
627 TTree *XKnots = new TTree("XKnots", "XKnots");
+
628 TTree *EventInfo = new TTree("EventInfo", "EventInfo");
+
629 TTree *FastSplineInfoTree = new TTree("FastSplineInfoTree", "FastSplineInfoTree");
+
630
+
631 unsigned int NEvents_temp = NEvents;
+
632 short int nParams_temp = nParams;
+ +
634 unsigned int nKnots_temp = nKnots;
+
635 unsigned int NSplines_valid_temp = NSplines_valid;
+
636
+
637 Settings->Branch("NEvents", &NEvents_temp, "NEvents/i");
+
638 Settings->Branch("nParams", &nParams_temp, "nParams/S");
+
639 Settings->Branch("_max_knots", &_max_knots_temp, "_max_knots/I");
+
640 Settings->Branch("nKnots", &nKnots_temp, "nKnots/i");
+
641 Settings->Branch("NSplines_valid", &NSplines_valid_temp, "NSplines_valid/i");
+
642
+
643 Settings->Fill();
+
644
+
645 SplineFile->cd();
+
646 Settings->Write();
+
647
+
648 float coeff = 0.;
+
649 Monolith->Branch("cpu_coeff_many", &coeff, "cpu_coeff_many/F");
+
650 for(unsigned int i = 0; i < nKnots*_nCoeff_; i++)
+
651 {
+ +
653 Monolith->Fill();
+
654 }
+
655 SplineFile->cd();
+
656 Monolith->Write();
+
657
+
658 short int paramNo_arr = 0;
+
659 unsigned int nKnots_arr = 0;
+
660 ParamInfo->Branch("cpu_paramNo_arr", &paramNo_arr, "cpu_paramNo_arr/S");
+
661 ParamInfo->Branch("cpu_nKnots_arr", &nKnots_arr, "cpu_nKnots_arr/i");
+
662 for(unsigned int i = 0; i < NSplines_valid; i++)
+
663 {
+ + +
666
+
667 ParamInfo->Fill();
+
668 }
+
669 SplineFile->cd();
+
670 ParamInfo->Write();
+
671
+
672 unsigned int event_size_max = _max_knots * nParams;
+
673
+
674 float coeff_x = 0.;
+
675 XKnots->Branch("cpu_coeff_x", &coeff_x, "cpu_coeff_x/F");
+
676 for(unsigned int i = 0; i < event_size_max; i++)
+
677 {
+ +
679 XKnots->Fill();
+
680 }
+
681 SplineFile->cd();
+
682 XKnots->Write();
+
683
+
684 unsigned int nParamPerEvent = 0;
+
685 EventInfo->Branch("cpu_nParamPerEvent", &nParamPerEvent, "cpu_nParamPerEvent/i");
+
686 for(unsigned int i = 0; i < 2*NSplines_total; i++)
+
687 {
+ +
689
+
690 EventInfo->Fill();
+
691 }
+
692 SplineFile->cd();
+
693 EventInfo->Write();
+
694
+
695 __int__ nPoints = 0;
+
696 float xtemp[20];
+
697 FastSplineInfoTree->Branch("nPts", &nPoints, "nPts/I");
+
698 FastSplineInfoTree->Branch("xPts", xtemp, "xPts[nPts]/F");
+
699
+
700 for (__int__ i = 0; i < nParams; ++i)
+
701 {
+
702 nPoints = SplineInfoArray[i].nPts;
+
703
+
704 for (__int__ k = 0; k < SplineInfoArray[i].nPts; ++k)
+
705 {
+ +
707 }
+
708 FastSplineInfoTree->Fill();
+
709 }
+
710
+
711 SplineFile->cd();
+
712 FastSplineInfoTree->Write();
+
713
+
714 delete Settings;
+
715 delete Monolith;
+
716 delete ParamInfo;
+
717 delete XKnots;
+
718 delete EventInfo;
+
719 delete FastSplineInfoTree;
+
720 SplineFile->Close();
+
721 delete SplineFile;
+
722
+
723}
+
+
+
+ +

◆ ReduceTF1()

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< std::vector< TF1_red * > > SMonolith::ReduceTF1 (std::vector< std::vector< TF1 * > > & MasterSpline)
+
+inlineprivate
+
+ +

CW: Reduced the TF1 to TF1_red.

+ +

Definition at line 1323 of file SplineMonolith.cpp.

+
1323 {
+
1324// *********************************
+
1325 std::vector<std::vector<TF1*> >::iterator OuterIt;
+
1326 std::vector<TF1*>::iterator InnerIt;
+
1327
+
1328 // The return vector
+
1329 std::vector<std::vector<TF1_red*> > ReducedVector;
+
1330 ReducedVector.reserve(MasterSpline.size());
+
1331
+
1332 // Loop over each parameter
+
1333 int OuterCounter = 0;
+
1334 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++OuterCounter) {
+
1335 // Make the temp vector
+
1336 std::vector<TF1_red*> TempVector;
+
1337 TempVector.reserve(OuterIt->size());
+
1338 int InnerCounter = 0;
+
1339 // Loop over each TSpline3 pointer
+
1340 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ++InnerCounter) {
+
1341 // Here's our delicious TSpline3 object
+
1342 TF1* spline = (*InnerIt);
+
1343 // Now make the reduced TSpline3 pointer (which deleted TSpline3)
+
1344 TF1_red* red = NULL;
+
1345 if (spline != NULL) {
+
1346 red = new TF1_red(spline);
+
1347 (*InnerIt) = spline;
+
1348 }
+
1349 // Push back onto new vector
+
1350 TempVector.push_back(red);
+
1351 } // End inner for loop
+
1352 ReducedVector.push_back(TempVector);
+
1353 } // End outer for loop
+
1354 // Now have the reduced vector
+
1355 return ReducedVector;
+
1356}
+ +
+
+
+ +

◆ ReduceTSpline3()

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< std::vector< TSpline3_red * > > SMonolith::ReduceTSpline3 (std::vector< std::vector< TSpline3 * > > & MasterSpline)
+
+inlineprivate
+
+ +

CW: Reduced the TSpline3 to TSpline3_red.

+ +

Definition at line 1286 of file SplineMonolith.cpp.

+
1286 {
+
1287// *********************************
+
1288 std::vector<std::vector<TSpline3*> >::iterator OuterIt;
+
1289 std::vector<TSpline3*>::iterator InnerIt;
+
1290
+
1291 // The return vector
+
1292 std::vector<std::vector<TSpline3_red*> > ReducedVector;
+
1293 ReducedVector.reserve(MasterSpline.size());
+
1294
+
1295 // Loop over each parameter
+
1296 int OuterCounter = 0;
+
1297 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt, ++OuterCounter) {
+
1298 // Make the temp vector
+
1299 std::vector<TSpline3_red*> TempVector;
+
1300 TempVector.reserve(OuterIt->size());
+
1301 int InnerCounter = 0;
+
1302 // Loop over each TSpline3 pointer
+
1303 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ++InnerCounter) {
+
1304 // Here's our delicious TSpline3 object
+
1305 TSpline3 *spline = (*InnerIt);
+
1306 // Now make the reduced TSpline3 pointer
+ +
1308 if (spline != NULL) {
+
1309 red = new TSpline3_red(spline);
+
1310 (*InnerIt) = spline;
+
1311 }
+
1312 // Push back onto new vector
+
1313 TempVector.push_back(red);
+
1314 } // End inner for loop
+
1315 ReducedVector.push_back(TempVector);
+
1316 } // End outer for loop
+
1317 // Now have the reduced vector
+
1318 return ReducedVector;
+
1319}
+
+
+
+ +

◆ retPointer()

+ +
+
+ + + + + +
+ + + + + + + + +
const float * SMonolith::retPointer (const int event)
+
+inline
+
+ +

KS: Get pointer to total weight to make fit faster wrooom!

+
Parameters
+ + +
eventName event number in used MC
+
+
+
Returns
Pointer to the total weight
+ +

Definition at line 75 of file SplineMonolith.h.

+
75{return &cpu_total_weights[event];}
+
+
+
+ +

◆ ScanMasterSpline() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SMonolith::ScanMasterSpline (std::vector< std::vector< TF1_red * > > & MasterSpline,
unsigned intNEvents,
intMaxPoints,
short intnParams 
)
+
+inlineprivate
+
+ +

CW: Function to scan through the MasterSpline of TF1.

+ +

Definition at line 1186 of file SplineMonolith.cpp.

+
1186 {
+
1187// *****************************************
+
1188
+
1189 // Need to extract: the total number of events
+
1190 // number of parameters
+
1191 // maximum number of knots
+
1192 MaxPoints = 0;
+
1193 nEvents = 0;
+
1194 nParams = 0;
+
1195
+
1196 std::vector<std::vector<TF1_red*> >::iterator OuterIt;
+
1197 std::vector<TF1_red*>::iterator InnerIt;
+
1198
+
1199 // Check the number of events
+
1200 nEvents = MasterSpline.size();
+
1201
+
1202 unsigned int EventCounter = 0;
+
1203 // Loop over each parameter
+
1204 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt) {
+
1205 // Check that each event has each spline saved
+
1206 if (nParams > 0) {
+
1207 int TempSize = (*OuterIt).size();
+
1208 if (TempSize != nParams) {
+
1209 MACH3LOG_ERROR("Found {} parameters for event {}", TempSize, EventCounter);
+
1210 MACH3LOG_ERROR("but was expecting {} since that's what I found for the previous event", nParams);
+
1211 MACH3LOG_ERROR("Somehow this event has a different number of spline parameters... Please study further!");
+
1212 throw;
+
1213 }
+
1214 }
+
1215 nParams = (*OuterIt).size();
+
1216
+
1217 // Loop over each pointer
+
1218 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt) {
+
1219 if ((*InnerIt) == NULL) continue;
+
1220 int nPoints = (*InnerIt)->GetSize();
+
1221 if (nPoints > MaxPoints) {
+
1222 MaxPoints = nPoints;
+
1223 }
+
1224 }
+
1225 EventCounter++;
+
1226 }
+
1227}
+
+
+
+ +

◆ ScanMasterSpline() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SMonolith::ScanMasterSpline (std::vector< std::vector< TSpline3_red * > > & MasterSpline,
unsigned intNEvents,
intMaxPoints,
short intnParams,
intnSplines,
unsigned intnKnots 
)
+
+inlineprivate
+
+ +

CW: Function to scan through the MasterSpline of TSpline3.

+ +

Definition at line 1083 of file SplineMonolith.cpp.

+
1083 {
+
1084// *****************************************
+
1085
+
1086 // Need to extract: the total number of events
+
1087 // number of parameters
+
1088 // maximum number of knots
+
1089 MaxPoints = 0;
+
1090 nEvents = 0;
+
1091 nParams = 0;
+
1092 nSplines = 0;
+
1093 nKnots = 0;
+
1094 std::vector<std::vector<TSpline3_red*> >::iterator OuterIt;
+
1095 std::vector<TSpline3_red*>::iterator InnerIt;
+
1096
+
1097 // Check the number of events
+
1098 nEvents = MasterSpline.size();
+
1099
+
1100 // Maximum number of splines one event can have (scan through and find this number)
+
1101 int nMaxSplines_PerEvent = 0;
+
1102
+
1103 //KS: We later check that each event has the same number of splines so this is fine
+
1104 nParams = MasterSpline[0].size();
+
1105 // Initialise
+ +
1107 for (__int__ i = 0; i < nParams; ++i) {
+
1108 SplineInfoArray[i].nPts = -999;
+ + + +
1112 }
+
1113
+
1114 unsigned int EventCounter = 0;
+
1115 // Loop over each parameter
+
1116 for (OuterIt = MasterSpline.begin(); OuterIt != MasterSpline.end(); ++OuterIt) {
+
1117 // Check that each event has each spline saved
+
1118 if (nParams > 0) {
+
1119 int TempSize = (*OuterIt).size();
+
1120 if (TempSize != nParams) {
+
1121 MACH3LOG_ERROR("Found {} parameters for event {}", TempSize, EventCounter);
+
1122 MACH3LOG_ERROR("but was expecting {} since that's what I found for the previous event", nParams);
+
1123 MACH3LOG_ERROR("Somehow this event has a different number of spline parameters... Please study further!");
+
1124 throw;
+
1125 }
+
1126 }
+
1127 nParams = (*OuterIt).size();
+
1128
+
1129 int nSplines_SingleEvent = 0;
+
1130 // Loop over each pointer
+
1131 int ij = 0;
+
1132 for (InnerIt = OuterIt->begin(); InnerIt != OuterIt->end(); ++InnerIt, ij++) {
+
1133 if ((*InnerIt) == NULL) continue;
+
1134 int nPoints = (*InnerIt)->GetNp();
+
1135 if (nPoints > MaxPoints) {
+
1136 MaxPoints = nPoints;
+
1137 }
+
1138 nKnots += nPoints;
+ +
1140
+
1141 // Fill the SplineInfoArray entries with information on each splinified parameter
+
1142 if (SplineInfoArray[ij].xPts == NULL)
+
1143 {
+
1144 // Fill the number of points
+
1145 SplineInfoArray[ij].nPts = (*InnerIt)->GetNp();
+
1146
+
1147 // Fill the x points
+ +
1149 for (__int__ k = 0; k < SplineInfoArray[ij].nPts; ++k)
+
1150 {
+
1151 __float__ xtemp = -999.99;
+
1152 __float__ ytemp = -999.99;
+
1153 (*InnerIt)->GetKnot(k, xtemp, ytemp);
+ +
1155 }
+
1156 }
+
1157 }
+
1158
+ +
1160 EventCounter++;
+
1161 }
+ +
1163
+
1164 int Counter = 0;
+
1165 //KS: Sanity check that everything was set correctly
+
1166 for (__int__ i = 0; i < nParams; ++i)
+
1167 {
+
1168 const __int__ nPoints = SplineInfoArray[i].nPts;
+ +
1170 if (nPoints == -999 || xArray == NULL) {
+
1171 Counter++;
+
1172 if(Counter < 5)
+
1173 {
+
1174 MACH3LOG_WARN("SplineInfoArray[{}] isn't set yet", i);
+
1175 }
+
1176 continue;
+
1177 //throw;
+
1178 }
+
1179 }
+
1180 MACH3LOG_WARN("In total SplineInfoArray for {} hasn't been initialised", Counter);
+
1181}
+
+
+
+ +

◆ setSplinePointers()

+ +
+
+ + + + + +
+ + + + + + + + +
void SMonolith::setSplinePointers (std::vector< const double * > spline_ParsPointers)
+
+inline
+
+ +

KS: Set pointers to spline params.

+
Parameters
+ + +
spline_ParsPointersVector of pointers to spline params
+
+
+ +

Definition at line 79 of file SplineMonolith.h.

+ +
+
+ +

◆ SynchroniseMemTransfer()

+ +
+
+ + + + + +
+ + + + + + + +
void SMonolith::SynchroniseMemTransfer ()
+
+inline
+
+ +

KS: After calculations are done on GPU we copy memory to CPU. This operation is asynchronous meaning while memory is being copied some operations are being carried. Memory must be copied before actual reweight. This function make sure all has been copied.

+ +

Definition at line 64 of file SplineMonolith.h.

+
65 {
+
66 #ifdef CUDA
+ +
68 #endif
+
69 return;
+
70 };
+
+
+
+

Member Data Documentation

+ +

◆ _max_knots

+ +
+
+ + + + + +
+ + + + +
int SMonolith::_max_knots
+
+private
+
+ +

Max knots for production.

+ +

Definition at line 147 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_coeff_many

+ +
+
+ + + + + +
+ + + + +
std::vector<float> SMonolith::cpu_coeff_many
+
+private
+
+ +

Definition at line 186 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_coeff_x

+ +
+
+ + + + + +
+ + + + +
std::vector<float> SMonolith::cpu_coeff_x
+
+private
+
+ +

Definition at line 183 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_nKnots_arr

+ +
+
+ + + + + +
+ + + + +
std::vector<unsigned int> SMonolith::cpu_nKnots_arr
+
+private
+
+ +

Definition at line 180 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_nParamPerEvent

+ +
+
+ + + + + +
+ + + + +
std::vector<unsigned int> SMonolith::cpu_nParamPerEvent
+
+private
+
+ +

KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}.

+ +

Definition at line 170 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_nPoints_arr

+ +
+
+ + + + + +
+ + + + +
std::vector<short int> SMonolith::cpu_nPoints_arr
+
+private
+
+ +

Definition at line 174 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_paramNo_arr

+ +
+
+ + + + + +
+ + + + +
std::vector<short int> SMonolith::cpu_paramNo_arr
+
+private
+
+ +

Definition at line 177 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_total_weights

+ +
+
+ + + + +
float* SMonolith::cpu_total_weights
+
+ +

KS: This holds the total CPU weights that gets read in samplePDFND.

+ +

Definition at line 87 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_weights

+ +
+
+ + + + +
float* SMonolith::cpu_weights
+
+ +

The returned gpu weights, read by the GPU.

+ +

Definition at line 85 of file SplineMonolith.h.

+ +
+
+ +

◆ cpu_weights_var

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::cpu_weights_var
+
+private
+
+ +

Definition at line 167 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_coeff_many

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::gpu_coeff_many
+
+private
+
+ +

Definition at line 187 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_coeff_x

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::gpu_coeff_x
+
+private
+
+ +

Definition at line 184 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_nKnots_arr

+ +
+
+ + + + + +
+ + + + +
unsigned int* SMonolith::gpu_nKnots_arr
+
+private
+
+ +

Definition at line 181 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_nParamPerEvent

+ +
+
+ + + + + +
+ + + + +
unsigned int* SMonolith::gpu_nParamPerEvent
+
+private
+
+ +

Definition at line 171 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_nPoints_arr

+ +
+
+ + + + + +
+ + + + +
short int* SMonolith::gpu_nPoints_arr
+
+private
+
+ +

Definition at line 175 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_paramNo_arr

+ +
+
+ + + + + +
+ + + + +
short int* SMonolith::gpu_paramNo_arr
+
+private
+
+ +

Definition at line 178 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_total_weights

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::gpu_total_weights
+
+private
+
+ +

Definition at line 165 of file SplineMonolith.h.

+ +
+
+ +

◆ gpu_weights

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::gpu_weights
+
+private
+
+ +

Definition at line 164 of file SplineMonolith.h.

+ +
+
+ +

◆ index_cpu

+ +
+
+ + + + + +
+ + + + +
int* SMonolith::index_cpu
+
+private
+
+ +

holds the index for good splines; don't do unsigned since starts with negative value!

+ +

Definition at line 149 of file SplineMonolith.h.

+ +
+
+ +

◆ NEvents

+ +
+
+ + + + + +
+ + + + +
unsigned int SMonolith::NEvents
+
+private
+
+ +

Number of events.

+ +

Definition at line 143 of file SplineMonolith.h.

+ +
+
+ +

◆ nKnots

+ +
+
+ + + + + +
+ + + + +
unsigned int SMonolith::nKnots
+
+private
+
+ +

Sum of all knots over all splines.

+ +

Definition at line 160 of file SplineMonolith.h.

+ +
+
+ +

◆ nParams

+ +
+
+ + + + + +
+ + + + +
short int SMonolith::nParams
+
+private
+
+ +

Number of NIWG parameters that have splines.

+ +

Definition at line 145 of file SplineMonolith.h.

+ +
+
+ +

◆ NSplines_total

+ +
+
+ + + + + +
+ + + + +
unsigned int SMonolith::NSplines_total
+
+private
+
+ +

Number of total splines we can maximally have, if each event had the maximum number of splines found across all events.

+ +

Definition at line 154 of file SplineMonolith.h.

+ +
+
+ +

◆ NSplines_total_large

+ +
+
+ + + + + +
+ + + + +
unsigned int SMonolith::NSplines_total_large
+
+private
+
+ +

Number of total splines if each event had every parameter's spline.

+ +

Definition at line 157 of file SplineMonolith.h.

+ +
+
+ +

◆ NSplines_valid

+ +
+
+ + + + + +
+ + + + +
unsigned int SMonolith::NSplines_valid
+
+private
+
+ +

Number of valid splines.

+ +

Definition at line 152 of file SplineMonolith.h.

+ +
+
+ +

◆ SaveSplineFile

+ +
+
+ + + + + +
+ + + + +
bool SMonolith::SaveSplineFile
+
+private
+
+ +

Definition at line 189 of file SplineMonolith.h.

+ +
+
+ +

◆ segments

+ +
+
+ + + + + +
+ + + + +
short int* SMonolith::segments
+
+private
+
+ +

Definition at line 137 of file SplineMonolith.h.

+ +
+
+ +

◆ SplineInfoArray

+ +
+
+ + + + + +
+ + + + +
FastSplineInfo* SMonolith::SplineInfoArray
+
+private
+
+

Array of FastSplineInfo structs: keeps information on each xsec spline for fast evaluation Method identical to TSpline3::Eval(double) but faster because less operations

+ +

Definition at line 135 of file SplineMonolith.h.

+ +
+
+ +

◆ splineParsPointer

+ +
+
+ + + + + +
+ + + + +
std::vector< const double* > SMonolith::splineParsPointer
+
+private
+
+ +

This holds pointer to parameter position which we later copy paste it to GPU.

+ +

Definition at line 140 of file SplineMonolith.h.

+ +
+
+ +

◆ vals

+ +
+
+ + + + + +
+ + + + +
float* SMonolith::vals
+
+private
+
+ +

Definition at line 138 of file SplineMonolith.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classTF1__red-members.html b/classTF1__red-members.html new file mode 100644 index 00000000..96d96e5f --- /dev/null +++ b/classTF1__red-members.html @@ -0,0 +1,101 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
TF1_red Member List
+
+
+ +

This is the complete list of members for TF1_red, including all inherited members.

+ + + + + + + + + + + + + + + + +
Eval(__float__ var)TF1_redinline
GetName()TF1_redinline
GetParameter(__int__ Parameter)TF1_redinline
GetSize()TF1_redinline
lengthTF1_redprivate
ParTF1_redprivate
ParamNoTF1_redprivate
Print()TF1_redinline
SetFunc(TF1 *&Func, int Param=-1)TF1_redinline
SetParameter(__int__ Parameter, __float__ Value)TF1_redinline
SetSize(__int__ nSpline)TF1_redinline
TF1_red()TF1_redinline
TF1_red(__int__ nSize, __float__ *Array, __int__ Parameter)TF1_redinline
TF1_red(TF1 *&Function, int Param=-1)TF1_redinline
~TF1_red()TF1_redinline
+ + + + diff --git a/classTF1__red.html b/classTF1__red.html new file mode 100644 index 00000000..8ddfe9f6 --- /dev/null +++ b/classTF1__red.html @@ -0,0 +1,670 @@ + + + + + + + +MaCh3: TF1_red Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
TF1_red Class Reference
+
+
+ +

#include <Structs.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TF1_red ()
 
 ~TF1_red ()
 
 TF1_red (__int__ nSize, __float__ *Array, __int__ Parameter)
 
 TF1_red (TF1 *&Function, int Param=-1)
 
std::string GetName ()
 
void SetFunc (TF1 *&Func, int Param=-1)
 
double Eval (__float__ var)
 
void SetParameter (__int__ Parameter, __float__ Value)
 
double GetParameter (__int__ Parameter)
 
void SetSize (__int__ nSpline)
 
int GetSize ()
 
void Print ()
 
+ + + + + + + +

+Private Attributes

__float__Par
 
__int__ length
 
__int__ ParamNo
 
+

Detailed Description

+
+

Definition at line 194 of file Structs.h.

+

Constructor & Destructor Documentation

+ +

◆ TF1_red() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
TF1_red::TF1_red ()
+
+inline
+
+ +

Definition at line 198 of file Structs.h.

+
198 {
+
199 length = 0;
+
200 Par = NULL;
+
201 }
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
__float__ * Par
Definition Structs.h:300
+
__int__ length
Definition Structs.h:301
+
+
+
+ +

◆ ~TF1_red()

+ +
+
+ + + + + +
+ + + + + + + +
TF1_red::~TF1_red ()
+
+inline
+
+ +

Definition at line 204 of file Structs.h.

+
204 {
+
205 if (Par != NULL) {
+
206 delete[] Par;
+
207 Par = NULL;
+
208 }
+
209 }
+
+
+
+ +

◆ TF1_red() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
TF1_red::TF1_red (__int__ nSize,
__float__Array,
__int__ Parameter 
)
+
+inline
+
+ +

Definition at line 212 of file Structs.h.

+
212 {
+
213 length = nSize;
+
214 for (int i = 0; i < length; ++i) {
+
215 Par[i] = Array[i];
+
216 }
+ +
218 }
+
__int__ ParamNo
Definition Structs.h:303
+
+
+
+ +

◆ TF1_red() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
TF1_red::TF1_red (TF1 *& Function,
int Param = -1 
)
+
+inline
+
+ +

Definition at line 221 of file Structs.h.

+
221 {
+
222 Par = NULL;
+ +
224 }
+
void SetFunc(TF1 *&Func, int Param=-1)
Definition Structs.h:234
+
+
+
+

Member Function Documentation

+ +

◆ Eval()

+ +
+
+ + + + + +
+ + + + + + + + +
double TF1_red::Eval (__float__ var)
+
+inline
+
+ +

Definition at line 247 of file Structs.h.

+
247 {
+
248 // If we have 5 parameters we're using a fifth order polynomial
+
249 if (length == 5) {
+
250 return 1+Par[0]*var+Par[1]*var*var+Par[2]*var*var*var+Par[3]*var*var*var*var+Par[4]*var*var*var*var*var;
+
251 // If we have 2 parameters we're using two linear equations
+
252 } else if (length == 2) {
+
253 return (var<=0)*(1+Par[0]*var)+(var>0)*(1+Par[1]*var);
+
254 } else {
+
255 std::cerr << "*** Error in reduced TF1 class!" << std::endl;
+
256 std::cerr << " Class only knows about 5th order polynomial and two superposed linear function" << std::endl;
+
257 std::cerr << " You have tried something else than this, which remains unimplemented" << std::endl;
+
258 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
259 throw;
+
260 }
+
261 }
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string TF1_red::GetName ()
+
+inline
+
+ +

Definition at line 227 of file Structs.h.

+
227 {
+
228 std::stringstream ss;
+
229 ss << ParamNo;
+
230 return ss.str();
+
231 }
+
+
+
+ +

◆ GetParameter()

+ +
+
+ + + + + +
+ + + + + + + + +
double TF1_red::GetParameter (__int__ Parameter)
+
+inline
+
+ +

Definition at line 269 of file Structs.h.

+
269 {
+
270 if (Parameter > length) {
+
271 std::cerr << "Error: you requested parameter number " << Parameter << " but length is " << length << " parameters" << std::endl;
+
272 throw;
+
273 return -999.999;
+
274 }
+
275 return Par[Parameter];
+
276 }
+
+
+
+ +

◆ GetSize()

+ +
+
+ + + + + +
+ + + + + + + +
int TF1_red::GetSize ()
+
+inline
+
+ +

Definition at line 284 of file Structs.h.

+
284{ return length; }
+
+
+
+ +

◆ Print()

+ +
+
+ + + + + +
+ + + + + + + +
void TF1_red::Print ()
+
+inline
+
+ +

Definition at line 285 of file Structs.h.

+
285 {
+
286 std::cout << "Printing TF1_red: " << std::endl;
+
287 std::cout << " ParamNo = " << ParamNo << std::endl;
+
288 std::cout << " Length = " << length << std::endl;
+
289 std::cout << " a = " << Par[0] << std::endl;
+
290 std::cout << " b = " << Par[1] << std::endl;
+
291 if (length == 5) {
+
292 std::cout << " c = " << Par[2] << std::endl;
+
293 std::cout << " d = " << Par[3] << std::endl;
+
294 std::cout << " e = " << Par[4] << std::endl;
+
295 }
+
296 }
+
+
+
+ +

◆ SetFunc()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void TF1_red::SetFunc (TF1 *& Func,
int Param = -1 
)
+
+inline
+
+ +

Definition at line 234 of file Structs.h.

+
234 {
+
235 length = Func->GetNpar();
+
236 if (Par != NULL) delete[] Par;
+
237 Par = new __float__[length];
+
238 for (int i = 0; i < length; ++i) {
+
239 Par[i] = Func->GetParameter(i);
+
240 }
+
241 ParamNo = Param;
+
242 delete Func;
+
243 Func = NULL;
+
244 }
+
#define __float__
Definition Structs.h:13
+
+
+
+ +

◆ SetParameter()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void TF1_red::SetParameter (__int__ Parameter,
__float__ Value 
)
+
+inline
+
+ +

Definition at line 264 of file Structs.h.

+
264 {
+ +
266 }
+
+
+
+ +

◆ SetSize()

+ +
+
+ + + + + +
+ + + + + + + + +
void TF1_red::SetSize (__int__ nSpline)
+
+inline
+
+ +

Definition at line 279 of file Structs.h.

+
279 {
+
280 length = nSpline;
+
281 Par = new __float__[length];
+
282 }
+
+
+
+

Member Data Documentation

+ +

◆ length

+ +
+
+ + + + + +
+ + + + +
__int__ TF1_red::length
+
+private
+
+ +

Definition at line 301 of file Structs.h.

+ +
+
+ +

◆ Par

+ +
+
+ + + + + +
+ + + + +
__float__* TF1_red::Par
+
+private
+
+ +

Definition at line 300 of file Structs.h.

+ +
+
+ +

◆ ParamNo

+ +
+
+ + + + + +
+ + + + +
__int__ TF1_red::ParamNo
+
+private
+
+ +

Definition at line 303 of file Structs.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classTSpline3__red-members.html b/classTSpline3__red-members.html new file mode 100644 index 00000000..1409d08b --- /dev/null +++ b/classTSpline3__red-members.html @@ -0,0 +1,102 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
TSpline3_red Member List
+
+
+ +

This is the complete list of members for TSpline3_red, including all inherited members.

+ + + + + + + + + + + + + + + + + +
Eval(double var)TSpline3_redinline
FindX(double x)TSpline3_redinline
GetCoeff(int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)TSpline3_redinline
GetKnot(int i, __float__ &xtmp, __float__ &ytmp)TSpline3_redinline
GetName()TSpline3_redinline
GetNp()TSpline3_redinline
nPointsTSpline3_redprotected
ParTSpline3_redprotected
ParamNoTSpline3_redprotected
SetFunc(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)TSpline3_redinline
TSpline3_red()TSpline3_redinline
TSpline3_red(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)TSpline3_redinline
TSpline3_red(__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)TSpline3_redinline
XPosTSpline3_redprotected
YRespTSpline3_redprotected
~TSpline3_red()TSpline3_redinline
+ + + + diff --git a/classTSpline3__red.html b/classTSpline3__red.html new file mode 100644 index 00000000..b92a8cca --- /dev/null +++ b/classTSpline3__red.html @@ -0,0 +1,1063 @@ + + + + + + + +MaCh3: TSpline3_red Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
TSpline3_red Class Reference
+
+
+ +

#include <Structs.h>

+
+Inheritance diagram for TSpline3_red:
+
+
+ + +Truncated_Spline + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TSpline3_red ()
 
 TSpline3_red (TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
 
 TSpline3_red (__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)
 
void SetFunc (TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
 
 ~TSpline3_red ()
 
int FindX (double x)
 
double Eval (double var)
 
int GetNp ()
 
void GetKnot (int i, __float__ &xtmp, __float__ &ytmp)
 
void GetCoeff (int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)
 
std::string GetName ()
 
+ + + + + + + + + + + +

+Protected Attributes

__int__ nPoints
 
__float__ ** Par
 
__float__XPos
 
__float__YResp
 
__int__ ParamNo
 
+

Detailed Description

+
+

Definition at line 347 of file Structs.h.

+

Constructor & Destructor Documentation

+ +

◆ TSpline3_red() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
TSpline3_red::TSpline3_red ()
+
+inline
+
+ +

Definition at line 351 of file Structs.h.

+
351 {
+
352 nPoints = 0;
+
353 Par = NULL;
+
354 XPos = NULL;
+
355 YResp = NULL;
+
356 }
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
__int__ nPoints
Definition Structs.h:741
+
__float__ ** Par
Definition Structs.h:743
+
__float__ * XPos
Definition Structs.h:745
+
__float__ * YResp
Definition Structs.h:747
+
+
+
+ +

◆ TSpline3_red() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
TSpline3_red::TSpline3_red (TSpline3 *& spline,
int Param = -1,
SplineInterpolation InterPolation = kTSpline3 
)
+
+inline
+
+ +

Definition at line 359 of file Structs.h.

+
359 {
+
360 Par = NULL;
+
361 XPos = NULL;
+
362 YResp = NULL;
+ +
364 }
+
void SetFunc(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
Definition Structs.h:394
+ +
+
+
+ +

◆ TSpline3_red() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TSpline3_red::TSpline3_red (__float__X,
__float__Y,
__int__ N,
__float__ ** P,
__int__ parNo 
)
+
+inline
+
+ +

Definition at line 367 of file Structs.h.

+
367 {
+
368 nPoints = N;
+
369 ParamNo = parNo;
+
370 // std::cout<<"nPoints: "<<nPoints<<std::endl;
+
371 // Save the parameters for each knot
+
372 Par = new __float__*[nPoints];
+
373 // Save the positions of the knots
+
374 XPos = new __float__[nPoints];
+
375 // Save the y response at each knot
+
376 YResp = new __float__[nPoints];
+
377 for(int j=0; j<N; ++j){
+
378 Par[j] = new __float__[3];
+
379 Par[j][0] = P[j][0];
+
380 Par[j][1] = P[j][1];
+
381 Par[j][2] = P[j][2];
+
382 XPos[j] = X[j];
+
383 YResp[j] = Y[j];
+
384
+
385 if((Par[j][0] == -999) | (Par[j][1] ==-999) | (Par[j][2] ==-999) | (XPos[j] ==-999) | (YResp[j] ==-999)){
+
386 std::cerr<<"******************* Bad parameter values when construction TSpline3_red *********************" <<std::endl;
+
387 std::cerr<<"passed val (i, x, y, b, c, d): "<<j<<", "<<X[j]<<", "<<Y[j]<<", "<<P[j][0]<<", "<<P[j][1]<<", "<<P[j][2]<<std::endl;
+
388 std::cerr<<"set values (i, x, y, b, c, d): "<<j<<", "<<XPos[j]<<", "<<YResp[j]<<", "<<Par[j][0]<<", "<<Par[j][1]<<", "<<Par[j][2]<<std::endl;
+
389 std::cerr<<"*********************************************************************************************" <<std::endl;
+
390 }
+
391 }
+
392 }
+
#define __float__
Definition Structs.h:13
+
__int__ ParamNo
Definition Structs.h:749
+
+
+
+ +

◆ ~TSpline3_red()

+ +
+
+ + + + + +
+ + + + + + + +
TSpline3_red::~TSpline3_red ()
+
+inline
+
+ +

Definition at line 654 of file Structs.h.

+
654 {
+
655 for (int i = 0; i < nPoints; ++i) {
+
656 if (Par[i] != NULL) {
+
657 delete[] Par[i];
+
658 }
+
659 }
+
660 delete[] Par;
+
661 delete[] XPos;
+
662 delete[] YResp;
+
663 Par = NULL;
+
664 XPos = YResp = NULL;
+
665 }
+
+
+
+

Member Function Documentation

+ +

◆ Eval()

+ +
+
+ + + + + +
+ + + + + + + + +
double TSpline3_red::Eval (double var)
+
+inline
+
+ +

Definition at line 703 of file Structs.h.

+
703 {
+
704 // Get the segment for this variation
+
705 int segment = FindX(var);
+
706 // The get the coefficients for this variation
+
707 __float__ x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
708 GetCoeff(segment, x, y, b, c, d);
+
709 double dx = var - x;
+
710 // Evaluate the third order polynomial
+
711 double weight = y+dx*(b+dx*(c+d*dx));
+
712 return weight;
+
713 }
+
int FindX(double x)
Definition Structs.h:669
+
void GetCoeff(int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)
Definition Structs.h:724
+
+
+
+ +

◆ FindX()

+ +
+
+ + + + + +
+ + + + + + + + +
int TSpline3_red::FindX (double x)
+
+inline
+
+ +

Definition at line 669 of file Structs.h.

+
669 {
+
670 // The segment we're interested in (klow in ROOT code)
+
671 int segment = 0;
+
672 int kHigh = nPoints-1;
+
673 // If the variation is below the lowest saved spline point
+
674 if (x <= XPos[0]){
+
675 segment = 0;
+
676 // If the variation is above the highest saved spline point
+
677 } else if (x >= XPos[nPoints-1]) {
+
678 // Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651
+
679 segment = kHigh;
+
680 // If the variation is between the maximum and minimum, perform a binary search
+
681 } else {
+
682 // The top point we've got
+
683 int kHalf = 0;
+
684 // While there is still a difference in the points (we haven't yet found the segment)
+
685 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
686 while (kHigh - segment > 1) {
+
687 // Increment the half-step
+
688 kHalf = (segment + kHigh)/2;
+
689 // If our variation is above the kHalf, set the segment to kHalf
+
690 if (x > XPos[kHalf]) {
+
691 segment = kHalf;
+
692 // Else move kHigh down
+
693 } else {
+
694 kHigh = kHalf;
+
695 }
+
696 } // End the while: we've now done our binary search
+
697 } // End the else: we've now found our point
+
698 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
699 return segment;
+
700 }
+
+
+
+ +

◆ GetCoeff()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void TSpline3_red::GetCoeff (int segment,
__float__x,
__float__y,
__float__b,
__float__c,
__float__d 
)
+
+inline
+
+ +

Definition at line 724 of file Structs.h.

+
724 {
+
725 b = Par[segment][0];
+
726 c = Par[segment][1];
+
727 d = Par[segment][2];
+
728 x = XPos[segment];
+
729 y = YResp[segment];
+
730 }
+
+
+
+ +

◆ GetKnot()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TSpline3_red::GetKnot (int i,
__float__xtmp,
__float__ytmp 
)
+
+inline
+
+ +

Definition at line 718 of file Structs.h.

+
718 {
+
719 xtmp = XPos[i];
+
720 ytmp = YResp[i];
+
721 }
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string TSpline3_red::GetName ()
+
+inline
+
+ +

Definition at line 733 of file Structs.h.

+
733 {
+
734 std::stringstream ss;
+
735 ss << ParamNo;
+
736 return ss.str();
+
737 }
+
+
+
+ +

◆ GetNp()

+ +
+
+ + + + + +
+ + + + + + + +
int TSpline3_red::GetNp ()
+
+inline
+
+ +

Definition at line 716 of file Structs.h.

+
716{ return nPoints; }
+
+
+
+ +

◆ SetFunc()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void TSpline3_red::SetFunc (TSpline3 *& spline,
int Param = -1,
SplineInterpolation InterPolation = kTSpline3 
)
+
+inline
+
+ +

Definition at line 394 of file Structs.h.

+
394 {
+
395 nPoints = spline->GetNp();
+
396 ParamNo = Param;
+
397 if (Par != NULL) {
+
398 for (int i = 0; i < nPoints; ++i) {
+
399 delete[] Par[i];
+
400 Par[i] = NULL;
+
401 }
+
402 delete[] Par;
+
403 Par = NULL;
+
404 }
+
405 if (XPos != NULL) delete[] XPos;
+
406 if (YResp != NULL) delete[] YResp;
+
407 // Save the parameters for each knot
+
408 Par = new __float__*[nPoints];
+
409 // Save the positions of the knots
+
410 XPos = new __float__[nPoints];
+
411 // Save the y response at each knot
+
412 YResp = new __float__[nPoints];
+
413
+
414 //KS: Default TSpline3 ROOT implementation
+ +
416 {
+
417 for (int i = 0; i < nPoints; ++i) {
+
418 // 3 is the size of the TSpline3 coefficients
+
419 Par[i] = new __float__[3];
+
420 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
421 spline->GetCoeff(i, x, y, b, c, d);
+
422 XPos[i] = x;
+
423 YResp[i] = y;
+
424 Par[i][0] = b;
+
425 Par[i][1] = c;
+
426 Par[i][2] = d;
+
427 }
+
428 }
+
429 //CW: Reduce to use linear spline interpolation for certain parameters
+
430 // Not the most elegant way: use TSpline3 object but set coefficients to zero and recalculate spline points; the smart way (but more human intensive) would be to save memory here and simply not store the zeros at all
+
431 // Get which parameters should be linear from the fit manager
+
432 // Convert the spline number to global xsec parameter
+
433 // Loop over the splines points
+
434 else if(InterPolation == kLinear)
+
435 {
+
436 for (int k = 0; k < nPoints; ++k) {
+
437 // 3 is the size of the TSpline3 coefficients
+
438 Par[k] = new __float__[3];
+
439 Double_t x1, y1, b1, c1, d1, x2, y2, b2, c2, d2 = 0;
+
440 spline->GetCoeff(k, x1, y1, b1, c1, d1);
+
441 spline->GetCoeff(k+1, x2, y2, b2, c2, d2);
+
442 double tempb = (y2-y1)/(x2-x1);
+
443
+
444 XPos[k] = x1;
+
445 YResp[k] = y1;
+
446 Par[k][0] = tempb;
+
447 Par[k][1] = 0;
+
448 Par[k][2] = 0;
+
449 }
+
450 }
+
451 //EM: Akima spline is similar to regular cubic spline but is allowed to be discontinuous in 2nd derivative and coefficients in any segment
+
452 // only depend on th 2 nearest points on either side
+
453 else if(InterPolation == kAkima)
+
454 {
+
455 // get the knot values for the spline
+
456 for (int i = 0; i < nPoints; ++i) {
+
457 // 3 is the size of the TSpline3 coefficients
+
458 Par[i] = new __float__[3];
+
459
+
460 double x = -999.99, y = -999.99;
+
461 spline->GetKnot(i, x, y);
+
462
+
463 XPos[i] = x;
+
464 YResp[i] = y;
+
465 }
+
466
+
467 __float__* mvals = new __float__[nPoints + 3];
+
468 __float__* svals = new __float__[nPoints + 1];
+
469
+
470 for (int i = -2; i <= nPoints; ++i) {
+
471 // if segment is first or last or 2nd to first or last, needs to be dealt with slightly differently;
+
472 // need to estimate the values for additinal points which would lie outside of the spline
+
473 if(i ==-2){
+
474 mvals[i+2] = 3.0 * (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]) - 2.0*(YResp[2] - YResp[1]) / (XPos[2] - XPos[1]);
+
475 }
+
476 else if(i==-1){
+
477 mvals[i+2] = 2.0 * (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]) - (YResp[2] - YResp[1]) / (XPos[2] - XPos[1]);
+
478 }
+
479 else if(i==nPoints){
+
480 mvals[i+2] = 3.0 * (YResp[nPoints-1] - YResp[nPoints-2]) / (XPos[nPoints-1] - XPos[nPoints-2]) - 2.0*(YResp[nPoints-2] - YResp[nPoints-3]) / (XPos[nPoints-2] - XPos[nPoints-3]);
+
481 }
+
482 else if(i == nPoints - 1){
+
483 mvals[i+2] = 2.0 * (YResp[nPoints-1] - YResp[nPoints-2]) / (XPos[nPoints-1] - XPos[nPoints-2]) - (YResp[nPoints-2] - YResp[nPoints-3]) / (XPos[nPoints-2] - XPos[nPoints-3]);
+
484 }
+
485 //standard internal segment
+
486 else{
+
487 mvals[i+2] = (YResp[i+1] - YResp[i])/ (XPos[i+1] - XPos[i]);
+
488 }
+
489 }
+
490
+
491 for(int i =2; i<=nPoints+2; i++){
+
492 if (abs(mvals[i+1] - mvals[i]) + abs(mvals[i-1] - mvals[i-2]) != 0.0){
+
493 svals[i-2] = (abs(mvals[i+1] - mvals[i]) * mvals[i-1] + abs(mvals[i-1] - mvals[i-2]) *mvals[i]) / (abs(mvals[i+1] - mvals[i]) + abs(mvals[i-1] - mvals[i-2]));
+
494 }
+
495 else{svals[i-2] = mvals[i];}
+
496 }
+
497
+
498 // calculate the coefficients for the spline
+
499 for(int i = 0; i <nPoints; i++){
+
500 __float__ b, c, d = -999.999;
+
501
+
502 b = svals[i];
+
503 c = (3.0* (YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i]) -2.0 *svals[i] - svals[i +1]) /(XPos[i+1] - XPos[i]);
+
504 d = ((svals[i + 1] +svals[i]) - 2.0*(YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i])) / ((XPos[i+1] - XPos[i]) * (XPos[i+1] - XPos[i]));
+
505
+
506 Par[i][0] = b;
+
507 Par[i][1] = c;
+
508 Par[i][2] = d;
+
509 }
+
510
+
511 // check the input spline for linear segments, if there are any then overwrite the calculated coefficients
+
512 // this will pretty much only ever be the case if they are set to be linear in samplePDFND i.e. the user wants it to be linear
+
513 for(int i = 0; i <nPoints-1; i++){
+
514 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
515 spline->GetCoeff(i, x, y, b, c, d);
+
516
+
517 if((c == 0.0 && d == 0.0)){
+
518 Par[i][0] = b;
+
519 Par[i][1] = 0.0;
+
520 Par[i][2] = 0.0;
+
521 }
+
522 }
+
523 delete[] mvals;
+
524 delete[] svals;
+
525 }
+
526 //EM: Monotone spline is similar to regular cubic spline but enforce the condition that the interpolated value at any point
+
527 // must be between its two nearest knots, DOES NOT make the entire spline monotonic, only the segments
+
528 else if(InterPolation == kMonotonic)
+
529 {
+
530 // values of the secants at each point (for calculating monotone spline)
+ +
532 // values of the tangens at each point (for calculating monotone spline)
+ +
534
+
535 // get the knot values for the spline
+
536 for (int i = 0; i < nPoints; ++i) {
+
537 // 3 is the size of the TSpline3 coefficients
+
538 Par[i] = new __float__[3];
+
539
+
540 double x = -999.99, y = -999.99;
+
541 spline->GetKnot(i, x, y);
+
542
+
543 XPos[i] = x;
+
544 YResp[i] = y;
+
545
+
546 Tangents[i] = 0.0;
+
547 }
+
548
+
549 // deal with the case of two points (just do linear interpolation between them)
+
550 if (nPoints ==2){
+
551 Par[0][0] = (YResp[1] - YResp[0]) / (XPos[1] - XPos[0]);
+
552 Par[0][1] = 0.0;
+
553 Par[0][2] = 0.0;
+
554 // extra "virtual" segment at end to make Par array shape fit with knot arrays shapes
+
555 Par[1][1] = 0.0;
+
556 Par[1][2] = 0.0;
+
557
+
558 return;
+
559 } // if nPoints !=2 do full monotonic spline treatment:
+
560
+
561 // first pass over knots to calculate the secants
+
562 for (int i = 0; i < nPoints-1; ++i) {
+
563 Secants[i] = (YResp[i+1] - YResp[i]) / (XPos[i+1] - XPos[i]);
+
564 //std::cout<<"secant "<<i<<": "<<Secants[i]<<std::endl;
+
565 }
+
566
+
567 Tangents[0] = Secants[0];
+ +
569
+ + +
572
+
573 // second pass over knots to calculate tangents
+
574 for (int i = 1; i < nPoints-1; ++i) {
+
575 if ((Secants[i-1] >= 0.0 && Secants[i] >= 0.0) | (Secants[i-1] < 0.0 && Secants[i] < 0.0)){ //check for same sign
+
576 Tangents[i] = (Secants[i-1] + Secants[i]) /2.0;
+
577 }
+
578 }
+
579
+
580 // third pass over knots to rescale tangents
+
581 for (int i = 0; i < nPoints-1; ++i) {
+
582 if (Secants[i] == 0.0){
+
583 Tangents[i] = 0.0;
+
584 Tangents[i+1] = 0.0;
+
585 }
+
586
+
587 else{
+
588 alpha = Tangents[i] / Secants[i];
+
589 beta = Tangents[i+1] / Secants[i];
+
590
+
591 if (alpha <0.0){
+
592 Tangents[i] = 0.0;
+
593 }
+
594 if (beta < 0.0){
+
595 Tangents[i+1] = 0.0;
+
596 }
+
597
+
598 if (alpha * alpha + beta * beta >9.0){
+
599 __float__ tau = 3.0 / sqrt(alpha * alpha + beta * beta);
+
600 Tangents[i] = tau * alpha * Secants[i];
+
601 Tangents[i+1] = tau * beta * Secants[i];
+
602 }
+
603 }
+
604 } // finished rescaling tangents
+
605 // fourth pass over knots to calculate the coefficients for the spline
+ +
607 for(int i = 0; i <nPoints-1; i++){
+
608 __float__ b, c, d = -999.999;
+
609 dx = XPos[i+1] - XPos[i];
+
610
+
611 b = Tangents[i] * dx;
+
612 c = 3.0* (YResp[i+1] - YResp[i]) -2.0 *dx * Tangents[i] - dx * Tangents[i +1];
+
613 d = 2.0* (YResp[i] - YResp[i+1]) + dx * (Tangents[i] + Tangents[i+1]);
+
614
+
615 Par[i][0] = b / dx;
+
616 Par[i][1] = c / (dx * dx);
+
617 Par[i][2] = d / (dx * dx * dx);
+
618
+
619 if((Par[i][0] == -999) | (Par[i][1] == -999) | (Par[i][2] ==-999) | (Par[i][0] == -999.999) | (Par[i][1] == -999.999) | (Par[i][2] ==-999.999)){
+
620 std::cout<<"bad spline parameters for segment "<<i<<", will cause problems with GPU: (b, c, d) = "<<Par[i][0]<<", "<<Par[i][1]<<", "<<Par[i][2]<<std::endl;
+
621 }
+
622 //std::cout<<"b : "<<b<<std::endl;
+
623 //std::cout<<"dx: "<<dx<<", x_0: "<<XPos[i]<<", x_1: "<<XPos[i+1]<<std::endl;
+
624 //std::cout<<" "<<" , y_0: "<<YResp[i]<<", y_1: "<<YResp[i+1]<<std::endl;
+
625 }
+
626
+
627 // include params for final "segment" outside of the spline so that par array fits with x and y arrays,
+
628 // should never actually get used but if not set then the GPU code gets very angry
+
629 Par[nPoints-1][0] = 0.0;
+
630 Par[nPoints-1][1] = 0.0;
+
631 Par[nPoints-1][2] = 0.0;
+
632
+
633 // check the input spline for linear segments, if there are any then overwrite the calculated coefficients
+
634 // this will pretty much only ever be the case if they are set to be linear in samplePDFND i.e. the user wants it to be linear
+
635 for(int i = 0; i <nPoints-1; i++){
+
636 double x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
637 spline->GetCoeff(i, x, y, b, c, d);
+
638
+
639 if((c == 0.0 && d == 0.0)){
+
640 Par[i][0] = b;
+
641 Par[i][1] = 0.0;
+
642 Par[i][2] = 0.0;
+
643 }
+
644 }
+
645 delete[] Secants;
+
646 delete[] Tangents;
+
647 }
+
648
+
649 delete spline;
+
650 spline = NULL;
+
651 }
+
@ kTSpline3
Definition Structs.h:308
+
@ kMonotonic
Definition Structs.h:310
+
@ kLinear
Definition Structs.h:309
+
@ kAkima
Definition Structs.h:311
+
+
+
+

Member Data Documentation

+ +

◆ nPoints

+ +
+
+ + + + + +
+ + + + +
__int__ TSpline3_red::nPoints
+
+protected
+
+ +

Definition at line 741 of file Structs.h.

+ +
+
+ +

◆ Par

+ +
+
+ + + + + +
+ + + + +
__float__** TSpline3_red::Par
+
+protected
+
+ +

Definition at line 743 of file Structs.h.

+ +
+
+ +

◆ ParamNo

+ +
+
+ + + + + +
+ + + + +
__int__ TSpline3_red::ParamNo
+
+protected
+
+ +

Definition at line 749 of file Structs.h.

+ +
+
+ +

◆ XPos

+ +
+
+ + + + + +
+ + + + +
__float__* TSpline3_red::XPos
+
+protected
+
+ +

Definition at line 745 of file Structs.h.

+ +
+
+ +

◆ YResp

+ +
+
+ + + + + +
+ + + + +
__float__* TSpline3_red::YResp
+
+protected
+
+ +

Definition at line 747 of file Structs.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classTSpline3__red.png b/classTSpline3__red.png new file mode 100644 index 0000000000000000000000000000000000000000..14e3668175353caecafcf3339da07568302c37d0 GIT binary patch literal 566 zcmV-60?GY}P)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0005O zNkl0&A&}%SO&&@5 z=^J>Zl5$5qPDWCj@gQle^J*u)^sxTy%}&qufp>VRO+n=N%0LBXQjoKf9j@}q%BiWg z_R6O8{PI${k~DV6D^qlEYVdZlN8E9^z-tg{P;05>m0G)BFMIKA>!peME-#SU`f1(f z^YZzXoHg~irfvKE=|`99lVml|8_0#XUPvT)tZ$5uB)v3wBCl3G|HF*Hwr^y2VKTRG0_-XP0z)zD00DhW00Pxe~0YFDF z#&|aO`eE|pPu4{{3jxEEbF31cKWN^T};Jy0(QVly=EvP(rCjA>A!3+ z@3?F{HTCCT(*cx8Ilg9vF0W)FExYE$G^%Ivspr@Cb;3@39fCa-`??{TZEZa-@Nz-q zbgC>g$Jyo8S~}0O`Ba{^UiRYKuNR&9^XIqnf{3;=`7D*UhFXg(7hJDC-``(TpJs(m z+%La;#sAG~FQ!lPM8w!=o`}eSCQn4fPY>{7jB%WP0Fnh=7F+lgK>z>%07*qoM6N<$ Ef(Ks`UH||9 literal 0 HcmV?d00001 diff --git a/classThrowParms-members.html b/classThrowParms-members.html new file mode 100644 index 00000000..36a13859 --- /dev/null +++ b/classThrowParms-members.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ThrowParms Member List
+
+
+ +

This is the complete list of members for ThrowParms, including all inherited members.

+ + + + + + + + + + + + + +
chel_decThrowParmsprivate
CheloskyDecomp(TMatrixD &chel_mat)ThrowParmsprivate
covarThrowParmsprivate
GetSize()ThrowParmsinline
nparsThrowParmsprivate
pvalsThrowParmsprivate
randThrowParmsprivate
SetSeed(int seed=0)ThrowParmsinline
StdNormRand(double *z)ThrowParmsprivate
ThrowParms(TVectorD &parms, TMatrixDSym &covm)ThrowParms
ThrowSet(std::vector< double > &parms)ThrowParms
~ThrowParms()ThrowParms
+ + + + diff --git a/classThrowParms.html b/classThrowParms.html new file mode 100644 index 00000000..f60a9e1a --- /dev/null +++ b/classThrowParms.html @@ -0,0 +1,533 @@ + + + + + + + +MaCh3: ThrowParms Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <ThrowParms.h>

+ + + + + + + + + + + + +

+Public Member Functions

 ThrowParms (TVectorD &parms, TMatrixDSym &covm)
 
 ~ThrowParms ()
 
void SetSeed (int seed=0)
 
int GetSize ()
 
void ThrowSet (std::vector< double > &parms)
 
+ + + + + +

+Private Member Functions

void CheloskyDecomp (TMatrixD &chel_mat)
 
void StdNormRand (double *z)
 
+ + + + + + + + + + + +

+Private Attributes

TVectorDpvals
 
TMatrixDSymcovar
 
TMatrixDchel_dec
 
int npars
 
TRandom3 rand
 
+

Detailed Description

+
+

Definition at line 17 of file ThrowParms.h.

+

Constructor & Destructor Documentation

+ +

◆ ThrowParms()

+ +
+
+ + + + + + + + + + + + + + + + + + +
ThrowParms::ThrowParms (TVectorDparms,
TMatrixDSymcovm 
)
+
+ +

Definition at line 7 of file ThrowParms.cpp.

+
7 {
+
8// ************************
+
9
+
10 // Copy over the central value parameters and covariance matrix
+
11 npars = parms.GetNrows();
+
12 pvals = new TVectorD(npars);
+
13 covar = new TMatrixDSym(npars);
+
14
+
15 // Copy the central values and covariance matrix
+
16 (*pvals) = parms;
+
17 (*covar) = covm;
+
18
+
19 // Check that the covariance matrix Cholesky decomposes
+ +
21 if (!chdcmp.Decompose()) {
+
22 std::cerr << "Cholesky decomposition failed for " << std::endl;
+
23 throw;
+
24 }
+
25
+
26 // Running
+
27 chel_dec = new TMatrixD(chdcmp.GetU());
+ +
29}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
TVectorD * pvals
Definition ThrowParms.h:19
+
TMatrixD * chel_dec
Definition ThrowParms.h:21
+
void CheloskyDecomp(TMatrixD &chel_mat)
+
TMatrixDSym * covar
Definition ThrowParms.h:20
+
+
+
+ +

◆ ~ThrowParms()

+ +
+
+ + + + + + + +
ThrowParms::~ThrowParms ()
+
+ +

Definition at line 31 of file ThrowParms.cpp.

+
32{
+
33 delete pvals;
+
34 delete covar;
+
35 delete chel_dec;
+
36}
+
+
+
+

Member Function Documentation

+ +

◆ CheloskyDecomp()

+ +
+
+ + + + + +
+ + + + + + + + +
void ThrowParms::CheloskyDecomp (TMatrixDchel_mat)
+
+private
+
+ +

Definition at line 80 of file ThrowParms.cpp.

+
80 {
+
81// ************************************
+
82
+
83 for (int i = 0; i < npars; i++) {
+
84 for (int j = 0; j < npars; j++) {
+
85 //if diagonal element
+
86 if (i == j){
+
87 chel_mat(i, i) = (*covar)(i, i);
+
88 for (int k = 0; k <= i-1; k++) {
+
89 chel_mat(i,i) = chel_mat(i,i)-pow(chel_mat(i,k),2);
+
90 }
+
91 chel_mat(i,i) = sqrt(chel_mat(i,i));
+
92 //if lower half
+
93 } else if (j < i) {
+
94 chel_mat(i, j) = (*covar)(i, j);
+
95 for(int k=0; k<=j-1; k++) {
+ +
97 }
+ +
99 } else chel_mat(i,j) = 0.;
+
100 } // end inner for loop
+
101 } // end outer for loop
+
102
+
103}
+
+
+
+ +

◆ GetSize()

+ +
+
+ + + + + +
+ + + + + + + +
int ThrowParms::GetSize ()
+
+inline
+
+ +

Definition at line 33 of file ThrowParms.h.

+
33{return npars;};
+
+
+
+ +

◆ SetSeed()

+ +
+
+ + + + + +
+ + + + + + + + +
void ThrowParms::SetSeed (int seed = 0)
+
+inline
+
+ +

Definition at line 32 of file ThrowParms.h.

+
32{rand.SetSeed(seed);};
+
TRandom3 rand
Definition ThrowParms.h:23
+
+
+
+ +

◆ StdNormRand()

+ +
+
+ + + + + +
+ + + + + + + + +
void ThrowParms::StdNormRand (doublez)
+
+private
+
+ +

Definition at line 62 of file ThrowParms.cpp.

+
62 {
+
63 double u = 2.*rand.Rndm()-1.;
+
64 double v = 2.*rand.Rndm()-1.;
+
65
+
66 double s = u*u+v*v;
+
67
+
68 while(s==0 || s>=1.){
+
69 u = 2.*rand.Rndm()-1.;
+
70 v = 2.*rand.Rndm()-1.;
+
71 s = u*u+v*v;
+
72 }
+
73
+
74 z[0] = u*sqrt(-2.*TMath::Log(s)/s);
+
75 z[1] = v*sqrt(-2.*TMath::Log(s)/s);
+
76}
+
+
+
+ +

◆ ThrowSet()

+ +
+
+ + + + + + + + +
void ThrowParms::ThrowSet (std::vector< double > & parms)
+
+ +

Definition at line 38 of file ThrowParms.cpp.

+
38 {
+
39 // Empty the vector of parameter values that has been passed
+
40 if(!parms.empty()) parms.clear();
+
41
+
42 parms.resize(npars);
+
43
+
44 int half_pars = npars/2+npars%2;
+ +
46
+
47 for(int j=0; j<half_pars; j++){
+
48 double z[2];
+ +
50 std_rand(j) = z[0];
+
51 if(npars%2==0 || j!=half_pars-1)
+
52 std_rand(j+half_pars) = z[1];
+
53 }
+
54
+
55 TVectorD prod = (*chel_dec)*std_rand;
+
56 for (int i = 0; i < npars; i++) {
+
57 parms[i] = prod(i) + (*pvals)(i);
+
58 }
+
59}
+
void StdNormRand(double *z)
+
+
+
+

Member Data Documentation

+ +

◆ chel_dec

+ +
+
+ + + + + +
+ + + + +
TMatrixD* ThrowParms::chel_dec
+
+private
+
+ +

Definition at line 21 of file ThrowParms.h.

+ +
+
+ +

◆ covar

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* ThrowParms::covar
+
+private
+
+ +

Definition at line 20 of file ThrowParms.h.

+ +
+
+ +

◆ npars

+ +
+
+ + + + + +
+ + + + +
int ThrowParms::npars
+
+private
+
+ +

Definition at line 22 of file ThrowParms.h.

+ +
+
+ +

◆ pvals

+ +
+
+ + + + + +
+ + + + +
TVectorD* ThrowParms::pvals
+
+private
+
+ +

Definition at line 19 of file ThrowParms.h.

+ +
+
+ +

◆ rand

+ +
+
+ + + + + +
+ + + + +
TRandom3 ThrowParms::rand
+
+private
+
+ +

Definition at line 23 of file ThrowParms.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classTruncated__Spline-members.html b/classTruncated__Spline-members.html new file mode 100644 index 00000000..6bd663ed --- /dev/null +++ b/classTruncated__Spline-members.html @@ -0,0 +1,105 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Truncated_Spline Member List
+
+
+ +

This is the complete list of members for Truncated_Spline, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
Eval(double var)Truncated_Splineinline
FindX(double x)Truncated_Splineinline
GetCoeff(int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)TSpline3_redinline
GetKnot(int i, __float__ &xtmp, __float__ &ytmp)TSpline3_redinline
GetName()TSpline3_redinline
GetNp()TSpline3_redinline
nPointsTSpline3_redprotected
ParTSpline3_redprotected
ParamNoTSpline3_redprotected
SetFunc(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)TSpline3_redinline
Truncated_Spline()Truncated_Splineinline
Truncated_Spline(TSpline3 *&spline, int Param=-1)Truncated_Splineinline
TSpline3_red()TSpline3_redinline
TSpline3_red(TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)TSpline3_redinline
TSpline3_red(__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)TSpline3_redinline
XPosTSpline3_redprotected
YRespTSpline3_redprotected
~Truncated_Spline()Truncated_Splineinline
~TSpline3_red()TSpline3_redinline
+ + + + diff --git a/classTruncated__Spline.html b/classTruncated__Spline.html new file mode 100644 index 00000000..cdbae199 --- /dev/null +++ b/classTruncated__Spline.html @@ -0,0 +1,381 @@ + + + + + + + +MaCh3: Truncated_Spline Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
Truncated_Spline Class Reference
+
+
+ +

#include <Structs.h>

+
+Inheritance diagram for Truncated_Spline:
+
+
+ + +TSpline3_red + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Truncated_Spline ()
 
 Truncated_Spline (TSpline3 *&spline, int Param=-1)
 
 ~Truncated_Spline ()
 
int FindX (double x)
 
double Eval (double var)
 
- Public Member Functions inherited from TSpline3_red
 TSpline3_red ()
 
 TSpline3_red (TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
 
 TSpline3_red (__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)
 
void SetFunc (TSpline3 *&spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)
 
 ~TSpline3_red ()
 
int FindX (double x)
 
double Eval (double var)
 
int GetNp ()
 
void GetKnot (int i, __float__ &xtmp, __float__ &ytmp)
 
void GetCoeff (int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)
 
std::string GetName ()
 
+ + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from TSpline3_red
__int__ nPoints
 
__float__ ** Par
 
__float__XPos
 
__float__YResp
 
__int__ ParamNo
 
+

Detailed Description

+
+

Definition at line 754 of file Structs.h.

+

Constructor & Destructor Documentation

+ +

◆ Truncated_Spline() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
Truncated_Spline::Truncated_Spline ()
+
+inline
+
+ +

Definition at line 759 of file Structs.h.

+
760 :TSpline3_red()
+
761 {
+
762 }
+ +
+
+
+ +

◆ Truncated_Spline() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Truncated_Spline::Truncated_Spline (TSpline3 *& spline,
int Param = -1 
)
+
+inline
+
+ +

Definition at line 765 of file Structs.h.

+
+
767 {
+
768 }
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+
+
+ +

◆ ~Truncated_Spline()

+ +
+
+ + + + + +
+ + + + + + + +
Truncated_Spline::~Truncated_Spline ()
+
+inline
+
+ +

Definition at line 771 of file Structs.h.

+
772 {
+
773 }
+
+
+
+

Member Function Documentation

+ +

◆ Eval()

+ +
+
+ + + + + +
+ + + + + + + + +
double Truncated_Spline::Eval (double var)
+
+inline
+
+ +

Definition at line 810 of file Structs.h.

+
810 {
+
811 // Get the segment for this variation
+
812 int segment = FindX(var);
+
813 // The get the coefficients for this variation
+
814 __float__ x = -999.99, y = -999.99, b = -999.99, c = -999.99, d = -999.99;
+
815
+
816 if(segment >=0){
+
817 GetCoeff(segment, x, y, b, c, d);
+
818 }
+
819
+
820 // if var is outside of the defined range, set the coefficients to 0 so that Eval just returns the value at the end point of the spline
+
821 else if(segment == -1){
+
822 GetKnot(0, x, y);
+
823 b = 0.0;
+
824 c = 0.0;
+
825 d = 0.0;
+
826 }
+
827 else if(segment == -2){
+
828 GetKnot(nPoints-1, x, y);
+
829 b = 0.0;
+
830 c = 0.0;
+
831 d = 0.0;
+
832 }
+
833
+
834 double dx = var - x;
+
835 // Evaluate the third order polynomial
+
836 double weight = y+dx*(b+dx*(c+d*dx));
+
837 return weight;
+
838 }
+
#define __float__
Definition Structs.h:13
+
__int__ nPoints
Definition Structs.h:741
+
void GetCoeff(int segment, __float__ &x, __float__ &y, __float__ &b, __float__ &c, __float__ &d)
Definition Structs.h:724
+
void GetKnot(int i, __float__ &xtmp, __float__ &ytmp)
Definition Structs.h:718
+
int FindX(double x)
Definition Structs.h:777
+
+
+
+ +

◆ FindX()

+ +
+
+ + + + + +
+ + + + + + + + +
int Truncated_Spline::FindX (double x)
+
+inline
+
+ +

Definition at line 777 of file Structs.h.

+
777 {
+
778 // The segment we're interested in (klow in ROOT code)
+
779 int segment = 0;
+
780 int kHigh = nPoints-1;
+
781 // If the variation is below the lowest saved spline point
+
782 if (x <= XPos[0]){
+
783 segment = -1;
+
784 // If the variation is above the highest saved spline point
+
785 } else if (x >= XPos[nPoints-1]) {
+
786 segment = -2;
+
787 // If the variation is between the maximum and minimum, perform a binary search
+
788 } else {
+
789 // The top point we've got
+
790 int kHalf = 0;
+
791 // While there is still a difference in the points (we haven't yet found the segment)
+
792 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
793 while (kHigh - segment > 1) {
+
794 // Increment the half-step
+
795 kHalf = (segment + kHigh)/2;
+
796 // If our variation is above the kHalf, set the segment to kHalf
+
797 if (x > XPos[kHalf]) {
+
798 segment = kHalf;
+
799 // Else move kHigh down
+
800 } else {
+
801 kHigh = kHalf;
+
802 }
+
803 } // End the while: we've now done our binary search
+
804 } // End the else: we've now found our point
+
805 if (segment >= nPoints-1 && nPoints > 1) segment = nPoints-2;
+
806 return segment;
+
807 }
+
__float__ * XPos
Definition Structs.h:745
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classTruncated__Spline.png b/classTruncated__Spline.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad8534cea24dcebc9d94af1a8194eee9c3b16ad GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^`9K`N!3-o7%x`M}Dd_;85ZC|z{{xvX-h3_XKeXJ! zK(jz%`k5C84jcfA2T!`Z0w~8>666=m0OW&#In(Sb3=E9>JzX3_Dj46+ec1O{fv2V2 zan-ZG^M6!1H2Zp(y$sxCwehv40FS(xU!C$X33aZCD$6rJdKAs6W7dDN|Bhk*&~TZ_5a^2j{fSo>DEbU-$~m|TDI3t@c0z7-_UN7%+jOECkuZu=^vAL&dG4^A~S

k^mz4QJtFxNzHulI}10md(br>mdKI;Vst07g3u?f?J) literal 0 HcmV?d00001 diff --git a/classXSecStruct-members.html b/classXSecStruct-members.html new file mode 100644 index 00000000..c53f984e --- /dev/null +++ b/classXSecStruct-members.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +

+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
XSecStruct< T > Member List
+
+
+ +

This is the complete list of members for XSecStruct< T >, including all inherited members.

+ + + + + + + + + + + + +
Eval(__int__ nSpline, __float__ variation)XSecStruct< T >inline
FuncXSecStruct< T >private
GetFunc(__int__ nSpline)XSecStruct< T >inline
GetNumberOfParams()XSecStruct< T >inline
nParamsXSecStruct< T >private
Print()XSecStruct< T >inline
SetFunc(__int__ nSpline, T Function)XSecStruct< T >inline
SetSplineNumber(__int__ NumberOfSplines)XSecStruct< T >inline
XSecStruct(__int__ NumberOfSplines)XSecStruct< T >inline
XSecStruct()XSecStruct< T >inline
~XSecStruct()XSecStruct< T >inline
+ + + + diff --git a/classXSecStruct.html b/classXSecStruct.html new file mode 100644 index 00000000..9380fc96 --- /dev/null +++ b/classXSecStruct.html @@ -0,0 +1,507 @@ + + + + + + + +MaCh3: XSecStruct< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
XSecStruct< T > Class Template Reference
+
+
+ +

#include <Structs.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 XSecStruct (__int__ NumberOfSplines)
 
 XSecStruct ()
 
 ~XSecStruct ()
 
__int__ GetNumberOfParams ()
 
void Print ()
 
void SetSplineNumber (__int__ NumberOfSplines)
 
T GetFunc (__int__ nSpline)
 
void SetFunc (__int__ nSpline, T Function)
 
double Eval (__int__ nSpline, __float__ variation)
 
+ + + + + +

+Private Attributes

__int__ nParams
 
TFunc
 
+

Detailed Description

+
template<class T>
+class XSecStruct< T >
+

Definition at line 127 of file Structs.h.

+

Constructor & Destructor Documentation

+ +

◆ XSecStruct() [1/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
XSecStruct< T >::XSecStruct (__int__ NumberOfSplines)
+
+inline
+
+ +

Definition at line 131 of file Structs.h.

+
131 {
+ +
133 Func.reserve(nParams);
+
134 for (int i = 0; i < nParams; ++i) {
+
135 Func[i] = NULL;
+
136 }
+
137 }
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
__int__ nParams
Definition Structs.h:185
+ +
+
+
+ +

◆ XSecStruct() [2/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
XSecStruct< T >::XSecStruct ()
+
+inline
+
+ +

Definition at line 140 of file Structs.h.

+
140 {
+
141 nParams = 0;
+
142 Func = NULL;
+
143 };
+
+
+
+ +

◆ ~XSecStruct()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
XSecStruct< T >::~XSecStruct ()
+
+inline
+
+ +

Definition at line 146 of file Structs.h.

+
146 {
+
147 for (int i = 0; i < nParams; ++i) {
+
148 if (Func[i]) delete Func[i];
+
149 }
+
150 }
+
+
+
+

Member Function Documentation

+ +

◆ Eval()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double XSecStruct< T >::Eval (__int__ nSpline,
__float__ variation 
)
+
+inline
+
+ +

Definition at line 175 of file Structs.h.

+
175 {
+
176 // Some will be NULL, check this
+
177 if (Func[nSpline]) {
+
178 return Func[nSpline]->Eval(variation);
+
179 } else {
+
180 return 1.0;
+
181 }
+
182 }
+
+
+
+ +

◆ GetFunc()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T XSecStruct< T >::GetFunc (__int__ nSpline)
+
+inline
+
+ +

Definition at line 171 of file Structs.h.

+
171{ return Func[nSpline]; }
+
+
+
+ +

◆ GetNumberOfParams()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
__int__ XSecStruct< T >::GetNumberOfParams ()
+
+inline
+
+ +

Definition at line 153 of file Structs.h.

+
153{ return nParams; }
+
+
+
+ +

◆ Print()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
void XSecStruct< T >::Print ()
+
+inline
+
+ +

Definition at line 156 of file Structs.h.

+
156 {
+
157 std::cout << " Splines: " << std::endl;
+
158 for (int i = 0; i < nParams; ++i) {
+
159 if (!Func[i]) continue;
+
160 std::cout << " " << std::left << std::setw(25) << Func[i]->GetName() << std::endl;
+
161 }
+
162 }
+
+
+
+ +

◆ SetFunc()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void XSecStruct< T >::SetFunc (__int__ nSpline,
T Function 
)
+
+inline
+
+ +

Definition at line 173 of file Structs.h.

+
173{ Func[nSpline] = Function; }
+
+
+
+ +

◆ SetSplineNumber()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void XSecStruct< T >::SetSplineNumber (__int__ NumberOfSplines)
+
+inline
+
+ +

Definition at line 165 of file Structs.h.

+
165 {
+ +
167 Func = new T[nParams];
+
168 }
+
+
+
+

Member Data Documentation

+ +

◆ Func

+ +
+
+
+template<class T >
+ + + + + +
+ + + + +
T* XSecStruct< T >::Func
+
+private
+
+ +

Definition at line 187 of file Structs.h.

+ +
+
+ +

◆ nParams

+ +
+
+
+template<class T >
+ + + + + +
+ + + + +
__int__ XSecStruct< T >::nParams
+
+private
+
+ +

Definition at line 185 of file Structs.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classXsecNorms4-members.html b/classXsecNorms4-members.html new file mode 100644 index 00000000..f84317da --- /dev/null +++ b/classXsecNorms4-members.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
XsecNorms4 Member List
+
+ + + + + diff --git a/classXsecNorms4.html b/classXsecNorms4.html new file mode 100644 index 00000000..732c609e --- /dev/null +++ b/classXsecNorms4.html @@ -0,0 +1,297 @@ + + + + + + + +MaCh3: XsecNorms4 Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
XsecNorms4 Class Reference
+
+
+ +

#include <Structs.h>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

TAxisebins
 
std::string name
 
std::vector< intmodes
 
std::vector< inthorncurrents
 
std::vector< intpdgs
 
std::vector< intpreoscpdgs
 
std::vector< inttargets
 
bool hasKinBounds
 
std::vector< std::vector< double > > Selection
 
std::vector< std::string > KinematicVarStr
 
int index
 
+

Detailed Description

+
+

Definition at line 70 of file Structs.h.

+

Member Data Documentation

+ +

◆ ebins

+ +
+
+ + + + +
TAxis* XsecNorms4::ebins
+
+ +

Definition at line 74 of file Structs.h.

+ +
+
+ +

◆ hasKinBounds

+ +
+
+ + + + +
bool XsecNorms4::hasKinBounds
+
+ +

Definition at line 88 of file Structs.h.

+ +
+
+ +

◆ horncurrents

+ +
+
+ + + + +
std::vector<int> XsecNorms4::horncurrents
+
+ +

Definition at line 80 of file Structs.h.

+ +
+
+ +

◆ index

+ +
+
+ + + + +
int XsecNorms4::index
+
+ +

Definition at line 100 of file Structs.h.

+ +
+
+ +

◆ KinematicVarStr

+ +
+
+ + + + +
std::vector< std::string > XsecNorms4::KinematicVarStr
+
+ +

Definition at line 97 of file Structs.h.

+ +
+
+ +

◆ modes

+ +
+
+ + + + +
std::vector<int> XsecNorms4::modes
+
+ +

Definition at line 78 of file Structs.h.

+ +
+
+ +

◆ name

+ +
+
+ + + + +
std::string XsecNorms4::name
+
+ +

Definition at line 76 of file Structs.h.

+ +
+
+ +

◆ pdgs

+ +
+
+ + + + +
std::vector<int> XsecNorms4::pdgs
+
+ +

Definition at line 82 of file Structs.h.

+ +
+
+ +

◆ preoscpdgs

+ +
+
+ + + + +
std::vector<int> XsecNorms4::preoscpdgs
+
+ +

Definition at line 84 of file Structs.h.

+ +
+
+ +

◆ Selection

+ +
+
+ + + + +
std::vector< std::vector<double> > XsecNorms4::Selection
+
+ +

Definition at line 91 of file Structs.h.

+ +
+
+ +

◆ targets

+ +
+
+ + + + +
std::vector<int> XsecNorms4::targets
+
+ +

Definition at line 86 of file Structs.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classcovarianceBase-members.html b/classcovarianceBase-members.html new file mode 100644 index 00000000..e4a91a58 --- /dev/null +++ b/classcovarianceBase-members.html @@ -0,0 +1,238 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
covarianceBase Member List
+
+
+ +

This is the complete list of members for covarianceBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_fCurrValcovarianceBaseprotected
_fErrorcovarianceBaseprotected
_fFancyNamescovarianceBaseprotected
_fFlatPriorcovarianceBaseprotected
_fGeneratedcovarianceBaseprotected
_fGlobalStepScalecovarianceBaseprotected
_fIndivStepScalecovarianceBaseprotected
_fLowBoundcovarianceBaseprotected
_fNamescovarianceBaseprotected
_fNumParcovarianceBaseprotected
_fPreFitValuecovarianceBaseprotected
_fPropValcovarianceBaseprotected
_fUpBoundcovarianceBaseprotected
_fYAMLDoccovarianceBaseprotected
acceptStep()covarianceBase
adaptiveCovariancecovarianceBaseprotected
CalcLikelihood()covarianceBase
calcReWeight(const int bin)covarianceBaseinline
CheckBounds()covarianceBasevirtual
ConstructPCA()covarianceBase
corr_throwcovarianceBaseprotected
CorrelateSteps()covarianceBaseprotected
covarianceBase(std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)covarianceBase
covarianceBase(const char *name, const char *file)covarianceBase
covarianceBase(const char *name, const char *file, int seed)covarianceBase
covarianceBase(const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)covarianceBase
covMatrixcovarianceBaseprotected
eigen_thresholdcovarianceBaseprotected
eigen_valuescovarianceBaseprotected
eigen_values_mastercovarianceBaseprotected
eigen_vectorscovarianceBaseprotected
enableAdaptiveMCMC(bool enable=true)covarianceBaseinline
FirstPCAdparcovarianceBaseprotected
fParCurr_PCAcovarianceBaseprotected
fParProp_PCAcovarianceBaseprotected
fParSigma_PCAcovarianceBaseprotected
GetCorrelationMatrix()covarianceBase
getCovMatrix()covarianceBaseinline
getDiagonalError(const int i)covarianceBaseinline
getEigenValues()covarianceBaseinline
getEigenValuesMaster()covarianceBaseinline
getEigenVectors()covarianceBaseinline
getEvalLikelihood(const int i)covarianceBaseinline
GetGenerated(const int i)covarianceBaseinline
getGeneratedValues()covarianceBaseinline
getInputFile() constcovarianceBaseinline
getInvCovMatrix()covarianceBaseinline
GetLikelihood()covarianceBasevirtual
GetLowerBound(const int i)covarianceBaseinline
getName()covarianceBaseinline
getNominal(const int i)covarianceBaseinlinevirtual
getNominalArray()covarianceBasevirtual
getNpars()covarianceBaseinline
GetNumParams()covarianceBaseinline
getParameterMeans()covarianceBaseinline
getParCurr(const int i)covarianceBaseinline
getParCurr_PCA(const int i)covarianceBaseinline
GetParFancyName(const int i)covarianceBaseinline
GetParFancyName(const int i) constcovarianceBaseinline
getParInit(const int i)covarianceBaseinline
GetParName(const int i)covarianceBaseinline
GetParName(const int i) constcovarianceBaseinline
getParProp(const int i)covarianceBaseinline
getParProp_PCA(const int i)covarianceBaseinline
getPreFitValues()covarianceBaseinline
getProposed() constcovarianceBase
getSize()covarianceBaseinline
getThrowMatrix()covarianceBaseinline
getThrowMatrix_CholDecomp()covarianceBaseinline
getTransferMatrix()covarianceBaseinline
GetUpperBound(const int i)covarianceBaseinline
init(const char *name, const char *file)covarianceBaseprotected
init(std::vector< std::string > YAMLFile)covarianceBaseprotected
init(TMatrixDSym *covMat)covarianceBaseprotected
initialiseNewAdaptiveChain()covarianceBaseprotected
inputFilecovarianceBaseprotected
invCovMatrixcovarianceBaseprotected
InvertCovMatrixcovarianceBaseprotected
isDecomposed_PCAcovarianceBaseprotected
isParameterFixed(const int i)covarianceBaseinline
isParameterFixedPCA(const int i)covarianceBaseinline
IsPCA()covarianceBaseinline
LastPCAdparcovarianceBaseprotected
lower_adaptcovarianceBaseprotected
makeClosestPosDef(TMatrixDSym *cov)covarianceBaseprotected
MakePosDef(TMatrixDSym *cov=NULL)covarianceBaseprotected
matrixNamecovarianceBaseprotected
MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)covarianceBaseinline
MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)covarianceBaseinline
nKeptPCAparscovarianceBaseprotected
nparscovarianceBaseprotected
par_meanscovarianceBaseprotected
par_means_prevcovarianceBaseprotected
pcacovarianceBaseprotected
printIndivStepScale()covarianceBase
PrintLengthcovarianceBaseprotected
printNominal()covarianceBase
printNominalCurrProp()covarianceBase
printPars()covarianceBase
proposeStep()covarianceBasevirtual
random_numbercovarianceBaseprotected
RandomConfiguration()covarianceBase
randomize()covarianceBaseprotected
randParamscovarianceBaseprotected
ReserveMemory(const int size)covarianceBaseprotected
resetIndivStepScale()covarianceBase
retPointer(int iParam)covarianceBaseinline
ReturnUnity()covarianceBaseinlineprotected
saveAdaptiveToFile(TString outFileName, TString systematicName)covarianceBase
setAdaptiveThresholds(const int low_threshold=10000, const int up_threshold=1000000)covarianceBaseinline
setBranches(TTree &tree)covarianceBase
setCovMatrix(TMatrixDSym *cov)covarianceBase
setEvalLikelihood(int i, bool eL)covarianceBase
setIndivStepScale(int ParameterIndex, double StepScale)covarianceBaseinline
setIndivStepScale(std::vector< double > stepscale)covarianceBase
setName(const char *name)covarianceBaseinline
setNumberOfSteps(const int nsteps)covarianceBaseinline
setPar(const int i, const double val)covarianceBase
setParameters(std::vector< double > pars=std::vector< double >())covarianceBase
setParameters_PCA(std::vector< double > pars)covarianceBaseinline
setParCurr_PCA(const int i, const double value)covarianceBaseinline
setParCurrProp(int i, double val)covarianceBase
setParName(int i, char *name)covarianceBaseinline
setParProp(int i, double val)covarianceBaseinline
setParProp_PCA(const int i, const double value)covarianceBaseinline
setPrintLength(const unsigned int PriLen)covarianceBaseinline
setSingleParameter(const int parNo, const double parVal)covarianceBase
setStepScale(double scale)covarianceBase
setThrowMatrix(TMatrixDSym *cov)covarianceBase
sizecovarianceBaseprotected
throwMatrixcovarianceBaseprotected
throwMatrix_CholDecompcovarianceBaseprotected
throwMatrixCholDecompcovarianceBaseprotected
throwNominal(bool nomValues=false, int seed=0)covarianceBase
throwParameters()covarianceBase
throwParCurr(const double mag=1.)covarianceBase
throwParProp(const double mag=1.)covarianceBase
toggleFixAllParameters()covarianceBase
toggleFixParameter(const int i)covarianceBase
total_stepscovarianceBaseprotected
TransferMatcovarianceBaseprotected
TransferMatTcovarianceBaseprotected
TransferToParam()covarianceBaseprotected
TransferToPCA()covarianceBaseprotected
UnitycovarianceBaseprotected
updateAdaptiveCovariance()covarianceBase
updateThrowMatrix(TMatrixDSym *cov)covarianceBase
upper_adaptcovarianceBaseprotected
use_adaptivecovarianceBaseprotected
useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")covarianceBase
useSeparateThrowMatrix()covarianceBase
~covarianceBase()covarianceBasevirtual
+ + + + diff --git a/classcovarianceBase.html b/classcovarianceBase.html new file mode 100644 index 00000000..194c240a --- /dev/null +++ b/classcovarianceBase.html @@ -0,0 +1,6098 @@ + + + + + + + +MaCh3: covarianceBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <covarianceBase.h>

+
+Inheritance diagram for covarianceBase:
+
+
+ + +covarianceOsc +covarianceXsec + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 covarianceBase (std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
 
 covarianceBase (const char *name, const char *file)
 
 covarianceBase (const char *name, const char *file, int seed)
 
 covarianceBase (const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)
 
virtual ~covarianceBase ()
 
void setCovMatrix (TMatrixDSym *cov)
 
void setName (const char *name)
 
void setParName (int i, char *name)
 
void setSingleParameter (const int parNo, const double parVal)
 
void setPar (const int i, const double val)
 
void setParCurrProp (int i, double val)
 
void setParProp (int i, double val)
 
void setParameters (std::vector< double > pars=std::vector< double >())
 
void setEvalLikelihood (int i, bool eL)
 
void setBranches (TTree &tree)
 
void setStepScale (double scale)
 
void setIndivStepScale (int ParameterIndex, double StepScale)
 
void setIndivStepScale (std::vector< double > stepscale)
 
void setPrintLength (const unsigned int PriLen)
 
void throwParProp (const double mag=1.)
 
void throwParCurr (const double mag=1.)
 
void throwParameters ()
 
void throwNominal (bool nomValues=false, int seed=0)
 
void RandomConfiguration ()
 
virtual int CheckBounds ()
 
double CalcLikelihood ()
 
virtual double GetLikelihood ()
 
TMatrixDSymgetCovMatrix ()
 
TMatrixDSymgetInvCovMatrix ()
 
bool getEvalLikelihood (const int i)
 
const chargetName ()
 
std::string GetParName (const int i)
 
const charGetParName (const int i) const
 
std::string GetParFancyName (const int i)
 
const charGetParFancyName (const int i) const
 
std::string const getInputFile () const
 
double getDiagonalError (const int i)
 
void resetIndivStepScale ()
 
void useSeparateThrowMatrix (TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")
 
void useSeparateThrowMatrix ()
 
void saveAdaptiveToFile (TString outFileName, TString systematicName)
 
void setThrowMatrix (TMatrixDSym *cov)
 
void updateThrowMatrix (TMatrixDSym *cov)
 
void setNumberOfSteps (const int nsteps)
 
void setAdaptiveThresholds (const int low_threshold=10000, const int up_threshold=1000000)
 
TMatrixDSymgetThrowMatrix ()
 
TMatrixDgetThrowMatrix_CholDecomp ()
 
std::vector< doublegetParameterMeans ()
 
TH2DGetCorrelationMatrix ()
 
double calcReWeight (const int bin)
 
const doubleretPointer (int iParam)
 
int GetNumParams ()
 
virtual std::vector< doublegetNominalArray ()
 
const std::vector< double > & getPreFitValues ()
 
const std::vector< double > & getGeneratedValues ()
 
const std::vector< doublegetProposed () const
 
double getParProp (const int i)
 
double getParCurr (const int i)
 
double getParInit (const int i)
 
virtual double getNominal (const int i)
 
double GetGenerated (const int i)
 
double GetUpperBound (const int i)
 
double GetLowerBound (const int i)
 
double getParProp_PCA (const int i)
 
double getParCurr_PCA (const int i)
 
bool isParameterFixedPCA (const int i)
 
const TMatrixD getTransferMatrix ()
 
const TMatrixD getEigenVectors ()
 
const TVectorD getEigenValues ()
 
const std::vector< doublegetEigenValuesMaster ()
 
void setParProp_PCA (const int i, const double value)
 
void setParCurr_PCA (const int i, const double value)
 
void setParameters_PCA (std::vector< double > pars)
 
int getSize ()
 
int getNpars ()
 
void printNominal ()
 
void printNominalCurrProp ()
 
void printPars ()
 
void printIndivStepScale ()
 
virtual void proposeStep ()
 
void acceptStep ()
 
void toggleFixAllParameters ()
 
void toggleFixParameter (const int i)
 
bool isParameterFixed (const int i)
 
void ConstructPCA ()
 
bool IsPCA ()
 
void MatrixVectorMulti (double *VecMulti, double **matrix, const double *vector, const int n)
 
double MatrixVectorMultiSingle (double **matrix, const double *vector, const int Length, const int i)
 
void enableAdaptiveMCMC (bool enable=true)
 
void updateAdaptiveCovariance ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void init (const char *name, const char *file)
 
void init (std::vector< std::string > YAMLFile)
 
void init (TMatrixDSym *covMat)
 
void ReserveMemory (const int size)
 
void randomize ()
 
void CorrelateSteps ()
 
void MakePosDef (TMatrixDSym *cov=NULL)
 
void makeClosestPosDef (TMatrixDSym *cov)
 
void TransferToPCA ()
 
void TransferToParam ()
 
const doubleReturnUnity ()
 
void initialiseNewAdaptiveChain ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

const std::string inputFile
 
int size
 
const charmatrixName
 
TMatrixDSymcovMatrix
 
TMatrixDSyminvCovMatrix
 
double ** InvertCovMatrix
 
TRandom3 ** random_number
 
doublerandParams
 
doublecorr_throw
 
double _fGlobalStepScale
 
unsigned int PrintLength
 
std::vector< std::string > _fNames
 
std::vector< std::string > _fFancyNames
 
int _fNumPar
 
YAML::Node _fYAMLDoc
 
std::vector< double_fPreFitValue
 
std::vector< double_fCurrVal
 
std::vector< double_fPropVal
 
std::vector< double_fGenerated
 
std::vector< double_fError
 
std::vector< double_fLowBound
 
std::vector< double_fUpBound
 
std::vector< double_fIndivStepScale
 
std::vector< bool_fFlatPrior
 
const double Unity = 1.0
 
bool pca
 
double eigen_threshold
 
int npars
 
int FirstPCAdpar
 
int LastPCAdpar
 
int nKeptPCApars
 
TVectorD eigen_values
 
TMatrixD eigen_vectors
 
std::vector< doubleeigen_values_master
 
TMatrixD TransferMat
 
TMatrixD TransferMatT
 
TVectorD fParProp_PCA
 
TVectorD fParCurr_PCA
 
std::vector< doublefParSigma_PCA
 
std::vector< intisDecomposed_PCA
 
TMatrixDSymthrowMatrix
 
TMatrixDthrowMatrix_CholDecomp
 
double ** throwMatrixCholDecomp
 
bool use_adaptive
 
int total_steps
 
int lower_adapt
 
int upper_adapt
 
std::vector< doublepar_means
 
std::vector< doublepar_means_prev
 
TMatrixDSymadaptiveCovariance
 
+

Detailed Description

+
+

Definition at line 32 of file covarianceBase.h.

+

Constructor & Destructor Documentation

+ +

◆ covarianceBase() [1/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
covarianceBase::covarianceBase (std::vector< std::string > YAMLFile,
double threshold = -1,
int FirstPCAdpar = -999,
int LastPCAdpar = -999 
)
+
+ +

Definition at line 12 of file covarianceBase.cpp.

+
+
13// ********************************************
+
14
+
15 MACH3LOG_INFO("Constructing instance of covarianceBase using ");
+
16 for(unsigned int i = 0; i < YAMLFile.size(); i++)
+
17 {
+
18 MACH3LOG_INFO("{}", YAMLFile[i]);
+
19 }
+
20 MACH3LOG_INFO("as an input");
+
21
+ +
23 MACH3LOG_INFO("Principal component analysis but given the threshold for the principal components to be less than 0, or greater than (or equal to) 1. This will not work");
+
24 MACH3LOG_INFO("Please specify a number between 0 and 1");
+
25 MACH3LOG_INFO("You specified: ");
+
26 MACH3LOG_INFO("Am instead calling the usual non-PCA constructor...");
+
27 pca = false;
+
28 }
+
29
+ +
31 // Call the innocent helper function
+
32 if (pca) ConstructPCA();
+
33}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
const std::string inputFile
+ + + + +
void init(const char *name, const char *file)
+ +
+
+
+ +

◆ covarianceBase() [2/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
covarianceBase::covarianceBase (const charname,
const charfile 
)
+
+ +

Definition at line 3 of file covarianceBase.cpp.

+
3 : inputFile(std::string(file)), pca(false) {
+
4// ********************************************
+
5
+
6 std::cout << "Constructing instance of covarianceBase" << std::endl;
+
7 init(name, file);
+
8 FirstPCAdpar = -999;
+
9 LastPCAdpar = -999;
+
10}
+
+
+
+ +

◆ covarianceBase() [3/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
covarianceBase::covarianceBase (const charname,
const charfile,
int seed 
)
+
+ +

Definition at line 36 of file covarianceBase.cpp.

+
36 : inputFile(std::string(file)), pca(false) {
+
37// ********************************************
+
38
+
39 #ifdef MULTITHREAD
+
40 if(seed != 0)
+
41 {
+
42 std::cerr<<"You have set seed to "<<seed<<std::endl;
+
43 std::cerr<<"And you are running with MULTITHREAD"<<std::endl;
+
44 std::cerr<<"TRandom for each thread will have same seed"<<std::endl;
+
45 std::cerr<<"This is fine if this was your intention"<<std::endl;
+
46 }
+
47 #endif
+
48
+
49 init(name, file);
+
50 FirstPCAdpar = -999;
+
51 LastPCAdpar = -999;
+
52
+
53}
+
+
+
+ +

◆ covarianceBase() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
covarianceBase::covarianceBase (const charname,
const charfile,
int seed,
double threshold,
int FirstPCAdpar,
int LastPCAdpar 
)
+
+ +

Definition at line 55 of file covarianceBase.cpp.

+
+
56// ********************************************
+
57
+ +
59 MACH3LOG_INFO("NOTE: {} {}", name, file);
+
60 MACH3LOG_INFO("Principal component analysis but given the threshold for the principal components to be less than 0, or greater than (or equal to) 1. This will not work");
+
61 MACH3LOG_INFO("Please specify a number between 0 and 1");
+
62 MACH3LOG_INFO("You specified: ");
+
63 MACH3LOG_INFO("Am instead calling the usual non-PCA constructor...");
+
64 pca = false;
+
65 }
+
66#ifdef MULTITHREAD
+
67 if(seed != 0)
+
68 {
+
69 std::cerr<<"You have set seed to "<<seed<<std::endl;
+
70 std::cerr<<"And you are running with MULTITHREAD"<<std::endl;
+
71 std::cerr<<"TRandom for each thread will have same seed"<<std::endl;
+
72 std::cerr<<"This is fine if this was your intention"<<std::endl;
+
73 }
+
74#endif
+
75 MACH3LOG_INFO("Constructing instance of covarianceBase");
+
76 init(name, file);
+
77 // Call the innocent helper function
+
78 if (pca) ConstructPCA();
+
79}
+
+
+
+ +

◆ ~covarianceBase()

+ +
+
+ + + + + +
+ + + + + + + +
covarianceBase::~covarianceBase ()
+
+virtual
+
+ +

Definition at line 83 of file covarianceBase.cpp.

+
83 {
+
84// ********************************************
+
85
+
86 _fPreFitValue.clear();
+
87 _fError.clear();
+
88 _fCurrVal.clear();
+
89 _fPropVal.clear();
+
90 _fLowBound.clear();
+
91 _fUpBound.clear();
+
92 _fIndivStepScale.clear();
+
93 _fFlatPrior.clear();
+
94
+
95 delete[] randParams;
+
96
+
97 if (covMatrix != NULL) delete covMatrix;
+
98 if (invCovMatrix != NULL) delete invCovMatrix;
+ +
100
+
101 for(int i = 0; i < size; i++)
+
102 {
+
103 delete[] InvertCovMatrix[i];
+
104 delete[] throwMatrixCholDecomp[i];
+
105 }
+
106 delete[] InvertCovMatrix;
+
107 delete[] throwMatrixCholDecomp;
+
108
+
109 const int nThreads = MaCh3Utils::GetNThreads();
+
110 for (int iThread = 0;iThread < nThreads; iThread++) delete random_number[iThread];
+
111 delete[] random_number;
+
112 if (throwMatrix != NULL) delete throwMatrix;
+
113}
+
std::vector< double > _fPropVal
+
std::vector< double > _fUpBound
+
std::vector< double > _fError
+
TMatrixDSym * invCovMatrix
+
std::vector< double > _fIndivStepScale
+
double ** InvertCovMatrix
+
TRandom3 ** random_number
+
TMatrixDSym * covMatrix
+
TMatrixDSym * throwMatrix
+ +
std::vector< double > _fPreFitValue
+ +
std::vector< double > _fLowBound
+
TMatrixD * throwMatrix_CholDecomp
+
double ** throwMatrixCholDecomp
+
std::vector< bool > _fFlatPrior
+
std::vector< double > _fCurrVal
+ +
+
+
+

Member Function Documentation

+ +

◆ acceptStep()

+ +
+
+ + + + + + + +
void covarianceBase::acceptStep ()
+
+ +

Definition at line 892 of file covarianceBase.cpp.

+
892 {
+
893 if (!pca) {
+
894#ifdef MULTITHREAD
+
895#pragma omp parallel for
+
896#endif
+
897 for (int i = 0; i < size; ++i) {
+
898 // Update state so that current state is proposed state
+ +
900 }
+
901 } else {
+
902 // Update the book-keeping for the output
+
903#ifdef MULTITHREAD
+
904#pragma omp parallel for
+
905#endif
+
906 for (int i = 0; i < npars; ++i) {
+ +
908 }
+
909 // Then update the parameter basis
+ +
911 }
+
912}
+
TVectorD fParProp_PCA
+ +
TVectorD fParCurr_PCA
+ +
+
+
+ +

◆ CalcLikelihood()

+ +
+
+ + + + + + + +
double covarianceBase::CalcLikelihood ()
+
+

clock.Start();

+ +

Definition at line 1003 of file covarianceBase.cpp.

+
1003 {
+
1004 double logL = 0.0;
+
1005 //TStopwatch clock;
+
1007 #ifdef MULTITHREAD
+
1008 #pragma omp parallel for reduction(+:logL)
+
1009 #endif
+
1010 for(int i = 0; i < size; ++i){
+
1011 for (int j = 0; j <= i; ++j) {
+
1012 if (!_fFlatPrior[i] && !_fFlatPrior[j]) {
+
1013 //KS: Since matrix is symmetric we can calcaute non diagonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
1014 int scale = 1;
+
1015 if(i != j) scale = 2;
+ +
1017 }
+
1018 }
+
1019 }
+
1020 //clock.Stop();
+
1021 //std::cout << __FILE__ << "::GetLikelihood took " << clock.RealTime() << "s" << std::endl;
+
1022
+
1023 return logL;
+
1024}
+
+
+
+ +

◆ calcReWeight()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::calcReWeight (const int bin)
+
+inline
+
+ +

Definition at line 116 of file covarianceBase.h.

+
116 {
+
117 if (bin >= 0 && bin < _fNumPar) {
+
118 return _fPropVal[bin];
+
119 } else {
+
120 std::cerr << "Specified bin is <= 0 OR bin > npar!" << std::endl;
+
121 std::cerr << "bin = " << bin << ", npar = " << _fNumPar << std::endl;
+
122 std::cerr << "This won't ruin much that this step in the MCMC, but does indicate something wrong in memory!" << std::endl;
+
123 return 1.0;
+
124 }
+
125 return 1.0;
+
126 };
+ +
+
+
+ +

◆ CheckBounds()

+ +
+
+ + + + + +
+ + + + + + + +
int covarianceBase::CheckBounds ()
+
+virtual
+
+ +

Reimplemented in covarianceOsc.

+ +

Definition at line 1026 of file covarianceBase.cpp.

+
1026 {
+
1027 int NOutside = 0;
+
1028 #ifdef MULTITHREAD
+
1029 #pragma omp parallel for reduction(+:NOutside)
+
1030 #endif
+
1031 for (int i = 0; i < _fNumPar; ++i){
+
1032 if(_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]){
+
1033 NOutside++;
+
1034 }
+
1035 }
+
1036 return NOutside;
+
1037}
+
+
+
+ +

◆ ConstructPCA()

+ +
+
+ + + + + + + +
void covarianceBase::ConstructPCA ()
+
+ +

Definition at line 116 of file covarianceBase.cpp.

+
116 {
+
117// ********************************************
+
118
+
119 // Check that covariance matrix exists
+
120 if (covMatrix == NULL) {
+
121 MACH3LOG_ERROR("Covariance matrix for {} has not yet been set", matrixName);
+
122 MACH3LOG_ERROR("Can not construct PCA until it is set");
+
123 throw;
+
124 }
+
125
+
126 //Check whether first and last pcadpar are set and if not just PCA everything
+
127 if(FirstPCAdpar == -999 || LastPCAdpar == -999){
+
128 if(FirstPCAdpar == -999 && LastPCAdpar == -999){
+
129 FirstPCAdpar = 0;
+
130 LastPCAdpar = covMatrix->GetNrows()-1;
+
131 }
+
132 else{
+
133 MACH3LOG_ERROR("You must either leave FirstPCAdpar and LastPCAdpar at -999 or set them both to something");
+
134 throw;
+
135 }
+
136 }
+
137 if(FirstPCAdpar > covMatrix->GetNrows()-1 || LastPCAdpar>covMatrix->GetNrows()-1){
+
138 MACH3LOG_ERROR("FirstPCAdpar and LastPCAdpar are higher than the number of parameters");
+
139 MACH3LOG_ERROR("first: {} last: {}, params: {}", FirstPCAdpar, LastPCAdpar, covMatrix->GetNrows()-1);
+
140 throw;
+
141 }
+
142 if(FirstPCAdpar < 0 || LastPCAdpar < 0){
+
143 MACH3LOG_ERROR("FirstPCAdpar and LastPCAdpar are less than 0 but not default -999");
+
144 MACH3LOG_ERROR("first: {} last: {}", FirstPCAdpar, LastPCAdpar);
+
145 throw;
+
146 }
+
147
+
148 MACH3LOG_INFO("PCAing parameters {} through {} inclusive", FirstPCAdpar, LastPCAdpar);
+
149 int numunpcadpars = covMatrix->GetNrows()-(LastPCAdpar-FirstPCAdpar+1);
+
150
+ +
152
+
153 //CW: Calculate how many eigen values this threshold corresponds to
+ +
155 eigen_values.ResizeTo(eigen.GetEigenValues());
+
156 eigen_vectors.ResizeTo(eigen.GetEigenVectors());
+
157 eigen_values = eigen.GetEigenValues();
+
158 eigen_vectors = eigen.GetEigenVectors();
+
159 double sum = 0;
+
160 // Loop over eigen values and sum them up
+
161 for (int i = 0; i < eigen_values.GetNrows(); ++i) {
+
162 sum += eigen_values(i);
+
163 }
+
164 nKeptPCApars=eigen_values.GetNrows();
+
165 //CW: Now go through again and see how many eigen values correspond to threshold
+
166 for (int i = 0; i < eigen_values.GetNrows(); ++i) {
+
167 // Get the relative size of the eigen value
+
168 double sig = eigen_values(i)/sum;
+
169 // Check against the threshold
+
170 if (sig < eigen_threshold) {
+
171 nKeptPCApars = i;
+
172 break;
+
173 }
+
174 }
+ +
176 MACH3LOG_INFO("Threshold of {} on eigen values relative sum of eigen value ({}) generates {} eigen vectors, plus we have {} unpcad pars, for a total of {}", eigen_threshold, sum, nKeptPCApars, numunpcadpars, npars);
+
177
+
178 //DB Create array of correct size so eigen_values can be used in CorrelateSteps
+
179 eigen_values_master = std::vector<double>(npars,1.0);
+ +
181
+
182 // Now construct the transfer matrices
+
183 //These matrices will be as big as number of unPCAd pars plus number of eigenvalues kept
+
184 TransferMat.ResizeTo(covMatrix->GetNrows(), npars);
+
185 TransferMatT.ResizeTo(covMatrix->GetNrows(), npars);
+
186
+
187 // Get a subset of the eigen vector matrix
+
188 TMatrixD temp(eigen_vectors.GetSub(0, eigen_vectors.GetNrows()-1, 0, nKeptPCApars-1));
+
189
+
190 //Make transfer matrix which is two blocks of identity with a block of the PCA transfer matrix in between
+ +
192 temp2.ResizeTo(covMatrix->GetNrows(), npars);
+
193
+
194 //First set the whole thing to 0
+
195 for(int iRow = 0; iRow < covMatrix->GetNrows(); iRow++){
+
196 for(int iCol = 0; iCol < npars; iCol++){
+
197 temp2[iRow][iCol] = 0;
+
198 }
+
199 }
+
200 //Set the first identity block
+
201 if(FirstPCAdpar != 0){
+
202 for(int iRow = 0; iRow < FirstPCAdpar; iRow++){
+
203 temp2[iRow][iRow] = 1;
+
204 }
+
205 }
+
206
+
207 //Set the transfer matrix block for the PCAd pars
+ +
209
+
210 //Set the second identity block
+
211 if(LastPCAdpar != covMatrix->GetNrows()-1){
+
212 for(int iRow = 0;iRow < (covMatrix->GetNrows()-1)-LastPCAdpar; iRow++){
+ +
214 }
+
215 }
+
216
+ +
218 // Copy the contents
+ +
220 // And then transpose
+
221 TransferMatT.T();
+
222
+
223 // Make a note that we have now done PCA
+
224 pca = true;
+
225
+
226 // Make the PCA parameter arrays
+
227 fParCurr_PCA.ResizeTo(npars);
+
228 fParProp_PCA.ResizeTo(npars);
+
229
+
230 //KS: make easy map so we could easily find un-decomposed parameters
+
231 isDecomposed_PCA.resize(npars);
+
232 fParSigma_PCA.resize(npars);
+
233 for (int i = 0; i < npars; ++i)
+
234 {
+
235 fParSigma_PCA[i] = 1;
+
236 isDecomposed_PCA[i] = -1;
+
237 }
+
238 for (int i = 0; i < FirstPCAdpar; ++i) isDecomposed_PCA[i] = i;
+
239
+
240 for (int i = FirstPCAdpar+nKeptPCApars+1; i < npars; ++i) isDecomposed_PCA[i] = i+(size-npars);
+
241
+
242 #ifdef DEBUG_PCA
+
243 //KS: Let's dump all useful matrices to properly validate PCA
+ +
245 #endif
+
246}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+ +
const char * matrixName
+
TMatrixD TransferMatT
+ +
std::vector< double > fParSigma_PCA
+
TMatrixD eigen_vectors
+
TVectorD eigen_values
+
std::vector< int > isDecomposed_PCA
+
std::vector< double > eigen_values_master
+
+
+
+ +

◆ CorrelateSteps()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::CorrelateSteps ()
+
+protected
+
+ +

Definition at line 844 of file covarianceBase.cpp.

+
844 {
+
845// ************************************************
+
846 //KS: Using custom function compared to ROOT one with 8 threads we have almost factor 2 performance increase, by replacing TMatrix with just double we increase it even more
+ +
848
+
849 // If not doing PCA
+
850 if (!pca) {
+
851#ifdef MULTITHREAD
+
852#pragma omp parallel for
+
853#endif
+
854 for (int i = 0; i < size; ++i) {
+
855 if (_fError[i] > 0.) {
+ +
857 }
+
858 }
+
859 // If doing PCA throw uncorrelated in PCA basis (orthogonal basis by definition)
+
860 } else {
+
861 // Throw around the current step
+
862#ifdef MULTITHREAD
+
863#pragma omp parallel for
+
864#endif
+
865 for (int i = 0; i < npars; ++i)
+
866 {
+
867 if (fParSigma_PCA[i] > 0.)
+
868 {
+
869 double IndStepScale = 1.;
+
870 //KS: If undecomposed parameter apply individual step scale and cholesky for better acceptance rate
+
871 if(isDecomposed_PCA[i] >= 0)
+
872 {
+ + +
875 }
+
876 //If decomposed apply only random number
+
877 else
+
878 {
+ +
880 //KS: All PCA-ed parameters have the same step scale
+ +
882 }
+ +
884 }
+
885 }
+
886 // Then update the parameter basis
+ +
888 }
+
889}
+ +
void MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)
+ +
+
+
+ +

◆ enableAdaptiveMCMC()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::enableAdaptiveMCMC (bool enable = true)
+
+inline
+
+ +

Definition at line 286 of file covarianceBase.h.

+
286 {
+ +
288 total_steps = 0; //Set these to default values
+
289 lower_adapt = 10000;
+
290 upper_adapt = 10000000;
+
291 }
+ + + + +
+
+
+ +

◆ GetCorrelationMatrix()

+ +
+
+ + + + + + + +
TH2D * covarianceBase::GetCorrelationMatrix ()
+
+ +

Definition at line 1520 of file covarianceBase.cpp.

+
1520 {
+
1521// ********************************************
+
1522
+
1523 TH2D* hMatrix = new TH2D(getName(), getName(), _fNumPar, 0.0, _fNumPar, _fNumPar, 0.0, _fNumPar);
+
1524
+
1525 for(int i = 0; i < _fNumPar; i++)
+
1526 {
+
1527 hMatrix->SetBinContent(i+1, i+1, 1.);
+
1528 hMatrix->GetXaxis()->SetBinLabel(i+1, GetParFancyName(i).c_str());
+
1529 hMatrix->GetYaxis()->SetBinLabel(i+1, GetParFancyName(i).c_str());
+
1530 }
+
1531
+
1532 #ifdef MULTITHREAD
+
1533 #pragma omp parallel for
+
1534 #endif
+
1535 for(int i = 0; i < _fNumPar; i++)
+
1536 {
+
1537 for(int j = 0; j <= i; j++)
+
1538 {
+
1539 const double Corr = (*covMatrix)(i,j) / ( getDiagonalError(i) * getDiagonalError(j));
+
1540 hMatrix->SetBinContent(i+1, j+1, Corr);
+
1541 hMatrix->SetBinContent(j+1, i+1, Corr);
+
1542 }
+
1543 }
+
1544 return hMatrix;
+
1545}
+
double getDiagonalError(const int i)
+
std::string GetParFancyName(const int i)
+
const char * getName()
+
+
+
+ +

◆ getCovMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
TMatrixDSym * covarianceBase::getCovMatrix ()
+
+inline
+
+ +

Definition at line 81 of file covarianceBase.h.

+
81{ return covMatrix; };
+
+
+
+ +

◆ getDiagonalError()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getDiagonalError (const int i)
+
+inline
+
+ +

Definition at line 93 of file covarianceBase.h.

+
93{ return std::sqrt((*covMatrix)(i,i)); }
+
+
+
+ +

◆ getEigenValues()

+ +
+
+ + + + + +
+ + + + + + + +
const TVectorD covarianceBase::getEigenValues ()
+
+inline
+
+ +

Definition at line 191 of file covarianceBase.h.

+
191 {
+
192 if (!pca) {
+
193 MACH3LOG_ERROR("Am not running in PCA mode");
+
194 throw;
+
195 }
+
196 return eigen_values;
+
197 }
+
+
+
+ +

◆ getEigenValuesMaster()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< double > covarianceBase::getEigenValuesMaster ()
+
+inline
+
+ +

Definition at line 199 of file covarianceBase.h.

+
199 {
+
200 if (!pca) {
+
201 MACH3LOG_ERROR("Am not running in PCA mode");
+
202 throw;
+
203 }
+
204 return eigen_values_master;
+
205 }
+
+
+
+ +

◆ getEigenVectors()

+ +
+
+ + + + + +
+ + + + + + + +
const TMatrixD covarianceBase::getEigenVectors ()
+
+inline
+
+ +

Definition at line 183 of file covarianceBase.h.

+
183 {
+
184 if (!pca) {
+
185 MACH3LOG_ERROR("Am not running in PCA mode");
+
186 throw;
+
187 }
+
188 return eigen_vectors;
+
189 }
+
+
+
+ +

◆ getEvalLikelihood()

+ +
+
+ + + + + +
+ + + + + + + + +
bool covarianceBase::getEvalLikelihood (const int i)
+
+inline
+
+ +

Definition at line 83 of file covarianceBase.h.

+
83{ return _fFlatPrior[i]; };
+
+
+
+ +

◆ GetGenerated()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::GetGenerated (const int i)
+
+inline
+
+ +

Definition at line 147 of file covarianceBase.h.

+
147{ return _fGenerated[i];}
+
std::vector< double > _fGenerated
+
+
+
+ +

◆ getGeneratedValues()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< double > & covarianceBase::getGeneratedValues ()
+
+inline
+
+ +

Definition at line 140 of file covarianceBase.h.

+
140{return _fGenerated;}
+
+
+
+ +

◆ getInputFile()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const covarianceBase::getInputFile () const
+
+inline
+
+ +

Definition at line 90 of file covarianceBase.h.

+
90{ return inputFile; };
+
+
+
+ +

◆ getInvCovMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
TMatrixDSym * covarianceBase::getInvCovMatrix ()
+
+inline
+
+ +

Definition at line 82 of file covarianceBase.h.

+
82{ return invCovMatrix; };
+
+
+
+ +

◆ GetLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
double covarianceBase::GetLikelihood ()
+
+virtual
+
+ +

Reimplemented in covarianceOsc.

+ +

Definition at line 1039 of file covarianceBase.cpp.

+
1039 {
+
1040 // Checkbounds and calclikelihood are virtual
+
1041 // Default behaviour is to reject negative values + do std llh calculation
+
1042 const int NOutside = CheckBounds();
+
1043
+
1044 if(NOutside > 0)
+
1045 return NOutside*__LARGE_LOGL__;
+
1046
+
1047 return CalcLikelihood();
+
1048}
+ +
virtual int CheckBounds()
+
#define __LARGE_LOGL__
+
+
+
+ +

◆ GetLowerBound()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::GetLowerBound (const int i)
+
+inline
+
+ +

Definition at line 149 of file covarianceBase.h.

+
149{ return _fLowBound[i]; }
+
+
+
+ +

◆ getName()

+ +
+
+ + + + + +
+ + + + + + + +
const char * covarianceBase::getName ()
+
+inline
+
+ +

Definition at line 85 of file covarianceBase.h.

+
85{ return matrixName; };
+
+
+
+ +

◆ getNominal()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double covarianceBase::getNominal (const int i)
+
+inlinevirtual
+
+ +

Reimplemented in covarianceXsec.

+ +

Definition at line 146 of file covarianceBase.h.

+
146{ return getParInit(i); }
+
double getParInit(const int i)
+
+
+
+ +

◆ getNominalArray()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > covarianceBase::getNominalArray ()
+
+virtual
+
+ +

Reimplemented in covarianceXsec.

+ +

Definition at line 1508 of file covarianceBase.cpp.

+
1509{
+
1510 std::vector<double> nominal;
+
1511 for (int i = 0; i < size; i++)
+
1512 {
+
1513 nominal.push_back(_fPreFitValue[i]);
+
1514 }
+
1515 return nominal;
+
1516
+
1517}
+
std::vector< int > nominal
+
+
+
+ +

◆ getNpars()

+ +
+
+ + + + + +
+ + + + + + + +
int covarianceBase::getNpars ()
+
+inline
+
+ +

Definition at line 248 of file covarianceBase.h.

+
248 {
+
249 if (pca) return npars;
+
250 else return size;
+
251 }
+
+
+
+ +

◆ GetNumParams()

+ +
+
+ + + + + +
+ + + + + + + +
int covarianceBase::GetNumParams ()
+
+inline
+
+ +

Definition at line 137 of file covarianceBase.h.

+
137{return _fNumPar;}
+
+
+
+ +

◆ getParameterMeans()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > covarianceBase::getParameterMeans ()
+
+inline
+
+ +

Definition at line 112 of file covarianceBase.h.

+
112{return par_means;}
+
std::vector< double > par_means
+
+
+
+ +

◆ getParCurr()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getParCurr (const int i)
+
+inline
+
+ +

Definition at line 143 of file covarianceBase.h.

+
143{ return _fCurrVal[i]; }
+
+
+
+ +

◆ getParCurr_PCA()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getParCurr_PCA (const int i)
+
+inline
+
+ +

Definition at line 159 of file covarianceBase.h.

+
159 {
+
160 if (!pca) {
+
161 MACH3LOG_ERROR("Am not running in PCA mode");
+
162 throw;
+
163 }
+
164 return fParCurr_PCA(i);
+
165 };
+
+
+
+ +

◆ GetParFancyName() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
std::string covarianceBase::GetParFancyName (const int i)
+
+inline
+
+ +

Definition at line 88 of file covarianceBase.h.

+
88{return _fFancyNames[i];};
+
std::vector< std::string > _fFancyNames
+
+
+
+ +

◆ GetParFancyName() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
const char * covarianceBase::GetParFancyName (const int i) const
+
+inline
+
+ +

Definition at line 89 of file covarianceBase.h.

+
89{ return _fFancyNames[i].c_str(); };
+
+
+
+ +

◆ getParInit()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getParInit (const int i)
+
+inline
+
+ +

Definition at line 144 of file covarianceBase.h.

+
144{ return _fPreFitValue[i]; }
+
+
+
+ +

◆ GetParName() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
std::string covarianceBase::GetParName (const int i)
+
+inline
+
+ +

Definition at line 86 of file covarianceBase.h.

+
86{return _fNames[i];};
+
std::vector< std::string > _fNames
+
+
+
+ +

◆ GetParName() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
const char * covarianceBase::GetParName (const int i) const
+
+inline
+
+ +

Definition at line 87 of file covarianceBase.h.

+
87{ return _fNames[i].c_str(); };
+
+
+
+ +

◆ getParProp()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getParProp (const int i)
+
+inline
+
+ +

Definition at line 142 of file covarianceBase.h.

+
142{ return _fPropVal[i]; }
+
+
+
+ +

◆ getParProp_PCA()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::getParProp_PCA (const int i)
+
+inline
+
+ +

Definition at line 151 of file covarianceBase.h.

+
151 {
+
152 if (!pca) {
+
153 MACH3LOG_ERROR("Am not running in PCA mode");
+
154 throw;
+
155 }
+
156 return fParProp_PCA(i);
+
157 };
+
+
+
+ +

◆ getPreFitValues()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< double > & covarianceBase::getPreFitValues ()
+
+inline
+
+ +

Definition at line 139 of file covarianceBase.h.

+
139{return _fPreFitValue;}
+
+
+
+ +

◆ getProposed()

+ +
+
+ + + + + + + +
const std::vector< double > covarianceBase::getProposed () const
+
+ +

Definition at line 614 of file covarianceBase.cpp.

+
614 {
+
615 std::vector<double> props;
+
616 for (int i = 0; i < size; ++i) props.push_back(_fPropVal[i]);
+
617 return props;
+
618}
+
+
+
+ +

◆ getSize()

+ +
+
+ + + + + +
+ + + + + + + +
int covarianceBase::getSize ()
+
+inline
+
+ +

Definition at line 247 of file covarianceBase.h.

+
247{ return size; };
+
+
+
+ +

◆ getThrowMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
TMatrixDSym * covarianceBase::getThrowMatrix ()
+
+inline
+
+ +

Definition at line 110 of file covarianceBase.h.

+
110{return throwMatrix;}
+
+
+
+ +

◆ getThrowMatrix_CholDecomp()

+ +
+
+ + + + + +
+ + + + + + + +
TMatrixD * covarianceBase::getThrowMatrix_CholDecomp ()
+
+inline
+
+ +

Definition at line 111 of file covarianceBase.h.

+
+
+
+
+ +

◆ getTransferMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
const TMatrixD covarianceBase::getTransferMatrix ()
+
+inline
+
+ +

Definition at line 175 of file covarianceBase.h.

+
175 {
+
176 if (!pca) {
+
177 MACH3LOG_ERROR("Am not running in PCA mode");
+
178 throw;
+
179 }
+
180 return TransferMat;
+
181 }
+
+
+
+ +

◆ GetUpperBound()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceBase::GetUpperBound (const int i)
+
+inline
+
+ +

Definition at line 148 of file covarianceBase.h.

+
148{ return _fUpBound[i];}
+
+
+
+ +

◆ init() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::init (const charname,
const charfile 
)
+
+protected
+
+ +

Definition at line 248 of file covarianceBase.cpp.

+
249{
+
250 // Set the covariance matrix from input ROOT file (e.g. flux, ND280, NIWG)
+
251 TFile *infile = new TFile(file, "READ");
+
252 if (infile->IsZombie()) {
+
253 MACH3LOG_ERROR("Could not open input covariance ROOT file {} !!!", file);
+
254 MACH3LOG_ERROR("Was about to retrieve matrix with name {}", name);
+
255 throw;
+
256 }
+
257
+
258 // Should put in a
+
259 TMatrixDSym *covMatrix = (TMatrixDSym*)(infile->Get(name));
+
260 if (covMatrix == NULL) {
+
261 std::cerr << "Could not find covariance matrix name " << name << " in file " << file << std::endl;
+
262 std::cerr << "Are you really sure " << name << " exists in the file?" << std::endl;
+
263 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
264 throw;
+
265 }
+
266
+
267 PrintLength = 35;
+
268
+
269 const int nThreads = MaCh3Utils::GetNThreads();
+
270 //KS: set Random numbers for each thread so each thread has different seed
+
271 //or for one thread if without MULTITHREAD
+ +
273 for (int iThread = 0; iThread < nThreads; iThread++) {
+ +
275 }
+
276
+
277 // Not using adaptive by default
+
278 use_adaptive = false;
+
279 total_steps = 0;
+
280 lower_adapt = -999;
+
281 upper_adapt = -999;
+
282
+
283 // Set the covariance matrix
+
284 size = covMatrix->GetNrows();
+
285 _fNumPar = size;
+
286
+
287 InvertCovMatrix = new double*[_fNumPar]();
+
288 throwMatrixCholDecomp = new double*[_fNumPar]();
+
289 // Set the defaults to true
+
290 for(int i = 0; i < _fNumPar; i++)
+
291 {
+
292 InvertCovMatrix[i] = new double[_fNumPar]();
+
293 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
294 for (int j = 0; j < _fNumPar; j++)
+
295 {
+
296 InvertCovMatrix[i][j] = 0.;
+ +
298 }
+
299 }
+
300
+
301 setName(name);
+
302 size = covMatrix->GetNrows();
+ + +
305
+
306 if (size <= 0) {
+
307 std::cerr << "Covariance matrix " << getName() << " has " << size << " entries!" << std::endl;
+
308 throw;
+
309 }
+
310 npars = size;
+
311
+ +
313
+
314 infile->Close();
+
315
+
316 MACH3LOG_INFO("Created covariance matrix named: {}", getName());
+
317 MACH3LOG_INFO("from file: {}", file);
+
318
+
319 delete infile;
+
320}
+
void setCovMatrix(TMatrixDSym *cov)
+
void setName(const char *name)
+
void ReserveMemory(const int size)
+
unsigned int PrintLength
+
void MakePosDef(TMatrixDSym *cov=NULL)
+
+
+
+ +

◆ init() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::init (std::vector< std::string > YAMLFile)
+
+protected
+
+ +

Definition at line 326 of file covarianceBase.cpp.

+
327{
+
328 _fYAMLDoc["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
329 for(unsigned int i = 0; i < YAMLFile.size(); i++)
+
330 {
+
331 YAML::Node YAMLDocTemp = YAML::LoadFile(YAMLFile[i]);
+
332 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
333 _fYAMLDoc["Systematics"].push_back(item);
+
334 }
+
335 }
+
336
+
337 const int nThreads = MaCh3Utils::GetNThreads();
+
338 //KS: set Random numbers for each thread so each thread has different seed
+
339 //or for one thread if without MULTITHREAD
+ +
341 for (int iThread = 0; iThread < nThreads; iThread++) {
+ +
343 }
+
344
+
345 PrintLength = 35;
+
346
+
347 // Not using adaptive by default
+
348 use_adaptive = false;
+
349 total_steps = 0;
+
350 lower_adapt = -999;
+
351 upper_adapt = -999;
+
352
+
353 // Set the covariance matrix
+
354 _fNumPar = _fYAMLDoc["Systematics"].size();
+
355 size = _fNumPar;
+
356
+
357 InvertCovMatrix = new double*[_fNumPar]();
+
358 throwMatrixCholDecomp = new double*[_fNumPar]();
+
359 // Set the defaults to true
+
360 for(int i = 0; i < _fNumPar; i++)
+
361 {
+
362 InvertCovMatrix[i] = new double[_fNumPar]();
+
363 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
364 for (int j = 0; j < _fNumPar; j++)
+
365 {
+
366 InvertCovMatrix[i][j] = 0.;
+ +
368 }
+
369 }
+
370
+ +
372
+ +
374 //_fDetString = std::vector<std::string>(_fNumPar);
+
375
+
376 int i = 0;
+
377 std::vector<std::map<std::string,double>> Correlations(_fNumPar);
+
378 std::map<std::string, int> CorrNamesMap;
+
379
+
380 //ETA - read in the systematics. Would be good to add in some checks to make sure
+
381 //that there are the correct number of entries i.e. are the _fNumPars for Names,
+
382 //PreFitValues etc etc.
+
383 for (auto const &param : _fYAMLDoc["Systematics"])
+
384 {
+
385 _fFancyNames[i] = (param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
386 _fPreFitValue[i] = (param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>());
+
387 _fGenerated[i] = (param["Systematic"]["ParameterValues"]["Generated"].as<double>());
+
388 _fIndivStepScale[i] = (param["Systematic"]["StepScale"]["MCMC"].as<double>());
+
389 _fError[i] = (param["Systematic"]["Error"].as<double>());
+
390
+
391 //ETA - a bit of a fudge but works
+
392 std::vector<double> TempBoundsVec = param["Systematic"]["ParameterBounds"].as<std::vector<double>>();
+ + +
395
+
396 //ETA - now for parameters which are optional and have default values
+
397 if (param["Systematic"]["FlatPrior"]) {
+
398 _fFlatPrior[i] = param["Systematic"]["FlatPrior"].as<bool>();
+
399 } else {
+
400 _fFlatPrior[i] = false;
+
401 }
+
402
+
403 //Fill the map to get the correlations later as well
+
404 CorrNamesMap[param["Systematic"]["Names"]["FancyName"].as<std::string>()]=i;
+
405
+
406 //Also loop through the correlations
+
407 if(param["Systematic"]["Correlations"]) {
+
408 for(unsigned int Corr_i = 0; Corr_i < param["Systematic"]["Correlations"].size(); ++Corr_i){
+
409 for (YAML::const_iterator it=param["Systematic"]["Correlations"][Corr_i].begin();it!=param["Systematic"]["Correlations"][Corr_i].end();++it) {
+
410 Correlations[i][it->first.as<std::string>()] = it->second.as<double>();
+
411 }
+
412 }
+
413 }
+
414 i++;
+
415 }
+
416
+
417 //ETA
+
418 //Now that we've been through all systematic let's fill the covmatrix
+
419 //This makes the root TCov from YAML
+
420 for(int i=0; i < _fNumPar; i++) {
+
421 (*_fCovMatrix)(i,i)=_fError[i]*_fError[i];
+
422 //Get the map of parameter name to correlation fomr the Correlations object
+
423 for (auto const& [key, val] : Correlations[i]) {
+
424 int index = -1;
+
425
+
426 //If you found the parameter name then get the index
+
427 if (CorrNamesMap.find(key) != CorrNamesMap.end()) {
+
428 index=CorrNamesMap[key];
+
429 }
+
430 else {
+
431 std::cout << "Parameter " << key << " not in list! Check your spelling?" << std::endl;
+
432 exit(5);
+
433 }
+
434
+
435 //
+
436 double Corr1 = val;
+
437 double Corr2 = 0;
+
438 if(Correlations[index].find(_fFancyNames[i]) != Correlations[index].end()) {
+
439 Corr2 = Correlations[index][_fFancyNames[i]];
+
440 //Do they agree to better than float precision?
+
441 if(std::abs(Corr2 - Corr1) > FLT_EPSILON) {
+
442 std::cout << "Correlations are not equal between " << _fFancyNames[i] << " and " << key << std::endl;
+
443 std::cout << "Got : " << Corr2 << " and " << Corr1 << std::endl;
+
444 exit(5);
+
445 }
+
446 } else {
+
447 std::cout << "Correlation does not appear reciprocally between " << _fFancyNames[i] << " and " << key << std::endl;
+
448 exit(5);
+
449 }
+
450 (*_fCovMatrix)(i,index)= (*_fCovMatrix)(index,i) = Corr1*_fError[i]*_fError[index];
+
451 }
+
452 }
+
453
+
454 //Now make positive definite
+ + +
457
+
458 if (size <= 0) {
+
459 std::cerr << "Covariance object has " << size << " systematics!" << std::endl;
+
460 throw;
+
461 }
+
462 npars = size;
+
463
+
464 MACH3LOG_INFO("Created covariance matrix from files: ");
+
465 for(const auto &file : YAMLFile){
+
466 MACH3LOG_INFO("{} ", file);
+
467 }
+
468 MACH3LOG_INFO("----------------");
+
469 MACH3LOG_INFO("Found {} systematics parameters in total", size);
+
470 MACH3LOG_INFO("----------------");
+
471
+
472 return;
+
473}
+
YAML::Node _fYAMLDoc
+
+
+
+ +

◆ init() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::init (TMatrixDSymcovMat)
+
+protected
+
+ +

Definition at line 475 of file covarianceBase.cpp.

+
475 {
+
476
+
477 size = covMat->GetNrows();
+
478 _fNumPar = size;
+
479 InvertCovMatrix = new double*[_fNumPar]();
+
480 throwMatrixCholDecomp = new double*[_fNumPar]();
+
481 // Set the defaults to true
+
482 for(int i = 0; i < _fNumPar; i++)
+
483 {
+
484 InvertCovMatrix[i] = new double[_fNumPar]();
+
485 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
486 for (int j = 0; j < _fNumPar; j++)
+
487 {
+
488 InvertCovMatrix[i][j] = 0.;
+ +
490 }
+
491 }
+
492
+ +
494
+ +
496
+
497 std::cout << "Created covariance matrix named: " << getName() << std::endl;
+
498}
+
+
+
+ +

◆ initialiseNewAdaptiveChain()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::initialiseNewAdaptiveChain ()
+
+protected
+
+ +

Definition at line 1427 of file covarianceBase.cpp.

+
1427 {
+
1428 // If we don't have a covariance matrix to start from for adaptive tune we need to make one!
+ +
1430 // par_means.reserve(size);
+
1431 for(int i=0; i<size; i++){
+
1432 par_means.push_back(0);
+
1433 par_means_prev.push_back(0);
+
1434 for(int j=0; j<=i; j++){
+
1435 (*adaptiveCovariance)(i,j)=0.0; // Just make an empty matrix
+
1436 (*adaptiveCovariance)(j,i)=0.0; // Just make an empty matrix
+
1437 }
+
1438 }
+
1439}
+
std::vector< double > par_means_prev
+
TMatrixDSym * adaptiveCovariance
+
+
+
+ +

◆ isParameterFixed()

+ +
+
+ + + + + +
+ + + + + + + + +
bool covarianceBase::isParameterFixed (const int i)
+
+inline
+
+ +

Definition at line 266 of file covarianceBase.h.

+
266 {
+
267 if (_fError[i] < 0) {
+
268 return true;
+
269 } else {
+
270 return false;
+
271 }
+
272 }
+
+
+
+ +

◆ isParameterFixedPCA()

+ +
+
+ + + + + +
+ + + + + + + + +
bool covarianceBase::isParameterFixedPCA (const int i)
+
+inline
+
+ +

Definition at line 167 of file covarianceBase.h.

+
167 {
+
168 if (fParSigma_PCA[i] < 0) {
+
169 return true;
+
170 } else {
+
171 return false;
+
172 }
+
173 }
+
+
+
+ +

◆ IsPCA()

+ +
+
+ + + + + +
+ + + + + + + +
bool covarianceBase::IsPCA ()
+
+inline
+
+ +

Definition at line 279 of file covarianceBase.h.

+
279{ return pca; };
+
+
+
+ +

◆ makeClosestPosDef()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::makeClosestPosDef (TMatrixDSymcov)
+
+protected
+
+ +

Definition at line 1462 of file covarianceBase.cpp.

+
1463{
+
1464 // Want to get cov' = (cov_sym+cov_polar)/2
+
1465 // cov_sym=(cov+cov^T)/2
+
1466 // cov_polar-> SVD cov to cov=USV^T then cov_polar=VSV^T
+
1467
+
1468 //Get frob norm of cov
+
1469// Double_t cov_norm=cov->E2Norm();
+
1470
+ +
1472 cov_trans->T();
+
1473 TMatrixDSym cov_sym = 0.5*(*cov+*cov_trans); //If cov is symmetric does nothing, otherwise just ensures symmetry
+
1474
+
1475 //Do SVD to get polar form
+ +
1477 if(!cov_sym_svd.Decompose()){
+
1478 std::cerr<<"Cannot do SVD on input matrix!"<<std::endl;
+
1479 throw;
+
1480 }
+
1481
+ + +
1484 cov_sym_vt.T();
+
1485 //SVD returns as vector (grrr) so need to get into matrix form for multiplying!
+ +
1487 const Int_t nCols = cov_sym_v.GetNcols(); //square so only need rows hence lack of cols
+ + + +
1491
+
1492
+
1493 //Can finally get H=VSV
+
1494 TMatrixDSym cov_sym_polar =cov_sym_sig.SimilarityT(cov_sym_vt);//V*S*V^T (this took forver to find!)
+
1495
+
1496 //Now we can construct closest approximater Ahat=0.5*(B+H)
+
1497 TMatrixDSym cov_closest_approx = 0.5*(cov_sym+cov_sym_polar);//Not fully sure why this is even needed since symmetric B -> U=V
+
1498 //Get norm of transformed
+
1499// Double_t approx_norm=cov_closest_approx.E2Norm();
+
1500
+
1501 //std::cout<<"Initial Norm : "<<cov_norm<<" | Norm after transformation : "<<approx_norm<<" | Ratio : "<<cov_norm/approx_norm<<std::endl;
+
1502
+ +
1504 //Now can just add a makeposdef!
+
1505 MakePosDef(cov);
+
1506}
+
+
+
+ +

◆ MakePosDef()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::MakePosDef (TMatrixDSymcov = NULL)
+
+protected
+
+ +

Definition at line 1232 of file covarianceBase.cpp.

+
1232 {
+
1233 //DB Save original warning state and then increase it in this function to suppress 'matrix not positive definite' messages
+
1234 //Means we no longer need to overload
+
1235 if(cov==NULL){
+
1236 cov = &*covMatrix;
+
1237 }
+
1238
+ + +
1241
+
1242 //DB Loop 1000 times adding 1e-9 which tops out at 1e-6 shift on the diagonal before throwing error
+
1243 int MaxAttempts = 1e5;
+
1244 int iAttempt = 0;
+
1245 bool CanDecomp = false;
+ +
1247
+ + +
1250 if (chdcmp.Decompose()) {
+
1251 CanDecomp = true;
+
1252 break;
+
1253 } else {
+
1254#ifdef MULTITHREAD
+
1255#pragma omp parallel for
+
1256#endif
+
1257 for (int iVar=0;iVar<size;iVar++) {
+
1258 (*cov)(iVar,iVar) += pow(10,-9);
+
1259 }
+
1260 }
+
1261 }
+
1262
+
1263 if (!CanDecomp) {
+
1264 std::cerr << "Tried " << MaxAttempts << " times to shift diagonal but still can not decompose the matrix" << std::endl;
+
1265 std::cerr << "This indicates that something is wrong with the input matrix" << std::endl;
+
1266 throw;
+
1267 }
+
1268 if(total_steps < 2) {
+
1269 MACH3LOG_INFO("Had to shift diagonal {} time(s) to allow the covariance matrix to be decomposed", iAttempt);
+
1270 }
+
1271 //DB Reseting warning level
+ +
1273
+
1274 return;
+
1275}
+
+
+
+ +

◆ MatrixVectorMulti()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void covarianceBase::MatrixVectorMulti (doubleVecMulti,
double ** matrix,
const doublevector,
const int n 
)
+
+inline
+
+ +

Definition at line 1179 of file covarianceBase.cpp.

+
1179 {
+
1180 #ifdef MULTITHREAD
+
1181 #pragma omp parallel for
+
1182 #endif
+
1183 for (int i = 0; i < n; ++i)
+
1184 {
+
1185 double result = 0.0;
+
1186 for (int j = 0; j < n; ++j)
+
1187 {
+
1188 result += matrix[i][j]*vector[j];
+
1189 }
+
1190 VecMulti[i] = result;
+
1191 }
+
1192}
+
+
+
+ +

◆ MatrixVectorMultiSingle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double covarianceBase::MatrixVectorMultiSingle (double ** matrix,
const doublevector,
const int Length,
const int i 
)
+
+inline
+
+ +

Definition at line 1194 of file covarianceBase.cpp.

+
1195{
+
1196 double Element = 0.0;
+
1197 for (int j = 0; j < Length; j++) {
+
1198 Element += matrix[i][j]*vector[j];
+
1199 }
+
1200 return Element;
+
1201}
+
+
+
+ +

◆ printIndivStepScale()

+ +
+
+ + + + + + + +
void covarianceBase::printIndivStepScale ()
+
+ +

Definition at line 1221 of file covarianceBase.cpp.

+
1221 {
+
1222 std::cout << "============================================================" << std::endl;
+
1223 std::cout << std::setw(PrintLength) << "Parameter:" << " | " << std::setw(11) << "Step scale:" << std::endl;
+
1224 for (int iParam=0;iParam<size;iParam++) {
+
1225 std::cout << std::setw(PrintLength) << _fNames[iParam].c_str() << " | " << std::setw(11) << _fIndivStepScale[iParam] << std::endl;
+
1226 }
+
1227 std::cout << "============================================================" << std::endl;
+
1228}
+
+
+
+ +

◆ printNominal()

+ +
+
+ + + + + + + +
void covarianceBase::printNominal ()
+
+ +

Definition at line 972 of file covarianceBase.cpp.

+
972 {
+
973 MACH3LOG_INFO("Prior values for {} covarianceBase:", getName());
+
974 for (int i = 0; i < size; i++) {
+
975 std::cout << " " << GetParFancyName(i) << " " << getParInit(i) << "\n";
+
976 }
+
977 std::cout << std::endl;
+
978}
+
+
+
+ +

◆ printNominalCurrProp()

+ +
+
+ + + + + + + +
void covarianceBase::printNominalCurrProp ()
+
+ +

Definition at line 981 of file covarianceBase.cpp.

+
981 {
+
982
+
983 MACH3LOG_INFO("Printing parameters for {}", getName());
+
984 // Dump out the PCA parameters too
+
985 if (pca) {
+
986 MACH3LOG_INFO("PCA:");
+
987 for (int i = 0; i < npars; ++i) {
+
988 std::cout << std::setw(PrintLength) << std::left << "PCA " << i << " Current: " << fParCurr_PCA(i) << " Proposed: " << fParProp_PCA(i) << std::endl;
+
989 }
+
990 }
+
991 MACH3LOG_INFO("{:<30} {:<10} {:<10} {:<10}", "Name", "Prior", "Current", "Proposed");
+
992 for (int i = 0; i < size; ++i) {
+
993 MACH3LOG_INFO("{:<30} {:<10.2f} {:<10.2f} {:<10.2f}", GetParFancyName(i), _fPreFitValue[i], _fCurrVal[i], _fPropVal[i]);
+
994 }
+
995 //KS: "\n" is faster performance wise, keep std::endl at the end to flush just in case, also looks pretty
+
996 std::cout << std::endl;
+
997}
+
+
+
+ +

◆ printPars()

+ +
+
+ + + + + + + +
void covarianceBase::printPars ()
+
+ +

Definition at line 1051 of file covarianceBase.cpp.

+
1051 {
+
1052
+
1053 std::cout << "Number of pars: " << size << std::endl;
+
1054 std::cout << "current " << matrixName << " parameters:" << std::endl;
+
1055 for(int i = 0; i < size; i++) {
+
1056 std::cout << std::fixed << std::setprecision(5) << _fNames[i].c_str() << " current: \t" << _fCurrVal[i] << " \tproposed: \t" << _fPropVal[i] << std::endl;
+
1057 }
+
1058
+
1059 return;
+
1060}
+
+
+
+ +

◆ proposeStep()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::proposeStep ()
+
+virtual
+
+ +

Reimplemented in covarianceOsc.

+ +

Definition at line 788 of file covarianceBase.cpp.

+
788 {
+
789 // Make the random numbers for the step proposal
+
790 randomize();
+ + +
793}
+ +
void updateAdaptiveCovariance()
+ +
+
+
+ +

◆ RandomConfiguration()

+ +
+
+ + + + + + + +
void covarianceBase::RandomConfiguration ()
+
+ +

Definition at line 732 of file covarianceBase.cpp.

+
732 {
+
733 // *************************************
+
734 // Have the 1 sigma for each parameter in each covariance class, sweet!
+
735 // Don't want to change the nominal array because that's what determines our likelihood
+
736 // Want to change the fParProp, fParCurr, fParInit
+
737 // fParInit and the others will already be set
+
738 for (int i = 0; i < size; ++i) {
+
739 // Check if parameter is fixed first: if so don't randomly throw
+
740 if (isParameterFixed(i)) continue;
+
741 // Check that the sigma range is larger than the parameter range
+
742 // If not, throw in the valid parameter range instead
+
743 const double paramrange = _fUpBound[i] - _fLowBound[i];
+
744 const double sigma = sqrt((*covMatrix)(i,i));
+
745 double throwrange = sigma;
+ +
747
+
748 _fPropVal[i] = _fPreFitValue[i] + random_number[0]->Gaus(0, 1)*throwrange;
+
749 // Try again if we the initial parameter proposal falls outside of the range of the parameter
+
750 // Really only relevant for the xsec parameters; the flux and ND280 have -999 and 999 set to the limits!
+
751 int throws = 0;
+
752 while (_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]) {
+
753 if (throws > 1000) {
+
754 std::cerr << "Tried " << throws << " times to throw parameter " << i << " but failed" << std::endl;
+
755 std::cerr << "Matrix: " << matrixName << std::endl;
+
756 std::cerr << "Param: " << _fNames[i].c_str() << std::endl;
+
757 throw;
+
758 }
+
759 _fPropVal[i] = _fPreFitValue[i] + random_number[0]->Gaus(0, 1)*throwrange;
+
760 throws++;
+
761 }
+
762 std::cout << "Setting current step in " << matrixName << " param " << i << " = " << _fPropVal[i] << " from " << _fCurrVal[i] << std::endl;
+ +
764 }
+
765 if (pca) TransferToPCA();
+
766
+
767}
+
bool isParameterFixed(const int i)
+ +
+
+
+ +

◆ randomize()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::randomize ()
+
+protected
+
+ +

Definition at line 799 of file covarianceBase.cpp.

+
799 {
+
800// ************************************************
+
801 if (!pca) {
+
802//KS: By multithreading here we gain at least factor 2 with 8 threads with ND only fit
+
803#ifdef MULTITHREAD
+
804#pragma omp parallel for
+
805#endif
+
806 for (int i = 0; i < size; ++i) {
+
807 // If parameter isn't fixed
+
808 if (_fError[i] > 0.0) {
+
809#ifdef MULTITHREAD
+ +
811#else
+
812 randParams[i] = random_number[0]->Gaus(0, 1);
+
813#endif
+
814 // If parameter IS fixed
+
815 } else {
+
816 randParams[i] = 0.0;
+
817 }
+
818 } // end for
+
819 // If we're in the PCA basis we instead throw parameters there (only npars parameter)
+
820 } else {
+
821 // Scale the random parameters by the sqrt of eigen values for the throw
+
822#ifdef MULTITHREAD
+
823#pragma omp parallel for
+
824#endif
+
825 for (int i = 0; i < size; ++i)
+
826 {
+
827 if (fParSigma_PCA[i] > 0. && i < npars)
+
828 {
+
829#ifdef MULTITHREAD
+ +
831#else
+
832 randParams[i] = random_number[0]->Gaus(0,1);
+
833#endif
+
834 } else { // If parameter IS fixed or out od bounds
+
835 randParams[i] = 0.0;
+
836 }
+
837 }
+
838 }
+
839}
+
+
+
+ +

◆ ReserveMemory()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::ReserveMemory (const int size)
+
+protected
+
+ +

Definition at line 522 of file covarianceBase.cpp.

+
522 {
+
523
+
524 _fNames = std::vector<std::string>(SizeVec);
+
525 _fFancyNames = std::vector<std::string>(SizeVec);
+
526 _fGenerated = std::vector<double>(SizeVec);
+
527 _fPreFitValue = std::vector<double>(SizeVec);
+
528 _fError = std::vector<double>(SizeVec);
+
529 _fCurrVal = std::vector<double>(SizeVec);
+
530 _fPropVal = std::vector<double>(SizeVec);
+
531 _fLowBound = std::vector<double>(SizeVec);
+
532 _fUpBound = std::vector<double>(SizeVec);
+
533 _fFlatPrior = std::vector<bool>(SizeVec);
+
534 _fIndivStepScale = std::vector<double>(SizeVec);
+
535
+
536 corr_throw = new double[SizeVec]();
+
537 // set random parameter vector (for correlated steps)
+
538 randParams = new double[size];
+
539
+
540 // Set the defaults to true
+
541 for(int i = 0; i < SizeVec; i++) {
+
542 _fGenerated.at(i) = 1.;
+
543 _fPreFitValue.at(i) = 1.;
+
544 _fError.at(i) = 0.;
+
545 _fCurrVal.at(i) = 0.;
+
546 _fPropVal.at(i) = 0.;
+
547 _fLowBound.at(i) = -999.99;
+
548 _fUpBound.at(i) = 999.99;
+
549 _fFlatPrior.at(i) = false;
+
550 _fIndivStepScale.at(i) = 1.;
+
551 corr_throw[i] = 0.0;
+
552 }
+
553
+
554 _fGlobalStepScale = 1.0;
+
555}
+
+
+
+ +

◆ resetIndivStepScale()

+ +
+
+ + + + + + + +
void covarianceBase::resetIndivStepScale ()
+
+ +

Definition at line 1277 of file covarianceBase.cpp.

+
1277 {
+
1278 std::vector<double> stepScales(size);
+
1279 for (int i=0;i<size;i++) {
+
1280 stepScales[i] = 1.;
+
1281 }
+ + +
1284}
+
void setIndivStepScale(int ParameterIndex, double StepScale)
+
+
+
+ +

◆ retPointer()

+ +
+
+ + + + + +
+ + + + + + + + +
const double * covarianceBase::retPointer (int iParam)
+
+inline
+
+ +

Definition at line 134 of file covarianceBase.h.

+
134{return &(_fPropVal.data()[iParam]);}
+
+
+
+ +

◆ ReturnUnity()

+ +
+
+ + + + + +
+ + + + + + + +
const double * covarianceBase::ReturnUnity ()
+
+inlineprotected
+
+ +

Definition at line 310 of file covarianceBase.h.

+
310{return &Unity;}
+
const double Unity
+
+
+
+ +

◆ saveAdaptiveToFile()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::saveAdaptiveToFile (TString outFileName,
TString systematicName 
)
+
+ +

Definition at line 1441 of file covarianceBase.cpp.

+
1441 {
+
1442 TFile* outFile = new TFile(outFileName, "UPDATE");
+
1443 if(outFile->IsZombie()){
+
1444 std::cerr<<"ERROR : Couldn't find "<<outFileName<<std::endl;
+
1445 throw;
+
1446 }
+
1447 TVectorD* outMeanVec = new TVectorD((int)par_means.size());
+
1448 for(int i=0; i<(int)par_means.size(); i++){
+
1449 (*outMeanVec)(i)=par_means[i];
+
1450 }
+
1451 outFile->cd();
+
1452 adaptiveCovariance->Write(systematicName+"_postfit_matrix");
+
1453 outMeanVec->Write(systematicName+"_mean_vec");
+
1454 outFile->Close();
+
1455 delete outFile;
+
1456
+
1457}
+
+
+
+ +

◆ setAdaptiveThresholds()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setAdaptiveThresholds (const int low_threshold = 10000,
const int up_threshold = 1000000 
)
+
+inline
+
+ +

Definition at line 108 of file covarianceBase.h.

+ +
+
+ +

◆ setBranches()

+ +
+
+ + + + + + + + +
void covarianceBase::setBranches (TTreetree)
+
+ +

Definition at line 1100 of file covarianceBase.cpp.

+
1100 {
+
1101 // loop over parameters and set a branch
+
1102 for (int i = 0; i < size; ++i) {
+
1103 tree.Branch(_fNames[i].c_str(), &_fCurrVal[i], Form("%s/D", _fNames[i].c_str()));
+
1104 }
+
1105 // When running PCA, also save PCA parameters
+
1106 if (pca) {
+
1107 for (int i = 0; i < npars; ++i) {
+
1108 tree.Branch(Form("%s_PCA", _fNames[i].c_str()), (double*)&(fParCurr_PCA.GetMatrixArray()[i]), Form("%s_PCA/D", _fNames[i].c_str()));
+
1109 }
+
1110 }
+
1111}
+
+
+
+ +

◆ setCovMatrix()

+ +
+
+ + + + + + + + +
void covarianceBase::setCovMatrix (TMatrixDSymcov)
+
+ +

Definition at line 501 of file covarianceBase.cpp.

+
501 {
+
502 if (cov == NULL) {
+
503 std::cerr << "Could not find covariance matrix you provided to setCovMatrix" << std::endl;
+
504 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
505 throw;
+
506 }
+
507 covMatrix = cov;
+
508 invCovMatrix = (TMatrixDSym*)cov->Clone();
+
509 invCovMatrix->Invert();
+
510 //KS: ROOT has bad memory management, using standard double means we can decrease most operation by factor 2 simply due to cache hits
+
511 for (int i = 0; i < size; i++)
+
512 {
+
513 for (int j = 0; j < size; ++j)
+
514 {
+
515 InvertCovMatrix[i][j] = (*invCovMatrix)(i,j);
+
516 }
+
517 }
+
518
+ +
520}
+
void setThrowMatrix(TMatrixDSym *cov)
+
+
+
+ +

◆ setEvalLikelihood()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setEvalLikelihood (int i,
bool eL 
)
+
+ +

Definition at line 1165 of file covarianceBase.cpp.

+
1165 {
+
1166
+
1167 std::cout << "covarianceBase::setEvalLikelihood set to " << eL << std::endl;
+
1168 if (i > size) {
+
1169 std::cerr << "Can't setEvalLikelihood for " << getName() << "_" << i << " because size of covarianceXsec2015 = " << size << std::endl;
+
1170 std::cerr << "Fix this in your config file please!" << std::endl;
+
1171 throw;
+
1172 } else {
+
1173 std::cout << "Setting " << GetParName(i) << " (parameter " << i << ") to flat prior? " << eL << std::endl;
+
1174 _fFlatPrior[i] = eL;
+
1175 }
+
1176}
+
std::string GetParName(const int i)
+
+
+
+ +

◆ setIndivStepScale() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setIndivStepScale (int ParameterIndex,
double StepScale 
)
+
+inline
+
+ +

Definition at line 62 of file covarianceBase.h.

+ +
+
+ +

◆ setIndivStepScale() [2/2]

+ +
+
+ + + + + + + + +
void covarianceBase::setIndivStepScale (std::vector< doublestepscale)
+
+ +

Definition at line 1203 of file covarianceBase.cpp.

+
1203 {
+
1204 if ((int)stepscale.size()!=size) {
+
1205 std::cout << "Stepscale vector not equal to number of parameters. Qutting.." << std::endl;
+
1206 std::cout << "Size of argument vector:" << stepscale.size() << std::endl;
+
1207 std::cout << "Expected size:" << size << std::endl;
+
1208 return;
+
1209 }
+
1210
+
1211 for (int iParam=0;iParam<size;iParam++) {
+ +
1213 }
+
1214
+ +
1216
+
1217 return;
+
1218}
+ +
+
+
+ +

◆ setName()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::setName (const charname)
+
+inline
+
+ +

Definition at line 46 of file covarianceBase.h.

+
46{ matrixName = name; }
+
+
+
+ +

◆ setNumberOfSteps()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::setNumberOfSteps (const int nsteps)
+
+inline
+
+ +

Definition at line 103 of file covarianceBase.h.

+
103 {
+ + +
106 }
+ +
+
+
+ +

◆ setPar()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setPar (const int i,
const double val 
)
+
+ +

Definition at line 559 of file covarianceBase.cpp.

+
559 {
+
560
+
561 std::cout << "Over-riding " << GetParName(i) << ": " << std::endl;
+
562 std::cout << "_fPropVal (" << _fPropVal[i];
+
563 std::cout << "), _fCurrVal (" << _fCurrVal[i];
+
564 std::cout << "), _fPreFitValue (" << _fPreFitValue[i];
+
565 std::cout << ") to " << val << std::endl;
+
566
+
567 _fPropVal[i] = val;
+
568 _fCurrVal[i] = val;
+ +
570
+
571 // Transfer the parameter values to the PCA basis
+
572 if (pca) TransferToPCA();
+
573}
+
+
+
+ +

◆ setParameters()

+ +
+
+ + + + + + + + +
void covarianceBase::setParameters (std::vector< doublepars = std::vector<double>())
+
+ +

Definition at line 1063 of file covarianceBase.cpp.

+
1063 {
+
1064
+
1065 // If empty, set the proposed to nominal
+
1066 if (pars.empty()) {
+
1067 // For xsec this means setting to the prior (because nominal is the prior)
+
1068 for (int i = 0; i < size; i++) {
+ +
1070 }
+
1071 // If not empty, set the parameters to the specified
+
1072 } else {
+
1073
+
1074 if (pars.size() != size_t(size)) {
+
1075 std::cerr << "Warning: parameter arrays of incompatible size! Not changing parameters! " << matrixName << " has size " << pars.size() << " but was expecting " << size << std::endl;
+
1076 throw;
+
1077 }
+
1078
+
1079 unsigned int parsSize = pars.size();
+
1080 for (unsigned int i = 0; i < parsSize; i++) {
+
1081 //Make sure that you are actually passing a number to set the parameter to
+
1082 if(isnan(pars[i])) {
+
1083 std::cerr << "Error: trying to set parameter value to a nan for parameter " << GetParName(i) << " in matrix " << matrixName << ". This will not go well!" << std::endl;
+
1084 throw;
+
1085 } else {
+
1086 _fPropVal[i] = pars[i];
+
1087 }
+
1088 }
+
1089 }
+
1090
+
1091 // And if pca make the transfer
+
1092 if (pca) {
+
1093 TransferToPCA();
+ +
1095 }
+
1096
+
1097 return;
+
1098}
+
+
+
+ +

◆ setParameters_PCA()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::setParameters_PCA (std::vector< doublepars)
+
+inline
+
+ +

Definition at line 227 of file covarianceBase.h.

+
228 {
+
229 if (!pca)
+
230 {
+
231 MACH3LOG_ERROR("Am not running in PCA mode");
+
232 throw;
+
233 }
+
234 if (pars.size() != size_t(npars)) {
+
235 std::cerr << "Warning: parameter arrays of incompatible size! Not changing parameters! " << matrixName << " has size " << pars.size() << " but was expecting " << size << std::endl;
+
236 throw;
+
237 }
+
238 unsigned int parsSize = pars.size();
+
239 for (unsigned int i = 0; i < parsSize; i++)
+
240 {
+
241 fParProp_PCA(i) = pars[i];
+
242 }
+
243 //KS: Transfer to normal base
+ +
245 }
+
+
+
+ +

◆ setParCurr_PCA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setParCurr_PCA (const int i,
const double value 
)
+
+inline
+
+ +

Definition at line 217 of file covarianceBase.h.

+
217 {
+
218 if (!pca) {
+
219 MACH3LOG_ERROR("Am not running in PCA mode");
+
220 throw;
+
221 }
+ +
223 // And then transfer back to the parameter basis
+ +
225 }
+
+
+
+ +

◆ setParCurrProp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setParCurrProp (int i,
double val 
)
+
+ +

Definition at line 780 of file covarianceBase.cpp.

+
780 {
+ + +
783 std::cout << "Setting " << GetParName(parNo) << "(parameter " << parNo << ") to " << parVal << std::endl;
+
784 if (pca) TransferToPCA();
+
785}
+
+
+
+ +

◆ setParName()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setParName (int i,
charname 
)
+
+inline
+
+ +

Definition at line 47 of file covarianceBase.h.

+
47{ _fNames.at(i) = std::string(name); }
+
+
+
+ +

◆ setParProp()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setParProp (int i,
double val 
)
+
+inline
+
+ +

Definition at line 51 of file covarianceBase.h.

+
51 {
+
52 _fPropVal[i] = val;
+
53 if (pca) TransferToPCA();
+
54 };
+
+
+
+ +

◆ setParProp_PCA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setParProp_PCA (const int i,
const double value 
)
+
+inline
+
+ +

Definition at line 207 of file covarianceBase.h.

+
207 {
+
208 if (!pca) {
+
209 MACH3LOG_ERROR("Am not running in PCA mode");
+
210 throw;
+
211 }
+ +
213 // And then transfer back to the parameter basis
+ +
215 }
+
+
+
+ +

◆ setPrintLength()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceBase::setPrintLength (const unsigned int PriLen)
+
+inline
+
+ +

Definition at line 65 of file covarianceBase.h.

+
65{ PrintLength = PriLen; };
+
+
+
+ +

◆ setSingleParameter()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::setSingleParameter (const int parNo,
const double parVal 
)
+
+ +

Definition at line 771 of file covarianceBase.cpp.

+
771 {
+
772 // *************************************
+ + +
775 std::cout << "Setting " << GetParName(parNo) << "(parameter " << parNo << ") to " << parVal << std::endl;
+
776
+
777 if (pca) TransferToPCA();
+
778}
+
+
+
+ +

◆ setStepScale()

+ +
+
+ + + + + + + + +
void covarianceBase::setStepScale (double scale)
+
+ +

Definition at line 1113 of file covarianceBase.cpp.

+
1113 {
+
1114 if(scale == 0)
+
1115 {
+
1116 std::cerr << "You are trying so set StepScale to 0 this will not work"<< std::endl;
+
1117 throw;
+
1118 }
+
1119 std::cout << getName() << " setStepScale() = " << scale << std::endl;
+ +
1121}
+
+
+
+ +

◆ setThrowMatrix()

+ +
+
+ + + + + + + + +
void covarianceBase::setThrowMatrix (TMatrixDSymcov)
+
+ +

Definition at line 1287 of file covarianceBase.cpp.

+
1287 {
+
1288 if (cov == NULL) {
+
1289 std::cerr << "Could not find covariance matrix you provided to setThrowMatrix" << std::endl;
+
1290 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1291 throw;
+
1292 }
+
1293
+
1294 if (covMatrix->GetNrows() != cov->GetNrows()) {
+
1295 std::cerr << "Matrix given for throw Matrix is not the same size as the covariance matrix stored in object!" << std::endl;
+
1296 std::cerr << "Stored covariance matrix size:" << covMatrix->GetNrows() << std::endl;
+
1297 std::cerr << "Given matrix size:" << cov->GetNrows() << std::endl;
+
1298 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1299 throw;
+
1300 }
+
1301
+
1302 throwMatrix = (TMatrixDSym*)cov->Clone();
+ +
1304 else MakePosDef(throwMatrix);
+
1305
+ +
1307
+
1308 if(!TDecompChol_throwMatrix.Decompose()) {
+
1309 std::cerr << "Cholesky decomposition failed for " << matrixName << " trying to make positive definite" << std::endl;
+
1310
+
1311 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1312 throw;
+
1313 }
+
1314
+ + +
1317
+
1318 //KS: ROOT has bad memory management, using standard double means we can decrease most operation by factor 2 simply due to cache hits
+
1319#ifdef MULTITHREAD
+
1320#pragma omp parallel for
+
1321#endif
+
1322 for (int i = 0; i < size; i++)
+
1323 {
+
1324 for (int j = 0; j < size; ++j)
+
1325 {
+
1326 throwMatrixCholDecomp[i][j] = (*throwMatrix_CholDecomp)(i,j);
+
1327 }
+
1328 }
+
1329}
+
void makeClosestPosDef(TMatrixDSym *cov)
+
+
+
+ +

◆ throwNominal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void covarianceBase::throwNominal (bool nomValues = false,
int seed = 0 
)
+
+ +

Definition at line 621 of file covarianceBase.cpp.

+
621 {
+
622
+
623 TVectorD* vec = new TVectorD(size);
+
624 for (int i = 0; i < size; i++) {
+
625 (*vec)(i) = 1.0;
+
626 }
+
627
+ +
629 nom_throws->SetSeed(seed);
+
630 std::vector<double> nominal = getNominalArray();
+
631 nominal.clear();
+
632 nominal.resize(size);
+
633
+
634 // If we want to put the nominals somewhere else than user specified
+
635 // Don't fully understand this though: won't we have to reweight the MC somehow?
+
636 // nominal[i] is used in GetLikelihood() as the penalty term, so we're essentially setting a random parameter penalty term?
+
637 if (!nomValues)
+
638 {
+
639 bool throw_again = true;
+
640
+
641 while(throw_again == true)
+
642 {
+
643 throw_again = false;
+
644 std::cout << "- setting " << getName() << " nominal values to random throws." << std::endl;
+
645 nom_throws->ThrowSet(nominal);
+
646
+
647 for (int i = 0; i < size; i++)
+
648 {
+
649 // if parameter is fixed, dont throw
+
650 if (_fError[i] < 0) {
+
651 nominal[i] = 1.0;
+
652 continue;
+
653 }
+
654
+
655 if (nominal[i] < 0) {
+
656 nominal[i] = 0.0;
+
657 throw_again = true;
+
658 }
+
659 }
+
660 }
+
661 } else {
+
662
+
663 // If we want nominal values, set all entries to 1 (defined as nominal in MaCh3)
+
664 for (int i = 0; i < int(nominal.size()); i++) {
+
665 nominal[i] = 1.0;
+
666 }
+
667 }
+
668
+
669 delete nom_throws;
+
670 delete vec;
+
671}
+ +
virtual std::vector< double > getNominalArray()
+
+
+
+ +

◆ throwParameters()

+ +
+
+ + + + + + + +
void covarianceBase::throwParameters ()
+
+ +

Definition at line 676 of file covarianceBase.cpp.

+
676 {
+
677// *************************************
+
678
+
679 // First draw new randParams
+
680 randomize();
+
681
+
682 if (!pca) {
+ +
684
+
685#ifdef MULTITHREAD
+
686#pragma omp parallel for
+
687#endif
+
688 for (int i = 0; i < size; ++i) {
+
689 // Check if parameter is fixed first: if so don't randomly throw
+
690 if (isParameterFixed(i)) continue;
+
691
+ +
693 int throws = 0;
+
694 // Try again if we the initial parameter proposal falls outside of the range of the parameter
+
695 while (_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]) {
+
696#ifdef MULTITHREAD
+ +
698#else
+
699 randParams[i] = random_number[0]->Gaus(0,1);
+
700#endif
+ + +
703 if (throws > 10000)
+
704 {
+
705 //KS: Since we are multithreading there is danger that those messages
+
706 //will be all over the place, small price to pay for faster code
+
707 std::cerr << "Tried " << throws << " times to throw parameter ";
+
708 std::cerr << i << " but failed" << std::endl;
+
709 std::cerr << "Matrix: " << matrixName << std::endl;
+
710 std::cerr << "Param: " << _fNames[i] << std::endl;
+
711 std::cerr << "Setting _fPropVal: " << _fPropVal[i] <<" to "<< _fPreFitValue[i]<<std::endl;
+
712 std::cerr << "I live at " << __FILE__ << ":" << __LINE__ << std::endl;
+ +
714 //throw;
+
715 }
+
716 throws++;
+
717 }
+ +
719 }
+
720 }
+
721 else
+
722 {
+
723 MACH3LOG_CRITICAL("Hold on, you are trying to run Prior Predicitve Code with PCA, which is wrong");
+
724 MACH3LOG_CRITICAL("Sorry I have to kill you, I mean your job");
+
725 throw;
+
726 }
+
727}
+
#define MACH3LOG_CRITICAL
Definition MaCh3Logger.h:12
+
double MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)
+
+
+
+ +

◆ throwParCurr()

+ +
+
+ + + + + + + + +
void covarianceBase::throwParCurr (const double mag = 1.)
+
+ +

Definition at line 943 of file covarianceBase.cpp.

+
944{
+
945 randomize();
+
946 if (!pca) {
+
947 // Get the correlated throw vector
+ +
949 // The number of sigmas to throw
+
950 // Should probably have this as a default parameter input to the function instead
+
951 for (int i = 0; i < size; i++) {
+
952 if (_fError[i] > 0.){
+ +
954 }
+
955 }
+
956 } else {
+
957 for (int i = 0; i < size; i++) {
+ +
959 }
+
960 // And update the fParCurr in the basis
+
961 // Then update the fParProp in the parameter basis using the transfer matrix, so likelihood is evaluated correctly
+ +
963 for (int i = 0; i < size; ++i) {
+
964 if (fParSigma_PCA[i] > 0.) {
+
965 _fCurrVal[i] = current(i);
+
966 }
+
967 }
+
968 }
+
969}
+
+
+
+ +

◆ throwParProp()

+ +
+
+ + + + + + + + +
void covarianceBase::throwParProp (const double mag = 1.)
+
+ +

Definition at line 916 of file covarianceBase.cpp.

+
916 {
+
917 randomize();
+
918 if (!pca) {
+
919 // Make the correlated throw
+ +
921 // Number of sigmas we throw
+
922 for (int i = 0; i < size; i++) {
+
923 if (_fError[i] > 0.)
+ +
925 }
+
926 } else {
+
927 for (int i = 0; i < size; i++) {
+ +
929 }
+
930 // And update the fParCurr in the basis
+
931 // Then update the fParProp in the parameter basis using the transfer matrix, so likelihood is evaluated correctly
+ +
933 for (int i = 0; i < size; ++i) {
+
934 if (fParSigma_PCA[i] > 0.) {
+
935 _fPropVal[i] = proposed(i);
+
936 }
+
937 }
+
938 }
+
939}
+
+
+
+ +

◆ toggleFixAllParameters()

+ +
+
+ + + + + + + +
void covarianceBase::toggleFixAllParameters ()
+
+ +

Definition at line 1124 of file covarianceBase.cpp.

+
1124 {
+
1125// ********************************************
+
1126 // fix or unfix all parameters by multiplying by -1
+
1127 if(!pca)
+
1128 {
+
1129 for (int i = 0; i < size; i++) _fError[i] *= -1.0;
+
1130 } else{
+
1131 for (int i = 0; i < npars; i++) fParSigma_PCA[i] *= -1.0;
+
1132 }
+
1133 return;
+
1134}
+
+
+
+ +

◆ toggleFixParameter()

+ +
+
+ + + + + + + + +
void covarianceBase::toggleFixParameter (const int i)
+
+ +

Definition at line 1137 of file covarianceBase.cpp.

+
1137 {
+
1138// ********************************************
+
1139 if(!pca) {
+
1140 if (i > size) {
+
1141 std::cerr << "Can't toggleFixParameter for parameter " << i << " because size of covariance =" << size << std::endl;
+
1142 std::cerr << "Fix this in your config file please!" << std::endl;
+
1143 throw;
+
1144 } else {
+
1145 _fError[i] *= -1.0;
+
1146 std::cout << "Setting " << GetParName(i) << "(parameter " << i << ") to fixed at " << _fCurrVal[i] << std::endl;
+
1147 }
+
1148 } else {
+
1149 int isDecom = -1;
+
1150 for (int im = 0; im < npars; ++im) {
+
1151 if(isDecomposed_PCA[im] == i) {isDecom = im;}
+
1152 }
+
1153 if(isDecom < 0) {
+
1154 std::cerr << "Parameter " << GetParName(i) << " is PCA decomposed can't fix this" << std::endl;
+
1155 //throw;
+
1156 } else {
+
1157 fParSigma_PCA[isDecom] *= -1.0;
+
1158 std::cout << "Setting un-decomposed " << GetParName(i) << "(parameter " << i <<"/"<< isDecom<< " in PCA base) to fixed at " << _fCurrVal[i] << std::endl;
+
1159 }
+
1160 }
+
1161
+
1162 return;
+
1163}
+
+
+
+ +

◆ TransferToParam()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::TransferToParam ()
+
+protected
+
+ +

Definition at line 595 of file covarianceBase.cpp.

+
595 {
+
596 if (!pca) {
+
597 std::cerr << "Can not transfer to PCA if PCA isn't enabled" << std::endl;
+
598 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
599 throw;
+
600 }
+
601
+
602 // Make the temporary vectors
+ + +
605#ifdef MULTITHREAD
+
606#pragma omp parallel for
+
607#endif
+
608 for (int i = 0; i < size; ++i) {
+ + +
611 }
+
612}
+
+
+
+ +

◆ TransferToPCA()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceBase::TransferToPCA ()
+
+protected
+
+ +

Definition at line 576 of file covarianceBase.cpp.

+
576 {
+
577 if (!pca) {
+
578 std::cerr << "Can not transfer to PCA if PCA isn't enabled" << std::endl;
+
579 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
580 throw;
+
581 }
+
582 // Make the temporary vectors
+ + +
585 for (int i = 0; i < size; ++i) {
+ + +
588 }
+
589
+ + +
592}
+
+
+
+ +

◆ updateAdaptiveCovariance()

+ +
+
+ + + + + + + +
void covarianceBase::updateAdaptiveCovariance ()
+
+ +

Definition at line 1383 of file covarianceBase.cpp.

+
1383 {
+
1384 // https://projecteuclid.org/journals/bernoulli/volume-7/issue-2/An-adaptive-Metropolis-algorithm/bj/1080222083.full
+
1385 // Updates adaptive matrix
+
1386 // First we update the total means
+
1387
+
1388#ifdef MULTITHREAD
+
1389#pragma omp parallel for
+
1390#endif
+
1391 for(int iRow=0; iRow<size; iRow++){
+ + +
1394 }
+
1395
+
1396 //Now we update the covariances using cov(x,y)=E(xy)-E(x)E(y)
+
1397#ifdef MULTITHREAD
+
1398#pragma omp parallel for
+
1399#endif
+
1400 for(int iRow=0; iRow<size; iRow++){
+
1401 for(int iCol=0; iCol<=iRow; iCol++){
+
1402
+
1403 double cov_val = (*adaptiveCovariance)(iRow, iCol)*size/5.6644;
+
1404 cov_val += par_means_prev[iRow]*par_means_prev[iCol]; //First we remove the current means
+
1405 cov_val = (cov_val*total_steps+_fCurrVal[iRow]*_fCurrVal[iCol])/(total_steps+1); //Now get mean(iRow*iCol)
+ +
1407 cov_val*=5.6644/size;
+
1408 (*adaptiveCovariance)(iRow, iCol) = cov_val;
+
1409 (*adaptiveCovariance)(iCol, iRow) = cov_val;
+
1410 }
+
1411 }
+
1412 //This is likely going to be the slow bit!
+
1413 total_steps+=1;
+ +
1415 {
+ +
1417 }
+
1418
+ +
1420 updateThrowMatrix(adaptiveCovariance); //Now we update and continue!
+
1421 }
+
1422 // if(total_steps%1000==0 && total_steps>1000){
+
1423 // suboptimality_vals.push_back(calculatesuboptimality(covSqrt, adaptiveCovariance));
+
1424 // }
+
1425}
+
void updateThrowMatrix(TMatrixDSym *cov)
+
+
+
+ +

◆ updateThrowMatrix()

+ +
+
+ + + + + + + + +
void covarianceBase::updateThrowMatrix (TMatrixDSymcov)
+
+ +

Definition at line 1331 of file covarianceBase.cpp.

+
1331 {
+
1332 delete throwMatrix;
+
1333 throwMatrix = NULL;
+ + + +
1337}
+
+
+
+ +

◆ useSeparateThrowMatrix() [1/2]

+ +
+
+ + + + + + + +
void covarianceBase::useSeparateThrowMatrix ()
+
+ +

Definition at line 1377 of file covarianceBase.cpp.

+
1377 {
+ + +
1380}
+
void initialiseNewAdaptiveChain()
+
+
+
+ +

◆ useSeparateThrowMatrix() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void covarianceBase::useSeparateThrowMatrix (TString throwMatrixName,
TString throwMatrixFile,
TString parameterMeansName = "" 
)
+
+ +

Definition at line 1340 of file covarianceBase.cpp.

+
1340 {
+
1341// Firstly let's check if the file exists
+ + +
1344 if(throwMatrixFile->IsZombie()) {
+
1345 std::cerr<<"ERROR : Couldn't find throw Matrix file : "<<throwMatrixFileName<<std::endl;
+
1346 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1347 throw;
+
1348 } //We're done for now
+
1349
+ + +
1352
+
1353 if(!tmp_throwMatrix){
+
1354 std::cerr<<"ERROR : Couldn't find throw matrix "<<throwMatrixName<<" in "<<throwMatrixFileName<<std::endl;
+
1355 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1356 throw;
+
1357 }
+
1358
+
1359 if(!tmp_meansvec){
+
1360 std::cerr<<"ERROR : Couldn't find means vector "<<meansVectorName<<" in "<<throwMatrixFileName<<std::endl;
+
1361 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1362 throw;
+
1363 }
+
1364
+ +
1366 for(int iMean=0; iMean<tmp_meansvec->GetNrows(); iMean++){
+
1367 par_means.push_back((*tmp_meansvec)(iMean));
+ +
1369 }
+
1370 delete tmp_throwMatrix;
+
1371 delete tmp_meansvec;
+
1372 throwMatrixFile->Close();
+
1373 delete throwMatrixFile; // Just in case
+
1374}
+
+
+
+

Member Data Documentation

+ +

◆ _fCurrVal

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fCurrVal
+
+protected
+
+ +

Definition at line 347 of file covarianceBase.h.

+ +
+
+ +

◆ _fError

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fError
+
+protected
+
+ +

Definition at line 350 of file covarianceBase.h.

+ +
+
+ +

◆ _fFancyNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> covarianceBase::_fFancyNames
+
+protected
+
+ +

Definition at line 343 of file covarianceBase.h.

+ +
+
+ +

◆ _fFlatPrior

+ +
+
+ + + + + +
+ + + + +
std::vector<bool> covarianceBase::_fFlatPrior
+
+protected
+
+ +

Definition at line 354 of file covarianceBase.h.

+ +
+
+ +

◆ _fGenerated

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fGenerated
+
+protected
+
+ +

Definition at line 349 of file covarianceBase.h.

+ +
+
+ +

◆ _fGlobalStepScale

+ +
+
+ + + + + +
+ + + + +
double covarianceBase::_fGlobalStepScale
+
+protected
+
+ +

Definition at line 331 of file covarianceBase.h.

+ +
+
+ +

◆ _fIndivStepScale

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fIndivStepScale
+
+protected
+
+ +

Definition at line 353 of file covarianceBase.h.

+ +
+
+ +

◆ _fLowBound

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fLowBound
+
+protected
+
+ +

Definition at line 351 of file covarianceBase.h.

+ +
+
+ +

◆ _fNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> covarianceBase::_fNames
+
+protected
+
+ +

Definition at line 342 of file covarianceBase.h.

+ +
+
+ +

◆ _fNumPar

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::_fNumPar
+
+protected
+
+ +

Definition at line 344 of file covarianceBase.h.

+ +
+
+ +

◆ _fPreFitValue

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fPreFitValue
+
+protected
+
+ +

Definition at line 346 of file covarianceBase.h.

+ +
+
+ +

◆ _fPropVal

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fPropVal
+
+protected
+
+ +

Definition at line 348 of file covarianceBase.h.

+ +
+
+ +

◆ _fUpBound

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::_fUpBound
+
+protected
+
+ +

Definition at line 352 of file covarianceBase.h.

+ +
+
+ +

◆ _fYAMLDoc

+ +
+
+ + + + + +
+ + + + +
YAML::Node covarianceBase::_fYAMLDoc
+
+protected
+
+ +

Definition at line 345 of file covarianceBase.h.

+ +
+
+ +

◆ adaptiveCovariance

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* covarianceBase::adaptiveCovariance
+
+protected
+
+ +

Definition at line 393 of file covarianceBase.h.

+ +
+
+ +

◆ corr_throw

+ +
+
+ + + + + +
+ + + + +
double* covarianceBase::corr_throw
+
+protected
+
+ +

Definition at line 330 of file covarianceBase.h.

+ +
+
+ +

◆ covMatrix

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* covarianceBase::covMatrix
+
+protected
+
+ +

Definition at line 319 of file covarianceBase.h.

+ +
+
+ +

◆ eigen_threshold

+ +
+
+ + + + + +
+ + + + +
double covarianceBase::eigen_threshold
+
+protected
+
+ +

Definition at line 361 of file covarianceBase.h.

+ +
+
+ +

◆ eigen_values

+ +
+
+ + + + + +
+ + + + +
TVectorD covarianceBase::eigen_values
+
+protected
+
+ +

Definition at line 366 of file covarianceBase.h.

+ +
+
+ +

◆ eigen_values_master

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::eigen_values_master
+
+protected
+
+ +

Definition at line 368 of file covarianceBase.h.

+ +
+
+ +

◆ eigen_vectors

+ +
+
+ + + + + +
+ + + + +
TMatrixD covarianceBase::eigen_vectors
+
+protected
+
+ +

Definition at line 367 of file covarianceBase.h.

+ +
+
+ +

◆ FirstPCAdpar

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::FirstPCAdpar
+
+protected
+
+ +

Definition at line 363 of file covarianceBase.h.

+ +
+
+ +

◆ fParCurr_PCA

+ +
+
+ + + + + +
+ + + + +
TVectorD covarianceBase::fParCurr_PCA
+
+protected
+
+ +

Definition at line 373 of file covarianceBase.h.

+ +
+
+ +

◆ fParProp_PCA

+ +
+
+ + + + + +
+ + + + +
TVectorD covarianceBase::fParProp_PCA
+
+protected
+
+ +

Definition at line 372 of file covarianceBase.h.

+ +
+
+ +

◆ fParSigma_PCA

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::fParSigma_PCA
+
+protected
+
+ +

Definition at line 374 of file covarianceBase.h.

+ +
+
+ +

◆ inputFile

+ +
+
+ + + + + +
+ + + + +
const std::string covarianceBase::inputFile
+
+protected
+
+ +

Definition at line 313 of file covarianceBase.h.

+ +
+
+ +

◆ invCovMatrix

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* covarianceBase::invCovMatrix
+
+protected
+
+ +

Definition at line 321 of file covarianceBase.h.

+ +
+
+ +

◆ InvertCovMatrix

+ +
+
+ + + + + +
+ + + + +
double** covarianceBase::InvertCovMatrix
+
+protected
+
+ +

Definition at line 323 of file covarianceBase.h.

+ +
+
+ +

◆ isDecomposed_PCA

+ +
+
+ + + + + +
+ + + + +
std::vector<int> covarianceBase::isDecomposed_PCA
+
+protected
+
+ +

Definition at line 375 of file covarianceBase.h.

+ +
+
+ +

◆ LastPCAdpar

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::LastPCAdpar
+
+protected
+
+ +

Definition at line 364 of file covarianceBase.h.

+ +
+
+ +

◆ lower_adapt

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::lower_adapt
+
+protected
+
+ +

Definition at line 389 of file covarianceBase.h.

+ +
+
+ +

◆ matrixName

+ +
+
+ + + + + +
+ + + + +
const char* covarianceBase::matrixName
+
+protected
+
+ +

Definition at line 317 of file covarianceBase.h.

+ +
+
+ +

◆ nKeptPCApars

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::nKeptPCApars
+
+protected
+
+ +

Definition at line 365 of file covarianceBase.h.

+ +
+
+ +

◆ npars

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::npars
+
+protected
+
+ +

Definition at line 362 of file covarianceBase.h.

+ +
+
+ +

◆ par_means

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::par_means
+
+protected
+
+ +

Definition at line 391 of file covarianceBase.h.

+ +
+
+ +

◆ par_means_prev

+ +
+
+ + + + + +
+ + + + +
std::vector<double> covarianceBase::par_means_prev
+
+protected
+
+ +

Definition at line 392 of file covarianceBase.h.

+ +
+
+ +

◆ pca

+ +
+
+ + + + + +
+ + + + +
bool covarianceBase::pca
+
+protected
+
+ +

Definition at line 360 of file covarianceBase.h.

+ +
+
+ +

◆ PrintLength

+ +
+
+ + + + + +
+ + + + +
unsigned int covarianceBase::PrintLength
+
+protected
+
+ +

Definition at line 334 of file covarianceBase.h.

+ +
+
+ +

◆ random_number

+ +
+
+ + + + + +
+ + + + +
TRandom3** covarianceBase::random_number
+
+protected
+
+ +

Definition at line 326 of file covarianceBase.h.

+ +
+
+ +

◆ randParams

+ +
+
+ + + + + +
+ + + + +
double* covarianceBase::randParams
+
+protected
+
+ +

Definition at line 329 of file covarianceBase.h.

+ +
+
+ +

◆ size

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::size
+
+protected
+
+ +

Definition at line 315 of file covarianceBase.h.

+ +
+
+ +

◆ throwMatrix

+ +
+
+ + + + + +
+ + + + +
TMatrixDSym* covarianceBase::throwMatrix
+
+protected
+
+ +

Definition at line 378 of file covarianceBase.h.

+ +
+
+ +

◆ throwMatrix_CholDecomp

+ +
+
+ + + + + +
+ + + + +
TMatrixD* covarianceBase::throwMatrix_CholDecomp
+
+protected
+
+ +

Definition at line 379 of file covarianceBase.h.

+ +
+
+ +

◆ throwMatrixCholDecomp

+ +
+
+ + + + + +
+ + + + +
double** covarianceBase::throwMatrixCholDecomp
+
+protected
+
+ +

Definition at line 381 of file covarianceBase.h.

+ +
+
+ +

◆ total_steps

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::total_steps
+
+protected
+
+ +

Definition at line 388 of file covarianceBase.h.

+ +
+
+ +

◆ TransferMat

+ +
+
+ + + + + +
+ + + + +
TMatrixD covarianceBase::TransferMat
+
+protected
+
+ +

Definition at line 369 of file covarianceBase.h.

+ +
+
+ +

◆ TransferMatT

+ +
+
+ + + + + +
+ + + + +
TMatrixD covarianceBase::TransferMatT
+
+protected
+
+ +

Definition at line 370 of file covarianceBase.h.

+ +
+
+ +

◆ Unity

+ +
+
+ + + + + +
+ + + + +
const double covarianceBase::Unity = 1.0
+
+protected
+
+ +

Definition at line 357 of file covarianceBase.h.

+ +
+
+ +

◆ upper_adapt

+ +
+
+ + + + + +
+ + + + +
int covarianceBase::upper_adapt
+
+protected
+
+ +

Definition at line 389 of file covarianceBase.h.

+ +
+
+ +

◆ use_adaptive

+ +
+
+ + + + + +
+ + + + +
bool covarianceBase::use_adaptive
+
+protected
+
+ +

Definition at line 387 of file covarianceBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classcovarianceBase.png b/classcovarianceBase.png new file mode 100644 index 0000000000000000000000000000000000000000..df7190080148569866accbd055771330826fa282 GIT binary patch literal 701 zcmV;u0z&vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0006= zNklyoN45C)qsRn)xy6Q4bZWWvp56H%zqY9qNg>0HLY0Dq(Fy6zMJ&ZaXn zJAse`Xi3PKnN<>U04@2g+>3rgLNqhm;>tTW{LJ2OeN=8-_(w4@Ru1pn=)1ZR#Sq`+ z({kekSBqh$uC{#2MfvE)e}mk@(bc#|uj7pKE=`T!DK{R&VanwxUCQN3*XMC83uAz@ z*^`^GauCa+*z?@w%kG@ti5D003U{u|ebegyJQay$%A1R9`8WiO&CK3P$N{t@ z}51iYLioj}M*QZ*qbN$m)^=c|*XJ-VNlB(3oWxfk&s z%{!f%?%WV(E7%)$?tiGg1t{dkb$=8SW99J9jlQcJF%5F9n{t)$vfNtZOm6JES`6b| zZTXao>6;t6C085ou>wBgEb3ft5!0_wG5bvA>mRz7o|eYt5_7N=$zELZwt zc}(tjylKc7u9(HIgu<=CD3W4uMUjXO6_ zH_t5}meeORx5l#(`OD#Kc|4xGYOk}UB)yL}{Le|!9w8@5)r6cRwIk#tshW_Jq;}k0 jE~S*tz{#bQ(i!{%wZ?7O#w4|c00000NkvXXu0mjfDcn@y literal 0 HcmV?d00001 diff --git a/classcovarianceOsc-members.html b/classcovarianceOsc-members.html new file mode 100644 index 00000000..2e5ff93c --- /dev/null +++ b/classcovarianceOsc-members.html @@ -0,0 +1,261 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
covarianceOsc Member List
+
+
+ +

This is the complete list of members for covarianceOsc, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_fCurrValcovarianceBaseprotected
_fErrorcovarianceBaseprotected
_fFancyNamescovarianceBaseprotected
_fFlatPriorcovarianceBaseprotected
_fGeneratedcovarianceBaseprotected
_fGlobalStepScalecovarianceBaseprotected
_fIndivStepScalecovarianceBaseprotected
_fLowBoundcovarianceBaseprotected
_fNamescovarianceBaseprotected
_fNumParcovarianceBaseprotected
_fPreFitValuecovarianceBaseprotected
_fPropValcovarianceBaseprotected
_fUpBoundcovarianceBaseprotected
_fYAMLDoccovarianceBaseprotected
acceptStep()covarianceBase
adaptiveCovariancecovarianceBaseprotected
CalcLikelihood()covarianceBase
calcReWeight(const int bin)covarianceBaseinline
CheckBounds() overridecovarianceOscinlinevirtual
CheckOrderOfParams()covarianceOsc
ConstructPCA()covarianceBase
corr_throwcovarianceBaseprotected
CorrelateSteps()covarianceBaseprotected
covarianceBase(std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)covarianceBase
covarianceBase(const char *name, const char *file)covarianceBase
covarianceBase(const char *name, const char *file, int seed)covarianceBase
covarianceBase(const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)covarianceBase
covarianceOsc(const char *name, const char *file)covarianceOsc
covMatrixcovarianceBaseprotected
densitycovarianceOscprotected
eigen_thresholdcovarianceBaseprotected
eigen_valuescovarianceBaseprotected
eigen_values_mastercovarianceBaseprotected
eigen_vectorscovarianceBaseprotected
enableAdaptiveMCMC(bool enable=true)covarianceBaseinline
FirstPCAdparcovarianceBaseprotected
flipBetacovarianceOscprotected
flipdelMcovarianceOscprotected
fParCurr_PCAcovarianceBaseprotected
fParProp_PCAcovarianceBaseprotected
fParSigma_PCAcovarianceBaseprotected
GetCorrelationMatrix()covarianceBase
getCovMatrix()covarianceBaseinline
GetDensity()covarianceOscinline
getDiagonalError(const int i)covarianceBaseinline
getEigenValues()covarianceBaseinline
getEigenValuesMaster()covarianceBaseinline
getEigenVectors()covarianceBaseinline
getEvalLikelihood(const int i)covarianceBaseinline
GetGenerated(const int i)covarianceBaseinline
getGeneratedValues()covarianceBaseinline
getInputFile() constcovarianceBaseinline
getInvCovMatrix()covarianceBaseinline
GetLikelihood()covarianceOscvirtual
GetLowerBound(const int i)covarianceBaseinline
getName()covarianceBaseinline
getNominal(const int i)covarianceBaseinlinevirtual
getNominalArray()covarianceBasevirtual
getNpars()covarianceBaseinline
GetNumParams()covarianceBaseinline
getParameterMeans()covarianceBaseinline
getParCurr(const int i)covarianceBaseinline
getParCurr_PCA(const int i)covarianceBaseinline
GetParFancyName(const int i)covarianceBaseinline
GetParFancyName(const int i) constcovarianceBaseinline
getParInit(const int i)covarianceBaseinline
GetParName(const int i)covarianceBaseinline
GetParName(const int i) constcovarianceBaseinline
getParProp(const int i)covarianceBaseinline
getParProp_PCA(const int i)covarianceBaseinline
GetPathLength()covarianceOscinline
GetPerformBetaStudy()covarianceOscinline
getPreFitValues()covarianceBaseinline
getProposed() constcovarianceBase
getPropPars()covarianceOsc
getSize()covarianceBaseinline
getThrowMatrix()covarianceBaseinline
getThrowMatrix_CholDecomp()covarianceBaseinline
getTransferMatrix()covarianceBaseinline
GetUpperBound(const int i)covarianceBaseinline
init(const char *name, const char *file)covarianceBaseprotected
init(std::vector< std::string > YAMLFile)covarianceBaseprotected
init(TMatrixDSym *covMat)covarianceBaseprotected
initialiseNewAdaptiveChain()covarianceBaseprotected
inputFilecovarianceBaseprotected
invCovMatrixcovarianceBaseprotected
InvertCovMatrixcovarianceBaseprotected
isDecomposed_PCAcovarianceBaseprotected
isParameterFixed(const int i)covarianceBaseinline
isParameterFixedPCA(const int i)covarianceBaseinline
IsPCA()covarianceBaseinline
kBetacovarianceOscprotected
kDeltaCPcovarianceOscprotected
kDeltaM23covarianceOscprotected
kSinTheta23covarianceOscprotected
LcovarianceOscprotected
LastPCAdparcovarianceBaseprotected
lower_adaptcovarianceBaseprotected
makeClosestPosDef(TMatrixDSym *cov)covarianceBaseprotected
MakePosDef(TMatrixDSym *cov=NULL)covarianceBaseprotected
matrixNamecovarianceBaseprotected
MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)covarianceBaseinline
MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)covarianceBaseinline
nKeptPCAparscovarianceBaseprotected
nparscovarianceBaseprotected
oscpars1covarianceOscprotected
par_meanscovarianceBaseprotected
par_means_prevcovarianceBaseprotected
pcacovarianceBaseprotected
PerformBetaStudycovarianceOscprotected
Print()covarianceOsc
printIndivStepScale()covarianceBase
PrintLengthcovarianceBaseprotected
printNominal()covarianceBase
printNominalCurrProp()covarianceBase
printPars()covarianceBase
proposeStep() overridecovarianceOscvirtual
random_numbercovarianceBaseprotected
RandomConfiguration()covarianceBase
randomize()covarianceBaseprotected
randParamscovarianceBaseprotected
reactorPriorcovarianceOscprotected
ReserveMemory(const int size)covarianceBaseprotected
resetIndivStepScale()covarianceBase
retPointer(int iParam)covarianceBaseinline
ReturnUnity()covarianceBaseinlineprotected
saveAdaptiveToFile(TString outFileName, TString systematicName)covarianceBase
setAdaptiveThresholds(const int low_threshold=10000, const int up_threshold=1000000)covarianceBaseinline
setBranches(TTree &tree)covarianceBase
setCovMatrix(TMatrixDSym *cov)covarianceBase
setEvalLikelihood(int i, bool eL)covarianceBase
setExtraBranches(TTree &tree)covarianceOsc
setFlipBeta(bool flip)covarianceOscinline
setFlipDeltaM23(bool flip)covarianceOscinline
setIndivStepScale(int ParameterIndex, double StepScale)covarianceBaseinline
setIndivStepScale(std::vector< double > stepscale)covarianceBase
setName(const char *name)covarianceBaseinline
setNumberOfSteps(const int nsteps)covarianceBaseinline
setPar(const int i, const double val)covarianceBase
setParameters(std::vector< double > pars=std::vector< double >())covarianceBase
setParameters_PCA(std::vector< double > pars)covarianceBaseinline
setParCurr_PCA(const int i, const double value)covarianceBaseinline
setParCurrProp(int i, double val)covarianceBase
setParName(int i, char *name)covarianceBaseinline
setParProp(int i, double val)covarianceBaseinline
setParProp_PCA(const int i, const double value)covarianceBaseinline
setPrintLength(const unsigned int PriLen)covarianceBaseinline
setSingleParameter(const int parNo, const double parVal)covarianceBase
setStepScale(double scale)covarianceBase
setThrowMatrix(TMatrixDSym *cov)covarianceBase
sizecovarianceBaseprotected
throwMatrixcovarianceBaseprotected
throwMatrix_CholDecompcovarianceBaseprotected
throwMatrixCholDecompcovarianceBaseprotected
throwNominal(bool nomValues=false, int seed=0)covarianceBase
throwParameters()covarianceBase
throwParCurr(const double mag=1.)covarianceBase
throwParProp(const double mag=1.)covarianceBase
toggleFixAllParameters()covarianceBase
toggleFixParameter(const int i)covarianceBase
total_stepscovarianceBaseprotected
TransferMatcovarianceBaseprotected
TransferMatTcovarianceBaseprotected
TransferToParam()covarianceBaseprotected
TransferToPCA()covarianceBaseprotected
UnitycovarianceBaseprotected
updateAdaptiveCovariance()covarianceBase
updateThrowMatrix(TMatrixDSym *cov)covarianceBase
upper_adaptcovarianceBaseprotected
use_adaptivecovarianceBaseprotected
useReactorPrior(bool reactor)covarianceOscinline
useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")covarianceBase
useSeparateThrowMatrix()covarianceBase
~covarianceBase()covarianceBasevirtual
~covarianceOsc()covarianceOscvirtual
+ + + + diff --git a/classcovarianceOsc.html b/classcovarianceOsc.html new file mode 100644 index 00000000..e0e8a4fd --- /dev/null +++ b/classcovarianceOsc.html @@ -0,0 +1,1400 @@ + + + + + + + +MaCh3: covarianceOsc Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
covarianceOsc Class Reference
+
+
+ +

#include <covarianceOsc.h>

+
+Inheritance diagram for covarianceOsc:
+
+
+ + +covarianceBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 covarianceOsc (const char *name, const char *file)
 
virtual ~covarianceOsc ()
 
double GetLikelihood ()
 
int CheckBounds () override
 
doublegetPropPars ()
 
void proposeStep () override
 
void setFlipDeltaM23 (bool flip)
 
void setFlipBeta (bool flip)
 
void useReactorPrior (bool reactor)
 
void setExtraBranches (TTree &tree)
 
double GetPathLength ()
 
double GetDensity ()
 
bool GetPerformBetaStudy ()
 
void Print ()
 
void CheckOrderOfParams ()
 
- Public Member Functions inherited from covarianceBase
 covarianceBase (std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
 
 covarianceBase (const char *name, const char *file)
 
 covarianceBase (const char *name, const char *file, int seed)
 
 covarianceBase (const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)
 
virtual ~covarianceBase ()
 
void setCovMatrix (TMatrixDSym *cov)
 
void setName (const char *name)
 
void setParName (int i, char *name)
 
void setSingleParameter (const int parNo, const double parVal)
 
void setPar (const int i, const double val)
 
void setParCurrProp (int i, double val)
 
void setParProp (int i, double val)
 
void setParameters (std::vector< double > pars=std::vector< double >())
 
void setEvalLikelihood (int i, bool eL)
 
void setBranches (TTree &tree)
 
void setStepScale (double scale)
 
void setIndivStepScale (int ParameterIndex, double StepScale)
 
void setIndivStepScale (std::vector< double > stepscale)
 
void setPrintLength (const unsigned int PriLen)
 
void throwParProp (const double mag=1.)
 
void throwParCurr (const double mag=1.)
 
void throwParameters ()
 
void throwNominal (bool nomValues=false, int seed=0)
 
void RandomConfiguration ()
 
double CalcLikelihood ()
 
TMatrixDSymgetCovMatrix ()
 
TMatrixDSymgetInvCovMatrix ()
 
bool getEvalLikelihood (const int i)
 
const chargetName ()
 
std::string GetParName (const int i)
 
const charGetParName (const int i) const
 
std::string GetParFancyName (const int i)
 
const charGetParFancyName (const int i) const
 
std::string const getInputFile () const
 
double getDiagonalError (const int i)
 
void resetIndivStepScale ()
 
void useSeparateThrowMatrix (TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")
 
void useSeparateThrowMatrix ()
 
void saveAdaptiveToFile (TString outFileName, TString systematicName)
 
void setThrowMatrix (TMatrixDSym *cov)
 
void updateThrowMatrix (TMatrixDSym *cov)
 
void setNumberOfSteps (const int nsteps)
 
void setAdaptiveThresholds (const int low_threshold=10000, const int up_threshold=1000000)
 
TMatrixDSymgetThrowMatrix ()
 
TMatrixDgetThrowMatrix_CholDecomp ()
 
std::vector< doublegetParameterMeans ()
 
TH2DGetCorrelationMatrix ()
 
double calcReWeight (const int bin)
 
const doubleretPointer (int iParam)
 
int GetNumParams ()
 
virtual std::vector< doublegetNominalArray ()
 
const std::vector< double > & getPreFitValues ()
 
const std::vector< double > & getGeneratedValues ()
 
const std::vector< doublegetProposed () const
 
double getParProp (const int i)
 
double getParCurr (const int i)
 
double getParInit (const int i)
 
virtual double getNominal (const int i)
 
double GetGenerated (const int i)
 
double GetUpperBound (const int i)
 
double GetLowerBound (const int i)
 
double getParProp_PCA (const int i)
 
double getParCurr_PCA (const int i)
 
bool isParameterFixedPCA (const int i)
 
const TMatrixD getTransferMatrix ()
 
const TMatrixD getEigenVectors ()
 
const TVectorD getEigenValues ()
 
const std::vector< doublegetEigenValuesMaster ()
 
void setParProp_PCA (const int i, const double value)
 
void setParCurr_PCA (const int i, const double value)
 
void setParameters_PCA (std::vector< double > pars)
 
int getSize ()
 
int getNpars ()
 
void printNominal ()
 
void printNominalCurrProp ()
 
void printPars ()
 
void printIndivStepScale ()
 
void acceptStep ()
 
void toggleFixAllParameters ()
 
void toggleFixParameter (const int i)
 
bool isParameterFixed (const int i)
 
void ConstructPCA ()
 
bool IsPCA ()
 
void MatrixVectorMulti (double *VecMulti, double **matrix, const double *vector, const int n)
 
double MatrixVectorMultiSingle (double **matrix, const double *vector, const int Length, const int i)
 
void enableAdaptiveMCMC (bool enable=true)
 
void updateAdaptiveCovariance ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double L
 
double density
 
bool flipdelM
 
bool reactorPrior
 
bool flipBeta
 
doubleoscpars1
 
bool PerformBetaStudy
 
int kDeltaCP
 
int kDeltaM23
 
int kSinTheta23
 
int kBeta
 
- Protected Attributes inherited from covarianceBase
const std::string inputFile
 
int size
 
const charmatrixName
 
TMatrixDSymcovMatrix
 
TMatrixDSyminvCovMatrix
 
double ** InvertCovMatrix
 
TRandom3 ** random_number
 
doublerandParams
 
doublecorr_throw
 
double _fGlobalStepScale
 
unsigned int PrintLength
 
std::vector< std::string > _fNames
 
std::vector< std::string > _fFancyNames
 
int _fNumPar
 
YAML::Node _fYAMLDoc
 
std::vector< double_fPreFitValue
 
std::vector< double_fCurrVal
 
std::vector< double_fPropVal
 
std::vector< double_fGenerated
 
std::vector< double_fError
 
std::vector< double_fLowBound
 
std::vector< double_fUpBound
 
std::vector< double_fIndivStepScale
 
std::vector< bool_fFlatPrior
 
const double Unity = 1.0
 
bool pca
 
double eigen_threshold
 
int npars
 
int FirstPCAdpar
 
int LastPCAdpar
 
int nKeptPCApars
 
TVectorD eigen_values
 
TMatrixD eigen_vectors
 
std::vector< doubleeigen_values_master
 
TMatrixD TransferMat
 
TMatrixD TransferMatT
 
TVectorD fParProp_PCA
 
TVectorD fParCurr_PCA
 
std::vector< doublefParSigma_PCA
 
std::vector< intisDecomposed_PCA
 
TMatrixDSymthrowMatrix
 
TMatrixDthrowMatrix_CholDecomp
 
double ** throwMatrixCholDecomp
 
bool use_adaptive
 
int total_steps
 
int lower_adapt
 
int upper_adapt
 
std::vector< doublepar_means
 
std::vector< doublepar_means_prev
 
TMatrixDSymadaptiveCovariance
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from covarianceBase
void init (const char *name, const char *file)
 
void init (std::vector< std::string > YAMLFile)
 
void init (TMatrixDSym *covMat)
 
void ReserveMemory (const int size)
 
void randomize ()
 
void CorrelateSteps ()
 
void MakePosDef (TMatrixDSym *cov=NULL)
 
void makeClosestPosDef (TMatrixDSym *cov)
 
void TransferToPCA ()
 
void TransferToParam ()
 
const doubleReturnUnity ()
 
void initialiseNewAdaptiveChain ()
 
+

Detailed Description

+
+

Definition at line 6 of file covarianceOsc.h.

+

Constructor & Destructor Documentation

+ +

◆ covarianceOsc()

+ +
+
+ + + + + + + + + + + + + + + + + + +
covarianceOsc::covarianceOsc (const charname,
const charfile 
)
+
+ +

Definition at line 4 of file covarianceOsc.cpp.

+
5: covarianceBase(name, file) {
+
6// *************************************
+
7
+
8 //Read in osc pars from xml file
+
9 TFile *infile = new TFile(file, "READ");
+
10 TVectorD* osc_prior = (TVectorD*)infile->Get("osc_nom");
+
11 TVectorD* osc_stepscale = (TVectorD*)infile->Get("osc_stepscale");
+
12 TVectorD* osc_sigma = (TVectorD*)infile->Get("osc_sigma");
+
13 TVectorD* osc_flat_prior = (TVectorD*)infile->Get("osc_flat_prior");
+
14
+
15 TObjArray* objarr_name = (TObjArray*)(infile->Get("osc_param_names"));
+
16
+
17 TVectorD* osc_baseline = (TVectorD*)infile->Get("osc_baseline");
+
18 TVectorD* osc_density = (TVectorD*)infile->Get("osc_density");
+
19 double fScale = 1.0;
+
20
+
21 //KS: Save all necessary information from covariance
+
22 for(int io = 0; io < size; io++)
+
23 {
+
24 _fNames[io] = std::string(((TObjString*)objarr_name->At(io))->GetString());
+
25
+
26 _fPreFitValue[io] = (*osc_prior)(io);
+ +
28 _fError[io] = (*osc_sigma)(io);
+
29
+
30 _fIndivStepScale[io] = fScale * (*osc_stepscale)(io);
+
31
+
32 //KS: Set flat prior
+
33 if( (bool)((*osc_flat_prior)(io)) ) setEvalLikelihood(io,false);
+
34 }
+
35
+
36 kDeltaCP = -999;
+
37 kDeltaM23 = -999;
+
38 kSinTheta23 = -999;
+
39 kBeta = -999;
+
40 PerformBetaStudy = false;
+
41 for(int io = 0; io < size; io++)
+
42 {
+
43 if(_fNames[io] == "delta_cp") kDeltaCP = io;
+
44 if(_fNames[io] == "delm2_23") kDeltaM23 = io;
+
45 if(_fNames[io] == "sin2th_23") kSinTheta23 = io;
+
46 if(_fNames[io] == "beta")
+
47 {
+
48 PerformBetaStudy = true;
+
49 kBeta = io;
+
50 }
+
51 }
+
52
+
53 L = (*osc_baseline)(0);
+
54 density = (*osc_density)(0);
+
55
+
56 flipdelM = false;
+
57 reactorPrior = false;
+
58 flipBeta = false;
+
59
+
60 randomize();
+
61
+
62 oscpars1 = new double[10];
+
63
+
64 //KS:those are constant no need to overwrite them each time
+
65 oscpars1[6] = 2;
+
66 oscpars1[7] = L;
+
67 oscpars1[8] = density;
+
68
+
69 Print();
+ +
71
+
72 infile->Close();
+
73 delete infile;
+
74
+
75 std::cout << "created oscillation parameter handler" << std::endl;
+
76}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
std::vector< double > _fPropVal
+ +
std::vector< double > _fError
+
std::vector< double > _fIndivStepScale
+
std::vector< std::string > _fNames
+
std::vector< double > _fPreFitValue
+ +
void setEvalLikelihood(int i, bool eL)
+
std::vector< double > _fCurrVal
+ + + + +
void CheckOrderOfParams()
+ + + + + +
double * oscpars1
+ + +
+
+
+ +

◆ ~covarianceOsc()

+ +
+
+ + + + + +
+ + + + + + + +
covarianceOsc::~covarianceOsc ()
+
+virtual
+
+ +

Definition at line 79 of file covarianceOsc.cpp.

+
79 {
+
80// *************************************
+
81
+
82 delete[] oscpars1;
+
83}
+
+
+
+

Member Function Documentation

+ +

◆ CheckBounds()

+ +
+
+ + + + + +
+ + + + + + + +
int covarianceOsc::CheckBounds ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from covarianceBase.

+ +

Definition at line 86 of file covarianceOsc.cpp.

+
86 {
+
87// *************************************
+
88 int NOutside = 0;
+
89
+
90 // ensure osc params don't go unphysical
+
91 if (_fPropVal[0] > 1.0 || _fPropVal[0] < 0 ||
+ +
93 _fPropVal[2] > 1.0 || _fPropVal[2] < 0
+
94 //|| _fPropVal[kDeltaM23] < 0.0 || _fPropVal[kDeltaM23] > 20E-3 // don't let dm32 go to IH
+
95 //|| fabs(_fPropVal[kDeltaM23]) > 0.004 || fabs(_fPropVal[kDeltaM23]) < 0.001
+
96 //|| _fPropVal[kDeltaCP] < -1*TMath::Pi() || _fPropVal[kDeltaCP] > TMath::Pi()
+
97 ){ NOutside++;}
+
98
+ +
100 if(_fPropVal[kBeta] < 0) { // Don't let beta be less than 0 (no upper limit)
+
101 NOutside++;
+
102 }
+
103 }
+
104
+
105 return NOutside;
+
106}
+
+
+
+ +

◆ CheckOrderOfParams()

+ +
+
+ + + + + + + +
void covarianceOsc::CheckOrderOfParams ()
+
+ +

Definition at line 240 of file covarianceOsc.cpp.

+
240 {
+
241// *************************************
+
242
+
243 std::vector<int> wrongParam;
+
244 bool wrongMatrix = false;
+
245 if(strcmp( _fNames[0].c_str(),"sin2th_12") != 0 ){wrongParam.push_back(0); wrongMatrix = true;};
+
246 if(strcmp( _fNames[1].c_str(),"sin2th_23") != 0 ){wrongParam.push_back(1); wrongMatrix = true;};
+
247 if(strcmp( _fNames[2].c_str(),"sin2th_13") != 0 ){wrongParam.push_back(2); wrongMatrix = true;};
+
248 if(strcmp( _fNames[3].c_str(),"delm2_12") != 0 ){wrongParam.push_back(3); wrongMatrix = true;};
+
249 if(strcmp( _fNames[4].c_str(),"delm2_23") != 0 ){wrongParam.push_back(4); wrongMatrix = true;};
+
250 if(strcmp( _fNames[5].c_str(),"delta_cp") != 0 ){wrongParam.push_back(5); wrongMatrix = true;};
+
251 if(PerformBetaStudy && strcmp( _fNames[6].c_str(),"beta") != 0 ){wrongParam.push_back(6); wrongMatrix = true;};
+
252
+
253 if(wrongMatrix)
+
254 {
+
255 for(unsigned int i = 0; i < wrongParam.size(); i++ )
+
256 {
+
257 std::cerr << "Osc Patameter "<< _fNames[i].c_str() <<" isn't in good order"<<std::endl;
+
258 }
+
259 std::cerr << "Currently prob3++/probgp requires particular order"<< std::endl;
+
260 std::cerr << "Please modify XML and make new matrix with good order"<< std::endl;
+
261 std::cerr << "Find me here "<<__FILE__ << ":" << __LINE__ << std::endl;
+
262 throw;
+
263 }
+
264}
+
+
+
+ +

◆ GetDensity()

+ +
+
+ + + + + +
+ + + + + + + +
double covarianceOsc::GetDensity ()
+
+inline
+
+ +

Definition at line 21 of file covarianceOsc.h.

+
21{ return density;}
+
+
+
+ +

◆ GetLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
double covarianceOsc::GetLikelihood ()
+
+virtual
+
+ +

Reimplemented from covarianceBase.

+ +

Definition at line 108 of file covarianceOsc.cpp.

+
108 {
+
109// *************************************
+
110
+
111 double logL = 0.0;
+ +
113
+
114 // reactor prior
+
115 // ETA - we can remove this
+
116 if (reactorPrior)
+
117 {
+
118 // Reactor prior from 2013 PDG: sin^2(2theta13) = 0.095 +/- 0.01
+
119 // Reactor prior from 2014 PDG: sin^2(2theta13) = 0.093 +/- 0.008
+
120 // Reactor prior from 2015 PDG: sin^2(2theta13) = 0.085 +/- 0.005
+
121 // Reactor prior from 2016ca PDG: sin^2(2theta13) = 0.0857 +/- 0.0046
+
122 // Next convert between single angle (what we have) and double angle (what the PDG gives)
+
123 // double dblang = 4*_fPropVal[2]*(1-_fPropVal[2]);
+
124 // double tmp = (dblang-0.0857) / 0.0046;
+
125
+
126 // Reactor prior from 2018 PDG: sin^2(theta13) = 0.0212 +/- 0.0008
+
127 // Reactor prior from 2019 PDG: sin^2(theta13) = 0.0218 +/- 0.0007
+
128 // Reactor prior from 2021 PDG: sin^2(theta13) = 0.0220 +/- 0.0007
+
129 // This time we don't have to convert between single<->double angle, PDG gives RC in single angle.
+
130
+
131 // Now calculate penalty
+
132 double tmp = (_fPropVal[2]-0.0220) / 0.0007;
+
133 //double tmp = (dblang-0.095) / 0.01;
+
134
+
135 // this line for T2K joint fit result, NOT REACTOR CONSTRAINT!
+
136 //double tmp = (_fPropVal[2] - 0.04571) / 0.01125;
+
137
+
138 // Finally: add to likelihood
+
139 logL += 0.5 * tmp * tmp;
+
140 //std::cout << "oscllh post-RC: " << logL << std::endl;
+
141 }
+
142 return logL;
+
143}
+
virtual double GetLikelihood()
+
+
+
+ +

◆ GetPathLength()

+ +
+
+ + + + + +
+ + + + + + + +
double covarianceOsc::GetPathLength ()
+
+inline
+
+ +

Definition at line 20 of file covarianceOsc.h.

+
20{ return L;}
+
+
+
+ +

◆ GetPerformBetaStudy()

+ +
+
+ + + + + +
+ + + + + + + +
bool covarianceOsc::GetPerformBetaStudy ()
+
+inline
+
+ +

Definition at line 22 of file covarianceOsc.h.

+
22{return PerformBetaStudy;}
+
+
+
+ +

◆ getPropPars()

+ +
+
+ + + + + + + +
double * covarianceOsc::getPropPars ()
+
+ +

Definition at line 146 of file covarianceOsc.cpp.

+
146 {
+
147// *************************************
+
148
+
149 for(int i = 0; i < 6; i++)
+
150 oscpars1[i] = _fPropVal[i];
+
151
+
152 //Those are constant we initialised them already
+
153 //oscpars1[6] = 2;
+
154 //oscpars1[7] = L;
+
155 //oscpars1[8] = density;
+ + +
158 else
+
159 oscpars1[9] = 1;
+
160
+
161 return oscpars1;
+
162}
+
+
+
+ +

◆ Print()

+ +
+
+ + + + + + + +
void covarianceOsc::Print ()
+
+ +

Definition at line 224 of file covarianceOsc.cpp.

+
224 {
+
225// *************************************
+
226
+
227 std::cout << "Number of pars: " << size << std::endl;
+
228 std::cout << "current " << matrixName << " parameters:" << std::endl;
+
229 std::cout << std::left << std::setw(5) << "#" << std::setw(2) << "|" << std::setw(25) << "Name" << std::setw(2) << "|" << std::setw(10) << "Nom." << std::setw(2) << "|" << std::setw(15) << "IndivStepScale" << std::setw(2) << "|" <<std::setw(15) << "_fError" << std::endl;
+
230 for(int i = 0; i < size; i++) {
+
231 std::cout << std::fixed << std::setprecision(5) << std::left << std::setw(5) << i << std::setw(2) << "|" << std::setw(25) << _fNames[i].c_str() << std::setw(2) << "|" << std::setw(10) << _fPreFitValue[i]<< std::setw(2) << "|" << std::setw(15) << _fIndivStepScale[i] << std::setw(2) << "|" << std::setw(15)<< _fError[i]<< std::endl;
+
232 }
+
233
+
234 std::cout<<"Baseline: "<< L <<std::endl;
+
235 std::cout<<"Earth Density: "<< density <<std::endl;
+
236}
+
const char * matrixName
+
+
+
+ +

◆ proposeStep()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceOsc::proposeStep ()
+
+overridevirtual
+
+ +

Reimplemented from covarianceBase.

+ +

Definition at line 164 of file covarianceOsc.cpp.

+
164 {
+
165// *************************************
+
166
+ +
168
+
169 //ETA
+
170 //this won't work if abs(_fPropVal) > 2pi so we should consider
+
171 //plonking a while here
+
172 if(_fPropVal[kDeltaCP] > TMath::Pi()) {
+
173 _fPropVal[kDeltaCP] = (-2.*TMath::Pi() + _fPropVal[kDeltaCP]);
+
174 } else if (_fPropVal[kDeltaCP] < -TMath::Pi()) {
+
175 _fPropVal[kDeltaCP] = (2.*TMath::Pi() + _fPropVal[kDeltaCP]);
+
176 }
+
177
+
178 // Okay now we've done the standard steps, we can add in our nice flips
+
179 // hierarchy flip first
+
180 if(random_number[0]->Uniform() < 0.5 && flipdelM){
+
181 _fPropVal[kDeltaM23] *= -1;
+
182 }
+
183 // now octant flip
+
184 if(random_number[0]->Uniform() < 0.5){
+
185 // flip octant around point of maximal disappearance (0.5112)
+
186 // this ensures we move to a parameter value which has the same oscillation probability
+
187 _fPropVal[kSinTheta23] = 0.5112 - (_fPropVal[kSinTheta23] - 0.5112);
+
188 }
+
189 // And the beta flip (not sure if beta will still work...)
+
190 if(flipBeta)
+
191 {
+
192 if(random_number[0]->Uniform() < 0.5) _fPropVal[kBeta] = 1-_fCurrVal[kBeta];
+
193 }
+
194}
+
TRandom3 ** random_number
+
virtual void proposeStep()
+
+
+
+ +

◆ setExtraBranches()

+ +
+
+ + + + + + + + +
void covarianceOsc::setExtraBranches (TTreetree)
+
+ +

Definition at line 197 of file covarianceOsc.cpp.

+
197 {
+
198// *************************************
+
199
+
200 // set branches to save current and proposed osc pars for dm_32 and th_23
+
201 // Is this any different for any of the other parameters?
+
202 // Or can this SetExtraBranches just be in the base class?
+
203 for (int i = 0; i < size; ++i)
+
204 {
+
205 if (!(i==1 || i==4)) continue;
+
206
+
207 char bit_c[1024] = "c_";
+ +
209 strcat(bit_c, "/D");
+
210 char name_c[1024] = "c_";
+ +
212 tree.Branch(name_c, (double*)&_fCurrVal[i], bit_c);
+
213
+
214 char bit_p[1024] = "p_";
+ +
216 strcat(bit_p, "/D");
+
217 char name_p[1024] = "p_";
+ +
219 tree.Branch(name_p, (double*)&_fPropVal[i], bit_p);
+
220 }
+
221}
+
+
+
+ +

◆ setFlipBeta()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceOsc::setFlipBeta (bool flip)
+
+inline
+
+ +

Definition at line 16 of file covarianceOsc.h.

+
16{flipBeta = flip;}
+
+
+
+ +

◆ setFlipDeltaM23()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceOsc::setFlipDeltaM23 (bool flip)
+
+inline
+
+ +

Definition at line 15 of file covarianceOsc.h.

+
15{flipdelM = flip;}
+
+
+
+ +

◆ useReactorPrior()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceOsc::useReactorPrior (bool reactor)
+
+inline
+
+ +

Definition at line 17 of file covarianceOsc.h.

+ +
+
+

Member Data Documentation

+ +

◆ density

+ +
+
+ + + + + +
+ + + + +
double covarianceOsc::density
+
+protected
+
+ +

Definition at line 29 of file covarianceOsc.h.

+ +
+
+ +

◆ flipBeta

+ +
+
+ + + + + +
+ + + + +
bool covarianceOsc::flipBeta
+
+protected
+
+ +

Definition at line 32 of file covarianceOsc.h.

+ +
+
+ +

◆ flipdelM

+ +
+
+ + + + + +
+ + + + +
bool covarianceOsc::flipdelM
+
+protected
+
+ +

Definition at line 30 of file covarianceOsc.h.

+ +
+
+ +

◆ kBeta

+ +
+
+ + + + + +
+ + + + +
int covarianceOsc::kBeta
+
+protected
+
+ +

Definition at line 39 of file covarianceOsc.h.

+ +
+
+ +

◆ kDeltaCP

+ +
+
+ + + + + +
+ + + + +
int covarianceOsc::kDeltaCP
+
+protected
+
+ +

Definition at line 36 of file covarianceOsc.h.

+ +
+
+ +

◆ kDeltaM23

+ +
+
+ + + + + +
+ + + + +
int covarianceOsc::kDeltaM23
+
+protected
+
+ +

Definition at line 37 of file covarianceOsc.h.

+ +
+
+ +

◆ kSinTheta23

+ +
+
+ + + + + +
+ + + + +
int covarianceOsc::kSinTheta23
+
+protected
+
+ +

Definition at line 38 of file covarianceOsc.h.

+ +
+
+ +

◆ L

+ +
+
+ + + + + +
+ + + + +
double covarianceOsc::L
+
+protected
+
+ +

Definition at line 29 of file covarianceOsc.h.

+ +
+
+ +

◆ oscpars1

+ +
+
+ + + + + +
+ + + + +
double* covarianceOsc::oscpars1
+
+protected
+
+ +

Definition at line 33 of file covarianceOsc.h.

+ +
+
+ +

◆ PerformBetaStudy

+ +
+
+ + + + + +
+ + + + +
bool covarianceOsc::PerformBetaStudy
+
+protected
+
+ +

Definition at line 34 of file covarianceOsc.h.

+ +
+
+ +

◆ reactorPrior

+ +
+
+ + + + + +
+ + + + +
bool covarianceOsc::reactorPrior
+
+protected
+
+ +

Definition at line 31 of file covarianceOsc.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classcovarianceOsc.png b/classcovarianceOsc.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1e494a44cbec661a2a451a18a01ecfd5d80b4f GIT binary patch literal 501 zcmVvTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0004i zNklY#d|r)jFr^7c&~sxnN94$+_*JT)atdF`qjyHxq_pn<16 zYN?M_^nUxcc@C3v|0}BJBd*IeSRkK>u*+ z0t5g)1qc9K3J?Ie6d(X_DL??=Qh)%!r2qkdO93iRN-6CSl8DIl3Xq71OFs!ZjeHE3 zh{#Oe{72=a)o~hB@AEWG)mh%YsY6vpOH#W7s0L3>NmX9E>ZX0E)G27-DUUtL9zB4D zA}&F-RIdiBN{*oJ)TR3j^rls@2Ge)XdZd01LAsCjlx2_X47ID>S7s>M{7o|Y$I;Y@ rh+L-tiHNuqAQ2Ilc7jq$X@mX%WK&k9+(Clm00000NkvXXu0mjfO6K7F literal 0 HcmV?d00001 diff --git a/classcovarianceXsec-members.html b/classcovarianceXsec-members.html new file mode 100644 index 00000000..1b9e9283 --- /dev/null +++ b/classcovarianceXsec-members.html @@ -0,0 +1,277 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
covarianceXsec Member List
+
+
+ +

This is the complete list of members for covarianceXsec, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_fCurrValcovarianceBaseprotected
_fDetIDcovarianceXsecprotected
_fErrorcovarianceBaseprotected
_fFancyNamescovarianceBaseprotected
_fFDSplineModescovarianceXsecprotected
_fFDSplineNamescovarianceXsecprotected
_fFlatPriorcovarianceBaseprotected
_fGeneratedcovarianceBaseprotected
_fGlobalStepScalecovarianceBaseprotected
_fIndivStepScalecovarianceBaseprotected
_fKinematicBoundscovarianceXsecprotected
_fKinematicParscovarianceXsecprotected
_fLowBoundcovarianceBaseprotected
_fNamescovarianceBaseprotected
_fNDSplineNamescovarianceXsecprotected
_fNeutrinoFlavourcovarianceXsecprotected
_fNeutrinoFlavourUnosccovarianceXsecprotected
_fNormModescovarianceXsecprotected
_fNumParcovarianceBaseprotected
_fParamTypecovarianceXsecprotected
_fPreFitValuecovarianceBaseprotected
_fPropValcovarianceBaseprotected
_fSplineInterpolationTypecovarianceXsecprotected
_fTargetNucleicovarianceXsecprotected
_fUpBoundcovarianceBaseprotected
_fYAMLDoccovarianceBaseprotected
acceptStep()covarianceBase
adaptiveCovariancecovarianceBaseprotected
CalcLikelihood()covarianceBase
calcReWeight(const int bin)covarianceBaseinline
CheckBounds()covarianceBasevirtual
ConstructPCA()covarianceBase
corr_throwcovarianceBaseprotected
CorrelateSteps()covarianceBaseprotected
covarianceBase(std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)covarianceBase
covarianceBase(const char *name, const char *file)covarianceBase
covarianceBase(const char *name, const char *file, int seed)covarianceBase
covarianceBase(const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)covarianceBase
covarianceXsec(std::vector< std::string > FileNames, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)covarianceXsec
covMatrixcovarianceBaseprotected
eigen_thresholdcovarianceBaseprotected
eigen_valuescovarianceBaseprotected
eigen_values_mastercovarianceBaseprotected
eigen_vectorscovarianceBaseprotected
enableAdaptiveMCMC(bool enable=true)covarianceBaseinline
FirstPCAdparcovarianceBaseprotected
fParCurr_PCAcovarianceBaseprotected
fParProp_PCAcovarianceBaseprotected
fParSigma_PCAcovarianceBaseprotected
GetCorrelationMatrix()covarianceBase
getCovMatrix()covarianceBaseinline
getDiagonalError(const int i)covarianceBaseinline
getEigenValues()covarianceBaseinline
getEigenValuesMaster()covarianceBaseinline
getEigenVectors()covarianceBaseinline
getEvalLikelihood(const int i)covarianceBaseinline
GetFDSplineFileParsNamesFromDetID(int DetID)covarianceXsec
GetFuncParsIndexFromDetID(int DetID)covarianceXsec
GetFuncParsNamesFromDetID(int DetID)covarianceXsec
GetGenerated(const int i)covarianceBaseinline
getGeneratedValues()covarianceBaseinline
getInputFile() constcovarianceBaseinline
getInvCovMatrix()covarianceBaseinline
GetLikelihood()covarianceBasevirtual
GetLowerBound(const int i)covarianceBaseinline
getName()covarianceBaseinline
GetNDSplineFileParsNamesFromDetID(int DetID)covarianceXsec
getNominal(const int i) overridecovarianceXsecinlinevirtual
getNominalArray() overridecovarianceXsecinlinevirtual
GetNormParsFromDetID(int DetID)covarianceXsec
getNpars()covarianceBaseinline
GetNumFuncParamsFromDetID(int DetID)covarianceXsec
GetNumParams()covarianceBaseinline
GetNumSplineParamsFromDetID(int DetID)covarianceXsec
getParameterMeans()covarianceBaseinline
GetParamType(const int i) constcovarianceXsecinline
getParCurr(const int i)covarianceBaseinline
getParCurr_PCA(const int i)covarianceBaseinline
GetParDetID(const int i) constcovarianceXsecinline
GetParFancyName(const int i)covarianceBaseinline
GetParFancyName(const int i) constcovarianceBaseinline
getParInit(const int i)covarianceBaseinline
GetParName(const int i)covarianceBaseinline
GetParName(const int i) constcovarianceBaseinline
getParProp(const int i)covarianceBaseinline
getParProp_PCA(const int i)covarianceBaseinline
GetParSplineInterpolation(int i)covarianceXsecinline
getPreFitValues()covarianceBaseinline
getProposed() constcovarianceBase
getSize()covarianceBaseinline
GetSplineFileParsNamesFromDetID(int DetID)covarianceXsec
GetSplineInterpolation() constcovarianceXsecinline
GetSplineModeVecFromDetID(int DetID)covarianceXsec
GetSplineParsIndexFromDetID(int DetID)covarianceXsec
GetSplineParsNamesFromDetID(int DetID)covarianceXsec
getThrowMatrix()covarianceBaseinline
getThrowMatrix_CholDecomp()covarianceBaseinline
getTransferMatrix()covarianceBaseinline
GetUpperBound(const int i)covarianceBaseinline
init(const char *name, const char *file)covarianceBaseprotected
init(std::vector< std::string > YAMLFile)covarianceBaseprotected
init(TMatrixDSym *covMat)covarianceBaseprotected
initialiseNewAdaptiveChain()covarianceBaseprotected
initParams(const double fScale)covarianceXsecprotected
InitXsecFromConfig()covarianceXsecinline
inputFilecovarianceBaseprotected
invCovMatrixcovarianceBaseprotected
InvertCovMatrixcovarianceBaseprotected
isDecomposed_PCAcovarianceBaseprotected
isFluxcovarianceXsecprotected
isParameterFixed(const int i)covarianceBaseinline
isParameterFixedPCA(const int i)covarianceBaseinline
IsParFlux(const int i)covarianceXsecinline
IsPCA()covarianceBaseinline
LastPCAdparcovarianceBaseprotected
lower_adaptcovarianceBaseprotected
makeClosestPosDef(TMatrixDSym *cov)covarianceBaseprotected
MakePosDef(TMatrixDSym *cov=NULL)covarianceBaseprotected
matrixNamecovarianceBaseprotected
MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)covarianceBaseinline
MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)covarianceBaseinline
nKeptPCAparscovarianceBaseprotected
NormParamscovarianceXsecprotected
nparscovarianceBaseprotected
par_meanscovarianceBaseprotected
par_means_prevcovarianceBaseprotected
pcacovarianceBaseprotected
Print()covarianceXsecinline
printIndivStepScale()covarianceBase
PrintLengthcovarianceBaseprotected
printNominal()covarianceBase
printNominalCurrProp()covarianceBase
printPars()covarianceBase
proposeStep()covarianceBasevirtual
random_numbercovarianceBaseprotected
RandomConfiguration()covarianceBase
randomize()covarianceBaseprotected
randParamscovarianceBaseprotected
ReserveMemory(const int size)covarianceBaseprotected
resetIndivStepScale()covarianceBase
retPointer(int iParam)covarianceBaseinline
ReturnUnity()covarianceBaseinlineprotected
saveAdaptiveToFile(TString outFileName, TString systematicName)covarianceBase
setAdaptiveThresholds(const int low_threshold=10000, const int up_threshold=1000000)covarianceBaseinline
setBranches(TTree &tree)covarianceBase
setCovMatrix(TMatrixDSym *cov)covarianceBase
setEvalLikelihood(int i, bool eL)covarianceBase
setFluxOnlyParameters()covarianceXsec
setIndivStepScale(int ParameterIndex, double StepScale)covarianceBaseinline
setIndivStepScale(std::vector< double > stepscale)covarianceBase
setName(const char *name)covarianceBaseinline
setNumberOfSteps(const int nsteps)covarianceBaseinline
setPar(const int i, const double val)covarianceBase
setParameters(std::vector< double > pars=std::vector< double >())covarianceBase
setParameters_PCA(std::vector< double > pars)covarianceBaseinline
setParCurr_PCA(const int i, const double value)covarianceBaseinline
setParCurrProp(int i, double val)covarianceBase
setParName(int i, char *name)covarianceBaseinline
setParProp(int i, double val)covarianceBaseinline
setParProp_PCA(const int i, const double value)covarianceBaseinline
setPrintLength(const unsigned int PriLen)covarianceBaseinline
setSingleParameter(const int parNo, const double parVal)covarianceBase
setStepScale(double scale)covarianceBase
setThrowMatrix(TMatrixDSym *cov)covarianceBase
SetupNormPars()covarianceXsec
setXsecOnlyParameters()covarianceXsec
setXsecParNames()covarianceXsecprotected
sizecovarianceBaseprotected
throwMatrixcovarianceBaseprotected
throwMatrix_CholDecompcovarianceBaseprotected
throwMatrixCholDecompcovarianceBaseprotected
throwNominal(bool nomValues=false, int seed=0)covarianceBase
throwParameters()covarianceBase
throwParCurr(const double mag=1.)covarianceBase
throwParProp(const double mag=1.)covarianceBase
toggleFixAllParameters()covarianceBase
toggleFixParameter(const int i)covarianceBase
total_stepscovarianceBaseprotected
TransferMatcovarianceBaseprotected
TransferMatTcovarianceBaseprotected
TransferToParam()covarianceBaseprotected
TransferToPCA()covarianceBaseprotected
UnitycovarianceBaseprotected
updateAdaptiveCovariance()covarianceBase
updateThrowMatrix(TMatrixDSym *cov)covarianceBase
upper_adaptcovarianceBaseprotected
use_adaptivecovarianceBaseprotected
useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")covarianceBase
useSeparateThrowMatrix()covarianceBase
~covarianceBase()covarianceBasevirtual
~covarianceXsec()covarianceXsec
+ + + + diff --git a/classcovarianceXsec.html b/classcovarianceXsec.html new file mode 100644 index 00000000..e2048ed2 --- /dev/null +++ b/classcovarianceXsec.html @@ -0,0 +1,2135 @@ + + + + + + + +MaCh3: covarianceXsec Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <covarianceXsec.h>

+
+Inheritance diagram for covarianceXsec:
+
+
+ + +covarianceBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 covarianceXsec (std::vector< std::string > FileNames, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
 
 ~covarianceXsec ()
 
void InitXsecFromConfig ()
 
void Print ()
 
int GetParDetID (const int i) const
 
const charGetParamType (const int i) const
 
const std::vector< SplineInterpolation > & GetSplineInterpolation () const
 
SplineInterpolation GetParSplineInterpolation (int i)
 
const std::vector< std::string > GetSplineParsNamesFromDetID (int DetID)
 
const std::vector< std::string > GetSplineFileParsNamesFromDetID (int DetID)
 
const std::vector< std::string > GetFDSplineFileParsNamesFromDetID (int DetID)
 
const std::vector< std::string > GetNDSplineFileParsNamesFromDetID (int DetID)
 
const std::vector< std::vector< int > > GetSplineModeVecFromDetID (int DetID)
 
const std::vector< intGetSplineParsIndexFromDetID (int DetID)
 
int GetNumSplineParamsFromDetID (int DetID)
 
const std::vector< XsecNorms4GetNormParsFromDetID (int DetID)
 
void SetupNormPars ()
 
int GetNumFuncParamsFromDetID (int DetID)
 
const std::vector< std::string > GetFuncParsNamesFromDetID (int DetID)
 
const std::vector< intGetFuncParsIndexFromDetID (int DetID)
 
std::vector< doublegetNominalArray () override
 
double getNominal (const int i) override
 
bool IsParFlux (const int i)
 
void setXsecOnlyParameters ()
 
void setFluxOnlyParameters ()
 
- Public Member Functions inherited from covarianceBase
 covarianceBase (std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
 
 covarianceBase (const char *name, const char *file)
 
 covarianceBase (const char *name, const char *file, int seed)
 
 covarianceBase (const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)
 
virtual ~covarianceBase ()
 
void setCovMatrix (TMatrixDSym *cov)
 
void setName (const char *name)
 
void setParName (int i, char *name)
 
void setSingleParameter (const int parNo, const double parVal)
 
void setPar (const int i, const double val)
 
void setParCurrProp (int i, double val)
 
void setParProp (int i, double val)
 
void setParameters (std::vector< double > pars=std::vector< double >())
 
void setEvalLikelihood (int i, bool eL)
 
void setBranches (TTree &tree)
 
void setStepScale (double scale)
 
void setIndivStepScale (int ParameterIndex, double StepScale)
 
void setIndivStepScale (std::vector< double > stepscale)
 
void setPrintLength (const unsigned int PriLen)
 
void throwParProp (const double mag=1.)
 
void throwParCurr (const double mag=1.)
 
void throwParameters ()
 
void throwNominal (bool nomValues=false, int seed=0)
 
void RandomConfiguration ()
 
virtual int CheckBounds ()
 
double CalcLikelihood ()
 
virtual double GetLikelihood ()
 
TMatrixDSymgetCovMatrix ()
 
TMatrixDSymgetInvCovMatrix ()
 
bool getEvalLikelihood (const int i)
 
const chargetName ()
 
std::string GetParName (const int i)
 
const charGetParName (const int i) const
 
std::string GetParFancyName (const int i)
 
const charGetParFancyName (const int i) const
 
std::string const getInputFile () const
 
double getDiagonalError (const int i)
 
void resetIndivStepScale ()
 
void useSeparateThrowMatrix (TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="")
 
void useSeparateThrowMatrix ()
 
void saveAdaptiveToFile (TString outFileName, TString systematicName)
 
void setThrowMatrix (TMatrixDSym *cov)
 
void updateThrowMatrix (TMatrixDSym *cov)
 
void setNumberOfSteps (const int nsteps)
 
void setAdaptiveThresholds (const int low_threshold=10000, const int up_threshold=1000000)
 
TMatrixDSymgetThrowMatrix ()
 
TMatrixDgetThrowMatrix_CholDecomp ()
 
std::vector< doublegetParameterMeans ()
 
TH2DGetCorrelationMatrix ()
 
double calcReWeight (const int bin)
 
const doubleretPointer (int iParam)
 
int GetNumParams ()
 
const std::vector< double > & getPreFitValues ()
 
const std::vector< double > & getGeneratedValues ()
 
const std::vector< doublegetProposed () const
 
double getParProp (const int i)
 
double getParCurr (const int i)
 
double getParInit (const int i)
 
double GetGenerated (const int i)
 
double GetUpperBound (const int i)
 
double GetLowerBound (const int i)
 
double getParProp_PCA (const int i)
 
double getParCurr_PCA (const int i)
 
bool isParameterFixedPCA (const int i)
 
const TMatrixD getTransferMatrix ()
 
const TMatrixD getEigenVectors ()
 
const TVectorD getEigenValues ()
 
const std::vector< doublegetEigenValuesMaster ()
 
void setParProp_PCA (const int i, const double value)
 
void setParCurr_PCA (const int i, const double value)
 
void setParameters_PCA (std::vector< double > pars)
 
int getSize ()
 
int getNpars ()
 
void printNominal ()
 
void printNominalCurrProp ()
 
void printPars ()
 
void printIndivStepScale ()
 
virtual void proposeStep ()
 
void acceptStep ()
 
void toggleFixAllParameters ()
 
void toggleFixParameter (const int i)
 
bool isParameterFixed (const int i)
 
void ConstructPCA ()
 
bool IsPCA ()
 
void MatrixVectorMulti (double *VecMulti, double **matrix, const double *vector, const int n)
 
double MatrixVectorMultiSingle (double **matrix, const double *vector, const int Length, const int i)
 
void enableAdaptiveMCMC (bool enable=true)
 
void updateAdaptiveCovariance ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void initParams (const double fScale)
 
void setXsecParNames ()
 
- Protected Member Functions inherited from covarianceBase
void init (const char *name, const char *file)
 
void init (std::vector< std::string > YAMLFile)
 
void init (TMatrixDSym *covMat)
 
void ReserveMemory (const int size)
 
void randomize ()
 
void CorrelateSteps ()
 
void MakePosDef (TMatrixDSym *cov=NULL)
 
void makeClosestPosDef (TMatrixDSym *cov)
 
void TransferToPCA ()
 
void TransferToParam ()
 
const doubleReturnUnity ()
 
void initialiseNewAdaptiveChain ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::vector< boolisFlux
 
std::vector< int_fDetID
 
std::vector< std::string > _fParamType
 
std::vector< std::vector< int > > _fNormModes
 
std::vector< std::vector< int > > _fTargetNuclei
 
std::vector< std::vector< int > > _fNeutrinoFlavour
 
std::vector< std::vector< int > > _fNeutrinoFlavourUnosc
 
std::vector< std::string > _fNDSplineNames
 
std::vector< std::string > _fFDSplineNames
 
std::vector< std::vector< int > > _fFDSplineModes
 
std::vector< SplineInterpolation_fSplineInterpolationType
 
std::vector< std::vector< std::string > > _fKinematicPars
 
std::vector< std::vector< std::vector< double > > > _fKinematicBounds
 
std::vector< XsecNorms4NormParams
 
- Protected Attributes inherited from covarianceBase
const std::string inputFile
 
int size
 
const charmatrixName
 
TMatrixDSymcovMatrix
 
TMatrixDSyminvCovMatrix
 
double ** InvertCovMatrix
 
TRandom3 ** random_number
 
doublerandParams
 
doublecorr_throw
 
double _fGlobalStepScale
 
unsigned int PrintLength
 
std::vector< std::string > _fNames
 
std::vector< std::string > _fFancyNames
 
int _fNumPar
 
YAML::Node _fYAMLDoc
 
std::vector< double_fPreFitValue
 
std::vector< double_fCurrVal
 
std::vector< double_fPropVal
 
std::vector< double_fGenerated
 
std::vector< double_fError
 
std::vector< double_fLowBound
 
std::vector< double_fUpBound
 
std::vector< double_fIndivStepScale
 
std::vector< bool_fFlatPrior
 
const double Unity = 1.0
 
bool pca
 
double eigen_threshold
 
int npars
 
int FirstPCAdpar
 
int LastPCAdpar
 
int nKeptPCApars
 
TVectorD eigen_values
 
TMatrixD eigen_vectors
 
std::vector< doubleeigen_values_master
 
TMatrixD TransferMat
 
TMatrixD TransferMatT
 
TVectorD fParProp_PCA
 
TVectorD fParCurr_PCA
 
std::vector< doublefParSigma_PCA
 
std::vector< intisDecomposed_PCA
 
TMatrixDSymthrowMatrix
 
TMatrixDthrowMatrix_CholDecomp
 
double ** throwMatrixCholDecomp
 
bool use_adaptive
 
int total_steps
 
int lower_adapt
 
int upper_adapt
 
std::vector< doublepar_means
 
std::vector< doublepar_means_prev
 
TMatrixDSymadaptiveCovariance
 
+

Detailed Description

+
+

Definition at line 16 of file covarianceXsec.h.

+

Constructor & Destructor Documentation

+ +

◆ covarianceXsec()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
covarianceXsec::covarianceXsec (std::vector< std::string > FileNames,
double threshold = -1,
int FirstPCAdpar = -999,
int LastPCAdpar = -999 
)
+
+ +

Definition at line 7 of file covarianceXsec.cpp.

+
+
9// ********************************************
+
10
+
11 setName("xsec_cov");
+ + +
14
+
15 //ETA - again this really doesn't need to be hear...
+
16 for (int i = 0; i < _fNumPar; i++)
+
17 {
+
18 // Sort out the print length
+
19 if(_fNames[i].length() > PrintLength) PrintLength = _fNames[i].length();
+
20 } // end the for loop
+
21
+
22 MACH3LOG_INFO("Constructing instance of covarianceXsec");
+
23 initParams(0.001);
+
24 // Print
+
25 Print();
+
26}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
std::vector< std::string > _fNames
+ +
void setName(const char *name)
+
unsigned int PrintLength
+ + +
void initParams(const double fScale)
+ + + +
+
+
+ +

◆ ~covarianceXsec()

+ +
+
+ + + + + + + +
covarianceXsec::~covarianceXsec ()
+
+ +

Definition at line 171 of file covarianceXsec.cpp.

+
171 {
+
172// ********************************************
+
173
+
174
+
175}
+
+
+
+

Member Function Documentation

+ +

◆ GetFDSplineFileParsNamesFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::string > covarianceXsec::GetFDSplineFileParsNamesFromDetID (int DetID)
+
+ +

Definition at line 226 of file covarianceXsec.cpp.

+
226 {
+
227
+
228 std::vector<std::string> returnVec;
+
229 int FDSplineCounter = 0;
+
230 for (int i = 0; i < _fNumPar; ++i) {
+
231 //std::cout << " Param i has DetID " << GetParDetID(i) << " from yaml" << std::endl;
+
232 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
233 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
234 //This is horrible but has to be here whilst the ND and FD splines are named
+
235 //differently on T2K. This is easy to fix but isn't currently available.
+
236 //std::cout << "FDSplineIndex is " << std::endl;
+
237 //std::cout << "Getting FD spline name " << _fFDSplineNames[FDSplineCounter] << " compared DetID " << DetID << " with " << GetParDetID(i) << std::endl;
+
238 returnVec.push_back(_fFDSplineNames[FDSplineCounter]); //Append spline name
+ +
240 }
+
241 }
+
242 }
+
243 return returnVec;
+
244}
+
std::vector< std::string > _fFDSplineNames
+
int GetParDetID(const int i) const
+
const char * GetParamType(const int i) const
+
+
+
+ +

◆ GetFuncParsIndexFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< int > covarianceXsec::GetFuncParsIndexFromDetID (int DetID)
+
+ +

Definition at line 485 of file covarianceXsec.cpp.

+
485 {
+
486 std::vector<int> returnVec;
+
487
+
488 for (int i = 0; i < _fNumPar; ++i) {
+
489 //std::cout << "TRYING TO SETUP FUNCTIONAL PARAMETER for " << i << " which is of type " << GetParamType(i) << std::endl;
+
490 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
491 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional param
+
492 //std::cout << "Found Functional parameter" << std::endl;
+
493 returnVec.push_back(i);
+
494 }
+
495 }
+
496 }
+
497
+
498 return returnVec;
+
499}
+
+
+
+ +

◆ GetFuncParsNamesFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::string > covarianceXsec::GetFuncParsNamesFromDetID (int DetID)
+
+ +

Definition at line 468 of file covarianceXsec.cpp.

+
468 {
+
469 std::vector<std::string> returnVec;
+
470
+
471 for (int i = 0; i < _fNumPar; ++i) {
+
472 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
473 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional param
+
474 returnVec.push_back(GetParFancyName(i));
+
475 }
+
476 }
+
477 }
+
478
+
479 return returnVec;
+
480}
+
std::string GetParFancyName(const int i)
+
+
+
+ +

◆ GetNDSplineFileParsNamesFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::string > covarianceXsec::GetNDSplineFileParsNamesFromDetID (int DetID)
+
+ +

Definition at line 249 of file covarianceXsec.cpp.

+
249 {
+
250
+
251 std::vector<std::string> returnVec;
+
252 int NDSplineCounter = 0;
+
253 for (int i = 0; i < _fNumPar; ++i) {
+
254 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
255 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
256 //This is horrible but has to be here whilst the ND and ND splines are named
+
257 //differently on T2K. This is easy to fix but isn't currently available.
+
258 std::cout << "Getting ND spline name " << _fNDSplineNames[NDSplineCounter] << std::endl;
+
259 returnVec.push_back(_fNDSplineNames[NDSplineCounter]); //Append spline name
+
260 }
+ +
262 }
+
263 }
+
264 return returnVec;
+
265}
+
std::vector< std::string > _fNDSplineNames
+
+
+
+ +

◆ getNominal()

+ +
+
+ + + + + +
+ + + + + + + + +
double covarianceXsec::getNominal (const int i)
+
+inlineoverridevirtual
+
+ +

Reimplemented from covarianceBase.

+ +

Definition at line 66 of file covarianceXsec.h.

+
66{ return _fPreFitValue.at(i); };
+
std::vector< double > _fPreFitValue
+
+
+
+ +

◆ getNominalArray()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > covarianceXsec::getNominalArray ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from covarianceBase.

+ +

Definition at line 57 of file covarianceXsec.h.

+
58 {
+
59 std::vector<double> nominal;
+
60 for (int i = 0; i < size; i++)
+
61 {
+
62 nominal.push_back(_fPreFitValue.at(i));
+
63 }
+
64 return nominal;
+
65 }
+
std::vector< int > nominal
+ +
+
+
+ +

◆ GetNormParsFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< XsecNorms4 > covarianceXsec::GetNormParsFromDetID (int DetID)
+
+ +

Definition at line 392 of file covarianceXsec.cpp.

+
392 {
+
393 std::vector<XsecNorms4> returnVec;
+
394 int norm_counter = 0;
+
395
+
396 for (int i = 0; i < _fNumPar; ++i) {
+
397 if (strcmp(GetParamType(i), "Norm") == 0) { //If parameter is implemented as a normalisation
+
398
+
399 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
400
+
401 std::vector<int> temp;
+
402
+ + +
405
+
406 //Copy the mode information into an XsecNorms4 struct
+
407 norm.modes = _fNormModes[norm_counter];
+ + + +
411
+
412 //Next ones are kinematic bounds on where normalisation parameter should apply (at the moment only etrue but hope to add q2
+
413 //We set a bool to see if any bounds exist so we can shortcircuit checking all of them every step
+
414 bool HasKinBounds=false;
+
415
+
417 //New generic cuts things
+
419 if(_fKinematicPars.at(i).size() > 0){
+
420 HasKinBounds = true;
+
421 }
+
422
+
423 for(unsigned int KinematicCut_i = 0 ; KinematicCut_i < _fKinematicPars[i].size() ; ++KinematicCut_i){
+
424 //Push back with the string for the kinematic cut
+
425 //std::cout << "----------------------" << std::endl;
+
426 //std::cout << "Will apply a cut on " << _fKinematicPars.at(i).at(KinematicCut_i) << std::endl;
+
427 norm.KinematicVarStr.push_back(_fKinematicPars.at(i).at(KinematicCut_i));
+
428 //std::cout << "With bounds " << _fKinematicBounds.at(i).at(KinematicCut_i).at(0) << " to " << _fKinematicBounds.at(i).at(KinematicCut_i).at(1) << std::endl;
+
429 //Push back with the bounds for the kinematic cut
+
430 norm.Selection.push_back(_fKinematicBounds.at(i).at(KinematicCut_i));
+
431 }
+
432
+
433 norm.hasKinBounds=HasKinBounds;
+
434 //End of kinematic bound checking
+
435
+
436 // Set the global parameter index of the normalisation parameter
+
437 norm.index=i;
+
438 //Add this parameter to the vector of parameters
+
439 returnVec.push_back(norm);
+
440 }
+
441 norm_counter++;
+
442 }
+
443 }
+
444
+
445 return returnVec;
+
446}
+ +
std::string name
Definition Structs.h:76
+
std::vector< std::vector< std::vector< double > > > _fKinematicBounds
+
std::vector< std::vector< std::string > > _fKinematicPars
+
std::vector< std::vector< int > > _fNeutrinoFlavour
+
std::vector< std::vector< int > > _fTargetNuclei
+
std::vector< std::vector< int > > _fNormModes
+
std::vector< std::vector< int > > _fNeutrinoFlavourUnosc
+
+
+
+ +

◆ GetNumFuncParamsFromDetID()

+ +
+
+ + + + + + + + +
int covarianceXsec::GetNumFuncParamsFromDetID (int DetID)
+
+ +

Definition at line 451 of file covarianceXsec.cpp.

+
451 {
+
452 int returnVal = 0;
+
453
+
454 for (int i = 0; i < _fNumPar; ++i) {
+
455 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
456 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional parameter
+
457 returnVal += 1;
+
458 }
+
459 }
+
460 }
+
461
+
462 return returnVal;
+
463}
+
+
+
+ +

◆ GetNumSplineParamsFromDetID()

+ +
+
+ + + + + + + + +
int covarianceXsec::GetNumSplineParamsFromDetID (int DetID)
+
+ +

Definition at line 179 of file covarianceXsec.cpp.

+
179 {
+
180 int returnVal = 0;
+
181 for (int i = 0; i < _fNumPar; ++i) {
+
182 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
183 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
184 returnVal += 1;
+
185 }
+
186 }
+
187 }
+
188
+
189 return returnVal;
+
190}
+
+
+
+ +

◆ GetParamType()

+ +
+
+ + + + + +
+ + + + + + + + +
const char * covarianceXsec::GetParamType (const int i) const
+
+inline
+
+ +

Definition at line 33 of file covarianceXsec.h.

+
33{return _fParamType[i].c_str();}
+
std::vector< std::string > _fParamType
+
+
+
+ +

◆ GetParDetID()

+ +
+
+ + + + + +
+ + + + + + + + +
int covarianceXsec::GetParDetID (const int i) const
+
+inline
+
+ +

Definition at line 31 of file covarianceXsec.h.

+
31{ return _fDetID[i];};
+
std::vector< int > _fDetID
+
+
+
+ +

◆ GetParSplineInterpolation()

+ +
+
+ + + + + +
+ + + + + + + + +
SplineInterpolation covarianceXsec::GetParSplineInterpolation (int i)
+
+inline
+
+ +

Definition at line 36 of file covarianceXsec.h.

+
36{return _fSplineInterpolationType.at(i);}
+
std::vector< SplineInterpolation > _fSplineInterpolationType
+
+
+
+ +

◆ GetSplineFileParsNamesFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::string > covarianceXsec::GetSplineFileParsNamesFromDetID (int DetID)
+
+ +

Definition at line 269 of file covarianceXsec.cpp.

+
269 {
+
270 std::vector<std::string> returnVec;
+
271
+
272 int FDSplineCounter = 0;
+
273 int NDSplineCounter = 0;
+
274 for (int i = 0; i < _fNumPar; ++i) {
+
275 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
276 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
277 //This is horrible but has to be here whilst the ND and FD splines are named
+
278 //differently on T2K. This is easy to fix but isn't currently available.
+
279 if((GetParDetID(i) & 1) == 1){
+ + +
282 } else{
+ + +
285 }
+
286 }
+
287 }
+
288 }
+
289
+
290 return returnVec;
+
291}
+
+
+
+ +

◆ GetSplineInterpolation()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< SplineInterpolation > & covarianceXsec::GetSplineInterpolation () const
+
+inline
+
+ +

Definition at line 35 of file covarianceXsec.h.

+ +
+
+ +

◆ GetSplineModeVecFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::vector< int > > covarianceXsec::GetSplineModeVecFromDetID (int DetID)
+
+ +

Definition at line 296 of file covarianceXsec.cpp.

+
296 {
+
297 std::vector< std::vector<int> > returnVec;
+
298
+
299 //Need a counter or something to correctly get the index in _fFDSplineModes since it's not of length nPars
+
300 //Should probably just make a std::map<std::string, int> for param name to FD spline index
+
301 int nFDSplineCounter = 0;
+
302 for (int i = 0; i < _fNumPar; ++i) {
+
303 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
304 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+ + +
307 }
+
308 }
+
309 }
+
310
+
311 return returnVec;
+
312}
+
std::vector< std::vector< int > > _fFDSplineModes
+
+
+
+ +

◆ GetSplineParsIndexFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< int > covarianceXsec::GetSplineParsIndexFromDetID (int DetID)
+
+ +

Definition at line 317 of file covarianceXsec.cpp.

+
317 {
+
318 std::vector<int> returnVec;
+
319
+
320 for (int i = 0; i < _fNumPar; ++i) {
+
321 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
322 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
323 returnVec.push_back(i);
+
324 }
+
325 }
+
326 }
+
327
+
328 return returnVec;
+
329}
+
+
+
+ +

◆ GetSplineParsNamesFromDetID()

+ +
+
+ + + + + + + + +
const std::vector< std::string > covarianceXsec::GetSplineParsNamesFromDetID (int DetID)
+
+ +

Definition at line 195 of file covarianceXsec.cpp.

+
195 {
+
196
+
197 std::vector<std::string> returnVec;
+
198
+
199 int nd_counter = 0;
+
200 //int counter = 0;
+
201 for (int i = 0; i < _fNumPar; ++i) {
+
202 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
203 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
204
+
205 //ETA - Horrible hard-code becuase ND and FD spline names are different...
+
206 // this is only true at T2K and needs to change!
+
207 if(DetID == 1){
+ +
209 nd_counter++;
+
210 }
+
211 else{
+
212 returnVec.push_back(GetParName(i));
+
213 }
+
214 }
+
215 }
+
216 }
+
217
+
218 return returnVec;
+
219}
+
std::string GetParName(const int i)
+
+
+
+ +

◆ initParams()

+ +
+
+ + + + + +
+ + + + + + + + +
void covarianceXsec::initParams (const double fScale)
+
+protected
+
+ +

Definition at line 707 of file covarianceXsec.cpp.

+
707 {
+
708 // ********************************************
+
709
+
710 for (int i = 0; i < _fNumPar; ++i) {
+
711 //ETA - set the name to be xsec_% as this is what ProcessorMCMC expects
+
712 _fNames[i] = "xsec_"+std::to_string(i);
+
713
+
714 // Set covarianceBase parameters (Curr = current, Prop = proposed, Sigma = step)
+ + +
717
+
718 // Any param with nom == 1 should be > 0
+
719 if (_fGenerated[i] == 1) {
+
720 // If the _fPreFitValue is negative we should try to throw it above this
+
721 // We don't really do this ever...
+
722 while (_fPreFitValue[i] <= 0) {
+
723 _fPreFitValue[i] = random_number[0]->Gaus(_fPreFitValue[i], fScale*TMath::Sqrt( (*covMatrix)(i,i) ));
+
724 }
+
725 }
+
726 }
+
727 //DB Set Individual Step scale for PCA parameters to the LastPCAdpar fIndivStepScale because the step scale for those parameters is set by 'eigen_values[i]' but needs an overall step scale
+
728 // However, individual step scale for non-PCA parameters needs to be set correctly
+
729 if (pca) {
+
730 for (int i = FirstPCAdpar; i <= LastPCAdpar; i++) {
+ +
732 }
+
733 }
+
734
+
735 randomize();
+
736 //KS: Transfer the starting parameters to the PCA basis, you don't want to start with zero..
+
737 if (pca) TransferToPCA();
+ +
739}
+
std::vector< double > _fPropVal
+ +
std::vector< double > _fIndivStepScale
+
TRandom3 ** random_number
+ +
TMatrixDSym * covMatrix
+
std::vector< double > _fGenerated
+ + +
std::vector< double > _fCurrVal
+
+
+
+ +

◆ InitXsecFromConfig()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceXsec::InitXsecFromConfig ()
+
+inline
+
+ +

Definition at line 29 of file covarianceXsec.cpp.

+
29 {
+
30// ********************************************
+
31
+
32 _fDetID = std::vector<int>(_fNumPar);
+
33 _fParamType = std::vector<std::string>(_fNumPar);
+
34 //_fDetString = std::vector<std::string>(_fNumPar);
+
35 isFlux.resize(_fNumPar);
+
36 //Vector of vectors of strings to contain potentially multiple variables that
+
37 //might be cut on
+
38 _fKinematicPars = std::vector<std::vector<std::string>>(_fNumPar);
+
39 //Vector of vector of ints to contain the lower and upper bounds of a cut
+
40 //for a particular kinematic variables
+
41 _fKinematicBounds = std::vector<std::vector<std::vector<double>>>(_fNumPar);
+
42
+
43 int i = 0;
+
44
+
45 //ETA - read in the systematics. Would be good to add in some checks to make sure
+
46 //that there are the correct number of entries i.e. are the _fNumPars for Names,
+
47 //PreFitValues etc etc.
+
48 for (auto const &param : _fYAMLDoc["Systematics"])
+
49 {
+
50 _fParamType[i] = (param["Systematic"]["Type"].as<std::string>());
+
51 _fDetID[i] = (param["Systematic"]["DetID"].as<int>());
+
52
+
53 //Fill the map to get the correlations later as well
+
54 std::string ParamType = param["Systematic"]["Type"].as<std::string>();
+
55 int nFDSplines;
+
56 //Now load in varaibles for spline systematics only
+
57 if (ParamType.find("Spline") != std::string::npos) {
+
58
+
59 if (param["Systematic"]["SplineInformation"]["FDSplineName"]) {
+
60 _fFDSplineNames.push_back(param["Systematic"]["SplineInformation"]["FDSplineName"].as<std::string>());
+
61 nFDSplines++;
+
62 }
+
63
+
64 if (param["Systematic"]["SplineInformation"]["FDMode"]) {
+
65 _fFDSplineModes.push_back(param["Systematic"]["SplineInformation"]["FDMode"].as<std::vector<int>>());
+
66 }
+
67
+
68 if (param["Systematic"]["SplineInformation"]["NDSplineName"]) {
+
69 _fNDSplineNames.push_back(param["Systematic"]["SplineInformation"]["NDSplineName"].as<std::string>());
+
70 //MASSIVE HACKK!!! This only works because we only need the interpolation type at the ND
+
71 //Now get the Spline interpolation type
+
72 if (param["Systematic"]["SplineInformation"]["InterpolationType"]){
+ +
74 if(param["Systematic"]["SplineInformation"]["InterpolationType"].as<std::string>() == SplineInterpolation_ToString(SplineInterpolation(InterpType)))
+
75 {
+ +
77 }
+
78 }
+
79 }
+
80 //KS: By default use TSpline3
+
81 else
+
82 {
+ +
84 }
+
85 }
+
86
+
87 } else if(param["Systematic"]["Type"].as<std::string>() == "Norm") {
+
88
+
89 //Empty DummyVector can be used to specify no cut for mode, target and neutrino flavour
+
90 std::vector<int> DummyModeVec;
+
91 //Ultimately all thsi information ends up in the NormParams vector
+
92
+
93 // Set the target of the normalisation parameter
+
94 if(param["Systematic"]["TargetNuclei"]){
+
95 _fTargetNuclei.push_back(param["Systematic"]["TargetNuclei"].as<std::vector<int>>());
+
96 } else{
+
97 //Has to be of size 0 to mean apply to all
+ +
99 }
+
100
+
101 // Set the neutrino flavours to apply to
+
102 if(param["Systematic"]["NeutrinoFlavour"]){
+
103 _fNeutrinoFlavour.push_back(param["Systematic"]["NeutrinoFlavour"].as<std::vector<int>>());
+
104 } else{
+
105 //Has to be of size 0 to mean apply to all
+ +
107 }
+
108
+
109 // Set the unoscillated neutrino flavours to apply to which is often used for flux systs
+
110 if(param["Systematic"]["NeutrinoFlavourUnosc"]){
+
111 _fNeutrinoFlavourUnosc.push_back(param["Systematic"]["NeutrinoFlavourUnosc"].as<std::vector<int>>());
+
112 } else{
+
113 //Has to be of size 0 to mean apply to all
+ +
115 }
+
116
+
117 //First check to see if we have specified a mode
+
118 //std::cout << "Found a norm parameter at " << i << std::endl;
+
119 if(param["Systematic"]["Mode"]){
+
120 _fNormModes.push_back(param["Systematic"]["Mode"].as<std::vector<int>>());
+
121 } else{
+
122 //Has to be of size 0 to mean apply to all
+
123 _fNormModes.push_back(DummyModeVec);
+
124 }
+
125 }
+
126 else if(param["Systematic"]["Type"].as<std::string>() == "Functional"){
+
127 //std::cout << "Found a functional parameter!!" << std::endl;
+
128
+
129 }
+
130 else{
+
131 MACH3LOG_ERROR("Given unrecognised systematic type: {}", param["Systematic"]["Type"].as<std::string>());
+
132 MACH3LOG_ERROR("Expecting \"Norm\", \"Spline\" or \"Functional\"");
+
133 throw;
+
134 }
+
135
+
136 //ETA - I think this can go in the norm parameters only if statement above
+
137 int NumKinematicCuts = 0;
+
138 if(param["Systematic"]["KinematicCuts"]){
+
139
+
140 NumKinematicCuts = param["Systematic"]["KinematicCuts"].size();
+
141 //std::cout << "Number of Kinematic cuts is " << NumKinematicCuts << std::endl;
+
142
+
143 std::vector<std::string> TempKinematicStrings;
+
144 std::vector<std::vector<double>> TempKinematicBounds;
+
145 //First element of TempKinematicBounds is always -999, and size is then 3
+
146
+
147 for(int KinVar_i = 0 ; KinVar_i < NumKinematicCuts ; ++KinVar_i){
+
148 //ETA
+
149 //This is a bit messy, Kinematic cuts is a list of maps
+
150 //The for loop h
+
151 for (YAML::const_iterator it=param["Systematic"]["KinematicCuts"][KinVar_i].begin();it!=param["Systematic"]["KinematicCuts"][KinVar_i].end();++it) {
+
152 TempKinematicStrings.push_back(it->first.as<std::string>());
+
153 TempKinematicBounds.push_back(it->second.as<std::vector<double>>());
+
154 std::vector<double> bounds = it->second.as<std::vector<double>>();
+
155 }
+
156 }
+
157
+ + +
160 }
+
161
+
162 if(_fFancyNames[i].find("b_")==0) isFlux[i] = true;
+
163 else isFlux[i] = false;
+
164 i++;
+
165 }
+
166
+
167 return;
+
168}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
std::string SplineInterpolation_ToString(SplineInterpolation i)
Definition Structs.h:317
+
SplineInterpolation
Definition Structs.h:307
+
@ kTSpline3
Definition Structs.h:308
+
@ kSplineInterpolations
Definition Structs.h:312
+
YAML::Node _fYAMLDoc
+
std::vector< std::string > _fFancyNames
+
std::vector< bool > isFlux
+
+
+
+ +

◆ IsParFlux()

+ +
+
+ + + + + +
+ + + + + + + + +
bool covarianceXsec::IsParFlux (const int i)
+
+inline
+
+ +

Definition at line 68 of file covarianceXsec.h.

+
68{ return isFlux[i]; }
+
+
+
+ +

◆ Print()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceXsec::Print ()
+
+inline
+
+ +

Definition at line 743 of file covarianceXsec.cpp.

+
743 {
+
744// ********************************************
+
745
+
746 // Get the precision so we can go back to normal for cout later
+
747 //std::streamsize ss = std::cout.precision();
+
748
+
749 MACH3LOG_INFO("#################################################");
+
750 MACH3LOG_INFO("Printing covarianceXsec:");
+
751
+
752 std::cout<<"======================================================================================================================"<<std::endl;
+
753 std::cout << std::left << std::setw(5) << "#" << std::setw(2) << "|" << std::setw(25) << "Name" << std::setw(2) << "|" << std::setw(10) << "Nom." << std::setw(2) << "|" << std::setw(10) << "Prior" << std::setw(2) << "|" << std::setw(15) << "Error" << std::setw(2) << "|" << std::setw(10) << "Lower" << std::setw(2) << "|" << std::setw(10) << "Upper" << "|" << std::setw(10) << "StepScale" << "|" << std::setw(5) << "DetID" << std::endl;;
+
754 std::cout<<"----------------------------------------------------------------------------------------------------------------------"<<std::endl;
+
755
+
756 for (int i = 0; i < GetNumParams(); i++) {
+
757 std::cout << std::left << std::setprecision(3) << std::setw(5) << i << std::setw(2) << "|" << std::setw(25) << GetParFancyName(i) << std::setw(2) << "|" << std::setw(10) << _fGenerated[i] << std::setw(2) << "|" << std::setw(10) << _fPreFitValue[i] << std::setw(2) << "|" << "+/- " << std::setw(11) << _fError[i] << std::setw(2) << "|" << std::setw(10) << _fLowBound[i] << std::setw(2) << "|" << std::setw(10) << _fUpBound[i] << "|" << std::setw(10) << _fIndivStepScale[i] << "|" << _fDetID[i] << std::endl;
+
758 }
+
759 std::cout<<"======================================================================================================================"<<std::endl;
+
760
+
761 // Output the normalisation parameters as a sanity check!
+
762 MACH3LOG_INFO("Normalisation parameters: {}", NormParams.size());
+
763
+
764 //KS: Consider making some class producing table..
+
765 MACH3LOG_INFO("┌────┬──────────┬────────────────────┬──────────┬──────────┬──────────┐");
+
766 MACH3LOG_INFO("│# │Global # │Name │Int. mode │Target │pdg │");
+
767 MACH3LOG_INFO("├────┼──────────┼────────────────────┼──────────┼──────────┼──────────┤");
+
768
+
769 for (unsigned int i = 0; i < NormParams.size(); ++i)
+
770 {
+
771 std::string intModeString;
+
772 for (unsigned int j = 0; j < NormParams[i].modes.size(); j++) {
+
773 intModeString += std::to_string(NormParams[i].modes[j]);
+
774 intModeString += " ";
+
775 }
+
776 if (NormParams[i].modes.empty()) intModeString += "all";
+
777
+
778 std::string targetString;
+
779 for (unsigned int j = 0; j < NormParams[i].targets.size(); j++) {
+
780 targetString += std::to_string(NormParams[i].targets[j]);
+
781 targetString += " ";
+
782 }
+
783 if (NormParams[i].targets.empty()) targetString += "all";
+
784
+
785 std::string pdgString;
+
786 for (unsigned int j = 0; j < NormParams[i].pdgs.size(); j++) {
+
787 pdgString += std::to_string(NormParams[i].pdgs[j]);
+
788 pdgString += " ";
+
789 }
+
790 if (NormParams[i].pdgs.empty()) pdgString += "all";
+
791
+
792 MACH3LOG_INFO("│{: <4}│{: <10}│{: <20}│{: <10}│{: <10}│{: <10}│", i, NormParams[i].index, NormParams[i].name, intModeString, targetString, pdgString);
+
793 }
+
794 MACH3LOG_INFO("└────┴──────────┴────────────────────┴──────────┴──────────┴──────────┘");
+
795
+
796 std::vector<int> SplineParsIndex;
+
797 for (int i = 0; i < _fNumPar; ++i)
+
798 {
+
799 if (strcmp(GetParamType(i), "Spline") == 0) { SplineParsIndex.push_back(i); }
+
800 }
+
801
+
802 MACH3LOG_INFO("Spline parameters: {}", SplineParsIndex.size());
+
803
+
804
+
805 MACH3LOG_INFO("=====================================================");
+
806 MACH3LOG_INFO("{:<4} {:<2} {:<10} {:<2} {:<30} {:<2}", "#", "|", "Name", "|", "Spline Interpolation", "|");
+
807 MACH3LOG_INFO("-----------------------------------------------------");
+
808 for (unsigned int i = 0; i < SplineParsIndex.size(); ++i) {
+
809 MACH3LOG_INFO("{:<4} {:<2} {:<10} {:<2} {:<30} {:<2}", i, "|", GetParFancyName(SplineParsIndex[i]), "|", SplineInterpolation_ToString(SplineInterpolation(SplineParsIndex[i])), "|");
+
810 }
+
811 MACH3LOG_INFO("=====================================================");
+
812
+
813 std::vector<int> FuncParsIndex;
+
814 for (int i = 0; i < _fNumPar; ++i)
+
815 {
+
816 if (strcmp(GetParamType(i), "Functional") == 0) { FuncParsIndex.push_back(i); }
+
817 }
+
818
+
819 MACH3LOG_INFO("Functional parameters: {}", FuncParsIndex.size());
+
820 MACH3LOG_INFO("=================================");
+
821 MACH3LOG_INFO("{0:4} {1:2} {2:10}", "#", "|", "Name");
+
822 MACH3LOG_INFO("---------------------------------");
+
823 for (unsigned int i = 0; i < FuncParsIndex.size(); ++i) {
+
824 MACH3LOG_INFO("{0:4} {1:2} {2:10}", std::to_string(i), "|", GetParFancyName(FuncParsIndex[i]));
+
825 }
+
826 MACH3LOG_INFO("=================================");
+
827
+
828} // End
+
std::vector< double > _fUpBound
+
std::vector< double > _fError
+ +
std::vector< double > _fLowBound
+
std::vector< XsecNorms4 > NormParams
+
+
+
+ +

◆ setFluxOnlyParameters()

+ +
+
+ + + + + + + +
void covarianceXsec::setFluxOnlyParameters ()
+
+ +

Definition at line 832 of file covarianceXsec.cpp.

+
832 {
+
833// ********************************************
+
834 if(!pca)
+
835 {
+
836 for (int i = 0; i < _fNumPar; i++)
+
837 {
+ +
839 }
+
840 }
+
841 else
+
842 {
+
843 MACH3LOG_ERROR("setFluxOnlyParameters not implemented for PCA");
+
844 throw;
+
845 }
+
846
+
847}
+
+
+
+ +

◆ SetupNormPars()

+ +
+
+ + + + + + + +
void covarianceXsec::SetupNormPars ()
+
+ +

Definition at line 337 of file covarianceXsec.cpp.

+
337 {
+
338
+
339 //ETA - in case NormParams already is filled
+
340 NormParams.clear();
+
341
+
342 int norm_counter = 0;
+
343 for (int i = 0; i < _fNumPar; ++i) {
+
344 if (strcmp(GetParamType(i), "Norm") == 0) { //If parameter is implemented as a normalisation
+
345
+
346 std::vector<int> temp;
+ + +
349
+
350 //Copy the mode information into an XsecNorms4 struct
+
351 norm.modes = _fNormModes[norm_counter];
+ + + +
355
+
356 //Next ones are kinematic bounds on where normalisation parameter should apply (at the moment only etrue but hope to add q2
+
357 //We set a bool to see if any bounds exist so we can short-circuit checking all of them every step
+
358 bool HasKinBounds=false;
+
359
+
361 //New generic cuts things
+
363 if(_fKinematicPars.at(i).size() > 0){
+
364 HasKinBounds = true;
+
365 }
+
366
+
367 for(unsigned int KinematicCut_i = 0 ; KinematicCut_i < _fKinematicPars[i].size() ; ++KinematicCut_i){
+
368 //Push back with the string for the kinematic cut
+
369 norm.KinematicVarStr.push_back(_fKinematicPars.at(i).at(KinematicCut_i));
+
370 //Push back with the bounds for the kinematic cut
+
371 norm.Selection.push_back(_fKinematicBounds.at(i).at(KinematicCut_i));
+
372 }
+
373 norm.hasKinBounds=HasKinBounds;
+
374 //End of kinematic bound checking
+
375
+
376 // Set the global parameter index of the normalisation parameter
+
377 norm.index=i;
+
378 //Add this parameter to the vector of parameters
+
379 NormParams.push_back(norm);
+
380 norm_counter++;
+
381 }
+
382 }
+
383
+
384 return;
+
385}
+
+
+
+ +

◆ setXsecOnlyParameters()

+ +
+
+ + + + + + + +
void covarianceXsec::setXsecOnlyParameters ()
+
+ +

Definition at line 851 of file covarianceXsec.cpp.

+
851 {
+
852// ********************************************
+
853 if(!pca)
+
854 {
+
855 for (int i = 0; i < _fNumPar; i++)
+
856 {
+
857 if(!isFlux[i]) _fPropVal[i] = _fPreFitValue[i];
+
858 }
+
859 }
+
860 else
+
861 {
+
862 MACH3LOG_ERROR("setXsecOnlyParameters not implemented for PCA");
+
863 throw;
+
864 }
+
865}
+
+
+
+ +

◆ setXsecParNames()

+ +
+
+ + + + + +
+ + + + + + + +
void covarianceXsec::setXsecParNames ()
+
+protected
+
+ +
+
+

Member Data Documentation

+ +

◆ _fDetID

+ +
+
+ + + + + +
+ + + + +
std::vector<int> covarianceXsec::_fDetID
+
+protected
+
+ +

Definition at line 79 of file covarianceXsec.h.

+ +
+
+ +

◆ _fFDSplineModes

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<int> > covarianceXsec::_fFDSplineModes
+
+protected
+
+ +

Definition at line 92 of file covarianceXsec.h.

+ +
+
+ +

◆ _fFDSplineNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> covarianceXsec::_fFDSplineNames
+
+protected
+
+ +

Definition at line 91 of file covarianceXsec.h.

+ +
+
+ +

◆ _fKinematicBounds

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<std::vector<double> > > covarianceXsec::_fKinematicBounds
+
+protected
+
+ +

Definition at line 97 of file covarianceXsec.h.

+ +
+
+ +

◆ _fKinematicPars

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<std::string> > covarianceXsec::_fKinematicPars
+
+protected
+
+ +

Definition at line 96 of file covarianceXsec.h.

+ +
+
+ +

◆ _fNDSplineNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> covarianceXsec::_fNDSplineNames
+
+protected
+
+ +

Definition at line 90 of file covarianceXsec.h.

+ +
+
+ +

◆ _fNeutrinoFlavour

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<int> > covarianceXsec::_fNeutrinoFlavour
+
+protected
+
+ +

Definition at line 86 of file covarianceXsec.h.

+ +
+
+ +

◆ _fNeutrinoFlavourUnosc

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<int> > covarianceXsec::_fNeutrinoFlavourUnosc
+
+protected
+
+ +

Definition at line 87 of file covarianceXsec.h.

+ +
+
+ +

◆ _fNormModes

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<int> > covarianceXsec::_fNormModes
+
+protected
+
+ +

Definition at line 84 of file covarianceXsec.h.

+ +
+
+ +

◆ _fParamType

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> covarianceXsec::_fParamType
+
+protected
+
+ +

Definition at line 81 of file covarianceXsec.h.

+ +
+
+ +

◆ _fSplineInterpolationType

+ +
+
+ + + + + +
+ + + + +
std::vector<SplineInterpolation> covarianceXsec::_fSplineInterpolationType
+
+protected
+
+ +

Definition at line 93 of file covarianceXsec.h.

+ +
+
+ +

◆ _fTargetNuclei

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<int> > covarianceXsec::_fTargetNuclei
+
+protected
+
+ +

Definition at line 85 of file covarianceXsec.h.

+ +
+
+ +

◆ isFlux

+ +
+
+ + + + + +
+ + + + +
std::vector<bool> covarianceXsec::isFlux
+
+protected
+
+ +

Definition at line 77 of file covarianceXsec.h.

+ +
+
+ +

◆ NormParams

+ +
+
+ + + + + +
+ + + + +
std::vector<XsecNorms4> covarianceXsec::NormParams
+
+protected
+
+ +

Definition at line 100 of file covarianceXsec.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classcovarianceXsec.png b/classcovarianceXsec.png new file mode 100644 index 0000000000000000000000000000000000000000..ed88c5b5c7493e180dcefc24711f6168e9bb2826 GIT binary patch literal 505 zcmVvTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0004m zNklRmD)EQwCDaJ~gFGdB;^Z<5Ja6qzR}z zYN`LN@O}R+_yVbRtJIIpoJrlOa<=Yi{F-#oNxw!jbfc%N?n&?Q$tAvhPva!Dece~X zWV9)qW^ZrQUUE5mB>7bZi6pHG5=mO+O3FEB4*|g2x&eTT+(@^Z7s`!v2RWhqNdI#7 zf&>6&1qlGG3K9TV6(j(#Do6leRgeI{svrS?RYBUHlu~jLl8A_df+Qkh)i08sdrl>t1vRNAo|;muyyL17c5@aykS3tsYhS9IA$I)s zoCT?EaBAjEsyTbf*1hU|nRL)>)D+C;9!KQjp44Ya(sw!JE$- + + + + + + +MaCh3: Class Index + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+ + + + + diff --git a/classinterfacePDFEbE-members.html b/classinterfacePDFEbE-members.html new file mode 100644 index 00000000..81b0c517 --- /dev/null +++ b/classinterfacePDFEbE-members.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
interfacePDFEbE Member List
+
+
+ +

This is the complete list of members for interfacePDFEbE, including all inherited members.

+ + + + + +
getDiscVar(int sample, int event, int varindx)=0interfacePDFEbEpure virtual
GetEventWeight(int sample, int event)=0interfacePDFEbEpure virtual
getNEventsInSample(int sample)=0interfacePDFEbEpure virtual
getNMCSamples()=0interfacePDFEbEpure virtual
+ + + + diff --git a/classinterfacePDFEbE.html b/classinterfacePDFEbE.html new file mode 100644 index 00000000..92ba737d --- /dev/null +++ b/classinterfacePDFEbE.html @@ -0,0 +1,247 @@ + + + + + + + +MaCh3: interfacePDFEbE Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
interfacePDFEbE Class Referenceabstract
+
+
+ +

#include <interfacePDFEbE.h>

+
+Inheritance diagram for interfacePDFEbE:
+
+
+ + +samplePDFFDBase + +
+ + + + + + + + + + +

+Public Member Functions

virtual double GetEventWeight (int sample, int event)=0
 
virtual double getDiscVar (int sample, int event, int varindx)=0
 
virtual int getNMCSamples ()=0
 
virtual int getNEventsInSample (int sample)=0
 
+

Detailed Description

+
+

Definition at line 5 of file interfacePDFEbE.h.

+

Member Function Documentation

+ +

◆ getDiscVar()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual double interfacePDFEbE::getDiscVar (int sample,
int event,
int varindx 
)
+
+pure virtual
+
+ +
+
+ +

◆ GetEventWeight()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double interfacePDFEbE::GetEventWeight (int sample,
int event 
)
+
+pure virtual
+
+ +

Implemented in samplePDFFDBase.

+ +
+
+ +

◆ getNEventsInSample()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int interfacePDFEbE::getNEventsInSample (int sample)
+
+pure virtual
+
+ +
+
+ +

◆ getNMCSamples()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int interfacePDFEbE::getNMCSamples ()
+
+pure virtual
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classinterfacePDFEbE.png b/classinterfacePDFEbE.png new file mode 100644 index 0000000000000000000000000000000000000000..6c40f6e467db7cd0212d18e65684ea2ff6d43070 GIT binary patch literal 577 zcmeAS@N?(olHy`uVBq!ia0vp^l|UT8!3-q1+O=ANlyrbki0l9V|AEXGZ@!lHA6jl< zpjjX>{mhF42Mz$mgC|{H0hHq`3GxeO0P?}WoN4wI1_s76o-U3d6^w7^KFoWqz|+dl zuKDS={YPK#17;ISURtdvnQ5_^{fPXrwEcok9KkILN=A;|I!Z=f_npG_+xc5qKG^Kt z>wE5@2z=bva(Y4c=+QJuOe3ec5!j{_KTM{ z6uR)kw%GStf>M&3`t!Co@6W}=>!sgJQ1_YZd$Zon%+dSvk7+A|-`x9FZFzg&N5fU; zep*;|cr5js>$|*m!MSbQzi#W-3fcSi-sZU)`A?5kiwXXW*4@-`LIX_rsENgm2F)Q(4Uss<&#qUx1T(|KIinL&8ZKW);=k^^qk%O!`+jCpSl!R2S=B0 zlZkw6U39CO<^FVe<=pSu+fV*l_%Cqs*V}yS=bU`g;hd4v3&ZTD;A($8)Qf4;1Bebw*OxxVk8o~!GN%isMyX7cRsbDZXV zH}l-K>sPqLr2Q9^CO^^8HS+Ac6jIb4T6@RMl0VA8i)78&qol`;+08*zE A#sB~S literal 0 HcmV?d00001 diff --git a/classmanager-members.html b/classmanager-members.html new file mode 100644 index 00000000..d5181d7f --- /dev/null +++ b/classmanager-members.html @@ -0,0 +1,96 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
manager Member List
+
+
+ +

This is the complete list of members for manager, including all inherited members.

+ + + + + + + + + + + +
configmanagerprivate
FileNamemanagerprivate
GetFileName()managerinline
GetMCStatLLH()managerinline
manager(std::string const &)manager
mc_stat_llhmanagerprivate
Print()manager
raw()managerinline
SaveSettings(TFile *const OutputFile)manager
~manager()managervirtual
+ + + + diff --git a/classmanager.html b/classmanager.html new file mode 100644 index 00000000..0fe3111d --- /dev/null +++ b/classmanager.html @@ -0,0 +1,491 @@ + + + + + + + +MaCh3: manager Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
manager Class Reference
+
+
+ +

#include <manager.h>

+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 manager (std::string const &)
 
virtual ~manager ()
 
int GetMCStatLLH ()
 Get likelihood type defined in the config.
 
std::string GetFileName ()
 Return name of config.
 
YAML::Node constraw ()
 Return config.
 
void SaveSettings (TFile *const OutputFile)
 Add manager useful information's to TFile, in most cases to Fitter.
 
void Print ()
 Print currently used config.
 
+ + + + + + + +

+Private Attributes

YAML::Node config
 
std::string FileName
 
int mc_stat_llh
 
+

Detailed Description

+
+

Definition at line 24 of file manager.h.

+

Constructor & Destructor Documentation

+ +

◆ manager()

+ +
+
+ + + + + + + + +
manager::manager (std::string constfilename)
+
+ +

Definition at line 6 of file manager.cpp.

+
7 : config(YAML::LoadFile(filename)) {
+
8// *************************
+
9
+ + + + + +
15
+
16 MACH3LOG_INFO("Setting config to be: {}", filename);
+
17
+
18 MACH3LOG_INFO("Config is now: ");
+
19 std::cout << config << std::endl;
+
20
+
21 if (config["LikelihoodOptions"])
+
22 {
+
23 std::string likelihood = GetFromManager<std::string>(config["LikelihoodOptions"]["TestStatistic"], "Barlow-Beeston");
+
24 if (likelihood == "Barlow-Beeston") mc_stat_llh = TestStatistic(kBarlowBeeston);
+
25 else if (likelihood == "IceCube") mc_stat_llh = TestStatistic(kIceCube);
+
26 else if (likelihood == "Poisson") mc_stat_llh = TestStatistic(kPoisson);
+
27 else if (likelihood == "Pearson") mc_stat_llh = TestStatistic(kPearson);
+
28 else if (likelihood == "Dembinski-Abdelmotteleb") mc_stat_llh = TestStatistic(kDembinskiAbdelmottele);
+
29 else {
+
30 MACH3LOG_ERROR("Wrong form of test-statistic specified!");
+
31 MACH3LOG_ERROR("You gave {} and I only support:", likelihood);
+
32 for(int i = 0; i < kNTestStatistics; i++)
+
33 {
+ +
35 }
+
36 throw;
+
37 }
+
38 } else {
+ +
40 }
+
41
+
42}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
void SetMaCh3LoggerFormat()
Definition MaCh3Logger.h:16
+
TestStatistic
Definition Structs.h:1000
+
@ kNTestStatistics
Definition Structs.h:1006
+
@ kPearson
Definition Structs.h:1004
+
@ kBarlowBeeston
Definition Structs.h:1002
+
@ kIceCube
Definition Structs.h:1003
+
@ kDembinskiAbdelmottele
Definition Structs.h:1005
+
@ kPoisson
Definition Structs.h:1001
+
std::string TestStatistic_ToString(TestStatistic i)
Definition Structs.h:1011
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
std::string FileName
Definition manager.h:47
+
YAML::Node config
Definition manager.h:46
+
int mc_stat_llh
Definition manager.h:48
+
void GetCPUInfo()
Definition Monitor.cpp:53
+
void GetGPUInfo()
Definition Monitor.cpp:76
+
void MaCh3Welcome()
KS: Prints welcome message with MaCh3 logo.
Definition Monitor.cpp:6
+
+
+
+ +

◆ ~manager()

+ +
+
+ + + + + +
+ + + + + + + +
manager::~manager ()
+
+virtual
+
+ +

Definition at line 46 of file manager.cpp.

+
46 {
+
47// *************************
+
48
+
49
+
50}
+
+
+
+

Member Function Documentation

+ +

◆ GetFileName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string manager::GetFileName ()
+
+inline
+
+ +

Return name of config.

+ +

Definition at line 34 of file manager.h.

+
34{return FileName;}
+
+
+
+ +

◆ GetMCStatLLH()

+ +
+
+ + + + + +
+ + + + + + + +
int manager::GetMCStatLLH ()
+
+inline
+
+ +

Get likelihood type defined in the config.

+ +

Definition at line 31 of file manager.h.

+
31{return mc_stat_llh;}
+
+
+
+ +

◆ Print()

+ +
+
+ + + + + + + +
void manager::Print ()
+
+ +

Print currently used config.

+ +

Definition at line 100 of file manager.cpp.

+
100 {
+
101// *************************
+
102
+
103 MACH3LOG_INFO("---------------------------------");
+
104 std::cout << config << "\n";
+
105 MACH3LOG_INFO("---------------------------------");
+
106}
+
+
+
+ +

◆ raw()

+ +
+
+ + + + + +
+ + + + + + + +
YAML::Node const & manager::raw ()
+
+inline
+
+ +

Return config.

+ +

Definition at line 37 of file manager.h.

+
37{return config;}
+
+
+
+ +

◆ SaveSettings()

+ +
+
+ + + + + + + + +
void manager::SaveSettings (TFile *const OutputFile)
+
+ +

Add manager useful information's to TFile, in most cases to Fitter.

+ +

Definition at line 56 of file manager.cpp.

+
56 {
+
57// *************************
+
58
+
59 std::string OutputFilename = std::string(OutputFile->GetName());
+
60 OutputFile->cd();
+
61
+
62 // EM: embed the config used for this app
+
63 TMacro MaCh3Config("MaCh3_Config", "MaCh3_Config");
+
64 MaCh3Config.ReadFile(FileName.c_str());
+
65 MaCh3Config.Write();
+
66
+
67 // The Branch!
+
68 TTree *SaveBranch = new TTree("Settings", "Settings");
+
69
+
70 // Fill the doubles
+
71 SaveBranch->Branch("Output", &OutputFilename);
+
72 SaveBranch->Branch("TestStatistic", &mc_stat_llh);
+
73
+
74 // Get settings defined by pre-processor directives, e.g. CPU MP and GPU
+
75 #ifdef MULTITHREAD
+
76 bool cpu_mp_on = true;
+ +
78 #else
+
79 bool cpu_mp_on = false;
+
80 int n_cpus = 1;
+
81 #endif
+
82
+
83 #ifdef CUDA
+
84 bool gpu_on = true;
+
85 #else
+
86 bool gpu_on = false;
+
87 #endif
+
88
+
89 SaveBranch->Branch("GPU", &gpu_on);
+
90 SaveBranch->Branch("CPUMP", &cpu_mp_on);
+
91 SaveBranch->Branch("nCPUs", &n_cpus);
+
92
+
93 SaveBranch->Fill();
+
94 SaveBranch->Write();
+
95
+
96 delete SaveBranch;
+
97}
+
+
+
+

Member Data Documentation

+ +

◆ config

+ +
+
+ + + + + +
+ + + + +
YAML::Node manager::config
+
+private
+
+ +

Definition at line 46 of file manager.h.

+ +
+
+ +

◆ FileName

+ +
+
+ + + + + +
+ + + + +
std::string manager::FileName
+
+private
+
+ +

Definition at line 47 of file manager.h.

+ +
+
+ +

◆ mc_stat_llh

+ +
+
+ + + + + +
+ + + + +
int manager::mc_stat_llh
+
+private
+
+ +

Definition at line 48 of file manager.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classmcmc-members.html b/classmcmc-members.html new file mode 100644 index 00000000..a76938fa --- /dev/null +++ b/classmcmc-members.html @@ -0,0 +1,139 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
mcmc Member List
+
+
+ +

This is the complete list of members for mcmc, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accCountFitterBaseprotected
accProbFitterBaseprotected
addOscHandler(covarianceOsc *oscf)FitterBase
addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)FitterBase
addSamplePDF(samplePDFBase *sample)FitterBase
addSystObj(covarianceBase *cov)FitterBase
annealmcmcprivate
AnnealTempmcmcprivate
auto_saveFitterBaseprotected
chainLengthmcmcprivate
CheckStep()mcmcinlineprivate
clockFitterBaseprotected
CovFolderFitterBaseprotected
FileSavedFitterBaseprotected
fitManFitterBaseprotected
FitterBase(manager *const fitMan)FitterBase
fTestLikelihoodFitterBaseprotected
GetName() constmcmcinlinevirtual
logLCurrFitterBaseprotected
logLPropFitterBaseprotected
mcmc(manager *const fitMan)mcmc
oscFitterBaseprotected
osc2FitterBaseprotected
osc_llhFitterBaseprotected
outputFileFitterBaseprotected
OutputPreparedFitterBaseprotected
outTreeFitterBaseprotected
PrepareOutput()FitterBaseprotected
PrintProgress()mcmcinlineprivate
ProcessMCMC()mcmcinlineprivate
ProposeStep()mcmcinlineprivate
randomFitterBaseprotected
ReadParsFromFile(std::string file)mcmcinlineprivate
rejectmcmcprivate
Run2DLLHScan()FitterBase
RunLLHScan()FitterBase
runMCMC() overridemcmcvirtual
sample_llhFitterBaseprotected
samplesFitterBaseprotected
save_nominalFitterBaseprotected
SaveOutput()FitterBaseprotected
SaveSettings()FitterBaseprotected
setChainLength(unsigned int L)mcmcinline
setInitialStepNumber(const unsigned int stepNum=0)mcmcinline
SettingsSavedFitterBaseprotected
stepFitterBaseprotected
stepClockFitterBaseprotected
stepStartmcmcprivate
stepTimeFitterBaseprotected
syst_llhFitterBaseprotected
systematicsFitterBaseprotected
~FitterBase()FitterBasevirtual
~mcmc()mcmcvirtual
+ + + + diff --git a/classmcmc.html b/classmcmc.html new file mode 100644 index 00000000..74f7bcdb --- /dev/null +++ b/classmcmc.html @@ -0,0 +1,1074 @@ + + + + + + + +MaCh3: mcmc Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <mcmc.h>

+
+Inheritance diagram for mcmc:
+
+
+ + +FitterBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 mcmc (manager *const fitMan)
 Constructor.
 
virtual ~mcmc ()
 Destructor.
 
void runMCMC () override
 Actual implementation of MCMC fitting algorithm.
 
void setChainLength (unsigned int L)
 Set how long chain should be.
 
void setInitialStepNumber (const unsigned int stepNum=0)
 Set initial step number, used when starting from another chain.
 
std::string GetName () const
 Get name of class.
 
- Public Member Functions inherited from FitterBase
 FitterBase (manager *const fitMan)
 Constructor.
 
virtual ~FitterBase ()
 Destructor.
 
void addSamplePDF (samplePDFBase *sample)
 This function adds a sample PDF object to the analysis framework. The sample PDF object will be utilized in fitting procedures or likelihood scans.
 
void addSystObj (covarianceBase *cov)
 This function adds a Covariance object to the analysis framework. The Covariance object will be utilized in fitting procedures or likelihood scans.
 
void addOscHandler (covarianceOsc *oscf)
 Adds an oscillation handler for covariance objects.
 
void addOscHandler (covarianceOsc *osca, covarianceOsc *oscb)
 Adds two oscillation handlers for covariance objects.
 
void RunLLHScan ()
 Perform a 1D likelihood scan.
 
void Run2DLLHScan ()
 Perform a 2D likelihood scan.
 
+ + + + + + + + + + + + + + + + +

+Private Member Functions

void ProcessMCMC ()
 Process MCMC output.
 
void ProposeStep ()
 Propose a step.
 
void CheckStep ()
 Do we accept the step.
 
void PrintProgress ()
 Print the progress.
 
void ReadParsFromFile (std::string file)
 Load starting positions from the end of a previous chain.
 
+ + + + + + + + + + + + + + + + +

+Private Attributes

bool reject
 Do we reject based on hitting boundaries in systs.
 
unsigned int chainLength
 number of steps in chain
 
bool anneal
 simulated annealing
 
double AnnealTemp
 simulated annealing temperature
 
int stepStart
 starting value of a chain, usually 0, unless starting from previous chain
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from FitterBase
void PrepareOutput ()
 Prepare the output file.
 
void SaveOutput ()
 Save output and close files.
 
void SaveSettings ()
 Save the settings that the MCMC was run with.
 
- Protected Attributes inherited from FitterBase
managerfitMan
 The manager.
 
unsigned int step
 current state
 
double logLCurr
 current likelihood
 
double logLProp
 proposed likelihood
 
double accProb
 current acceptance prob
 
int accCount
 counts accepted steps
 
double osc_llh
 
doublesample_llh
 store the llh breakdowns
 
doublesyst_llh
 systematic llh breakdowns
 
std::vector< samplePDFBase * > samples
 Sample holder.
 
std::vector< covarianceBase * > systematics
 Systematic holder.
 
covarianceOscosc
 handles oscillation parameters
 
covarianceOscosc2
 handles oscillation parameters
 
TStopwatchclock
 tells global time how long fit took
 
TStopwatchstepClock
 tells how long single step/fit iteration took
 
double stepTime
 Time of single step.
 
TRandom3random
 Random number.
 
TFileoutputFile
 Output.
 
TDirectoryCovFolder
 Output cov folder.
 
TTreeoutTree
 Output tree with posteriors.
 
int auto_save
 auto save every N steps
 
bool fTestLikelihood
 Necessary for some fitting algorithms like PSO.
 
bool save_nominal
 save nominal matrix info or not
 
bool FileSaved
 Checks if file saved not repeat some operations.
 
bool SettingsSaved
 Checks if setting saved not repeat some operations.
 
bool OutputPrepared
 Checks if output prepared not repeat some operations.
 
+

Detailed Description

+
+

Definition at line 5 of file mcmc.h.

+

Constructor & Destructor Documentation

+ +

◆ mcmc()

+ +
+
+ + + + + + + + +
mcmc::mcmc (manager *const fitMan)
+
+ +

Constructor.

+ +

Definition at line 6 of file mcmc.cpp.

+
6 : FitterBase(man) {
+
7// *************************
+
8
+
9 // Beginning step number
+
10 stepStart = 0;
+
11
+
12 // Starting parameters should be thrown
+
13 reject = false;
+
14 chainLength = fitMan->raw()["General"]["MCMC"]["NSteps"].as<double>();
+
15
+
16 AnnealTemp = GetFromManager<double>(fitMan->raw()["General"]["MCMC"]["AnnealTemp"], -999);
+
17 if(AnnealTemp < 0) anneal = false;
+
18 else
+
19 {
+
20 MACH3LOG_INFO("Enabling simulated annealing with T = {}", AnnealTemp);
+
21 anneal = true;
+
22 }
+
23}
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
manager * fitMan
The manager.
Definition FitterBase.h:68
+
YAML::Node const & raw()
Return config.
Definition manager.h:37
+
unsigned int chainLength
number of steps in chain
Definition mcmc.h:43
+
double AnnealTemp
simulated annealing temperature
Definition mcmc.h:48
+
int stepStart
starting value of a chain, usually 0, unless starting from previous chain
Definition mcmc.h:51
+
bool anneal
simulated annealing
Definition mcmc.h:46
+
bool reject
Do we reject based on hitting boundaries in systs.
Definition mcmc.h:41
+
+
+
+ +

◆ ~mcmc()

+ +
+
+ + + + + +
+ + + + + + + +
mcmc::~mcmc ()
+
+virtual
+
+ +

Destructor.

+ +

Definition at line 27 of file mcmc.cpp.

+
27 {
+
28// *************************
+
29
+
30}
+
+
+
+

Member Function Documentation

+ +

◆ CheckStep()

+ +
+
+ + + + + +
+ + + + + + + +
void mcmc::CheckStep ()
+
+inlineprivate
+
+ +

Do we accept the step.

+ +

Definition at line 63 of file mcmc.cpp.

+
63 {
+
64// **********************
+
65
+
66 bool accept = false;
+
67
+
68 // Set the acceptance probability to zero
+
69 accProb = 0.0;
+
70
+
71 // Calculate acceptance probability
+
72 if (anneal) accProb = TMath::Min(1.,TMath::Exp( -(logLProp-logLCurr) / (TMath::Exp(-step/AnnealTemp))));
+
73 else accProb = TMath::Min(1., TMath::Exp(logLCurr-logLProp));
+
74
+
75 // Get the random number
+
76 double fRandom = random->Rndm();
+
77
+
78 // Do the accept/reject
+
79 if (fRandom <= accProb) {
+
80 accept = true;
+
81 ++accCount;
+
82 } else {
+
83 accept = false;
+
84 }
+
85
+
86 #ifdef DEBUG
+
87 if (debug) debugFile << " logLProp: " << logLProp << " logLCurr: " << logLCurr << " accProb: " << accProb << " fRandom: " << fRandom << std::endl;
+
88 #endif
+
89
+
90 // Update all the handlers to accept the step
+
91 if (accept && !reject) {
+ +
93
+
94 if (osc) {
+
95 osc->acceptStep();
+
96 }
+
97
+
98 // Loop over systematics and accept
+
99 for (size_t s = 0; s < systematics.size(); ++s) {
+
100 systematics[s]->acceptStep();
+
101 }
+
102 }
+
103
+
104 stepClock->Stop();
+
105 stepTime = stepClock->RealTime();
+
106
+
107 // Write step to output tree
+
108 outTree->Fill();
+
109}
+
covarianceOsc * osc
handles oscillation parameters
Definition FitterBase.h:96
+
double logLProp
proposed likelihood
Definition FitterBase.h:75
+
TStopwatch * stepClock
tells how long single step/fit iteration took
Definition FitterBase.h:103
+
int accCount
counts accepted steps
Definition FitterBase.h:79
+
TRandom3 * random
Random number.
Definition FitterBase.h:108
+
std::vector< covarianceBase * > systematics
Systematic holder.
Definition FitterBase.h:93
+
unsigned int step
current state
Definition FitterBase.h:71
+
double accProb
current acceptance prob
Definition FitterBase.h:77
+
double stepTime
Time of single step.
Definition FitterBase.h:105
+
double logLCurr
current likelihood
Definition FitterBase.h:73
+
TTree * outTree
Output tree with posteriors.
Definition FitterBase.h:115
+ +
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string mcmc::GetName () const
+
+inlinevirtual
+
+ +

Get name of class.

+ +

Reimplemented from FitterBase.

+ +

Definition at line 22 of file mcmc.h.

+
22{return "MCMC";};
+
+
+
+ +

◆ PrintProgress()

+ +
+
+ + + + + +
+ + + + + + + +
void mcmc::PrintProgress ()
+
+inlineprivate
+
+ +

Print the progress.

+ +

Definition at line 306 of file mcmc.cpp.

+
306 {
+
307// *******************
+
308
+
309 MACH3LOG_INFO("Step:\t{}/{}, current: {:.2f}, proposed: {:.2f}", step - stepStart, chainLength, logLCurr, logLProp);
+
310 MACH3LOG_INFO("Accepted/Total steps: {}/{} = {:.2f}", accCount, step - stepStart, static_cast<double>(accCount) / static_cast<double>(step - stepStart));
+
311
+
312 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it) {
+
313 if (std::string((*it)->getName()) == "xsec_cov") {
+
314 MACH3LOG_INFO("Cross-section parameters: ");
+
315 (*it)->printNominalCurrProp();
+
316 }
+
317 }
+
318 #ifdef DEBUF
+
319 if (debug) {
+
320 debugFile << "\n-------------------------------------------------------" << std::endl;
+
321 debugFile << "Step:\t" << step + 1 << "/" << chainLength << " | current: " << logLCurr << " proposed: " << logLProp << std::endl;
+
322 }
+
323 #endif
+
324}
+
+
+
+ +

◆ ProcessMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void mcmc::ProcessMCMC ()
+
+inlineprivate
+
+ +

Process MCMC output.

+ +

Definition at line 161 of file mcmc.cpp.

+
161 {
+
162// *******************
+
163
+
164 if (fitMan == NULL) return;
+
165
+
166 // Process the MCMC
+
167 if (fitMan->raw()["General"]["ProcessMCMC"].as<bool>()) {
+
168
+
169 // Make the processor
+
170 MCMCProcessor Processor(std::string(outputFile->GetName()), false);
+
171
+
172 Processor.Initialise();
+
173 // Make the TVectorD pointers which hold the processed output
+ +
175 TVectorD *Errors = NULL;
+ +
177 TVectorD *Errors_Gauss = NULL;
+ +
179
+
180 // Make the postfit
+
181 Processor.GetPostfit(Central, Errors, Central_Gauss, Errors_Gauss, Peaks);
+
182 Processor.DrawPostfit();
+
183
+
184 // Make the TMatrix pointers which hold the processed output
+
185 TMatrixDSym *Covariance = NULL;
+
186 TMatrixDSym *Correlation = NULL;
+
187
+
188 // Make the covariance matrix
+
189 Processor.GetCovariance(Covariance, Correlation);
+
190 Processor.DrawCovariance();
+
191
+
192 std::vector<TString> BranchNames = Processor.GetBranchNames();
+
193
+
194 // Re-open the TFile
+
195 if (!outputFile->IsOpen()) {
+
196 MACH3LOG_INFO("Opening output again to update with means..");
+
197 outputFile = new TFile(fitMan->raw()["General"]["Output"]["Filename"].as<std::string>().c_str(), "UPDATE");
+
198 }
+
199
+
200 Central->Write("PDF_Means");
+
201 Errors->Write("PDF_Errors");
+
202 Central_Gauss->Write("Gauss_Means");
+
203 Errors_Gauss->Write("Errors_Gauss");
+
204 Covariance->Write("Covariance");
+
205 Correlation->Write("Correlation");
+
206 }
+
207}
+
std::vector< TString > BranchNames
+
TFile * outputFile
Output.
Definition FitterBase.h:111
+ +
+
+
+ +

◆ ProposeStep()

+ +
+
+ + + + + +
+ + + + + + + +
void mcmc::ProposeStep ()
+
+inlineprivate
+
+ +

Propose a step.

+ +

Definition at line 211 of file mcmc.cpp.

+
211 {
+
212// *******************
+
213
+
214 // Initial likelihood
+
215 double llh = 0.0;
+
216
+
217 // Initiate to false
+
218 reject = false;
+
219
+
220 // Propose steps for the oscillation handlers
+
221 if (osc) {
+
222 osc->proposeStep();
+
223
+
224 // Now get the likelihoods for the oscillation
+ +
226
+
227 // Add the oscillation likelihoods to the reconfigure likelihoods
+
228 llh += osc_llh;
+
229
+
230 #ifdef DEBUG
+
231 if (debug) debugFile << "LLH for oscillation handler: " << llh << std::endl;
+
232 #endif
+
233 }
+
234
+
235 int stdIt = 0;
+
236 // Loop over the systematics and propose the initial step
+
237 for (std::vector<covarianceBase*>::iterator it = systematics.begin(); it != systematics.end(); ++it, ++stdIt) {
+
238
+
239 // Could throw the initial value here to do MCMC stability studies
+
240 // Propose the steps for the systematics
+
241 (*it)->proposeStep();
+
242
+
243 // Get the likelihood from the systematics
+
244 syst_llh[stdIt] = (*it)->GetLikelihood();
+
245 llh += syst_llh[stdIt];
+
246
+
247 #ifdef DEBUG
+
248 if (debug) debugFile << "LLH after " << systematics[stdIt]->getName() << " " << llh << std::endl;
+
249 #endif
+
250 }
+
251
+
252 // Check if we've hit a boundary in the systematics
+
253 // In this case we can save time by not having to reconfigure the simulation
+
254 if (llh >= __LARGE_LOGL__) {
+
255 reject = true;
+
256 #ifdef DEBUG
+
257 if (debug) debugFile << "Rejecting based on boundary" << std::endl;
+
258 #endif
+
259 }
+
260
+
261 // Only reweight when we have a good parameter configuration
+
262 // This speeds things up considerably because for every bad parameter configuration we don't have to reweight the MC
+
263 if (!reject)
+
264 {
+
265 // Could multi-thread this
+
266 // But since sample reweight is multi-threaded it's probably better to do that
+
267 for (size_t i = 0; i < samples.size(); ++i)
+
268 {
+
269 // If we're running with different oscillation parameters for neutrino and anti-neutrino
+
270 if (osc ){
+
271 samples[i]->reweight(osc->getPropPars());
+
272 // If we aren't using any oscillation
+
273 } else {
+
274 double* fake = NULL;
+
275 samples[i]->reweight(fake);
+
276 }
+
277 }
+
278
+
279 //DB for atmospheric event by event sample migration, need to fully reweight all samples to allow event passing prior to likelihood evaluation
+
280 for (size_t i = 0; i < samples.size(); ++i) {
+
281 // Get the sample likelihoods and add them
+
282 sample_llh[i] = samples[i]->GetLikelihood();
+
283 llh += sample_llh[i];
+
284 #ifdef DEBUG
+
285 if (debug) debugFile << "LLH after sample " << i << " " << llh << std::endl;
+
286 #endif
+
287 }
+
288
+
289 // For when we don't have to reweight, set sample to madness
+
290 } else {
+
291 for (size_t i = 0; i < samples.size(); ++i) {
+
292 // Set the sample_llh[i] to be madly high also to signify a step out of bounds
+ +
294 #ifdef DEBUG
+
295 if (debug) debugFile << "LLH after REJECT sample " << i << " " << llh << std::endl;
+
296 #endif
+
297 }
+
298 }
+
299
+
300 // Save the proposed likelihood (class member)
+
301 logLProp = llh;
+
302}
+
double * sample_llh
store the llh breakdowns
Definition FitterBase.h:85
+
double osc_llh
Definition FitterBase.h:83
+
double * syst_llh
systematic llh breakdowns
Definition FitterBase.h:87
+
std::vector< samplePDFBase * > samples
Sample holder.
Definition FitterBase.h:90
+
double * getPropPars()
+
void proposeStep() override
+
double GetLikelihood()
+
#define __LARGE_LOGL__
+
+
+
+ +

◆ ReadParsFromFile()

+ +
+
+ + + + + +
+ + + + + + + + +
void mcmc::ReadParsFromFile (std::string file)
+
+inlineprivate
+
+ +

Load starting positions from the end of a previous chain.

+ +

Definition at line 34 of file mcmc.cpp.

+
34 {
+
35// *************************
+
36 MACH3LOG_INFO("MCMC getting starting position from {}", file);
+
37
+
38 TFile *infile = new TFile(file.c_str(), "READ");
+
39 TTree *posts = (TTree*)infile->Get("posteriors");
+
40 TObjArray* brlis = (TObjArray*)posts->GetListOfBranches();
+
41 int nbr = brlis->GetEntries();
+ +
43 double* branch_vals = new double[nbr];
+
44
+
45 for (int i = 0; i < nbr; ++i) {
+
46 TBranch *br = (TBranch*)brlis->At(i);
+
47 TString bname = br->GetName();
+ +
49 std::cout << " * Loading " << bname << std::endl;
+
50 posts->SetBranchAddress(branch_names[i], &branch_vals[i]);
+
51 }
+
52
+
53 posts->GetEntry(posts->GetEntries()-1);
+
54
+
55 delete[] branch_names;
+
56 delete[] branch_vals;
+
57 infile->Close();
+
58 delete infile;
+
59}
+
+
+
+ +

◆ runMCMC()

+ +
+
+ + + + + +
+ + + + + + + +
void mcmc::runMCMC ()
+
+overridevirtual
+
+ +

Actual implementation of MCMC fitting algorithm.

+ +

Implements FitterBase.

+ +

Definition at line 113 of file mcmc.cpp.

+
113 {
+
114 // *******************
+
115
+
116 // Save the settings into the output file
+
117 SaveSettings();
+
118
+
119 // Prepare the output branches
+ +
121
+
122 // Reconfigure the samples, systematics and oscillation for first weight
+
123 // ProposeStep sets logLProp
+
124 ProposeStep();
+
125 // Set the current logL to the proposed logL for the 0th step
+
126 // Accept the first step to set logLCurr: this shouldn't affect the MCMC because we ignore the first N steps in burn-in
+ +
128
+
129 // Begin MCMC
+ +
131 {
+
132 stepClock->Start();
+
133 // Set the initial rejection to false
+
134 reject = false;
+
135
+
136 // Print 10 steps in total
+
137 if ( (step-stepStart) % (chainLength/10) == 0) {
+ +
139 }
+
140
+
141 // Propose current step variation and save the systematic likelihood that results in this step being taken
+
142 // Updates logLProp
+
143 ProposeStep();
+
144
+
145 // Does the MCMC accept this step?
+
146 CheckStep();
+
147
+
148 // Auto save the output
+
149 if (step % auto_save == 0) outTree->AutoSave();
+
150 }
+
151
+
152 // Save all the MCMC output
+
153 SaveOutput();
+
154
+
155 // Process MCMC
+
156 ProcessMCMC();
+
157}
+
void SaveOutput()
Save output and close files.
+
void SaveSettings()
Save the settings that the MCMC was run with.
+
void PrepareOutput()
Prepare the output file.
+
int auto_save
auto save every N steps
Definition FitterBase.h:117
+
void CheckStep()
Do we accept the step.
Definition mcmc.cpp:63
+
void ProposeStep()
Propose a step.
Definition mcmc.cpp:211
+
void PrintProgress()
Print the progress.
Definition mcmc.cpp:306
+
void ProcessMCMC()
Process MCMC output.
Definition mcmc.cpp:161
+
+
+
+ +

◆ setChainLength()

+ +
+
+ + + + + +
+ + + + + + + + +
void mcmc::setChainLength (unsigned int L)
+
+inline
+
+ +

Set how long chain should be.

+ +

Definition at line 16 of file mcmc.h.

+
16{ chainLength = L; };
+
+
+
+ +

◆ setInitialStepNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
void mcmc::setInitialStepNumber (const unsigned int stepNum = 0)
+
+inline
+
+ +

Set initial step number, used when starting from another chain.

+ +

Definition at line 19 of file mcmc.h.

+
+
+
+
+

Member Data Documentation

+ +

◆ anneal

+ +
+
+ + + + + +
+ + + + +
bool mcmc::anneal
+
+private
+
+ +

simulated annealing

+ +

Definition at line 46 of file mcmc.h.

+ +
+
+ +

◆ AnnealTemp

+ +
+
+ + + + + +
+ + + + +
double mcmc::AnnealTemp
+
+private
+
+ +

simulated annealing temperature

+ +

Definition at line 48 of file mcmc.h.

+ +
+
+ +

◆ chainLength

+ +
+
+ + + + + +
+ + + + +
unsigned int mcmc::chainLength
+
+private
+
+ +

number of steps in chain

+ +

Definition at line 43 of file mcmc.h.

+ +
+
+ +

◆ reject

+ +
+
+ + + + + +
+ + + + +
bool mcmc::reject
+
+private
+
+ +

Do we reject based on hitting boundaries in systs.

+ +

Definition at line 41 of file mcmc.h.

+ +
+
+ +

◆ stepStart

+ +
+
+ + + + + +
+ + + + +
int mcmc::stepStart
+
+private
+
+ +

starting value of a chain, usually 0, unless starting from previous chain

+ +

Definition at line 51 of file mcmc.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classmcmc.png b/classmcmc.png new file mode 100644 index 0000000000000000000000000000000000000000..4863281608ed89eb110a645e1fc67a2733a366df GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^u0R~X!3-oTJUonnlyrbki0l9V|AEXGZ@!lHA6jl< zpjjX>{mhF42Mz$mgC|{H0hHq`3GxeO0P?}WoN4wI1_nkUPZ!6K3dXl{@8%s=;A!pW z4=TC$zmxqmzs0hOQ~o(YD!Y+OvS_gtJd)eC9s1w?ub)_0Ds*x3WLquK&BG8>d*Anr2PXzq@Zyyz-=)nW>5=Pwd~aWXdHCh7Zir z3_Qk1H{}|e1nWc^IT|1T6lNMF#_(c;4ue3X7(<5+H-pPGRtBZ{nTE#FY-*m(I^8O+ z_wFVA)YYwDQ}TVIisi3qGG(sQ-kD8PIo=$T^}1K}ggYGLndI5F?hQAxvX + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
particle Member List
+
+
+ +

This is the complete list of members for particle, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
curr_valueparticleprivate
get_personal_best_position()particleinline
get_personal_best_value()particleinline
get_position()particleinline
get_value()particleinline
get_velocity()particleinline
particle()particleinline
particle(std::vector< double > position, std::vector< double > velocity)particleinline
personal_best_positionparticleprivate
personal_best_valueparticleprivate
positionparticleprivate
set_personal_best_position(std::vector< double > new_pos)particleinline
set_personal_best_value(double new_val)particleinline
set_position(std::vector< double > new_position)particleinline
set_value(double val)particleinline
set_velocity(std::vector< double > new_velocity)particleinline
velocityparticleprivate
+ + + + diff --git a/classparticle.html b/classparticle.html new file mode 100644 index 00000000..03219c18 --- /dev/null +++ b/classparticle.html @@ -0,0 +1,638 @@ + + + + + + + +MaCh3: particle Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
particle Class Reference
+
+
+ +

#include <PSO.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 particle ()
 
 particle (std::vector< double > position, std::vector< double > velocity)
 
void set_position (std::vector< double > new_position)
 
std::vector< doubleget_position ()
 
void set_personal_best_position (std::vector< double > new_pos)
 
std::vector< doubleget_personal_best_position ()
 
void set_personal_best_value (double new_val)
 
double get_personal_best_value ()
 
std::vector< doubleget_velocity ()
 
void set_velocity (std::vector< double > new_velocity)
 
double get_value ()
 
void set_value (double val)
 
+ + + + + + + + + + + +

+Private Attributes

std::vector< doubleposition
 
std::vector< doublevelocity
 
double personal_best_value
 
double curr_value
 
std::vector< doublepersonal_best_position
 
+

Detailed Description

+
+

Definition at line 13 of file PSO.h.

+

Constructor & Destructor Documentation

+ +

◆ particle() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
particle::particle ()
+
+inline
+
+

Class particle - stores the position, velocity and personal best With functions which move particle and update velocity

+ +

Definition at line 20 of file PSO.h.

+
20{};
+
+
+
+ +

◆ particle() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
particle::particle (std::vector< doubleposition,
std::vector< doublevelocity 
)
+
+inline
+
+ +

Definition at line 21 of file PSO.h.

+
+
std::vector< double > position
Definition PSO.h:63
+
std::vector< double > velocity
Definition PSO.h:64
+
+
+
+

Member Function Documentation

+ +

◆ get_personal_best_position()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > particle::get_personal_best_position ()
+
+inline
+
+ +

Definition at line 35 of file PSO.h.

+
35 {
+ +
37 };
+
std::vector< double > personal_best_position
Definition PSO.h:67
+
+
+
+ +

◆ get_personal_best_value()

+ +
+
+ + + + + +
+ + + + + + + +
double particle::get_personal_best_value ()
+
+inline
+
+ +

Definition at line 43 of file PSO.h.

+
43 {
+ +
45 };
+
double personal_best_value
Definition PSO.h:65
+
+
+
+ +

◆ get_position()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > particle::get_position ()
+
+inline
+
+ +

Definition at line 27 of file PSO.h.

+
27 {
+
28 return position;
+
29 };
+
+
+
+ +

◆ get_value()

+ +
+
+ + + + + +
+ + + + + + + +
double particle::get_value ()
+
+inline
+
+ +

Definition at line 55 of file PSO.h.

+
55 {
+
56 return curr_value;
+
57 };
+
double curr_value
Definition PSO.h:66
+
+
+
+ +

◆ get_velocity()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > particle::get_velocity ()
+
+inline
+
+ +

Definition at line 47 of file PSO.h.

+
47 {
+
48 return velocity;
+
49 };
+
+
+
+ +

◆ set_personal_best_position()

+ +
+
+ + + + + +
+ + + + + + + + +
void particle::set_personal_best_position (std::vector< doublenew_pos)
+
+inline
+
+ +

Definition at line 31 of file PSO.h.

+
31 {
+ +
33 };
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
+
+
+ +

◆ set_personal_best_value()

+ +
+
+ + + + + +
+ + + + + + + + +
void particle::set_personal_best_value (double new_val)
+
+inline
+
+ +

Definition at line 39 of file PSO.h.

+
39 {
+ +
41 };
+
+
+
+ +

◆ set_position()

+ +
+
+ + + + + +
+ + + + + + + + +
void particle::set_position (std::vector< doublenew_position)
+
+inline
+
+ +

Definition at line 23 of file PSO.h.

+
23 {
+ +
25 };
+
+
+
+ +

◆ set_value()

+ +
+
+ + + + + +
+ + + + + + + + +
void particle::set_value (double val)
+
+inline
+
+ +

Definition at line 58 of file PSO.h.

+
58 {
+ +
60 };
+
+
+
+ +

◆ set_velocity()

+ +
+
+ + + + + +
+ + + + + + + + +
void particle::set_velocity (std::vector< doublenew_velocity)
+
+inline
+
+ +

Definition at line 51 of file PSO.h.

+
51 {
+ +
53 };
+
+
+
+

Member Data Documentation

+ +

◆ curr_value

+ +
+
+ + + + + +
+ + + + +
double particle::curr_value
+
+private
+
+ +

Definition at line 66 of file PSO.h.

+ +
+
+ +

◆ personal_best_position

+ +
+
+ + + + + +
+ + + + +
std::vector<double> particle::personal_best_position
+
+private
+
+ +

Definition at line 67 of file PSO.h.

+ +
+
+ +

◆ personal_best_value

+ +
+
+ + + + + +
+ + + + +
double particle::personal_best_value
+
+private
+
+ +

Definition at line 65 of file PSO.h.

+ +
+
+ +

◆ position

+ +
+
+ + + + + +
+ + + + +
std::vector<double> particle::position
+
+private
+
+ +

Definition at line 63 of file PSO.h.

+ +
+
+ +

◆ velocity

+ +
+
+ + + + + +
+ + + + +
std::vector<double> particle::velocity
+
+private
+
+ +

Definition at line 64 of file PSO.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /github/workspace/mcmc/PSO.h
  • +
+
+ + + + diff --git a/classsamplePDFBase-members.html b/classsamplePDFBase-members.html new file mode 100644 index 00000000..bc980e03 --- /dev/null +++ b/classsamplePDFBase-members.html @@ -0,0 +1,141 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
samplePDFBase Member List
+
+
+ +

This is the complete list of members for samplePDFBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_hPDF1DsamplePDFBaseprotected
_hPDF2DsamplePDFBaseprotected
addData(std::vector< double > &dat)samplePDFBasevirtual
addData(std::vector< vector< double > > &dat)samplePDFBasevirtual
addData(TH1D *binneddata)samplePDFBasevirtual
addData(TH2D *binneddata)samplePDFBasevirtual
addXsecSplines(splineBase *splines)samplePDFBaseinline
dataSamplesamplePDFBaseprotected
dataSample2DsamplePDFBaseprotected
dathistsamplePDFBaseprotected
dathist2dsamplePDFBaseprotected
fill1DHist()=0samplePDFInterfaceprotectedpure virtual
fill2DHist()=0samplePDFInterfaceprotectedpure virtual
fTestStatisticsamplePDFBaseprotected
generate()samplePDFBasevirtual
generate2D(TH2D *pdf=0)samplePDFBasevirtual
get1DDataHist()samplePDFBaseinline
get1DHist()samplePDFBase
get2DDataHist()samplePDFBaseinline
get2DHist()samplePDFBase
getCovLikelihood()=0samplePDFInterfaceprotectedpure virtual
getDataSample()samplePDFBaseinlinevirtual
getEventRate()samplePDFBasevirtual
GetLikelihood()=0samplePDFBasepure virtual
GetLikelihood_kernel(std::vector< double > &data)samplePDFBaseprotectedvirtual
GetModeName(std::vector< std::string > &modeNameVect)samplePDFBaseinline
GetModeStruct() constsamplePDFBaseinline
GetName() constsamplePDFBaseinlinevirtual
GetNsamples()samplePDFBaseinlinevirtual
getSampleLikelihood(const int isample)samplePDFBaseinlinevirtual
GetSampleName(int Sample)samplePDFBasevirtual
GetSampleNames(std::vector< std::string > &sampleNameVect)samplePDFBaseinline
getTestStatLLH(double data, double mc)samplePDFBaseprotected
getTestStatLLH(const double data, const double mc, const double w2)samplePDFBaseprotected
init(double pot)samplePDFBaseprotectedvirtual
init(double pot, std::string mc_version)samplePDFBaseprotectedvirtual
MCthrowsamplePDFBaseprotected
ModeStructsamplePDFBaseprotected
nDimssamplePDFBaseprotected
nSamplessamplePDFBaseprotected
printPosteriors()=0samplePDFInterfacepure virtual
reweight(double *oscpar)=0samplePDFInterfacepure virtual
rndsamplePDFBaseprotected
SampleNamesamplePDFBaseprotected
samplePDFBase()samplePDFBaseinline
samplePDFBase(double pot)samplePDFBase
set1DBinning(int nbins, double *boundaries)samplePDFBase
set1DBinning(int nbins, double low, double high)samplePDFBase
set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)samplePDFBase
set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)samplePDFBase
setMCMCBranches(TTree *outtree)samplePDFBaseinlinevirtual
setMCthrow(bool mc)samplePDFBaseinline
SetTestStatistic(TestStatistic test_stat)samplePDFBaseprotected
xsecsplinessamplePDFBaseprotected
~samplePDFBase()samplePDFBasevirtual
+ + + + diff --git a/classsamplePDFBase.html b/classsamplePDFBase.html new file mode 100644 index 00000000..b1ced154 --- /dev/null +++ b/classsamplePDFBase.html @@ -0,0 +1,2114 @@ + + + + + + + +MaCh3: samplePDFBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <samplePDFBase.h>

+
+Inheritance diagram for samplePDFBase:
+
+
+ + +samplePDFInterface +samplePDFFDBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 samplePDFBase ()
 
 samplePDFBase (double pot)
 
virtual ~samplePDFBase ()
 
virtual __int__ GetNsamples ()
 
virtual std::string GetName () const
 
virtual std::string GetSampleName (int Sample)
 
virtual double getSampleLikelihood (const int isample)
 
void GetSampleNames (std::vector< std::string > &sampleNameVect)
 
void GetModeName (std::vector< std::string > &modeNameVect)
 
MaCh3_ModesGetModeStruct () const
 
TH1Dget1DHist ()
 
TH2Dget2DHist ()
 
TH1Dget1DDataHist ()
 
TH2Dget2DDataHist ()
 
void set1DBinning (int nbins, double *boundaries)
 
void set1DBinning (int nbins, double low, double high)
 
void set2DBinning (int nbins1, double *boundaries1, int nbins2, double *boundaries2)
 
void set2DBinning (int nbins1, double low1, double high1, int nbins2, double low2, double high2)
 
double getEventRate ()
 
void setMCthrow (bool mc)
 
vector< vector< double > > generate2D (TH2D *pdf=0)
 
vector< doublegenerate ()
 
virtual double GetLikelihood ()=0
 
virtual std::vector< double > * getDataSample ()
 
void addData (std::vector< double > &dat)
 
void addData (std::vector< vector< double > > &dat)
 
void addData (TH1D *binneddata)
 
void addData (TH2D *binneddata)
 
void addXsecSplines (splineBase *splines)
 
virtual void setMCMCBranches (TTree *outtree)
 
- Public Member Functions inherited from samplePDFInterface
virtual void reweight (double *oscpar)=0
 
virtual void printPosteriors ()=0
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void init (double pot)
 
void init (double pot, std::string mc_version)
 
double GetLikelihood_kernel (std::vector< double > &data)
 
double getTestStatLLH (double data, double mc)
 
double getTestStatLLH (const double data, const double mc, const double w2)
 
void SetTestStatistic (TestStatistic test_stat)
 
- Protected Member Functions inherited from samplePDFInterface
virtual double getCovLikelihood ()=0
 
virtual void fill1DHist ()=0
 
virtual void fill2DHist ()=0
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::vector< double > * dataSample
 
std::vector< vector< double > > * dataSample2D
 
__int__ nSamples
 
int nDims
 
std::vector< std::string > SampleName
 
MaCh3_ModesModeStruct
 
TH1Ddathist
 
TH2Ddathist2d
 
TH1D_hPDF1D
 
TH2D_hPDF2D
 
splineBasexsecsplines
 
TRandom3rnd
 
bool MCthrow
 
TestStatistic fTestStatistic
 
+

Detailed Description

+
+

Definition at line 31 of file samplePDFBase.h.

+

Constructor & Destructor Documentation

+ +

◆ samplePDFBase() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
samplePDFBase::samplePDFBase ()
+
+inline
+
+ +

Definition at line 34 of file samplePDFBase.h.

+
34{};
+
+
+
+ +

◆ samplePDFBase() [2/2]

+ +
+
+ + + + + + + + +
samplePDFBase::samplePDFBase (double pot)
+
+ +

Definition at line 3 of file samplePDFBase.cpp.

+
4{
+
5 nDims = 0;
+
6 rnd = new TRandom3(0);
+
7 MCthrow = false;
+ + + + +
12}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
TRandom3 * rnd
+ + + + +
std::vector< double > * dataSample
+
std::vector< vector< double > > * dataSample2D
+
+
+
+ +

◆ ~samplePDFBase()

+ +
+
+ + + + + +
+ + + + + + + +
samplePDFBase::~samplePDFBase ()
+
+virtual
+
+ +

Definition at line 14 of file samplePDFBase.cpp.

+
15{
+
16 if(dathist != NULL) delete dathist;
+
17 if(dathist2d != NULL) delete dathist2d;
+
18 if(dataSample != NULL) delete dataSample;
+
19 if(dataSample2D != NULL) delete dataSample2D;
+
20 delete rnd;
+
21}
+
+
+
+

Member Function Documentation

+ +

◆ addData() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::addData (std::vector< double > & dat)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Reimplemented in samplePDFFDBase.

+ +

Definition at line 36 of file samplePDFBase.cpp.

+
37{
+
38 if(nDims != 0 && nDims != 1)
+
39 {
+
40 std::cerr<<"You have initialised this sample with "<<nDims<<" dimensions already and now trying to set dimentison to 1"<<std::endl;
+
41 std::cerr<<"This will not work, you can find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
42 throw;
+
43 }
+
44 nDims = 1;
+
45 dataSample = new std::vector<double>(data);
+
46 if(dathist == NULL)
+
47 {
+
48 std::cerr<<"dathist not initialised"<<std::endl;
+
49 std::cerr<<"Find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
50 throw;
+
51 }
+
52 dathist->Reset();
+
53 for (int i = 0; i < int(dataSample->size()); i++)
+
54 dathist->Fill(dataSample->at(i));
+
55}
+
+
+
+ +

◆ addData() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::addData (std::vector< vector< double > > & dat)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Reimplemented in samplePDFFDBase.

+ +

Definition at line 57 of file samplePDFBase.cpp.

+
58{
+
59 if(nDims != 0 && nDims != 2)
+
60 {
+
61 std::cerr<<"You have initialised this sample with "<<nDims<<" dimensions already and now trying to set dimentison to 2"<<std::endl;
+
62 std::cerr<<"This will not work, you can find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
63 throw;
+
64 }
+
65 nDims = 2;
+
66 dataSample2D = new std::vector< vector <double> >(data);
+
67 if(dathist2d == NULL)
+
68 {
+
69 std::cerr<<"dathist2d not initialised"<<std::endl;
+
70 std::cerr <<"Find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
71 throw;
+
72 }
+
73 dathist2d->Reset();
+
74 for (int i = 0; i < int(dataSample2D->size()); i++)
+
75 dathist2d->Fill(dataSample2D->at(0)[i],dataSample2D->at(1)[i]);
+
76}
+
+
+
+ +

◆ addData() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::addData (TH1Dbinneddata)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Reimplemented in samplePDFFDBase.

+ +

Definition at line 78 of file samplePDFBase.cpp.

+
79{
+
80 if(nDims != 0 && nDims != 1)
+
81 {
+
82 std::cerr<<"You have initialised this sample with "<<nDims<<" dimensions already and now trying to set dimentison to 1"<<std::endl;
+
83 std::cerr<<"This will not work, you can find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
84 throw;
+
85 }
+
86 nDims = 1;
+
87 std::cout << "adding 1D data histogram : " << binneddata -> GetName() << " with " << binneddata->Integral() << " events." << std::endl;
+
88 //KS: If exist delete to avoid memory leak
+
89 if(dathist != NULL) delete dathist;
+ +
91}
+
virtual std::string GetName() const
+
+
+
+ +

◆ addData() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::addData (TH2Dbinneddata)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Reimplemented in samplePDFFDBase.

+ +

Definition at line 93 of file samplePDFBase.cpp.

+
94{
+
95 if(nDims != 0 && nDims != 2)
+
96 {
+
97 std::cerr<<"You have initialised this sample with "<<nDims<<" dimensions already and now trying to set dimentison to 2"<<std::endl;
+
98 std::cerr<<"This will not work, you can find me here "<< __FILE__ << ":" << __LINE__ << std::endl;
+
99 throw;
+
100 }
+
101 nDims = 2;
+
102 std::cout << "adding 2D data histogram : " << binneddata -> GetName() << " with " << binneddata->Integral() << " events." << std::endl;
+
103 //KS: If exist delete to avoid memory leak
+
104 if(dathist2d != NULL) delete dathist;
+ +
106}
+
+
+
+ +

◆ addXsecSplines()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::addXsecSplines (splineBasesplines)
+
+inline
+
+ +

Definition at line 75 of file samplePDFBase.h.

+
+
splineBase * xsecsplines
+
+
+
+ +

◆ generate()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< double > samplePDFBase::generate ()
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 108 of file samplePDFBase.cpp.

+
109{
+
110 std::vector<double> data;
+
111 TH1D *pdf = (TH1D*)get1DHist();
+
112 double evrate = getEventRate();
+
113 int num = rnd->Poisson(evrate);
+
114 std::cout << std::endl << "sampling " << num << " events from " << evrate << std::endl;
+
115
+
116 // rejection sampling
+
117 //double M = 6; // *** DO NOT HARDCODE THIS, WILL ALTER RESULTS WHEN POT IS CHANGED ***
+
118 int count = 0;
+
119
+
120 dathist->Reset();
+
121
+
122 while(count < num)
+
123 {
+
124 /*double candidate = gRandom->Uniform(upp);
+
125 double accProb = pdf->GetBinContent(pdf->FindBin(candidate)) / M;
+
126 double rand = gRandom->Uniform(1);
+
127 if (accProb >= rand)
+
128 {
+
129 std::cout << candidate << " " << std::flush;
+
130 data.push_back(candidate);
+
131 dathist->Fill(candidate);
+
132 count++;
+
133 }*/
+
134 double candidate = pdf->GetRandom();
+
135 std::cout << candidate << " " << std::flush;
+
136 data.push_back(candidate);
+
137 dathist->Fill(candidate);
+
138 count++;
+
139 }
+
140
+
141 std::cout << "sampling complete" << std::endl;
+
142 return data;
+
143}
+
double getEventRate()
+ +
+
+
+ +

◆ generate2D()

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< vector< double > > samplePDFBase::generate2D (TH2Dpdf = 0)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 145 of file samplePDFBase.cpp.

+
146{
+
147 std::vector< vector <double> > data;
+
148 if(!pdf) pdf = (TH2D*)get2DHist();
+
149
+
150 if(MCthrow)
+
151 {
+
152 for(int i=1; i<=pdf->GetNbinsX(); i++)
+
153 {
+
154 for(int j=1; j<=pdf->GetNbinsY(); j++)
+
155 {
+
156 pdf->SetBinContent(i,j,rnd->Gaus(pdf->GetBinContent(i,j),pdf->GetBinError(i,j)));
+
157 }
+
158 }
+
159 }
+
160
+
161 double evrate = pdf->Integral();
+
162 int num = rnd->Poisson(evrate);
+
163 std::cout << "sampling " << num << " events from " << evrate << std::endl;
+
164
+
165 std::vector<double> var1;
+
166 std::vector<double> var2;
+
167 double x,y;
+
168
+
169 dathist2d->Reset();
+
170
+
171 for(int i=0; i < num; i++)
+
172 {
+
173 pdf->GetRandom2(x,y);
+
174 var1.push_back(x);
+
175 var2.push_back(y);
+
176 dathist2d->Fill(x, y);
+
177 }
+
178 data.push_back(var1);
+
179 data.push_back(var2);
+
180
+
181 std::cout << "sampling complete " << data[0].size() << std::endl;
+
182 return data;
+
183}
+ +
+
+
+ +

◆ get1DDataHist()

+ +
+
+ + + + + +
+ + + + + + + +
TH1D * samplePDFBase::get1DDataHist ()
+
+inline
+
+ +

Definition at line 49 of file samplePDFBase.h.

+
49{return dathist;}
+
+
+
+ +

◆ get1DHist()

+ +
+
+ + + + + + + +
TH1D * samplePDFBase::get1DHist ()
+
+ +

Definition at line 185 of file samplePDFBase.cpp.

+
186{
+
187 fill1DHist();
+
188 return _hPDF1D;
+
189}
+ +
virtual void fill1DHist()=0
+
+
+
+ +

◆ get2DDataHist()

+ +
+
+ + + + + +
+ + + + + + + +
TH2D * samplePDFBase::get2DDataHist ()
+
+inline
+
+ +

Definition at line 50 of file samplePDFBase.h.

+
50{return dathist2d;}
+
+
+
+ +

◆ get2DHist()

+ +
+
+ + + + + + + +
TH2D * samplePDFBase::get2DHist ()
+
+ +

Definition at line 190 of file samplePDFBase.cpp.

+
191{
+
192 fill2DHist();
+
193 return _hPDF2D;
+
194}
+ +
virtual void fill2DHist()=0
+
+
+
+ +

◆ getDataSample()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector< double > * samplePDFBase::getDataSample ()
+
+inlinevirtual
+
+ +

Definition at line 62 of file samplePDFBase.h.

+
62{return dataSample;};
+
+
+
+ +

◆ getEventRate()

+ +
+
+ + + + + +
+ + + + + + + +
double samplePDFBase::getEventRate ()
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 196 of file samplePDFBase.cpp.

+
197{
+
198 //if (_hErec == NULL)
+
199 fill1DHist();
+
200 return _hPDF1D->Integral();
+
201}
+
+
+
+ +

◆ GetLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double samplePDFBase::GetLikelihood ()
+
+pure virtual
+
+ +

Implements samplePDFInterface.

+ +

Implemented in samplePDFFDBase.

+ +
+
+ +

◆ GetLikelihood_kernel()

+ +
+
+ + + + + +
+ + + + + + + + +
double samplePDFBase::GetLikelihood_kernel (std::vector< double > & data)
+
+protectedvirtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 234 of file samplePDFBase.cpp.

+
235{
+
236 // this doesnt work
+
237 /* std::cout << "kernel estimation likelihood" << std::endl;
+
238 double sig = 0.5;
+
239 double sum = 0;
+
240 double norm = 1 / (sig * TMath::Sqrt(2*TMath::Pi()));
+
241
+
242 for(int d = 0; d < dataSet.size(); d++)
+
243 {
+
244 for(int i = 0; i < skmcSamples.size(); i ++)
+
245 for(int j = 0; j < skmcSamples[i].nEvents; j++)
+
246 {
+
247 //sum += TMath::Power(dataSet[d] - skmcSamples[i].rw_erec[j]);
+
248 sum += skmcSamples[i].pot_s * skmcSamples[i].norm_s * skmcSamples[i].osc_w[j] * skmcSamples[i].flux_w[j] * skmcSamples[i].skdet_w[j] * skmcSamples[i].energyscale_w[j] * norm * TMath::Exp(-0.5 * TMath::Power((dataSet[d] - skmcSamples[i].rw_erec[j])/sig, 2));
+
249 }
+
250 }
+
251 //sum /= dataSet[d];
+
252 // sum /= sig * sig;
+
253 // sum *= -1 * dataSet[d] * skmcSamples[i].pot_s * skmcSamples[i].norm_s * skmcSamples[i].osc_w[j] * skmcSamples[i].flux_w[j] * skmcSamples[i].skdet_w[j] * skmcSamples[i].energyscale_w[j];
+
254 // sum += -1 * dataSet[d] * TMath::Log(sig);
+
255
+
256 std::cout << "finished." << std::endl;
+
257 return -1 * TMath::Log(sum); */
+
258 return 0;
+
259}
+
+
+
+ +

◆ GetModeName()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::GetModeName (std::vector< std::string > & modeNameVect)
+
+inline
+
+ +

Definition at line 472 of file samplePDFBase.cpp.

+
472 {
+
473// ***************************************************************************
+
474
+
475 if(modeNameVect.size() !=0)
+
476 modeNameVect.clear() ;
+
477
+
478 for(int i = 0; ModeStruct->GetNModes()+1; i++)
+
479 {
+ +
481 }
+
482
+
483}
+
virtual std::string Mode_ToString(int i)
+
virtual int GetNModes()
+
MaCh3_Modes * ModeStruct
+
+
+
+ +

◆ GetModeStruct()

+ +
+
+ + + + + +
+ + + + + + + +
MaCh3_Modes * samplePDFBase::GetModeStruct () const
+
+inline
+
+ +

Definition at line 45 of file samplePDFBase.h.

+
45{ return ModeStruct; }
+
+
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string samplePDFBase::GetName () const
+
+inlinevirtual
+
+ +

Definition at line 40 of file samplePDFBase.h.

+
40{return "samplePDF";};
+
+
+
+ +

◆ GetNsamples()

+ +
+
+ + + + + +
+ + + + + + + +
virtual __int__ samplePDFBase::GetNsamples ()
+
+inlinevirtual
+
+ +

Definition at line 39 of file samplePDFBase.h.

+
39{ return nSamples; };
+ +
+
+
+ +

◆ getSampleLikelihood()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double samplePDFBase::getSampleLikelihood (const int isample)
+
+inlinevirtual
+
+ +

Definition at line 42 of file samplePDFBase.h.

+
42{(void) isample; return GetLikelihood();};
+
virtual double GetLikelihood()=0
+
+
+
+ +

◆ GetSampleName()

+ +
+
+ + + + + +
+ + + + + + + + +
std::string samplePDFBase::GetSampleName (int Sample)
+
+virtual
+
+ +

Definition at line 448 of file samplePDFBase.cpp.

+
448 {
+
449// ***************************************************************************
+
450
+
451 if(Sample > nSamples)
+
452 {
+
453 std::cerr<<" You are asking for sample "<< Sample <<" I only have "<< nSamples<<std::endl;
+
454 throw;
+
455 }
+
456
+
457 return SampleName[Sample];
+
458}
+
std::vector< std::string > SampleName
+
+
+
+ +

◆ GetSampleNames()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::GetSampleNames (std::vector< std::string > & sampleNameVect)
+
+inline
+
+ +

Definition at line 460 of file samplePDFBase.cpp.

+
460 {
+
461// ***************************************************************************
+
462 if(sampleNameVect.size() !=0)
+
463 sampleNameVect.clear() ;
+
464
+
465 for(int i = 0; nSamples; i++)
+
466 {
+
467 sampleNameVect.push_back(GetSampleName(i));
+
468 }
+
469}
+
virtual std::string GetSampleName(int Sample)
+
+
+
+ +

◆ getTestStatLLH() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
double samplePDFBase::getTestStatLLH (const double data,
const double mc,
const double w2 
)
+
+protected
+
+ +

Definition at line 264 of file samplePDFBase.cpp.

+
264 {
+
265// *************************
+
266
+
267 // Need some MC
+
268 if (mc == 0) return 0.0;
+
269
+
270 // The MC used in the likeliihood calculation
+
271 // Is allowed to be changed by Barlow Beeston beta parameters
+
272 double newmc = mc;
+
273
+
274 switch (fTestStatistic)
+
275 {
+
276 //CW: Not full Barlow-Beeston or what is referred to as "light": we're not introducing any more parameters
+
277 // Assume the MC has a Gaussian distribution around generated
+
278 // As in https://arxiv.org/abs/1103.0354 eq 10, 11
+
279 //CW: Calculate the Barlow-Beeston likelhood contribution from MC statistics
+
280 // Assumes the beta scaling parameters are Gaussian distributed
+
281 // Follows arXiv:1103.0354 section 5 and equation 8, 9, 10, 11 on page 4/5
+
282 // Essentially solves equation 11
+
283 case (kBarlowBeeston):
+
284 {
+
285 // The penalty from MC statistics using Conways approach (https://cds.cern.ch/record/1333496?)
+
286 double penalty = 0;
+
287 // Barlow-Beeston uses fractional uncertainty on MC, so sqrt(sum[w^2])/mc
+
288 const double fractional = std::sqrt(w2)/mc;
+
289 // b in quadratic equation
+
290 const double temp = mc*fractional*fractional-1;
+
291 // b^2 - 4ac in quadratic equation
+
292 const double temp2 = temp*temp + 4*data*fractional*fractional;
+
293 if (temp2 < 0) {
+
294 std::cerr << "Negative square root in Barlow Beeston coefficient calculation!" << std::endl;
+
295 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
296 throw;
+
297 }
+
298 // Solve for the positive beta
+
299 const double beta = (-1*temp+sqrt(temp2))/2.;
+
300 newmc = mc*beta;
+
301 // And penalise the movement in beta relative the mc uncertainty
+
302 if (fractional > 0) penalty = (beta-1)*(beta-1)/(2*fractional*fractional);
+
303 else penalty = 0;
+
304
+
305 // Calculate the new Poisson likelihood
+
306 // For Barlow-Beeston newmc is modified, so can only calculate Poisson likelihood after Barlow-Beeston
+
307 // For the Poisson likelihood, this is just the usual calculation
+
308 // For IceCube likelihood, we calculate it later
+
309 double stat = 0;
+
310 // All likelihood calculations may use the bare Poisson likelihood, so calculate here
+
311 if (data == 0) stat = newmc;
+
312 else if (newmc > 0) stat = newmc-data+data*std::log(data/newmc);
+
313
+
314 // Return the statistical contribution and penalty
+
315 return stat+penalty;
+
316 }
+
317 break;
+
318 //KS: Alterantive calcaution of Barlow-Beeston following Hans Dembinski and Ahmed Abdelmottele arXiv:2206.12346v2
+ +
320 {
+
321
+
322 //KS: code follows authors implementation from:
+
323 //https://github.com/scikit-hep/iminuit/blob/059d06b00cae097ebf340b218b4eb57357111df8/src/iminuit/cost.py#L274-L300
+
324
+
325 //the so-called effective count
+
326 const double k = mc*mc / w2;
+
327 //Calculate beta which is scaling factor between true and generated MC
+
328 const double beta = (data + k) / (mc + k);
+
329
+
330 newmc = mc*beta;
+
331 // And penalise the movement in beta relative the mc uncertainty
+
332 const double penalty = k*beta-k+k*std::log(k/(k*beta));
+
333
+
334 // Calculate the new Poisson likelihood
+
335 // For Barlow-Beeston newmc is modified, so can only calculate Poisson likelihood after Barlow-Beeston
+
336 // For the Poisson likelihood, this is just the usual calculation
+
337 // For IceCube likelihood, we calculate it later
+
338 double stat = 0;
+
339 // All likelihood calculations may use the bare Poisson likelihood, so calculate here
+
340 if (data == 0) stat = newmc;
+
341 else if (newmc > 0) stat = newmc-data+data*std::log(data/newmc);
+
342
+
343 // Return the statistical contribution and penalty
+
344 return stat+penalty;
+
345 }
+
346 break;
+
347 //CW: Also try the IceCube likelihood
+
348 // It does not modify the MC content
+
349 // https://arxiv.org/abs/1901.04645
+
350 // Argüelles, C.A., Schneider, A. & Yuan, T. J. High Energ. Phys. (2019) 2019: 30. https://doi.org/10.1007/JHEP06(2019)030
+
351 // We essentially construct eq 3.16 and take the logarithm
+
352 // in eq 3.16, mu is MC, sigma2 is w2, k is data
+
353 case (kIceCube):
+
354 {
+
355 double stat = 0.0;
+
356
+
357 // If there for some reason is 0 mc uncertainty, return the Poisson LLH
+
358 if (w2 == 0)
+
359 {
+
360 // Calculate the new Poisson likelihood
+
361 if (data == 0) stat = newmc;
+
362 else if (newmc > 0) stat = newmc-data+data*std::log(data/newmc);
+
363
+
364 return stat;
+
365 }
+
366 // Auxillary variables
+
367 const long double b = mc/w2;
+
368 const long double a = mc*b+1;
+
369 const long double k = data;
+
370 // Use C99's implementation of log of gamma function to not be C++11 dependent
+
371 stat = -1*(a * logl(b) + lgammal(k+a) - lgammal(k+(long double)1) - ((k+a)*log1pl(b)) - lgammal(a));
+
372
+
373 // Return the statistical contribution and penalty
+
374 return stat;
+
375 }
+
376 break;
+
377 //KS: Pearson works on assumption that event distribution in each bin is described by a Gaussian which in our case is not fulfilled for all bins, hence use it at your own risk
+
378 case (kPearson):
+
379 {
+
380 //KS: 2 is beacuese this function returns -LLH not -2LLH
+
381 const double stat = (data-mc)*(data-mc)/(2*mc);
+
382
+
383 // Return the statistical
+
384 return stat;
+
385 }
+
386 break;
+
387 case (kPoisson):
+
388 {
+
389 double stat = 0.0;
+
390 // All likelihood calculations may use the bare Poisson likelihood, so calculate here
+
391 if (data == 0) stat = newmc;
+
392 else if (newmc > 0) stat = newmc-data+data*std::log(data/newmc);
+
393
+
394 // Return the statistical contribution and penalty
+
395 return stat;
+
396 }
+
397 break;
+
398
+
399 default:
+
400 std::cerr << "Couldn't find TestStatistic " << fTestStatistic << " exiting!" << std::endl;
+
401 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
402 throw;
+
403 } // end switch
+
404}
+
@ kPearson
Definition Structs.h:1004
+
@ kBarlowBeeston
Definition Structs.h:1002
+
@ kIceCube
Definition Structs.h:1003
+
@ kDembinskiAbdelmottele
Definition Structs.h:1005
+
@ kPoisson
Definition Structs.h:1001
+
TestStatistic fTestStatistic
+
+
+
+ +

◆ getTestStatLLH() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double samplePDFBase::getTestStatLLH (double data,
double mc 
)
+
+protected
+
+ +

Definition at line 205 of file samplePDFBase.cpp.

+
205 {
+
206// ***************************************************************************
+
207 double negLogL = 0;
+
208 if(mc == 0) mc = 1E-8;
+
209 if(mc > 0 && data > 0)
+
210 {
+
211 //http://hyperphysics.phy-astr.gsu.edu/hbase/math/stirling.html
+
212 negLogL += (mc - data + data * TMath::Log(data/mc));
+
213 }
+
214 else if(mc > 0 && data == 0) negLogL += mc;
+
215
+
216 return negLogL;
+
217}
+
+
+
+ +

◆ init() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::init (double pot)
+
+protectedvirtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 23 of file samplePDFBase.cpp.

+
24{
+
25}
+
+
+
+ +

◆ init() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void samplePDFBase::init (double pot,
std::string mc_version 
)
+
+protectedvirtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 27 of file samplePDFBase.cpp.

+
28{
+
29
+
30
+
31 //TODO KS: Need to set test stat from config file
+
32 // Set the test-statistic
+
33 //SetTestStatistic(static_cast<TestStatistic>(FitManager->GetMCStatLLH()));
+
34}
+
+
+
+ +

◆ set1DBinning() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
void samplePDFBase::set1DBinning (int nbins,
doubleboundaries 
)
+
+ +

Definition at line 418 of file samplePDFBase.cpp.

+
419{
+
420 _hPDF1D->Reset();
+
421 _hPDF1D->SetBins(nbins,boundaries);
+
422 dathist->SetBins(nbins,boundaries);
+
423}
+
+
+
+ +

◆ set1DBinning() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFBase::set1DBinning (int nbins,
double low,
double high 
)
+
+ +

Definition at line 425 of file samplePDFBase.cpp.

+
426{
+
427 _hPDF1D->Reset();
+
428 _hPDF1D->SetBins(nbins,low,high);
+
429 dathist->SetBins(nbins,low,high);
+
430}
+
+
+
+ +

◆ set2DBinning() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFBase::set2DBinning (int nbins1,
doubleboundaries1,
int nbins2,
doubleboundaries2 
)
+
+ +

Definition at line 431 of file samplePDFBase.cpp.

+
432{
+
433 _hPDF2D->Reset();
+ + +
436}
+
+
+
+ +

◆ set2DBinning() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFBase::set2DBinning (int nbins1,
double low1,
double high1,
int nbins2,
double low2,
double high2 
)
+
+ +

Definition at line 438 of file samplePDFBase.cpp.

+
439{
+
440 _hPDF2D->Reset();
+ + +
443}
+
+
+
+ +

◆ setMCMCBranches()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFBase::setMCMCBranches (TTreeouttree)
+
+inlinevirtual
+
+ +

Definition at line 79 of file samplePDFBase.h.

+
79{(void)outtree;};
+
+
+
+ +

◆ setMCthrow()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::setMCthrow (bool mc)
+
+inline
+
+ +

Definition at line 56 of file samplePDFBase.h.

+
56{MCthrow= mc;}
+
+
+
+ +

◆ SetTestStatistic()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFBase::SetTestStatistic (TestStatistic test_stat)
+
+protected
+
+ +

Definition at line 408 of file samplePDFBase.cpp.

+
408 {
+
409// **************************************************
+ +
411
+ +
413 std::cout << "Using "<< name <<" likelihood in ND280" << std::endl;
+
414 //if(UpdateW2) std::cout << "With updating W2" << std::endl;
+
415 //else std::cout << "Without updating W2" << std::endl;
+
416}
+
TestStatistic
Definition Structs.h:1000
+
std::string TestStatistic_ToString(TestStatistic i)
Definition Structs.h:1011
+
+
+
+

Member Data Documentation

+ +

◆ _hPDF1D

+ +
+
+ + + + + +
+ + + + +
TH1D* samplePDFBase::_hPDF1D
+
+protected
+
+ +

Definition at line 111 of file samplePDFBase.h.

+ +
+
+ +

◆ _hPDF2D

+ +
+
+ + + + + +
+ + + + +
TH2D* samplePDFBase::_hPDF2D
+
+protected
+
+ +

Definition at line 112 of file samplePDFBase.h.

+ +
+
+ +

◆ dataSample

+ +
+
+ + + + + +
+ + + + +
std::vector<double>* samplePDFBase::dataSample
+
+protected
+
+ +

Definition at line 94 of file samplePDFBase.h.

+ +
+
+ +

◆ dataSample2D

+ +
+
+ + + + + +
+ + + + +
std::vector< vector <double> >* samplePDFBase::dataSample2D
+
+protected
+
+ +

Definition at line 95 of file samplePDFBase.h.

+ +
+
+ +

◆ dathist

+ +
+
+ + + + + +
+ + + + +
TH1D* samplePDFBase::dathist
+
+protected
+
+ +

Definition at line 107 of file samplePDFBase.h.

+ +
+
+ +

◆ dathist2d

+ +
+
+ + + + + +
+ + + + +
TH2D* samplePDFBase::dathist2d
+
+protected
+
+ +

Definition at line 108 of file samplePDFBase.h.

+ +
+
+ +

◆ fTestStatistic

+ +
+
+ + + + + +
+ + + + +
TestStatistic samplePDFBase::fTestStatistic
+
+protected
+
+ +

Definition at line 120 of file samplePDFBase.h.

+ +
+
+ +

◆ MCthrow

+ +
+
+ + + + + +
+ + + + +
bool samplePDFBase::MCthrow
+
+protected
+
+ +

Definition at line 118 of file samplePDFBase.h.

+ +
+
+ +

◆ ModeStruct

+ +
+
+ + + + + +
+ + + + +
MaCh3_Modes* samplePDFBase::ModeStruct
+
+protected
+
+ +

Definition at line 105 of file samplePDFBase.h.

+ +
+
+ +

◆ nDims

+ +
+
+ + + + + +
+ + + + +
int samplePDFBase::nDims
+
+protected
+
+ +

Definition at line 100 of file samplePDFBase.h.

+ +
+
+ +

◆ nSamples

+ +
+
+ + + + + +
+ + + + +
__int__ samplePDFBase::nSamples
+
+protected
+
+ +

Definition at line 98 of file samplePDFBase.h.

+ +
+
+ +

◆ rnd

+ +
+
+ + + + + +
+ + + + +
TRandom3* samplePDFBase::rnd
+
+protected
+
+ +

Definition at line 117 of file samplePDFBase.h.

+ +
+
+ +

◆ SampleName

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> samplePDFBase::SampleName
+
+protected
+
+ +

Definition at line 102 of file samplePDFBase.h.

+ +
+
+ +

◆ xsecsplines

+ +
+
+ + + + + +
+ + + + +
splineBase* samplePDFBase::xsecsplines
+
+protected
+
+ +

Definition at line 115 of file samplePDFBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsamplePDFBase.png b/classsamplePDFBase.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0a19e94c3783c503b04efd4949ee320004e133 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^bwJ#~!3-qD%+~J%QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#NtYc)B=-R4~4s`?~M70#8f3 zW7nU5{xz2hjHj#Iezs;!R;=OC-bVg2OZE#U_mnxQcxqeDQ|bL8`s2c)>+WAQZz!9# zEXm81@jO>0J%7JfeDLxg+&hk4KP(e$l*rGuI7MV1tEJ7Ufc=*y2d&vw_0q&{?G(=H zUso^9`*lXNP9|pFi<7TTHe7!`V?k;1Dz3xLnI9^wEn^-=e`H=6-C5PXw%eX3Z$Vzs z*4+HP9~mw;sx6=U=<14vKlV!czuPC9T>AY~)AJt=MHi0V)qXC1Kis(g-1~dKCD+fr z-!)(V>5-o*maji8RXy2WWaBAy@}o+oN_9<-;Ve#uc^S+M);Aw*KRYGA`~J&mHOYVE z%lAEIJmA&G&Y)~5$I$bng27-CP{0F8;75pJOM*I!prE#8oXZi9`)&D$`Jb<{W33L6 z@92nm&1qLZb>FgA%z_iMbw7SJIBqm^1AA+r5!ZdDz4JE(MEkjvL_fUjHFJZ1)z&Q@ z^LHNJUih}X<3(AMyt$Fyv~P=7U9b%(U%&mkbIs~7fs1QhOc$3`2mQIiTfJ-Ry+tK| zU%D@k71{6K)sgkR{QkK;yMDjh@c;R{siEEP`?nR>G7DA0N9N z+nH&Tc&>A{k`sp|NGjgPsczp{H(rNMg9aRc8^b9GV#qv!($oC>iz2* VgIJIJbOI)N22WQ%mvv4FO#lM + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
samplePDFFDBase Member List
+
+
+ +

This is the complete list of members for samplePDFFDBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_datasamplePDFFDBaseprotected
_hPDF1DsamplePDFBaseprotected
_hPDF2DsamplePDFBaseprotected
_sampleFilesamplePDFFDBaseprotected
addData(TH1D *Data)samplePDFFDBasevirtual
addData(TH2D *Data)samplePDFFDBasevirtual
addData(std::vector< double > &data)samplePDFFDBasevirtual
addData(std::vector< vector< double > > &data)samplePDFFDBasevirtual
addXsecSplines(splineBase *splines)samplePDFBaseinline
applyShifts(int iSample, int iEvent)samplePDFFDBaseinlineprotectedvirtual
BinningOptsamplePDFFDBaseprotected
calcOscWeights(int sample, int nutype, double *w, double *oscpar)samplePDFFDBase
CalcXsecNormsBins(int iSample)samplePDFFDBaseprotected
CalcXsecWeightFunc(int iSample, int iEvent)=0samplePDFFDBaseprotectedpure virtual
CalcXsecWeightNorm(const int iSample, const int iEvent)samplePDFFDBaseprotected
CalcXsecWeightSpline(const int iSample, const int iEvent)samplePDFFDBaseprotected
dataSamplesamplePDFBaseprotected
dataSample2DsamplePDFBaseprotected
dathistsamplePDFBaseprotected
dathist2dsamplePDFBaseprotected
doubled_anglesamplePDFFDBaseprotected
DumpWeights(std::string outname)samplePDFFDBaseinlinevirtual
fill1DHist()samplePDFFDBaseprotectedvirtual
fill2DHist()samplePDFFDBaseprotectedvirtual
fillArray()samplePDFFDBaseprotected
fillSplineBins()samplePDFFDBaseprotected
FindEventOscBin()samplePDFFDBase
FindNominalBinAndEdges1D()samplePDFFDBaseprotected
FindNominalBinAndEdges2D()samplePDFFDBaseprotected
fTestStatisticsamplePDFBaseprotected
funcParsIndexsamplePDFFDBaseprotected
funcParsNamessamplePDFFDBaseprotected
generate()samplePDFBasevirtual
generate2D(TH2D *pdf=0)samplePDFBasevirtual
get1DDataHist()samplePDFBaseinline
get1DHist()samplePDFBase
get2DDataHist()samplePDFBaseinline
get2DHist()samplePDFBase
GetBinningOpt()samplePDFFDBaseinlineprotected
getCovLikelihood()=0samplePDFInterfaceprotectedpure virtual
getDataSample()samplePDFBaseinlinevirtual
getDiscVar(int sample, int event, int varindx)=0interfacePDFEbEpure virtual
getEventRate()samplePDFBasevirtual
GetEventWeight(int iSample, int iEntry)samplePDFFDBaseinlinevirtual
GetIsRHC()samplePDFFDBaseinlineprotected
GetLikelihood()samplePDFFDBasevirtual
GetLikelihood_kernel(std::vector< double > &data)samplePDFBaseprotectedvirtual
GetModeName(std::vector< std::string > &modeNameVect)samplePDFBaseinline
GetModeStruct() constsamplePDFBaseinline
GetName() constsamplePDFBaseinlinevirtual
GetNDim()samplePDFFDBase
getNEventsInSample(int sample)=0interfacePDFEbEpure virtual
getNMCSamples()=0interfacePDFEbEpure virtual
GetNsamples()samplePDFBaseinlinevirtual
getSampleLikelihood(const int isample)samplePDFBaseinlinevirtual
GetSampleName()samplePDFFDBaseinline
samplePDFBase::GetSampleName(int Sample)samplePDFBasevirtual
GetSampleNames(std::vector< std::string > &sampleNameVect)samplePDFBaseinline
getTestStatLLH(double data, double mc)samplePDFBaseprotected
getTestStatLLH(const double data, const double mc, const double w2)samplePDFBaseprotected
init(double pot)samplePDFBaseprotectedvirtual
init(double pot, std::string mc_version)samplePDFBaseprotectedvirtual
IsEventSelected(int iSample, int iEvent)samplePDFFDBaseprotected
IsEventSelected(std::vector< std::string > ParameterStr, int iSample, int iEvent)samplePDFFDBaseprotected
IsEventSelected(std::vector< std::string > ParameterStr, std::vector< std::vector< double > > &Selection, int iSample, int iEvent)samplePDFFDBaseprotected
IsRHCsamplePDFFDBaseprotected
MCSamplessamplePDFFDBaseprotected
MCthrowsamplePDFBaseprotected
ModeStructsamplePDFBaseprotected
nDimssamplePDFBaseprotected
nFuncParamssamplePDFFDBaseprotected
nSamplessamplePDFBaseprotected
NSelectionssamplePDFFDBaseprotected
OscsamplePDFFDBaseprotected
osc_binnedsamplePDFFDBaseprotected
osc_binned_axissamplePDFFDBaseprotected
PrepFunctionalParameters()samplePDFFDBaseinlineprotectedvirtual
printPosteriors()=0samplePDFInterfacepure virtual
ResetHistograms()samplePDFFDBaseinlineprotected
ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0samplePDFFDBaseprotectedpure virtual
ReturnKinematicParameter(double KinematicVariable, int iSample, int iEvent)=0samplePDFFDBaseprotectedpure virtual
ReturnKinematicParameterBinning(std::string KinematicParameter)=0samplePDFFDBaseprotectedpure virtual
reweight(double *oscpar)samplePDFFDBasevirtual
rndsamplePDFBaseprotected
SampleDetIDsamplePDFFDBaseprotected
samplenamesamplePDFFDBaseprotected
SampleNamesamplePDFBaseprotected
samplePDFBase()samplePDFBaseinline
samplePDFBase(double pot)samplePDFBase
samplePDFFD_arraysamplePDFFDBaseprotected
samplePDFFD_array_w2samplePDFFDBaseprotected
samplePDFFD_datasamplePDFFDBaseprotected
samplePDFFDBase()samplePDFFDBaseinline
samplePDFFDBase(double pot, std::string mc_version, covarianceXsec *xsec_cov)samplePDFFDBase
SelectionsamplePDFFDBaseprotected
SelectionBoundssamplePDFFDBaseprotected
SelectionStrsamplePDFFDBaseprotected
set1DBinning(int nbins, double *boundaries)samplePDFFDBaseprotected
set1DBinning(int nbins, double low, double high)samplePDFFDBaseprotected
set1DBinning(std::vector< double > &XVec)samplePDFFDBaseprotected
set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)samplePDFFDBaseprotected
set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)samplePDFFDBaseprotected
set2DBinning(std::vector< double > &XVec, std::vector< double > &YVec)samplePDFFDBaseprotected
setMCMCBranches(TTree *outtree)samplePDFBaseinlinevirtual
setMCthrow(bool mc)samplePDFBaseinline
SetOscillator(Oscillator *Osc_)samplePDFFDBase
SetTestStatistic(TestStatistic test_stat)samplePDFBaseprotected
SetupFuncParameters()samplePDFFDBaseinlineprotectedvirtual
SetupNormParameters()samplePDFFDBaseprotected
SetupOscCalc(double PathLength, double Density)samplePDFFDBasevirtual
setupSplines(fdmc_base *skobj, const char *splineFile, int nutype, int signal)samplePDFFDBaseinlinevirtual
SetupWeightPointers()=0samplePDFFDBaseprotectedpure virtual
SetXsecCov(covarianceXsec *xsec_cov)samplePDFFDBase
splineFilesamplePDFFDBaseprotected
StoredSelectionsamplePDFFDBaseprotected
SwitchToCUDAProbType(CUDAProb_nu CUDAProb_nu)samplePDFFDBaseinlineprotected
UseBinnedOscReweighting(bool ans)samplePDFFDBase
UseBinnedOscReweighting(bool ans, int nbins, double *osc_bins)samplePDFFDBase
UseNonDoubledAngles(bool ans)samplePDFFDBaseinline
XBinEdgessamplePDFFDBaseprotected
xsec_normssamplePDFFDBaseprotected
XsecCovsamplePDFFDBaseprotected
xsecsplinessamplePDFBaseprotected
YBinEdgessamplePDFFDBaseprotected
~samplePDFBase()samplePDFBasevirtual
~samplePDFFDBase()samplePDFFDBasevirtual
+ + + + diff --git a/classsamplePDFFDBase.html b/classsamplePDFFDBase.html new file mode 100644 index 00000000..e1d84ebe --- /dev/null +++ b/classsamplePDFFDBase.html @@ -0,0 +1,3955 @@ + + + + + + + +MaCh3: samplePDFFDBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
samplePDFFDBase Class Referenceabstract
+
+
+ +

#include <samplePDFFDBase.h>

+
+Inheritance diagram for samplePDFFDBase:
+
+
+ + +samplePDFBase +interfacePDFEbE +samplePDFInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 samplePDFFDBase ()
 
 samplePDFFDBase (double pot, std::string mc_version, covarianceXsec *xsec_cov)
 
virtual ~samplePDFFDBase ()
 
int GetNDim ()
 
void addData (TH1D *Data)
 
void addData (TH2D *Data)
 
void addData (std::vector< double > &data)
 
void addData (std::vector< vector< double > > &data)
 
double GetLikelihood ()
 
void reweight (double *oscpar)
 
double GetEventWeight (int iSample, int iEntry)
 
void UseNonDoubledAngles (bool ans)
 
void UseBinnedOscReweighting (bool ans)
 
void UseBinnedOscReweighting (bool ans, int nbins, double *osc_bins)
 
void calcOscWeights (int sample, int nutype, double *w, double *oscpar)
 
std::string GetSampleName ()
 
void SetXsecCov (covarianceXsec *xsec_cov)
 
virtual void DumpWeights (std::string outname)
 
virtual void setupSplines (fdmc_base *skobj, const char *splineFile, int nutype, int signal)
 
virtual void SetupOscCalc (double PathLength, double Density)
 
void SetOscillator (Oscillator *Osc_)
 
void FindEventOscBin ()
 
- Public Member Functions inherited from samplePDFBase
 samplePDFBase ()
 
 samplePDFBase (double pot)
 
virtual ~samplePDFBase ()
 
virtual __int__ GetNsamples ()
 
virtual std::string GetName () const
 
virtual std::string GetSampleName (int Sample)
 
virtual double getSampleLikelihood (const int isample)
 
void GetSampleNames (std::vector< std::string > &sampleNameVect)
 
void GetModeName (std::vector< std::string > &modeNameVect)
 
MaCh3_ModesGetModeStruct () const
 
TH1Dget1DHist ()
 
TH2Dget2DHist ()
 
TH1Dget1DDataHist ()
 
TH2Dget2DDataHist ()
 
void set1DBinning (int nbins, double *boundaries)
 
void set1DBinning (int nbins, double low, double high)
 
void set2DBinning (int nbins1, double *boundaries1, int nbins2, double *boundaries2)
 
void set2DBinning (int nbins1, double low1, double high1, int nbins2, double low2, double high2)
 
double getEventRate ()
 
void setMCthrow (bool mc)
 
vector< vector< double > > generate2D (TH2D *pdf=0)
 
vector< doublegenerate ()
 
virtual std::vector< double > * getDataSample ()
 
void addXsecSplines (splineBase *splines)
 
virtual void setMCMCBranches (TTree *outtree)
 
- Public Member Functions inherited from samplePDFInterface
virtual void printPosteriors ()=0
 
- Public Member Functions inherited from interfacePDFEbE
virtual double getDiscVar (int sample, int event, int varindx)=0
 
virtual int getNMCSamples ()=0
 
virtual int getNEventsInSample (int sample)=0
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual void SetupWeightPointers ()=0
 
void fillSplineBins ()
 
void FindNominalBinAndEdges1D ()
 
void FindNominalBinAndEdges2D ()
 
void set1DBinning (int nbins, double *boundaries)
 
void set1DBinning (int nbins, double low, double high)
 
void set2DBinning (int nbins1, double *boundaries1, int nbins2, double *boundaries2)
 
void set2DBinning (int nbins1, double low1, double high1, int nbins2, double low2, double high2)
 
void set1DBinning (std::vector< double > &XVec)
 
void set2DBinning (std::vector< double > &XVec, std::vector< double > &YVec)
 
virtual void PrepFunctionalParameters ()
 
virtual void applyShifts (int iSample, int iEvent)
 
bool IsEventSelected (int iSample, int iEvent)
 
bool IsEventSelected (std::vector< std::string > ParameterStr, int iSample, int iEvent)
 
bool IsEventSelected (std::vector< std::string > ParameterStr, std::vector< std::vector< double > > &Selection, int iSample, int iEvent)
 
void CalcXsecNormsBins (int iSample)
 
bool GetIsRHC ()
 
double CalcXsecWeightSpline (const int iSample, const int iEvent)
 
double CalcXsecWeightNorm (const int iSample, const int iEvent)
 
virtual double CalcXsecWeightFunc (int iSample, int iEvent)=0
 
int GetBinningOpt ()
 
virtual double ReturnKinematicParameter (std::string KinematicParamter, int iSample, int iEvent)=0
 
virtual double ReturnKinematicParameter (double KinematicVariable, int iSample, int iEvent)=0
 
virtual std::vector< doubleReturnKinematicParameterBinning (std::string KinematicParameter)=0
 
virtual void SetupFuncParameters ()
 
void SetupNormParameters ()
 
void fill1DHist ()
 
void fill2DHist ()
 
void fillArray ()
 
void ResetHistograms ()
 
cudaprob3::ProbType SwitchToCUDAProbType (CUDAProb_nu CUDAProb_nu)
 
- Protected Member Functions inherited from samplePDFBase
void init (double pot)
 
void init (double pot, std::string mc_version)
 
double GetLikelihood_kernel (std::vector< double > &data)
 
double getTestStatLLH (double data, double mc)
 
double getTestStatLLH (const double data, const double mc, const double w2)
 
void SetTestStatistic (TestStatistic test_stat)
 
- Protected Member Functions inherited from samplePDFInterface
virtual double getCovLikelihood ()=0
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

splineFDBasesplineFile
 
std::vector< doubleXBinEdges
 
std::vector< doubleYBinEdges
 
double ** samplePDFFD_array
 
double ** samplePDFFD_array_w2
 
double ** samplePDFFD_data
 
vector< struct fdmc_baseMCSamples
 
TFile_sampleFile
 
TTree_data
 
OscillatorOsc = NULL
 
TAxisosc_binned_axis
 
bool doubled_angle
 
bool osc_binned
 
covarianceXsecXsecCov
 
int BinningOpt
 
int SampleDetID
 
bool IsRHC
 
std::string samplename
 
std::vector< XsecNorms4xsec_norms
 
int nFuncParams
 
std::vector< std::string > funcParsNames
 
std::vector< intfuncParsIndex
 
std::vector< std::string > SelectionStr
 
std::vector< std::vector< double > > Selection
 
std::vector< std::vector< double > > SelectionBounds
 
int NSelections
 
std::vector< std::vector< double > > StoredSelection
 
- Protected Attributes inherited from samplePDFBase
std::vector< double > * dataSample
 
std::vector< vector< double > > * dataSample2D
 
__int__ nSamples
 
int nDims
 
std::vector< std::string > SampleName
 
MaCh3_ModesModeStruct
 
TH1Ddathist
 
TH2Ddathist2d
 
TH1D_hPDF1D
 
TH2D_hPDF2D
 
splineBasexsecsplines
 
TRandom3rnd
 
bool MCthrow
 
TestStatistic fTestStatistic
 
+

Detailed Description

+
+

Definition at line 43 of file samplePDFFDBase.h.

+

Constructor & Destructor Documentation

+ +

◆ samplePDFFDBase() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
samplePDFFDBase::samplePDFFDBase ()
+
+inline
+
+ +

Definition at line 48 of file samplePDFFDBase.h.

+
48{};
+
+
+
+ +

◆ samplePDFFDBase() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
samplePDFFDBase::samplePDFFDBase (double pot,
std::string mc_version,
covarianceXsecxsec_cov 
)
+
+ +

Definition at line 5 of file samplePDFFDBase.cpp.

+
+
7//DB Throughout constructor and init, pot is livetime for atmospheric samples
+
8{
+
9 std::cout << "-------------------------------------------------------------------" <<std::endl;
+
10 std::cout << "Creating samplePDFFDBase object.." << "\n" << std::endl;
+
11
+
12 //ETA - safety feature so you can't pass a NULL xsec_cov
+
13 if(xsec_cov == NULL){std::cerr << "[ERROR:] You've passed me a NULL xsec covariance matrix... I need this to setup splines!" << std::endl; throw;}
+
14
+ + +
17
+
18 //KS: For now FD support only one sample
+
19 nSamples = 1;
+
20 SampleName.push_back("FDsample");
+
21
+
22 //Default TestStatistic is kPoisson
+ +
24}
+
@ kPoisson
Definition Structs.h:1001
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
std::vector< std::string > SampleName
+ +
TestStatistic fTestStatistic
+
double ** samplePDFFD_array
+
double ** samplePDFFD_data
+
+
+
+ +

◆ ~samplePDFFDBase()

+ +
+
+ + + + + +
+ + + + + + + +
samplePDFFDBase::~samplePDFFDBase ()
+
+virtual
+
+ +

Definition at line 27 of file samplePDFFDBase.cpp.

+
28{
+
29 std::cout << "I'm deleting samplePDFFDBase" << std::endl;
+
30
+
31 for (unsigned int yBin=0;yBin<(YBinEdges.size()-1);yBin++) {
+ +
33 delete[] samplePDFFD_array_w2[yBin];
+
34 //ETA - there is a chance that you haven't added any data...
+ +
36 }
+
37
+ +
39 delete[] samplePDFFD_array_w2;
+
40 //ETA - there is a chance that you haven't added any data...
+
41 if(samplePDFFD_data != NULL){delete[] samplePDFFD_data;}
+
42}
+
std::vector< double > YBinEdges
+
double ** samplePDFFD_array_w2
+
+
+
+

Member Function Documentation

+ +

◆ addData() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::addData (std::vector< double > & data)
+
+virtual
+
+ +

Reimplemented from samplePDFBase.

+ +

Definition at line 1225 of file samplePDFFDBase.cpp.

+
1225 {
+
1226 dataSample = new std::vector<double>(data);
+ +
1228 dathist2d = NULL;
+
1229 dathist->Reset();
+
1230
+
1231 if (GetNDim()!=1) {std::cerr << "Trying to set a 1D 'data' histogram in a 2D sample - Quitting" << std::endl; throw;}
+
1232
+
1233 for (int i = 0; i < int(dataSample->size()); i++) {
+
1234 dathist->Fill(dataSample->at(i));
+
1235 }
+
1236
+
1237 int nXBins = XBinEdges.size()-1;
+
1238 int nYBins = YBinEdges.size()-1;
+
1239
+
1240 samplePDFFD_data = new double*[nYBins];
+
1241 for (int yBin=0;yBin<nYBins;yBin++) {
+
1242 samplePDFFD_data[yBin] = new double[nXBins];
+
1243 for (int xBin=0;xBin<nXBins;xBin++) {
+
1244 samplePDFFD_data[yBin][xBin] = dathist->GetBinContent(xBin+1);
+
1245 }
+
1246 }
+
1247
+
1248 return;
+
1249}
+ + +
std::vector< double > * dataSample
+
std::vector< vector< double > > * dataSample2D
+
std::vector< double > XBinEdges
+ +
+
+
+ +

◆ addData() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::addData (std::vector< vector< double > > & data)
+
+virtual
+
+ +

Reimplemented from samplePDFBase.

+ +

Definition at line 1251 of file samplePDFFDBase.cpp.

+
1251 {
+
1252 dataSample2D = new std::vector< vector <double> >(data);
+
1253 dataSample = NULL;
+
1254 dathist = NULL;
+
1255 dathist2d->Reset();
+
1256
+
1257 if (GetNDim()!=2) {std::cerr << "Trying to set a 2D 'data' histogram in a 1D sample - Quitting" << std::endl; throw;}
+
1258
+
1259 for (int i = 0; i < int(dataSample2D->size()); i++) {
+
1260 dathist2d->Fill(dataSample2D->at(0)[i],dataSample2D->at(1)[i]);
+
1261 }
+
1262
+
1263 int nXBins = XBinEdges.size()-1;
+
1264 int nYBins = YBinEdges.size()-1;
+
1265
+
1266 samplePDFFD_data = new double*[nYBins];
+
1267 for (int yBin=0;yBin<nYBins;yBin++) {
+
1268 samplePDFFD_data[yBin] = new double[nXBins];
+
1269 for (int xBin=0;xBin<nXBins;xBin++) {
+
1270 samplePDFFD_data[yBin][xBin] = dathist2d->GetBinContent(xBin+1,yBin+1);
+
1271 }
+
1272 }
+
1273
+
1274 return;
+
1275}
+
+
+
+ +

◆ addData() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::addData (TH1DData)
+
+virtual
+
+ +

Reimplemented from samplePDFBase.

+ +

Definition at line 1277 of file samplePDFFDBase.cpp.

+
1277 {
+
1278 std::cout << "adding 1D data histogram : " << Data->GetName() << " with " << Data->Integral() << " events" << std::endl;
+
1279 dathist2d = NULL;
+
1280 dathist = Data;
+
1281 dataSample = NULL;
+ +
1283
+
1284 if (GetNDim()!=1) {std::cerr << "Trying to set a 1D 'data' histogram in a 2D sample - Quitting" << std::endl; throw;}
+
1285
+
1286 int nXBins = XBinEdges.size()-1;
+
1287 int nYBins = YBinEdges.size()-1;
+
1288
+
1289 samplePDFFD_data = new double*[nYBins];
+
1290 for (int yBin=0;yBin<nYBins;yBin++) {
+
1291 samplePDFFD_data[yBin] = new double[nXBins];
+
1292 for (int xBin=0;xBin<nXBins;xBin++) {
+
1293 samplePDFFD_data[yBin][xBin] = Data->GetBinContent(xBin+1);
+
1294 }
+
1295 }
+
1296
+
1297 return;
+
1298}
+
+
+
+ +

◆ addData() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::addData (TH2DData)
+
+virtual
+
+ +

Reimplemented from samplePDFBase.

+ +

Definition at line 1300 of file samplePDFFDBase.cpp.

+
1300 {
+
1301 std::cout << "adding 2D data histogram : " << Data->GetName() << " with " << Data->Integral() << " events" << std::endl;
+
1302 dathist2d = Data;
+
1303 dathist = NULL;
+
1304 dataSample = NULL;
+ +
1306
+
1307 if (GetNDim()!=2) {std::cerr << "Trying to set a 2D 'data' histogram in a 1D sample - Quitting" << std::endl; throw;}
+
1308
+
1309 int nXBins = XBinEdges.size()-1;
+
1310 int nYBins = YBinEdges.size()-1;
+
1311
+
1312 samplePDFFD_data = new double*[nYBins];
+
1313 for (int yBin=0;yBin<nYBins;yBin++) {
+
1314 samplePDFFD_data[yBin] = new double[nXBins];
+
1315 for (int xBin=0;xBin<nXBins;xBin++) {
+
1316 samplePDFFD_data[yBin][xBin] = dathist2d->GetBinContent(xBin+1,yBin+1);
+
1317 }
+
1318 }
+
1319}
+
+
+
+ +

◆ applyShifts()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void samplePDFFDBase::applyShifts (int iSample,
int iEvent 
)
+
+inlineprotectedvirtual
+
+ +

Definition at line 153 of file samplePDFFDBase.h.

+
153{};
+
+
+
+ +

◆ calcOscWeights()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::calcOscWeights (int sample,
int nutype,
doublew,
doubleoscpar 
)
+
+ +

Definition at line 199 of file samplePDFFDBase.cpp.

+
200{
+
201 MCSamples[sample].Oscillator->setMNSMatrix(asin(sqrt(oscpar[0])),asin(sqrt(oscpar[2])), asin(sqrt(oscpar[1])), oscpar[5], nutype);
+
202 MCSamples[sample].Oscillator->setNeutrinoMasses(oscpar[3], oscpar[4]);
+
203 MCSamples[sample].Oscillator->calculateProbabilities(MCSamples[sample].NeutrinoType);
+
204 MCSamples[sample].Oscillator->getProbabilityArr(w, MCSamples[sample].ProbType);
+
205}
+
vector< struct fdmc_base > MCSamples
+
+
+
+ +

◆ CalcXsecNormsBins()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::CalcXsecNormsBins (int iSample)
+
+protected
+
+ +

Definition at line 719 of file samplePDFFDBase.cpp.

+
719 {
+
720
+ +
722
+
723 std::cout << "FD Object has " << fdobj->nEvents << " events" << std::endl;
+
724
+
725 for(int iEvent=0; iEvent < fdobj->nEvents; ++iEvent){
+
726 std::list< int > XsecBins = {};
+
727 if (XsecCov) {
+
728 //std::cout << "Xsec norms is of size " << xsec_norms.size() << std::endl;
+
729 for (std::vector<XsecNorms4>::iterator it = xsec_norms.begin(); it != xsec_norms.end(); ++it) {
+
730 //std::cout << "Looping over systematic " << (*it).name << std::endl;
+
731 // Skip oscillated NC events
+
732 // Not strictly needed, but these events don't get included in oscillated predictions, so
+
733 // no need to waste our time calculating and storing information about xsec parameters
+
734 // that will never be used.
+
735 if (fdobj->isNC[iEvent] && fdobj->signal) {continue;} //DB Abstract check on MaCh3Modes to determine which apply to neutral current
+
736
+
737 //Now check that the target of an interaction matches with the normalisation parameters
+
738 bool TargetMatch=false;
+
739 //If no target specified then apply to all modes
+
740 if ((*it).targets.size()==0) {
+
741 TargetMatch=true;
+
742 } else {
+
743 for (unsigned iTarget=0;iTarget<(*it).targets.size();iTarget++) {
+
744 if ((*it).targets.at(iTarget)== *(fdobj->Target[iEvent])) {
+
745 TargetMatch=true;
+
746 }
+
747 }
+
748 }
+
749 if (!TargetMatch) {continue;}
+
750
+
751 //Now check that the neutrino flavour in an interaction matches with the normalisation parameters
+
752 bool FlavourMatch=false;
+
753 //If no mode specified then apply to all modes
+
754 if ((*it).pdgs.size()==0) {
+
755 FlavourMatch=true;
+
756 } else {
+
757 for (unsigned iPDG=0;iPDG<(*it).pdgs.size();iPDG++) {
+
758 if ((*it).pdgs.at(iPDG)== fdobj->nupdg) {
+
759 FlavourMatch=true;
+
760 }
+
761 }
+
762 }
+
763 if (!FlavourMatch){continue;}
+
764
+
765 //Now check that the unoscillated neutrino flavour in an interaction matches with the normalisation parameters
+
766 bool FlavourUnoscMatch=false;
+
767 //If no mode specified then apply to all modes
+
768 if ((*it).preoscpdgs.size()==0) {
+ +
770 } else {
+
771 for (unsigned iPDG=0;iPDG<(*it).preoscpdgs.size();iPDG++) {
+
772 if ((*it).preoscpdgs.at(iPDG) == fdobj->nupdgUnosc) {
+ +
774 //std::cout << "DID MATCH " << fdobj->nupdgUnosc << " with " << (*it).preoscpdgs.at(iPDG) << std::endl;
+
775 }
+
776 //else{std::cout << "Didn't match " << fdobj->nupdgUnosc << " with " << (*it).preoscpdgs.at(iPDG) << std::endl;}
+
777 }
+
778 }
+
779 if (!FlavourUnoscMatch){continue;}
+
780
+
781 //Now check that the mode of an interaction matches with the normalisation parameters
+
782 bool ModeMatch=false;
+
783 //If no mode specified then apply to all modes
+
784 if ((*it).modes.size()==0) {
+
785 ModeMatch=true;
+
786 } else {
+
787 for (unsigned imode=0;imode<(*it).modes.size();imode++) {
+
788 if ((*it).modes.at(imode)== *(fdobj->mode[iEvent])) {
+
789 ModeMatch=true;
+
790 }
+
791 }
+
792 }
+
793 if (!ModeMatch) {continue;}
+
794
+
795 //Now check whether the norm has kinematic bounds
+
796 //i.e. does it only apply to events in a particular kinematic region?
+
797 bool IsSelected = true;
+
798 if ((*it).hasKinBounds) {
+
799 for (unsigned int iKinematicParameter = 0 ; iKinematicParameter < (*it).KinematicVarStr.size() ; ++iKinematicParameter ) {
+
800 if (ReturnKinematicParameter((*it).KinematicVarStr[iKinematicParameter], iSample, iEvent) <= (*it).Selection[iKinematicParameter][0]) {
+
801 //if((*it).name.find("b_") != std::string::npos){
+
802 // std::cout << "Failed because " << ReturnKinematicParameter((*it).KinematicVarStr[iKinematicParameter], iSample, iEvent) << " is less than " << (*it).Selection[iKinematicParameter][0] << std::endl;
+
803 //}
+
804 IsSelected = false;
+
805 continue;
+
806 }
+
807 else if (ReturnKinematicParameter((*it).KinematicVarStr[iKinematicParameter], iSample, iEvent) > (*it).Selection[iKinematicParameter][1]) {
+
808 IsSelected = false;
+
809 continue;
+
810 }
+
811 }
+
812 }
+
813 //Need to then break the event loop
+
814 if(!IsSelected){
+
815 continue;
+
816 }
+
817
+
818 // Now set 'index bin' for each normalisation parameter
+
819 // All normalisations are just 1 bin for 2015, so bin = index (where index is just the bin for that normalisation)
+
820 int bin = (*it).index;
+
821
+
822 //If syst on applies to a particular detector
+ +
824 XsecBins.push_back(bin);
+
825 }
+
826 } // end iteration over xsec_norms
+
827 } // end if (xsecCov)
+
828 fdobj->xsec_norms_bins[iEvent]=XsecBins;
+
829 }//end loop over events
+
830 return;
+
831}
+
int GetParDetID(const int i) const
+ +
virtual double ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0
+
covarianceXsec * XsecCov
+
std::vector< XsecNorms4 > xsec_norms
+ +
int nEvents
Definition FDMCStruct.h:11
+
+
+
+ +

◆ CalcXsecWeightFunc()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double samplePDFFDBase::CalcXsecWeightFunc (int iSample,
int iEvent 
)
+
+protectedpure virtual
+
+ +
+
+ +

◆ CalcXsecWeightNorm()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double samplePDFFDBase::CalcXsecWeightNorm (const int iSample,
const int iEvent 
)
+
+protected
+
+ +

Definition at line 627 of file samplePDFFDBase.cpp.

+
627 {
+
628// ***************************************************************************
+
629
+
630 double xsecw = 1.0;
+
631 //Loop over stored normalisation and function pointers
+
632 for (int iParam = 0;iParam < MCSamples[iSample].nxsec_norm_pointers[iEvent]; iParam++)
+
633 {
+
634 xsecw *= *(MCSamples[iSample].xsec_norm_pointers[iEvent][iParam]);
+
635 #ifdef DEBUG
+
636 if (TMath::IsNaN(xsecw)) std::cout << "iParam=" << iParam << "xsecweight=nan from norms" << std::endl;
+
637 #endif
+
638 }
+
639 return xsecw;
+
640}
+
+
+
+ +

◆ CalcXsecWeightSpline()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double samplePDFFDBase::CalcXsecWeightSpline (const int iSample,
const int iEvent 
)
+
+protected
+
+ +

Definition at line 613 of file samplePDFFDBase.cpp.

+
613 {
+
614// ***************************************************************************
+
615
+
616 double xsecw = 1.0;
+
617 //DB Xsec syst
+
618 //Loop over stored spline pointers
+
619 for (int iSpline=0;iSpline<MCSamples[iSample].nxsec_spline_pointers[iEvent];iSpline++) {
+
620 xsecw *= *(MCSamples[iSample].xsec_spline_pointers[iEvent][iSpline]);
+
621 }
+
622 return xsecw;
+
623}
+
+
+
+ +

◆ DumpWeights()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFFDBase::DumpWeights (std::string outname)
+
+inlinevirtual
+
+ +

Definition at line 97 of file samplePDFFDBase.h.

+
97{return;};
+
+
+
+ +

◆ fill1DHist()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::fill1DHist ()
+
+protectedvirtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 44 of file samplePDFFDBase.cpp.

+
45{
+
46 // DB Commented out by default - Code heading towards GetLikelihood using arrays instead of root objects
+
47 // Wouldn't actually need this for GetLikelihood as TH objects wouldn't be filled
+
48 _hPDF1D->Reset();
+
49 for (unsigned int yBin=0;yBin<(YBinEdges.size()-1);yBin++) {
+
50 for (unsigned int xBin=0;xBin<(XBinEdges.size()-1);xBin++) {
+
51 _hPDF1D->AddBinContent(xBin+1,samplePDFFD_array[yBin][xBin]);
+
52 }
+
53 }
+
54 return;
+
55}
+ +
+
+
+ +

◆ fill2DHist()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::fill2DHist ()
+
+protectedvirtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 57 of file samplePDFFDBase.cpp.

+
58{
+
59 // DB Commented out by default - Code heading towards GetLikelihood using arrays instead of root objects
+
60 // Wouldn't actually need this for GetLikelihood as TH objects wouldn't be filled
+
61 _hPDF2D->Reset();
+
62 for (unsigned int yBin=0;yBin<(YBinEdges.size()-1);yBin++) {
+
63 for (unsigned int xBin=0;xBin<(XBinEdges.size()-1);xBin++) {
+
64 _hPDF2D->SetBinContent(xBin+1,yBin+1,samplePDFFD_array[yBin][xBin]);
+
65 }
+
66 }
+
67 return;
+
68}
+ +
+
+
+ +

◆ fillArray()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::fillArray ()
+
+protected
+
+ +

Definition at line 252 of file samplePDFFDBase.cpp.

+
252 {
+
253
+
254 //DB Reset which cuts to apply
+ +
256
+
257 // Call entirely different routine if we're running with openMP
+
258#ifdef MULTITHREAD
+
259 fillArray_MP();
+
260#else
+
261
+
262 //ETA we should probably store this in samplePDFFDBase
+
263 int nXBins = XBinEdges.size()-1;
+
264 int nYBins = YBinEdges.size()-1;
+
265
+
266 //DB Reset values stored in PDF array to 0.
+
267 for (int yBin=0;yBin<nYBins;yBin++) {
+
268 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
271 }
+
272 }
+
273
+ + + +
277
+
278 for (unsigned int iSample=0;iSample<MCSamples.size();iSample++) {
+
279 for (int iEvent=0;iEvent<MCSamples[iSample].nEvents;iEvent++) {
+
280
+ +
282
+ +
284 continue;
+
285 }
+
286
+
287 double splineweight = 1.0;
+
288 double normweight = 1.0;
+
289 double funcweight = 1.0;
+
290 double totalweight = 1.0;
+
291
+ +
293 //DB Catch negative spline weights and skip any event with a negative event. Previously we would set weight to zero and continue but that is inefficient. Do this on a spline-by-spline basis
+
294 if (splineweight <= 0.){
+
295 MCSamples[iSample].xsec_w[iEvent] = 0.;
+
296 continue;
+
297 }
+
298
+
299 //Loop over stored normalisation and function pointers
+ +
301
+
302 //DB Catch negative norm weights and skip any event with a negative event. Previously we would set weight to zere and continue but that is inefficient
+
303 if (normweight <= 0.){
+
304 MCSamples[iSample].xsec_w[iEvent] = 0.;
+
305 continue;
+
306 }
+
307
+ +
309 //DB Catch negative func weights and skip any event with a negative event. Previously we would set weight to zere and continue but that is inefficient
+
310 if (funcweight <= 0.){
+
311 MCSamples[iSample].xsec_w[iEvent] = 0.;
+
312 continue;
+
313 }
+
314
+ +
316
+
317 //DB Set oscillation weights for NC events to 1.0
+
318 //DB Another speedup - Why bother storing NC signal events and calculating the oscillation weights when we just throw them out anyway? Therefore they are skipped in setupMC
+
319 //
+
320 //LW Checking if NC event is signal (oscillated or not), if yes: osc_w = 0 || if no: osc_w = 1.0
+
321 if (MCSamples[iSample].isNC[iEvent] && MCSamples[iSample].signal) { //DB Abstract check on MaCh3Modes to determine which apply to neutral current
+
322 MCSamples[iSample].osc_w[iEvent] = 0.0;
+
323 continue;
+
324 }
+
325
+
326 //ETA - I need to check that this doesn't cause a problem for atmospherics and or tau samples
+
327 if (MCSamples[iSample].isNC[iEvent] && !MCSamples[iSample].signal) { //DB Abstract check on MaCh3Modes to determine which apply to neutral current
+
328 MCSamples[iSample].osc_w[iEvent] = 1.0;
+
329 }
+
330 //DB Set oscillation weights for NC events to 1.0
+
331 //DB Another speedup - Why bother storing NC signal events and calculating the oscillation weights when we just throw them out anyway? Therefore they are skipped in setupSKMC
+
332 if (MCSamples[iSample].isNC[iEvent]) { //DB Abstract check on MaCh3Modes to determine which apply to neutral current
+
333 MCSamples[iSample].osc_w[iEvent] = 1.0;
+
334 }
+
335
+
336 //DB Total weight
+ +
338 //DB Catch negative weights and skip any event with a negative event
+
339 if (totalweight <= 0.){
+
340 MCSamples[iSample].xsec_w[iEvent] = 0.;
+
341 continue;
+
342 }
+
343
+
344 //DB Switch on BinningOpt to allow different binning options to be implemented
+
345 //The alternative would be to have inheritance based on BinningOpt
+
346 double XVar = *(MCSamples[iSample].x_var[iEvent]);
+
347
+
348 //DB Find the relevant bin in the PDF for each event
+
349 int XBinToFill = -1;
+
350 int YBinToFill = MCSamples[iSample].NomYBin[iEvent];
+
351
+
352 //DB - First, check to see if the event is still in the nominal bin
+
353 if (XVar < MCSamples[iSample].rw_upper_xbinedge[iEvent] && XVar >= MCSamples[iSample].rw_lower_xbinedge[iEvent]) {
+ +
355 }
+
356 //DB - Second, check to see if the event is outside of the binning range and skip event if it is
+
357 //ETA- note that nXBins is XBinEdges.size() - 1
+
358 else if (XVar < XBinEdges[0] || XVar >= XBinEdges[nXBins]) {
+
359 continue;
+
360 }
+
361 //DB - Thirdly, check the adjacent bins first as Eb+CC+EScale shifts aren't likely to move an Erec more than 1bin width
+
362 //Shifted down one bin from the event bin at nominal
+
363 else if (XVar < MCSamples[iSample].rw_lower_xbinedge[iEvent] && XVar >= MCSamples[iSample].rw_lower_lower_xbinedge[iEvent]) {
+
364 XBinToFill = MCSamples[iSample].NomXBin[iEvent]-1;
+
365 }
+
366 //Shifted up one bin from the event bin at nominal
+
367 else if (XVar < MCSamples[iSample].rw_upper_upper_xbinedge[iEvent] && XVar >= MCSamples[iSample].rw_upper_xbinedge[iEvent]) {
+
368 XBinToFill = MCSamples[iSample].NomXBin[iEvent]+1;
+
369 }
+
370 //DB - If we end up in this loop, the event has been shifted outside of its nominal bin, but is still within the allowed binning range
+
371 else {
+
372 for (unsigned int iBin=0;iBin<(XBinEdges.size()-1);iBin++) {
+
373 if (XVar >= XBinEdges[iBin] && XVar < XBinEdges[iBin+1]) {
+ +
375 }
+
376 }
+
377 }
+
378
+
379 //DB Fill relevant part of thread array
+
380 if (XBinToFill != -1 && YBinToFill != -1) {
+
381 //std::cout << "Filling samplePDFFD_array at YBin: " << YBinToFill << " and XBin: " << XBinToFill << std::endl;
+ + +
384 }
+
385 }
+
386 }
+
387
+
388#endif // end the else in openMP
+
389 return;
+
390}
+
virtual void PrepFunctionalParameters()
+
std::vector< std::vector< double > > StoredSelection
+
virtual double CalcXsecWeightFunc(int iSample, int iEvent)=0
+
bool IsEventSelected(int iSample, int iEvent)
+
std::vector< std::vector< double > > Selection
+
double GetEventWeight(int iSample, int iEntry)
+
splineFDBase * splineFile
+
virtual void applyShifts(int iSample, int iEvent)
+
double CalcXsecWeightSpline(const int iSample, const int iEvent)
+
double CalcXsecWeightNorm(const int iSample, const int iEvent)
+
void FindSplineSegment()
+ +
+
+
+ +

◆ fillSplineBins()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::fillSplineBins ()
+
+protected
+
+ +

Definition at line 1331 of file samplePDFFDBase.cpp.

+
1331 {
+
1332
+
1333 std::cout << "Now in fillSplineBins" << std::endl;
+
1334 for (int i = 0; i < (int)MCSamples.size(); ++i) {
+
1335 //std::cout << "Found " << MCSamples[i].nEvents << " in sample " << i << std::endl;
+
1336 //Now loop over events and get the spline bin for each event
+
1337 for (int j = 0; j < MCSamples[i].nEvents; ++j) {
+
1338
+
1339 std::vector< std::vector<int> > EventSplines;
+
1340 switch (BinningOpt) {
+
1341 case 0: // splines binned in erec
+
1342 case 1:
+
1343 EventSplines = splineFile->GetEventSplines(GetSampleName(), i, *(MCSamples[i].mode[j]), *(MCSamples[i].rw_etru[j]), *(MCSamples[i].x_var[j]), 0.);
+
1344 break;
+
1345 case 2:
+
1346 //Straight out of SKBase
+
1347 EventSplines = splineFile->GetEventSplines(GetSampleName(), i, *(MCSamples[i].mode[j]), *(MCSamples[i].rw_etru[j]), *(MCSamples[i].x_var[j])*0.001, *(MCSamples[i].y_var[j]));
+
1348
+
1349 //FD base
+
1350 //EventSplines = MCSamples[i].splineFile->GetEventSplines(SampleName, j, *(MCSamples[i].mode[j]), MCSamples[i].enu_s_bin[j], MCSamples[i].xvar_s_bin[j], MCSamples[i].yvar_s_bin[j]);
+
1351 break;
+
1352 default:
+
1353 std::cout << "Error in assigning spline bins because BinningOpt = " << BinningOpt << std::endl;
+
1354 break;
+
1355 }
+
1356
+
1357 MCSamples[i].nxsec_spline_pointers[j] = EventSplines.size();
+
1358
+
1359 MCSamples[i].xsec_spline_pointers[j] = new const double*[MCSamples[i].nxsec_spline_pointers[j]];
+
1360
+
1361 for(int spline=0; spline<MCSamples[i].nxsec_spline_pointers[j]; spline++){
+
1362 //Event Splines indexed as: sample name, oscillation channel, syst, mode, etrue, var1, var2 (var2 is a dummy 0 for 1D splines)
+ + +
1365 }
+
1366
+
1367 }
+
1368 //I think this is now obsolete due to spline monolith
+
1369 //MCSamples[i].splineFile->SetSplineInfoArrays();
+
1370 }
+
1371
+
1372 std::cout << "Filled spline bins" << std::endl;
+
1373
+
1374 return;
+
1375}
+
std::string GetSampleName()
+ +
const double * retPointer(int sample, int oscchan, int syst, int mode, int var1bin, int var2bin, int var3bin)
+
virtual std::vector< std::vector< int > > GetEventSplines(std::string SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)=0
+ +
+
+
+ +

◆ FindEventOscBin()

+ +
+
+ + + + + + + +
void samplePDFFDBase::FindEventOscBin ()
+
+ +

Definition at line 655 of file samplePDFFDBase.cpp.

+
655 {
+
656 for(int i = 0; i < getNMCSamples(); i++) {
+
657 for (int j = 0;j < getNEventsInSample(i); j++) {
+
658 MCSamples[i].osc_w_pointer[j] = Osc->retPointer(MCSamples[i].nutype,MCSamples[i].oscnutype,*(MCSamples[i].rw_etru[j]),MCSamples[i].rw_truecz[j]);
+
659 }
+
660 }
+
661 std::cout << "Set all oscillation pointers to Oscillator" << std::endl;
+
662}
+
const double * retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)
+
virtual int getNMCSamples()=0
+
virtual int getNEventsInSample(int sample)=0
+ +
+
+
+ +

◆ FindNominalBinAndEdges1D()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::FindNominalBinAndEdges1D ()
+
+protected
+
+ +

Definition at line 1036 of file samplePDFFDBase.cpp.

+
1036 {
+
1037
+
1038 //Set rw_pdf_bin and rw_upper_xbinedge and rw_lower_xbinedge for each skmc_base
+
1039 for(int mc_i = 0 ; mc_i < (int)MCSamples.size() ; mc_i++){
+
1040 for(int event_i = 0 ; event_i < MCSamples[mc_i].nEvents ; event_i++){
+
1041 int bin = _hPDF1D->FindBin(*(MCSamples[mc_i].x_var[event_i]));
+
1042
+ +
1044 if (bin==0) {
+
1045 low_lower_edge = _hPDF1D->GetXaxis()->GetBinLowEdge(bin);
+
1046 } else {
+
1047 low_lower_edge = _hPDF1D->GetXaxis()->GetBinLowEdge(bin-1);
+
1048 }
+
1049
+
1050 double low_edge = _hPDF1D->GetXaxis()->GetBinLowEdge(bin);
+
1051 double upper_edge = _hPDF1D->GetXaxis()->GetBinUpEdge(bin);
+
1052 //std::cout << "FINDING EDGES" << std::endl;
+
1053 //std::cout << "Low edge is " << low_edge << std::endl;
+
1054 //std::cout << "Upper edge is " << upper_edge << std::endl;
+
1055
+ +
1057 if (bin<(_hPDF1D->GetNbinsX()-2)) {
+
1058 upper_upper_edge = _hPDF1D->GetXaxis()->GetBinLowEdge(bin+2);
+
1059 } else {
+
1060 upper_upper_edge = _hPDF1D->GetXaxis()->GetBinLowEdge(bin+1);
+
1061 }
+
1062
+
1063 if ((bin-1) >= 0 && (bin-1) < int(XBinEdges.size()-1)) {
+
1064 MCSamples[mc_i].NomXBin[event_i] = bin-1;
+
1065 } else {
+
1066 MCSamples[mc_i].NomXBin[event_i] = -1;
+ + + + +
1071 }
+
1072 MCSamples[mc_i].NomYBin[event_i] = 0;
+
1073
+
1074 MCSamples[mc_i].rw_lower_xbinedge[event_i] = low_edge;
+
1075 MCSamples[mc_i].rw_upper_xbinedge[event_i] = upper_edge;
+
1076 MCSamples[mc_i].rw_lower_lower_xbinedge[event_i] = low_lower_edge;
+
1077 MCSamples[mc_i].rw_upper_upper_xbinedge[event_i] = upper_upper_edge;
+
1078
+
1079 }
+
1080 }
+
1081
+
1082}
+
#define __DEFAULT_RETURN_VAL__
Definition Structs.h:27
+
+
+
+ +

◆ FindNominalBinAndEdges2D()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::FindNominalBinAndEdges2D ()
+
+protected
+
+ +

Definition at line 1156 of file samplePDFFDBase.cpp.

+
1156 {
+
1157
+
1158 //Set rw_pdf_bin and rw_upper_xbinedge and rw_lower_xbinedge for each skmc_base
+
1159 for(int mc_i = 0 ; mc_i < (int)MCSamples.size() ; mc_i++){
+
1160 for(int event_i = 0 ; event_i < MCSamples[mc_i].nEvents ; event_i++){
+
1161 //Global bin number
+
1162
+
1163 int bin = _hPDF2D->FindBin(*(MCSamples[mc_i].x_var[event_i]), *(MCSamples[mc_i].y_var[event_i]));
+
1164
+
1165 int bin_x = -999;
+
1166 int bin_y = -999;
+
1167 int bin_z = -999;
+
1168 _hPDF2D->GetBinXYZ(bin, bin_x, bin_y, bin_z);
+
1169 //erec is the x-axis so get GetXaxis then find the bin edges using the x bin number
+
1170
+ +
1172 if (bin==0) {
+
1173 low_lower_edge = _hPDF2D->GetXaxis()->GetBinLowEdge(bin_x);
+
1174 } else {
+
1175 low_lower_edge = _hPDF2D->GetXaxis()->GetBinLowEdge(bin_x-1);
+
1176 }
+
1177
+
1178 double low_edge = _hPDF2D->GetXaxis()->GetBinLowEdge(bin_x);
+
1179 double upper_edge = _hPDF2D->GetXaxis()->GetBinUpEdge(bin_x);
+
1180
+ +
1182 if (bin<(_hPDF2D->GetNbinsX()-2)) {
+
1183 upper_upper_edge = _hPDF2D->GetXaxis()->GetBinLowEdge(bin_x+2);
+
1184 } else {
+
1185 upper_upper_edge = _hPDF2D->GetXaxis()->GetBinLowEdge(bin_x+1);
+
1186 }
+
1187
+
1188 if ((bin_x-1) >= 0 && (bin_x-1) < int(XBinEdges.size()-1)) {
+
1189 MCSamples[mc_i].NomXBin[event_i] = bin_x-1;
+
1190 } else {
+
1191 MCSamples[mc_i].NomXBin[event_i] = -1;
+ + + + +
1196 }
+
1197 MCSamples[mc_i].NomYBin[event_i] = bin_y-1;
+
1198 MCSamples[mc_i].rw_lower_xbinedge[event_i] = low_edge;
+
1199 MCSamples[mc_i].rw_upper_xbinedge[event_i] = upper_edge;
+
1200 MCSamples[mc_i].rw_lower_lower_xbinedge[event_i] = low_lower_edge;
+
1201 MCSamples[mc_i].rw_upper_upper_xbinedge[event_i] = upper_upper_edge;
+
1202 }
+
1203 }
+
1204 return;
+
1205}
+
+
+
+ +

◆ GetBinningOpt()

+ +
+
+ + + + + +
+ + + + + + + +
int samplePDFFDBase::GetBinningOpt ()
+
+inlineprotected
+
+ +

Definition at line 168 of file samplePDFFDBase.h.

+
168{return BinningOpt;}
+
+
+
+ +

◆ GetEventWeight()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double samplePDFFDBase::GetEventWeight (int iSample,
int iEntry 
)
+
+inlinevirtual
+
+ +

Implements interfacePDFEbE.

+ +

Definition at line 1321 of file samplePDFFDBase.cpp.

+
1321 {
+
1322 //HI : DON'T EDIT THIS!!!! (Pls make a weights pointer instead ^_^)
+
1323 double totalweight = 1.0;
+
1324 for (int iParam=0;iParam<MCSamples[iSample].ntotal_weight_pointers[iEntry];iParam++) {
+
1325 //std::cout << "Weight " << iParam << " is " << *(MCSamples[iSample].total_weight_pointers[iEntry][iParam]) << std::endl;
+
1326 totalweight *= *(MCSamples[iSample].total_weight_pointers[iEntry][iParam]);
+
1327 }
+
1328 return totalweight;
+
1329}
+
+
+
+ +

◆ GetIsRHC()

+ +
+
+ + + + + +
+ + + + + + + +
bool samplePDFFDBase::GetIsRHC ()
+
+inlineprotected
+
+ +

Definition at line 161 of file samplePDFFDBase.h.

+
161{return IsRHC;}
+ +
+
+
+ +

◆ GetLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
double samplePDFFDBase::GetLikelihood ()
+
+virtual
+
+ +

Implements samplePDFBase.

+ +

Definition at line 1377 of file samplePDFFDBase.cpp.

+
1378{
+
1379 if (samplePDFFD_data == NULL) {
+
1380 std::cerr << "data sample is empty!" << std::endl;
+
1381 return -1;
+
1382 }
+
1383
+
1384 //This can be done only once and stored
+
1385 int nXBins = XBinEdges.size()-1;
+
1386 int nYBins = YBinEdges.size()-1;
+
1387
+
1388 int xBin;
+
1389 int yBin;
+
1390
+
1391 double negLogL = 0.;
+
1392#ifdef MULTITHREAD
+
1393#pragma omp parallel for reduction(+:negLogL) private(xBin, yBin)
+
1394#endif
+
1395
+
1396 for (xBin = 0; xBin < nXBins; xBin++)
+
1397 {
+
1398 for (yBin = 0; yBin < nYBins; yBin++)
+
1399 {
+
1400 double DataVal = samplePDFFD_data[yBin][xBin];
+
1401 double MCPred = samplePDFFD_array[yBin][xBin];
+
1402 double w2 = samplePDFFD_array_w2[yBin][xBin];
+
1403 //KS: Calcaualte likelihood using Barlow-Beestion Poisson or even IceCube
+
1404 //ETA: there seems to be some bug in here which needs to be fixed. I
+
1405 //see differences even when kPoisson is set?
+
1406 //negLogL += getTestStatLLH(DataVal, MCPred, w2);
+ +
1408 }
+
1409 }
+
1410 return negLogL;
+
1411}
+
double getTestStatLLH(double data, double mc)
+
+
+
+ +

◆ GetNDim()

+ +
+
+ + + + + + + +
int samplePDFFDBase::GetNDim ()
+
+ +

Definition at line 1209 of file samplePDFFDBase.cpp.

+
1209 {
+
1210 switch(BinningOpt) {
+
1211 case 0:
+
1212 case 1:
+
1213 return 1;
+
1214 case 2:
+
1215 case 3:
+
1216 case 4:
+
1217 return 2;
+
1218 default:
+
1219 std::cerr << "Error, unrecognsied BinningOpt!!" << std::endl;
+
1220 throw;
+
1221 return 0;
+
1222 }
+
1223}
+
+
+
+ +

◆ GetSampleName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string samplePDFFDBase::GetSampleName ()
+
+inline
+
+ +

Definition at line 87 of file samplePDFFDBase.h.

+
87{return samplename;}
+
std::string samplename
+
+
+
+ +

◆ IsEventSelected() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool samplePDFFDBase::IsEventSelected (int iSample,
int iEvent 
)
+
+protected
+
+ +

Definition at line 95 of file samplePDFFDBase.cpp.

+
95 {
+
96
+
97 double Val;
+
98
+
99 for (unsigned int iSelection=0;iSelection < Selection.size() ;iSelection++) {
+
100
+ +
102 //std::cout << "Val returned for selection " << iSelection << " is " << Val << std::endl;
+
103 //DB If multiple return values, it will consider each value seperately
+
104 //DB Already checked that Selection vector is correctly sized
+
105
+
106 //DB In the case where Selection[0].size()==3, Only Events with Val >= Selection[iSelection][1] and Val < Selection[iSelection][2] are considered Passed
+
107 if ((Val<Selection[iSelection][1])||(Val>=Selection[iSelection][2])) {
+
108 return false;
+
109 }
+
110
+
111 }
+
112
+
113 //DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check
+
114 return true;
+
115}
+
+
+
+ +

◆ IsEventSelected() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool samplePDFFDBase::IsEventSelected (std::vector< std::string > ParameterStr,
int iSample,
int iEvent 
)
+
+protected
+
+ +

Definition at line 119 of file samplePDFFDBase.cpp.

+
119 {
+
120
+
121 double Val;
+
122
+
123 for (unsigned int iSelection=0;iSelection<SelectionStr.size();iSelection++) {
+
124
+ +
126 //ETA - still need to support other method of you specifying the cut you want in ReturnKinematicParameter
+
127 //like in Dan's version below from T2K
+
128 //Val = ReturnKinematicParameter(static_cast<KinematicTypes>(Selection[iSelection][0]),iSample,iEvent);
+
129 //DB If multiple return values, it will consider each value seperately
+
130 //DB Already checked that Selection vector is correctly sized
+
131 //DB In the case where Selection[0].size()==3, Only Events with Val >= Selection[iSelection][1] and Val < Selection[iSelection][2] are considered Passed
+
132
+ +
134 return false;
+
135 }
+
136 }
+
137
+
138 //DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check
+
139 return true;
+
140}
+
std::vector< std::vector< double > > SelectionBounds
+
std::vector< std::string > SelectionStr
+
+
+
+ +

◆ IsEventSelected() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool samplePDFFDBase::IsEventSelected (std::vector< std::string > ParameterStr,
std::vector< std::vector< double > > & Selection,
int iSample,
int iEvent 
)
+
+protected
+
+ +

Definition at line 143 of file samplePDFFDBase.cpp.

+
143 {
+
144
+
145 double Val;
+
146
+
147 for (unsigned int iSelection=0;iSelection<ParameterStr.size();iSelection++) {
+
148
+ +
150 //DB If multiple return values, it will consider each value seperately
+
151 //DB Already checked that Selection vector is correctly sized
+
152
+
153 //DB In the case where Selection[0].size()==3, Only Events with Val >= Selection[iSelection][1] and Val < Selection[iSelection][2] are considered Passed
+
154 //ETA - also check whether we're actually applying a lower or upper cut by checking they aren't -999
+
155 if(Val >= Selection[iSelection][1] && Selection[iSelection][0] != -999){
+
156 //std::cout << "Cutting event as " << Val << " is greater than " << Selection[iSelection][1]
+
157 return false;
+
158 }
+
159 else if(Val < Selection[iSelection][0] && Selection[iSelection][1] != -999){
+
160 return false;
+
161 }
+
162 }
+
163
+
164 //DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check
+
165 return true;
+
166}
+
+
+
+ +

◆ PrepFunctionalParameters()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFFDBase::PrepFunctionalParameters ()
+
+inlineprotectedvirtual
+
+ +

Definition at line 151 of file samplePDFFDBase.h.

+
151{};
+
+
+
+ +

◆ ResetHistograms()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::ResetHistograms ()
+
+inlineprotected
+
+ +

Definition at line 597 of file samplePDFFDBase.cpp.

+
597 {
+
598// **************************************************
+
599
+
600 int nXBins = XBinEdges.size()-1;
+
601 int nYBins = YBinEdges.size()-1;
+
602
+
603 //DB Reset values stored in PDF array to 0.
+
604 for (int yBin = 0; yBin < nYBins; yBin++) {
+
605 for (int xBin = 0; xBin < nXBins; xBin++) {
+ +
607 }
+
608 }
+
609} // end function
+
+
+
+ +

◆ ReturnKinematicParameter() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual double samplePDFFDBase::ReturnKinematicParameter (double KinematicVariable,
int iSample,
int iEvent 
)
+
+protectedpure virtual
+
+ +
+
+ +

◆ ReturnKinematicParameter() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual double samplePDFFDBase::ReturnKinematicParameter (std::string KinematicParamter,
int iSample,
int iEvent 
)
+
+protectedpure virtual
+
+ +
+
+ +

◆ ReturnKinematicParameterBinning()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector< double > samplePDFFDBase::ReturnKinematicParameterBinning (std::string KinematicParameter)
+
+protectedpure virtual
+
+ +
+
+ +

◆ reweight()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::reweight (doubleoscpar)
+
+virtual
+
+ +

Implements samplePDFInterface.

+ +

Definition at line 208 of file samplePDFFDBase.cpp.

+
209{
+
210
+
211 if (Osc!=NULL) {
+
212 std::cout << "Osc is not NULL!! i.e. doing atm oscillations " << std::endl;
+
213 //DB Currently hardcoded to assume rho_electrons = rho_matter/2, 25km production height
+
214 Osc->FillOscillogram(oscpar,25.0,0.5);
+
215 for (unsigned int iSample=0;iSample<MCSamples.size();iSample++) {
+
216 for (int iEvent=0;iEvent<MCSamples[iSample].nEvents;iEvent++) {
+
217 MCSamples[iSample].osc_w[iEvent] = *(MCSamples[iSample].osc_w_pointer[iEvent]);
+
218 }
+
219 }
+
220 } else {
+
221 for (int i=0; i< (int)MCSamples.size(); ++i) {
+
222
+
223#if defined (USE_PROB3) && defined (CPU_ONLY)
+
224 //Prob3 CPU needs to loop through events too
+
225 for(int j = 0; j < MCSamples[i].nEvents; ++j) {
+
226 MCSamples[i].osc_w[j] = calcOscWeights(i, MCSamples[i].nutype, MCSamples[i].oscnutype, *(MCSamples[i].rw_etru[j]), oscpar);
+
227 } //event loop
+
228#endif
+
229
+
230#if defined (USE_PROB3) && not defined (CPU_ONLY)
+
231 calcOscWeights(MCSamples[i].nutype, MCSamples[i].oscnutype, *(MCSamples[i].rw_etru), MCSamples[i].osc_w, MCSamples[i].nEvents, oscpar);
+
232#endif
+
233
+
234#if not defined (USE_PROB3)
+
235 calcOscWeights(i, MCSamples[i].nutype, MCSamples[i].osc_w, oscpar);
+
236#endif
+
237 }// Sample loop
+
238 }
+
239
+
240 //KS: Reset the histograms before reweight
+ +
242
+
243 fillArray();
+
244
+
245 return;
+
246}
+
void FillOscillogram(double *oscpar, double prodH, double Yp_Val=0.468)
+ + +
void calcOscWeights(int sample, int nutype, double *w, double *oscpar)
+
+
+
+ +

◆ set1DBinning() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::set1DBinning (int nbins,
doubleboundaries 
)
+
+protected
+
+ +

Definition at line 962 of file samplePDFFDBase.cpp.

+
963{
+
964 _hPDF1D->Reset();
+
965 _hPDF1D->SetBins(nbins,boundaries);
+
966 dathist->SetBins(nbins,boundaries);
+
967
+
968 XBinEdges = std::vector<double>(nbins+1);
+
969 for (int i=0;i<nbins+1;i++) {
+
970 XBinEdges[i] = _hPDF1D->GetXaxis()->GetBinLowEdge(i+1);
+
971 }
+
972 YBinEdges = std::vector<double>(2);
+
973 YBinEdges[0] = -1e8;
+
974 YBinEdges[1] = 1e8;
+
975
+
976 double YBinEdges_Arr[2];
+
977 YBinEdges_Arr[0] = YBinEdges[0];
+
978 YBinEdges_Arr[1] = YBinEdges[1];
+
979
+
980 _hPDF2D->Reset();
+ + +
983
+
984 int nXBins = XBinEdges.size()-1;
+
985 int nYBins = YBinEdges.size()-1;
+
986
+
987 samplePDFFD_array = new double*[nYBins];
+
988 samplePDFFD_array_w2 = new double*[nYBins];
+
989 for (int yBin=0;yBin<nYBins;yBin++) {
+
990 samplePDFFD_array[yBin] = new double[nXBins];
+
991 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
992 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
995 }
+
996 }
+
997
+ +
999}
+ +
+
+
+ +

◆ set1DBinning() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::set1DBinning (int nbins,
double low,
double high 
)
+
+protected
+
+ +

Definition at line 1001 of file samplePDFFDBase.cpp.

+
1002{
+
1003 _hPDF1D->Reset();
+
1004 _hPDF1D->SetBins(nbins,low,high);
+
1005 dathist->SetBins(nbins,low,high);
+
1006
+
1007 XBinEdges = std::vector<double>(nbins+1);
+
1008 for (int i=0;i<nbins+1;i++) {
+
1009 XBinEdges[i] = _hPDF1D->GetXaxis()->GetBinLowEdge(i+1);
+
1010 }
+
1011 YBinEdges = std::vector<double>(2);
+
1012 YBinEdges[0] = -1e8;
+
1013 YBinEdges[1] = 1e8;
+
1014
+
1015 _hPDF2D->Reset();
+
1016 _hPDF2D->SetBins(nbins,low,high,1,YBinEdges[0],YBinEdges[1]);
+
1017 dathist2d->SetBins(nbins,low,high,1,YBinEdges[0],YBinEdges[1]);
+
1018
+
1019 int nXBins = XBinEdges.size()-1;
+
1020 int nYBins = YBinEdges.size()-1;
+
1021
+
1022 samplePDFFD_array = new double*[nYBins];
+
1023 samplePDFFD_array_w2 = new double*[nYBins];
+
1024 for (int yBin=0;yBin<nYBins;yBin++) {
+
1025 samplePDFFD_array[yBin] = new double[nXBins];
+
1026 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
1027 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
1030 }
+
1031 }
+
1032
+ +
1034}
+
+
+
+ +

◆ set1DBinning() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::set1DBinning (std::vector< double > & XVec)
+
+protected
+
+ +

Definition at line 886 of file samplePDFFDBase.cpp.

+
886 {
+
887
+
888 _hPDF1D->Reset();
+
889 _hPDF1D->SetBins(XVec.size()-1, XVec.data());
+
890 dathist->SetBins(XVec.size()-1, XVec.data());
+
891
+
892 XBinEdges = XVec;
+
893 //for (int i=0;i<nbins+1;i++) {
+
894// XBinEdges[i] = _hPDF1D->GetXaxis()->GetBinLowEdge(i+1);
+
895// }
+
896 YBinEdges = std::vector<double>(2);
+
897 YBinEdges[0] = -1e8;
+
898 YBinEdges[1] = 1e8;
+
899
+
900 //double YBinEdges_Arr[2];
+
901 //YBinEdges_Arr[0] = YBinEdges[0];
+
902 //YBinEdges_Arr[1] = YBinEdges[1];
+
903
+
904 _hPDF2D->Reset();
+
905 _hPDF2D ->SetBins(XVec.size()-1, XVec.data(), YBinEdges.size()-1, YBinEdges.data());
+
906 dathist2d->SetBins(XVec.size()-1, XVec.data(), YBinEdges.size()-1, YBinEdges.data());
+
907
+
908 int nXBins = XBinEdges.size()-1;
+
909 int nYBins = YBinEdges.size()-1;
+
910
+
911 samplePDFFD_array = new double*[nYBins];
+
912 samplePDFFD_array_w2 = new double*[nYBins];
+
913 for (int yBin=0;yBin<nYBins;yBin++) {
+
914 samplePDFFD_array[yBin] = new double[nXBins];
+
915 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
916 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
919 }
+
920 }
+
921
+ +
923}
+
+
+
+ +

◆ set2DBinning() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::set2DBinning (int nbins1,
doubleboundaries1,
int nbins2,
doubleboundaries2 
)
+
+protected
+
+ +

Definition at line 1084 of file samplePDFFDBase.cpp.

+
1085{
+
1086 _hPDF1D->Reset();
+
1087 _hPDF1D->SetBins(nbins1,boundaries1);
+
1088 dathist->SetBins(nbins1,boundaries1);
+
1089
+
1090 _hPDF2D->Reset();
+ + +
1093
+
1094 XBinEdges = std::vector<double>(nbins1+1);
+
1095 for (int i=0;i<nbins1+1;i++) {
+
1096 XBinEdges[i] = _hPDF2D->GetXaxis()->GetBinLowEdge(i+1);
+
1097 }
+
1098 YBinEdges = std::vector<double>(nbins2+1);
+
1099 for (int i=0;i<nbins2+1;i++) {
+
1100 YBinEdges[i] = _hPDF2D->GetYaxis()->GetBinLowEdge(i+1);
+
1101 }
+
1102
+
1103 int nXBins = XBinEdges.size()-1;
+
1104 int nYBins = YBinEdges.size()-1;
+
1105
+
1106 samplePDFFD_array = new double*[nYBins];
+
1107 samplePDFFD_array_w2 = new double*[nYBins];
+
1108 for (int yBin=0;yBin<nYBins;yBin++) {
+
1109 samplePDFFD_array[yBin] = new double[nXBins];
+
1110 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
1111 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
1114 }
+
1115 }
+
1116
+ +
1118}
+ +
+
+
+ +

◆ set2DBinning() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::set2DBinning (int nbins1,
double low1,
double high1,
int nbins2,
double low2,
double high2 
)
+
+protected
+
+ +

Definition at line 1120 of file samplePDFFDBase.cpp.

+
1121{
+
1122 _hPDF1D->Reset();
+
1123 _hPDF1D->SetBins(nbins1,low1,high1);
+
1124 dathist->SetBins(nbins1,low1,high1);
+
1125
+
1126 _hPDF2D->Reset();
+ + +
1129
+
1130 XBinEdges = std::vector<double>(nbins1+1);
+
1131 for (int i=0;i<nbins1+1;i++) {
+
1132 XBinEdges[i] = _hPDF2D->GetXaxis()->GetBinLowEdge(i+1);
+
1133 }
+
1134 YBinEdges = std::vector<double>(nbins2+1);
+
1135 for (int i=0;i<nbins2+1;i++) {
+
1136 YBinEdges[i] = _hPDF2D->GetYaxis()->GetBinLowEdge(i+1);
+
1137 }
+
1138
+
1139 int nXBins = XBinEdges.size()-1;
+
1140 int nYBins = YBinEdges.size()-1;
+
1141
+
1142 samplePDFFD_array = new double*[nYBins];
+
1143 samplePDFFD_array_w2 = new double*[nYBins];
+
1144 for (int yBin=0;yBin<nYBins;yBin++) {
+
1145 samplePDFFD_array[yBin] = new double[nXBins];
+
1146 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
1147 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
1150 }
+
1151 }
+
1152
+ +
1154}
+
+
+
+ +

◆ set2DBinning() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::set2DBinning (std::vector< double > & XVec,
std::vector< double > & YVec 
)
+
+protected
+
+ +

Definition at line 926 of file samplePDFFDBase.cpp.

+
927{
+
928 _hPDF1D->Reset();
+
929 _hPDF1D->SetBins(XVec.size()-1, XVec.data());
+
930 dathist->SetBins(XVec.size()-1, XVec.data());
+
931
+
932 _hPDF2D->Reset();
+
933 _hPDF2D->SetBins(XVec.size()-1, XVec.data(), YVec.size()-1, YVec.data());
+
934 dathist2d->SetBins(XVec.size()-1, XVec.data(), YVec.size()-1, YVec.data());
+
935
+
936 XBinEdges = XVec;
+
937 YBinEdges = YVec;
+
938
+
939 //ETA - maybe need to be careful here
+
940 int nXBins = XVec.size()-1;
+
941 int nYBins = YVec.size()-1;
+
942
+
943 samplePDFFD_array = new double*[nYBins];
+
944 samplePDFFD_array_w2 = new double*[nYBins];
+
945 for (int yBin=0;yBin<nYBins;yBin++) {
+
946 samplePDFFD_array[yBin] = new double[nXBins];
+
947 samplePDFFD_array_w2[yBin] = new double[nXBins];
+
948 for (int xBin=0;xBin<nXBins;xBin++) {
+ + +
951 }
+
952 }
+
953
+ +
955}
+
+
+
+ +

◆ SetOscillator()

+ +
+
+ + + + + + + + +
void samplePDFFDBase::SetOscillator (OscillatorOsc_)
+
+ +

Definition at line 643 of file samplePDFFDBase.cpp.

+
643 {
+
644#if defined (USE_PROB3)
+
645 std::cerr << "Atmospheric Oscillator only defined using CUDAProb3 - USE_PROB3 is defined and indicates that Prob3++/probGPU is being used" << std::endl;
+
646 throw;
+
647#endif
+
648
+
649 Osc = Osc_;
+
650 std::cout << "Set Oscillator" << std::endl;
+
651
+ +
653}
+ +
+
+
+ +

◆ SetupFuncParameters()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFFDBase::SetupFuncParameters ()
+
+inlineprotectedvirtual
+
+ +

Definition at line 180 of file samplePDFFDBase.h.

+
180{return;};
+
+
+
+ +

◆ SetupNormParameters()

+ +
+
+ + + + + +
+ + + + + + + +
void samplePDFFDBase::SetupNormParameters ()
+
+protected
+
+ +

Definition at line 684 of file samplePDFFDBase.cpp.

+
684 {
+
685
+
686 if(!XsecCov){
+
687 std::cout << "XsecCov is not setup!" << std::endl;
+
688 throw;
+
689 }
+
690
+
691 // Assign xsec norm bins in MCSamples tree
+
692 for (int iSample = 0; iSample < (int)MCSamples.size(); ++iSample) {
+ +
694 }
+
695
+
696 //DB
+
697 //Attempt at reducing impact of covarianceXsec::calcReweight()
+
698 int counter;
+
699
+
700 for (int iSample = 0; iSample < (int)MCSamples.size(); ++iSample) {
+
701 for (int iEvent = 0; iEvent < MCSamples[iSample].nEvents; ++iEvent) {
+
702 counter = 0;
+
703
+
704 MCSamples[iSample].nxsec_norm_pointers[iEvent] = MCSamples[iSample].xsec_norms_bins[iEvent].size();
+
705 MCSamples[iSample].xsec_norm_pointers[iEvent] = new const double*[MCSamples[iSample].nxsec_norm_pointers[iEvent]];
+
706
+
707 for(std::list< int >::iterator lit = MCSamples[iSample].xsec_norms_bins[iEvent].begin();lit!=MCSamples[iSample].xsec_norms_bins[iEvent].end();lit++) {
+
708 MCSamples[iSample].xsec_norm_pointers[iEvent][counter] = XsecCov->retPointer(*lit);
+
709 counter += 1;
+
710 }
+
711
+
712 }
+
713 }
+
714
+
715 return;
+
716}
+
const double * retPointer(int iParam)
+
void CalcXsecNormsBins(int iSample)
+
+
+
+ +

◆ SetupOscCalc()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::SetupOscCalc (double PathLength,
double Density 
)
+
+virtual
+
+ +

Definition at line 839 of file samplePDFFDBase.cpp.

+
840{
+
841
+
842 for (int iSample=0; iSample < (int)MCSamples.size(); iSample++) {
+
843
+
844#if defined (USE_PROB3) && defined (CPU_ONLY)
+
845// if we're using Prob3++ CPU then initialise BargerPropagator object
+
846// if we're using Prob3++ GPU then we don't need to do this since event information gets passed straight to ProbGpu.cu in CalcOscWeights
+
847 MCSamples[iSample].Oscillator = new BargerPropagator();
+
848 MCSamples[iSample].Oscillator->UseMassEigenstates(false);
+
849 MCSamples[iSample].Oscillator->SetOneMassScaleMode(false);
+
850 MCSamples[iSample].Oscillator->SetWarningSuppression(true);
+
851#endif
+
852
+
853#if not defined (USE_PROB3)
+
854//if we're using CUDAProb3 then make vector of energies and convert to CUDAProb3 structs
+
855 std::vector<double> etruVector(*(MCSamples[iSample].rw_etru), *(MCSamples[iSample].rw_etru) + MCSamples[iSample].nEvents);
+ +
857 // CUDAProb3 takes probType and antineutrino/neutrino separately
+
858 if (MCSamples[iSample].nutype < 0) {MCSamples[iSample].NeutrinoType = cudaprob3::NeutrinoType::Antineutrino;}
+
859 else {MCSamples[iSample].NeutrinoType = cudaprob3::NeutrinoType::Neutrino;}
+
860#if defined (CPU_ONLY)
+
861//if we just want to use CUDAProb3 CPU then setup BeamCpuPropagator object
+
862#if defined (MULTITHREAD)
+
863//if we want to multithread then get number of threads from OMP_NUM_THREADS env variable
+
864 MCSamples[iSample].Oscillator = new cudaprob3::BeamCpuPropagator<double>(MCSamples[iSample].nEvents, std::atoi(std::getenv("OMP_NUM_THREADS")));
+
865 MCSamples[iSample].Oscillator->setPathLength(PathLength);
+
866 MCSamples[iSample].Oscillator->setDensity(Density);
+
867#else
+
868//if we're not mulithreading then just set it to 1
+
869 MCSamples[iSample].Oscillator = new cudaprob3::BeamCpuPropagator<double>(MCSamples[iSample].nEvents, 1);
+
870 MCSamples[iSample].Oscillator->setPathLength(PathLength);
+
871 MCSamples[iSample].Oscillator->setDensity(Density);
+
872#endif //MULTITHREAD
+
873#else
+
874//if we want to use CUDAProb3 GPU then setup BeamCudaPropagator object
+
875 MCSamples[iSample].Oscillator = new cudaprob3::BeamCudaPropagatorSingle(0, MCSamples[iSample].nEvents);
+
876 MCSamples[iSample].Oscillator->setPathLength(PathLength);
+
877 MCSamples[iSample].Oscillator->setDensity(Density);
+
878#endif // CPU_ONLY
+
879 MCSamples[iSample].Oscillator->setEnergyList(etruVector);
+
880#endif // USE_PROB3
+
881 }
+
882 return;
+
883}
+
CUDAProb_nu GetCUDAProbFlavour(int nu_i, int nu_f)
Definition Structs.h:1111
+
cudaprob3::ProbType SwitchToCUDAProbType(CUDAProb_nu CUDAProb_nu)
+
+
+
+ +

◆ setupSplines()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void samplePDFFDBase::setupSplines (fdmc_baseskobj,
const charsplineFile,
int nutype,
int signal 
)
+
+inlinevirtual
+
+ +

Definition at line 112 of file samplePDFFDBase.h.

+
112{};
+
+
+
+ +

◆ SetupWeightPointers()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFFDBase::SetupWeightPointers ()
+
+protectedpure virtual
+
+ +
+
+ +

◆ SetXsecCov()

+ +
+
+ + + + + + + + +
void samplePDFFDBase::SetXsecCov (covarianceXsecxsec_cov)
+
+ +

Definition at line 664 of file samplePDFFDBase.cpp.

+
664 {
+
665
+
666 std::cout << "SETTING UP XSEC COV!!" << std::endl;
+
667 XsecCov = xsec;
+
668
+
669 // Get the map between the normalisation parameters index, their name, what mode they should apply to, and what target
+
670 //This information is used later in CalcXsecNormsBins to decide if a parameter applies to an event
+
671
+
672 //DB Now get this information using the DetID from the config
+ + + + +
677
+
678 std::cout << "Found " << xsec_norms.size() << " normalisation parameters" << std::endl;
+
679 std::cout << "Found " << funcParsNames.size() << " functional parameters" << std::endl;
+
680
+
681 return;
+
682}
+
const std::vector< int > GetFuncParsIndexFromDetID(int DetID)
+
int GetNumFuncParamsFromDetID(int DetID)
+
const std::vector< std::string > GetFuncParsNamesFromDetID(int DetID)
+
const std::vector< XsecNorms4 > GetNormParsFromDetID(int DetID)
+ +
std::vector< std::string > funcParsNames
+
std::vector< int > funcParsIndex
+
+
+
+ +

◆ SwitchToCUDAProbType()

+ +
+
+ + + + + +
+ + + + + + + + +
cudaprob3::ProbType samplePDFFDBase::SwitchToCUDAProbType (CUDAProb_nu CUDAProb_nu)
+
+inlineprotected
+
+ +

Definition at line 1416 of file samplePDFFDBase.cpp.

+
1416 {
+
1417//*************************************************
+
1418 switch(CUDAProb_nu)
+
1419 {
+
1420 case CUDAProb_nu::e_e : return cudaprob3::ProbType::e_e;
+
1421 case CUDAProb_nu::e_m : return cudaprob3::ProbType::e_m;
+
1422 case CUDAProb_nu::e_t : return cudaprob3::ProbType::e_m;
+
1423 case CUDAProb_nu::m_e : return cudaprob3::ProbType::m_e;
+
1424 case CUDAProb_nu::m_m : return cudaprob3::ProbType::m_m;
+
1425 case CUDAProb_nu::m_t : return cudaprob3::ProbType::m_t;
+
1426 case CUDAProb_nu::t_e : return cudaprob3::ProbType::t_e;
+
1427 case CUDAProb_nu::t_m : return cudaprob3::ProbType::t_m;
+
1428 case CUDAProb_nu::t_t : return cudaprob3::ProbType::t_t;
+
1429 default:
+
1430 MACH3LOG_ERROR("Unknown CUDAProbType!");
+
1431 throw;
+
1432 }
+
1433}
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
CUDAProb_nu
Definition Structs.h:1096
+
@ e_t
Definition Structs.h:1099
+
@ m_m
Definition Structs.h:1101
+
@ t_t
Definition Structs.h:1105
+
@ e_m
Definition Structs.h:1098
+
@ m_e
Definition Structs.h:1100
+
@ t_e
Definition Structs.h:1103
+
@ e_e
Definition Structs.h:1097
+
@ t_m
Definition Structs.h:1104
+
@ m_t
Definition Structs.h:1102
+
+
+
+ +

◆ UseBinnedOscReweighting() [1/2]

+ +
+
+ + + + + + + + +
void samplePDFFDBase::UseBinnedOscReweighting (bool ans)
+
+

Get the binning from the MC histogram

+ +

Definition at line 70 of file samplePDFFDBase.cpp.

+
71{
+ +
73 if(ans == true) {
+
74 std::cout << "WARNING: you are using binned oscillation weight without specifying the binning. It will use E_reco binning to set the energy (recommended to use set1Dbinning first !). If you want another binning use : \n useBinnedOscReweighting(true, int, double*) \nwhere int is the number of bins and double* is an array with the bins boundaries." << std::endl ;
+
75
+
77 const int nb_bins = _hPDF1D -> GetXaxis() -> GetNbins() ;
+
78 const double* osc_bins = _hPDF1D -> GetXaxis() -> GetXbins() -> GetArray();
+ +
80 }
+
81
+
82 return;
+
83}
+ + +
+
+
+ +

◆ UseBinnedOscReweighting() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void samplePDFFDBase::UseBinnedOscReweighting (bool ans,
int nbins,
doubleosc_bins 
)
+
+ +

Definition at line 85 of file samplePDFFDBase.cpp.

+
86{
+ +
88 if(ans == true) {
+ +
90 }
+
91
+
92 return;
+
93}
+
+
+
+ +

◆ UseNonDoubledAngles()

+ +
+
+ + + + + +
+ + + + + + + + +
void samplePDFFDBase::UseNonDoubledAngles (bool ans)
+
+inline
+
+ +

Definition at line 71 of file samplePDFFDBase.h.

+ +
+
+

Member Data Documentation

+ +

◆ _data

+ +
+
+ + + + + +
+ + + + +
TTree* samplePDFFDBase::_data
+
+protected
+
+ +

Definition at line 220 of file samplePDFFDBase.h.

+ +
+
+ +

◆ _sampleFile

+ +
+
+ + + + + +
+ + + + +
TFile* samplePDFFDBase::_sampleFile
+
+protected
+
+ +

Definition at line 219 of file samplePDFFDBase.h.

+ +
+
+ +

◆ BinningOpt

+ +
+
+ + + + + +
+ + + + +
int samplePDFFDBase::BinningOpt
+
+protected
+
+ +

Definition at line 242 of file samplePDFFDBase.h.

+ +
+
+ +

◆ doubled_angle

+ +
+
+ + + + + +
+ + + + +
bool samplePDFFDBase::doubled_angle
+
+protected
+
+ +

Definition at line 232 of file samplePDFFDBase.h.

+ +
+
+ +

◆ funcParsIndex

+ +
+
+ + + + + +
+ + + + +
std::vector<int> samplePDFFDBase::funcParsIndex
+
+protected
+
+ +

Definition at line 252 of file samplePDFFDBase.h.

+ +
+
+ +

◆ funcParsNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> samplePDFFDBase::funcParsNames
+
+protected
+
+ +

Definition at line 251 of file samplePDFFDBase.h.

+ +
+
+ +

◆ IsRHC

+ +
+
+ + + + + +
+ + + + +
bool samplePDFFDBase::IsRHC
+
+protected
+
+ +

Definition at line 244 of file samplePDFFDBase.h.

+ +
+
+ +

◆ MCSamples

+ +
+
+ + + + + +
+ + + + +
vector<struct fdmc_base> samplePDFFDBase::MCSamples
+
+protected
+
+ +

Definition at line 218 of file samplePDFFDBase.h.

+ +
+
+ +

◆ nFuncParams

+ +
+
+ + + + + +
+ + + + +
int samplePDFFDBase::nFuncParams
+
+protected
+
+ +

Definition at line 250 of file samplePDFFDBase.h.

+ +
+
+ +

◆ NSelections

+ +
+
+ + + + + +
+ + + + +
int samplePDFFDBase::NSelections
+
+protected
+
+ +

Definition at line 267 of file samplePDFFDBase.h.

+ +
+
+ +

◆ Osc

+ +
+
+ + + + + +
+ + + + +
Oscillator* samplePDFFDBase::Osc = NULL
+
+protected
+
+ +

Definition at line 225 of file samplePDFFDBase.h.

+ +
+
+ +

◆ osc_binned

+ +
+
+ + + + + +
+ + + + +
bool samplePDFFDBase::osc_binned
+
+protected
+
+ +

Definition at line 233 of file samplePDFFDBase.h.

+ +
+
+ +

◆ osc_binned_axis

+ +
+
+ + + + + +
+ + + + +
TAxis* samplePDFFDBase::osc_binned_axis
+
+protected
+
+ +

Definition at line 228 of file samplePDFFDBase.h.

+ +
+
+ +

◆ SampleDetID

+ +
+
+ + + + + +
+ + + + +
int samplePDFFDBase::SampleDetID
+
+protected
+
+ +

Definition at line 243 of file samplePDFFDBase.h.

+ +
+
+ +

◆ samplename

+ +
+
+ + + + + +
+ + + + +
std::string samplePDFFDBase::samplename
+
+protected
+
+ +

Definition at line 246 of file samplePDFFDBase.h.

+ +
+
+ +

◆ samplePDFFD_array

+ +
+
+ + + + + +
+ + + + +
double** samplePDFFDBase::samplePDFFD_array
+
+protected
+
+ +

Definition at line 209 of file samplePDFFDBase.h.

+ +
+
+ +

◆ samplePDFFD_array_w2

+ +
+
+ + + + + +
+ + + + +
double** samplePDFFDBase::samplePDFFD_array_w2
+
+protected
+
+ +

Definition at line 211 of file samplePDFFDBase.h.

+ +
+
+ +

◆ samplePDFFD_data

+ +
+
+ + + + + +
+ + + + +
double** samplePDFFDBase::samplePDFFD_data
+
+protected
+
+ +

Definition at line 213 of file samplePDFFDBase.h.

+ +
+
+ +

◆ Selection

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<double> > samplePDFFDBase::Selection
+
+protected
+
+ +

Definition at line 258 of file samplePDFFDBase.h.

+ +
+
+ +

◆ SelectionBounds

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<double> > samplePDFFDBase::SelectionBounds
+
+protected
+
+ +

Definition at line 262 of file samplePDFFDBase.h.

+ +
+
+ +

◆ SelectionStr

+ +
+
+ + + + + +
+ + + + +
std::vector< std::string > samplePDFFDBase::SelectionStr
+
+protected
+
+ +

Definition at line 257 of file samplePDFFDBase.h.

+ +
+
+ +

◆ splineFile

+ +
+
+ + + + + +
+ + + + +
splineFDBase* samplePDFFDBase::splineFile
+
+protected
+
+ +

Definition at line 124 of file samplePDFFDBase.h.

+ +
+
+ +

◆ StoredSelection

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<double> > samplePDFFDBase::StoredSelection
+
+protected
+
+ +

Definition at line 269 of file samplePDFFDBase.h.

+ +
+
+ +

◆ XBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> samplePDFFDBase::XBinEdges
+
+protected
+
+ +

Definition at line 205 of file samplePDFFDBase.h.

+ +
+
+ +

◆ xsec_norms

+ +
+
+ + + + + +
+ + + + +
std::vector<XsecNorms4> samplePDFFDBase::xsec_norms
+
+protected
+
+ +

Definition at line 249 of file samplePDFFDBase.h.

+ +
+
+ +

◆ XsecCov

+ +
+
+ + + + + +
+ + + + +
covarianceXsec* samplePDFFDBase::XsecCov
+
+protected
+
+ +

Definition at line 238 of file samplePDFFDBase.h.

+ +
+
+ +

◆ YBinEdges

+ +
+
+ + + + + +
+ + + + +
std::vector<double> samplePDFFDBase::YBinEdges
+
+protected
+
+ +

Definition at line 206 of file samplePDFFDBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsamplePDFFDBase.png b/classsamplePDFFDBase.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f06c30dc54496bdc7f811326f1839ea85b4c3d GIT binary patch literal 1334 zcmeAS@N?(olHy`uVBq!ia0y~yU}OWbJ2;quq>3f*F8(FfeDDeT9L6<)EjFV@L(#+qtj%UMujl zsP~C{{O4c8^ejp5?6Oxkox*}|wz4oCX1`It@%?YR^Nb0c_g!7mEDZ&i4LdqalPVP2 z)?WE@eoB;O_OkAdh|6_KN_*|aod0;I=2dk*WIEI(@#z`c%fhAUs%uTRO7JWdTKzEM ziGA&4K7UDDQSGD)qDQCBGuo>;d)HGg=i8QhH_Fd8?@rqA`sc7n<$EM*)zygwHJY=|r5?O`+;Y!4Nu}GoZ_Rdecjz0=h&#JjrYm%5o>TwUx+k`&sGCkhDu z^i^j|QeYF@=*F`;@y7Ss`Og?Wi2q?=urg%fVz(4`cC4YFs@%z)~GcNeF((1{dvl@&cX5q)z+>90}F7=tc_n<-W zal67Y!;OiX`f4A&5pCOP_2)}|&DN*S&;IvWIdyYv{2i(F2My*e|M_lClEuBPa`Ch3 zdiOOvlr4*!XV)Hh`NhAlmgO(RPhEPyYK>vfZ`0LzEALzhJ|%cG*!_Q4r0ceS+5c<8 zzTDjYJo3*L&$;V=ymyZL^|IXRPUx{WVY}xtA9;VsBd+~jNgbc?olC+%Q{0Yyxt#TW z!J*)bUMaGfORm1s`B?jB-%IiDEB0$LXs!Ns?Y-N-xUV9yspaopcJ9u8@yFrdie9Bp z*MCNazMA(!XIJXOd&@QjO}@ha>1%-d)>AzTZ{0Szr)%5$?pYeo=Te|g_0Qg$7RbGI zk=N;plFM>g2~tm9i;J9*{IGk%qIkRPRSM_I-TiCZs$>t>+;pxpI}4o>}_AT9qLi7N_o$*YA(MC14p2W|(mnFX~f^uiu_y;B!TA>YI<# zLu;SkjO#KjVL0%+j^O~4T_n3<%gugM3!iI_JcZv>!8FgrBMb~vh0)Sk^UQx1eaWos z4e7t-BbXR!Ug1lDAC?>B+}?J!m?7ej`SUrmpMumrn6uf9r~gPmRVzcj*V;K-S8cJK zTl}uoUILtRSDm_3VEYG{b>-N;g0ilzCMfG(nkKr!q)4(pmPgBG-Ipt`e79cL%}>^l zpVq$AaErq&Qw{NAtySXdrK0k(lQr7QiqA!@dOGdkvi~KTTV6bRHcPRnpy~DH4@Fze z^<3}%R@}I7PGexs3!y`y%PPWh3?|wzopr0P_BQ Au>b%7 literal 0 HcmV?d00001 diff --git a/classsamplePDFInterface-members.html b/classsamplePDFInterface-members.html new file mode 100644 index 00000000..0a142a6e --- /dev/null +++ b/classsamplePDFInterface-members.html @@ -0,0 +1,102 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
samplePDFInterface Member List
+
+
+ +

This is the complete list of members for samplePDFInterface, including all inherited members.

+ + + + + + + + + + + + + + + + + +
addData(std::vector< double > &dat)=0samplePDFInterfacepure virtual
addData(std::vector< vector< double > > &dat)=0samplePDFInterfacepure virtual
addData(TH1D *binneddata)=0samplePDFInterfacepure virtual
addData(TH2D *binneddata)=0samplePDFInterfacepure virtual
fill1DHist()=0samplePDFInterfaceprotectedpure virtual
fill2DHist()=0samplePDFInterfaceprotectedpure virtual
generate()=0samplePDFInterfacepure virtual
generate2D(TH2D *pdf)=0samplePDFInterfacepure virtual
getCovLikelihood()=0samplePDFInterfaceprotectedpure virtual
getEventRate()=0samplePDFInterfacepure virtual
GetLikelihood()=0samplePDFInterfacepure virtual
GetLikelihood_kernel(std::vector< double > &data)=0samplePDFInterfaceprotectedpure virtual
init(double pot)=0samplePDFInterfaceprotectedpure virtual
init(double pot, std::string mc_version)=0samplePDFInterfaceprotectedpure virtual
printPosteriors()=0samplePDFInterfacepure virtual
reweight(double *oscpar)=0samplePDFInterfacepure virtual
+ + + + diff --git a/classsamplePDFInterface.html b/classsamplePDFInterface.html new file mode 100644 index 00000000..75a18393 --- /dev/null +++ b/classsamplePDFInterface.html @@ -0,0 +1,592 @@ + + + + + + + +MaCh3: samplePDFInterface Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
samplePDFInterface Class Referenceabstract
+
+
+ +

#include <samplePDFInterface.h>

+
+Inheritance diagram for samplePDFInterface:
+
+
+ + +samplePDFBase +samplePDFFDBase + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void reweight (double *oscpar)=0
 
virtual double getEventRate ()=0
 
virtual vector< vector< double > > generate2D (TH2D *pdf)=0
 
virtual vector< doublegenerate ()=0
 
virtual double GetLikelihood ()=0
 
virtual void addData (std::vector< double > &dat)=0
 
virtual void addData (std::vector< vector< double > > &dat)=0
 
virtual void addData (TH1D *binneddata)=0
 
virtual void addData (TH2D *binneddata)=0
 
virtual void printPosteriors ()=0
 
+ + + + + + + + + + + + + +

+Protected Member Functions

virtual void init (double pot)=0
 
virtual void init (double pot, std::string mc_version)=0
 
virtual double getCovLikelihood ()=0
 
virtual double GetLikelihood_kernel (std::vector< double > &data)=0
 
virtual void fill1DHist ()=0
 
virtual void fill2DHist ()=0
 
+

Detailed Description

+
+

Definition at line 17 of file samplePDFInterface.h.

+

Member Function Documentation

+ +

◆ addData() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::addData (std::vector< double > & dat)
+
+pure virtual
+
+ +

Implemented in samplePDFBase, and samplePDFFDBase.

+ +
+
+ +

◆ addData() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::addData (std::vector< vector< double > > & dat)
+
+pure virtual
+
+ +

Implemented in samplePDFBase, and samplePDFFDBase.

+ +
+
+ +

◆ addData() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::addData (TH1Dbinneddata)
+
+pure virtual
+
+ +

Implemented in samplePDFBase, and samplePDFFDBase.

+ +
+
+ +

◆ addData() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::addData (TH2Dbinneddata)
+
+pure virtual
+
+ +

Implemented in samplePDFBase, and samplePDFFDBase.

+ +
+
+ +

◆ fill1DHist()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFInterface::fill1DHist ()
+
+protectedpure virtual
+
+ +

Implemented in samplePDFFDBase.

+ +
+
+ +

◆ fill2DHist()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFInterface::fill2DHist ()
+
+protectedpure virtual
+
+ +

Implemented in samplePDFFDBase.

+ +
+
+ +

◆ generate()

+ +
+
+ + + + + +
+ + + + + + + +
virtual vector< double > samplePDFInterface::generate ()
+
+pure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ generate2D()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual vector< vector< double > > samplePDFInterface::generate2D (TH2Dpdf)
+
+pure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ getCovLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double samplePDFInterface::getCovLikelihood ()
+
+protectedpure virtual
+
+ +
+
+ +

◆ getEventRate()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double samplePDFInterface::getEventRate ()
+
+pure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ GetLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double samplePDFInterface::GetLikelihood ()
+
+pure virtual
+
+ +

Implemented in samplePDFFDBase, and samplePDFBase.

+ +
+
+ +

◆ GetLikelihood_kernel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double samplePDFInterface::GetLikelihood_kernel (std::vector< double > & data)
+
+protectedpure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ init() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::init (double pot)
+
+protectedpure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ init() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void samplePDFInterface::init (double pot,
std::string mc_version 
)
+
+protectedpure virtual
+
+ +

Implemented in samplePDFBase.

+ +
+
+ +

◆ printPosteriors()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void samplePDFInterface::printPosteriors ()
+
+pure virtual
+
+ +
+
+ +

◆ reweight()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void samplePDFInterface::reweight (doubleoscpar)
+
+pure virtual
+
+ +

Implemented in samplePDFFDBase.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsamplePDFInterface.png b/classsamplePDFInterface.png new file mode 100644 index 0000000000000000000000000000000000000000..e90e94d4996732c61b7bb32090a011230b203e83 GIT binary patch literal 847 zcmV-V1F-ywP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0008o zNkloBQr%+ZOijiRcHMee}0s{rY`Zf`!{^O%(3Jo>_K6ajKR0y439F@ zk33R})pjqP#pj()!k&J$e5O8ghaV@G5xdxo40wBw30e-&Zq_ z&hNhWGu}GC75{vc3+Jn<&idCsiGf#DbyDC}Rh{IIPbnog0l+uf0KiYa_-%9L`{H-H zC*K+WpF2PB0N|y-1AvnP4**UIJODT;@BrYXzypAj0uKOA3OoRODiM({w26p(E(l3_ zDexreq~C^5EqeW#J_mbL2T1Z>-{8-W($`cSAjx|z@%1vtHYZ^Z3ZrBUz6JI?Wuvwo zN!wQVywge87rk2Eq|ZFz+r0J)<3YyF@_9@Zx&ia{_IPjNTeT8tTZwAMoc5yl zxf{;(XuU=0`rD6AyD5I3Bx&07+qXNf-oCr+-+6mu)#Cf3t(@O|@27!g+8;QdBxk+( zLqd}8EAS-gq`;G;ll<`_B5neJZ?pk`pM3G#=F0cQ?{rVTGyXq!e&7MXOMwRfCj}k= zoD_Hfa8lp_z)67z04D_=0Gt$f0QgiQB420|5&2vYlJrvGNzzHb1fN>;`ZIkF_NeRa zOp?6N2l(@&^flG>HF3|k_K*~F`jpgZ^cQZZ6&Ii#U-DLpS#JAz4aEA>TiEZd87FK?1#5+ zcV4~yWbixZzxVdWnZ@@ + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
spline Member List
+
+
+ +

This is the complete list of members for spline, including all inherited members.

+ + + + + + + + + + + + + + +
Eval(double x)splineinline
fBsplineprotected
fCsplineprotected
fDsplineprotected
fDeltasplineprotected
fKstepsplineprotected
fNpsplineprotected
fXsplineprotected
fXmaxsplineprotected
fXminsplineprotected
fYsplineprotected
spline(int N, int tfDelta, int tfXmin, int tfXmax, double tfX[], double tfY[], double tfB[], double tfC[], double tfD[])splineinline
~spline()splineinline
+ + + + diff --git a/classspline.html b/classspline.html new file mode 100644 index 00000000..18e570a0 --- /dev/null +++ b/classspline.html @@ -0,0 +1,559 @@ + + + + + + + +MaCh3: spline Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <spline.h>

+ + + + + + + + +

+Public Member Functions

 spline (int N, int tfDelta, int tfXmin, int tfXmax, double tfX[], double tfY[], double tfB[], double tfC[], double tfD[])
 
 ~spline ()
 
CUDA_CALLABLE_MEMBER double Eval (double x)
 
+ + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int fNp
 
int fKstep
 
double fDelta
 
double fXmin
 
double fXmax
 
doublefX
 
doublefY
 
doublefB
 
doublefC
 
doublefD
 
+

Detailed Description

+
+

Definition at line 10 of file spline.h.

+

Constructor & Destructor Documentation

+ +

◆ spline()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spline::spline (int N,
int tfDelta,
int tfXmin,
int tfXmax,
double tfX[],
double tfY[],
double tfB[],
double tfC[],
double tfD[] 
)
+
+inline
+
+ +

Definition at line 13 of file spline.h.

+
14 {
+
15
+
16 fNp = N;
+
17 fKstep = 0; // sort this out
+ +
19 fXmin = tfXmin;
+
20 fXmax = tfXmax;
+
21 fX = tfX;
+
22 fY = tfY;
+
23 fB = tfB;
+
24 fC = tfC;
+
25 fD = tfD;
+
26 };
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
double * fY
Definition spline.h:70
+
double fDelta
Definition spline.h:65
+
int fNp
Definition spline.h:62
+
double * fC
Definition spline.h:72
+
int fKstep
Definition spline.h:63
+
double * fD
Definition spline.h:73
+
double * fB
Definition spline.h:71
+
double fXmin
Definition spline.h:66
+
double fXmax
Definition spline.h:67
+
double * fX
Definition spline.h:69
+
+
+
+ +

◆ ~spline()

+ +
+
+ + + + + +
+ + + + + + + +
spline::~spline ()
+
+inline
+
+ +

Definition at line 28 of file spline.h.

+
29 {
+
30 };
+
+
+
+

Member Function Documentation

+ +

◆ Eval()

+ +
+
+ + + + + +
+ + + + + + + + +
CUDA_CALLABLE_MEMBER double spline::Eval (double x)
+
+inline
+
+ +

Definition at line 32 of file spline.h.

+
33 {
+
34 int klow=0;
+
35 if(x<=fXmin) klow=0;
+
36 else if(x>=fXmax) klow=fNp-1;
+
37 else
+
38 {
+
39 if(fKstep)
+
40 {
+
41 // Equidistant knots, use histogramming
+
42 klow = int((x-fXmin)/fDelta);
+
43 if (klow < fNp-1) klow = fNp-1;
+
44 }
+
45 else
+
46 {
+
47 int khig=fNp/*-1*/, khalf;
+
48 // Non equidistant knots, binary search
+
49 while(khig-klow>1)
+
50 if(x>fX[khalf=(klow+khig)/2]) klow=khalf;
+
51 else khig=khalf;
+
52 }
+
53 }
+
54 if(klow >= fNp-1) klow = fNp -2;
+
55
+
56 // Evaluate now
+
57 double dx=x-fX[klow];
+
58 return ( fY[klow] + dx * ( fB[klow] + dx * ( fC[klow] + dx * fD[klow] ) ) );
+
59 };
+
+
+
+

Member Data Documentation

+ +

◆ fB

+ +
+
+ + + + + +
+ + + + +
double* spline::fB
+
+protected
+
+ +

Definition at line 71 of file spline.h.

+ +
+
+ +

◆ fC

+ +
+
+ + + + + +
+ + + + +
double* spline::fC
+
+protected
+
+ +

Definition at line 72 of file spline.h.

+ +
+
+ +

◆ fD

+ +
+
+ + + + + +
+ + + + +
double* spline::fD
+
+protected
+
+ +

Definition at line 73 of file spline.h.

+ +
+
+ +

◆ fDelta

+ +
+
+ + + + + +
+ + + + +
double spline::fDelta
+
+protected
+
+ +

Definition at line 65 of file spline.h.

+ +
+
+ +

◆ fKstep

+ +
+
+ + + + + +
+ + + + +
int spline::fKstep
+
+protected
+
+ +

Definition at line 63 of file spline.h.

+ +
+
+ +

◆ fNp

+ +
+
+ + + + + +
+ + + + +
int spline::fNp
+
+protected
+
+ +

Definition at line 62 of file spline.h.

+ +
+
+ +

◆ fX

+ +
+
+ + + + + +
+ + + + +
double* spline::fX
+
+protected
+
+ +

Definition at line 69 of file spline.h.

+ +
+
+ +

◆ fXmax

+ +
+
+ + + + + +
+ + + + +
double spline::fXmax
+
+protected
+
+ +

Definition at line 67 of file spline.h.

+ +
+
+ +

◆ fXmin

+ +
+
+ + + + + +
+ + + + +
double spline::fXmin
+
+protected
+
+ +

Definition at line 66 of file spline.h.

+ +
+
+ +

◆ fY

+ +
+
+ + + + + +
+ + + + +
double* spline::fY
+
+protected
+
+ +

Definition at line 70 of file spline.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsplineBase-members.html b/classsplineBase-members.html new file mode 100644 index 00000000..f9b61175 --- /dev/null +++ b/classsplineBase-members.html @@ -0,0 +1,91 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
splineBase Member List
+
+
+ +

This is the complete list of members for splineBase, including all inherited members.

+ + + + + + +
nutypesplineBaseprotected
setupSplines()splineBaseinlinevirtual
splineBase(const char *spline, int nutype)splineBase
splinefilesplineBaseprotected
~splineBase()splineBasevirtual
+ + + + diff --git a/classsplineBase.html b/classsplineBase.html new file mode 100644 index 00000000..ef09145f --- /dev/null +++ b/classsplineBase.html @@ -0,0 +1,271 @@ + + + + + + + +MaCh3: splineBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
splineBase Class Reference
+
+
+ +

#include <splineBase.h>

+
+Inheritance diagram for splineBase:
+
+
+ + +splineInterface + +
+ + + + + + + + +

+Public Member Functions

 splineBase (const char *spline, int nutype)
 
virtual ~splineBase ()
 
virtual void setupSplines ()
 
+ + + + + +

+Protected Attributes

int nutype
 
TFilesplinefile
 
+

Detailed Description

+
+

Definition at line 7 of file splineBase.h.

+

Constructor & Destructor Documentation

+ +

◆ splineBase()

+ +
+
+ + + + + + + + + + + + + + + + + + +
splineBase::splineBase (const charspline,
int nutype 
)
+
+ +

Definition at line 5 of file splineBase.cpp.

+
6{
+
7 //splinefile = new TFile(name, "READ");
+ +
9 // setupSplines();
+
10
+
11}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
+
+
+ +

◆ ~splineBase()

+ +
+
+ + + + + +
+ + + + + + + +
splineBase::~splineBase ()
+
+virtual
+
+ +

Definition at line 13 of file splineBase.cpp.

+
14{
+
15
+
16}
+
+
+
+

Member Function Documentation

+ +

◆ setupSplines()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void splineBase::setupSplines ()
+
+inlinevirtual
+
+ +

Implements splineInterface.

+ +

Definition at line 12 of file splineBase.h.

+
12{};
+
+
+
+

Member Data Documentation

+ +

◆ nutype

+ +
+
+ + + + + +
+ + + + +
int splineBase::nutype
+
+protected
+
+ +

Definition at line 15 of file splineBase.h.

+ +
+
+ +

◆ splinefile

+ +
+
+ + + + + +
+ + + + +
TFile* splineBase::splinefile
+
+protected
+
+ +

Definition at line 16 of file splineBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsplineBase.png b/classsplineBase.png new file mode 100644 index 0000000000000000000000000000000000000000..94caa3fc022876318bb7a1c34410647ab384f8a8 GIT binary patch literal 509 zcmVvTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0004q zNkl|5=nN`;FDym z&+u&yk}m4T{>TowC-@|}QOJKl_x!mETZbIEGOK&{*}Tkq^G-hXsq5hR3)09MW!5^) z^7H+$=Wp^3*{zu;xkqd9i!n6T$W>=YwtrGg%cPRCE)M)-g|7bApZH1-sfYJ%`G4M@ z=l(bQXMM!o=e~ccKZ|cc|D5P$lDw)fggpYNZ+2Y?3}d;o|w_y7=V@Btv!-~&Lc!3Tg?gAV|){vF@UtfOF()J=mg zNwGf8za1Yk=Ejhu=Q_ieq>bjia~CxEb8)r~IdZ|d?!sSw!=Fj=(c&*ilWLS%F>JG} z3rRi#{#xJe<8^TUm-ji(FUH7J!-2g&c?cgpc;DdXm)xB{L6=?fe}CsI{x|!_H%zhO zJ}jkN=%2XpCFz>JmoG`LYw#s0)*JX{X8rU7og+_kI^7e_00000NkvXXu0mjf2t54~ literal 0 HcmV?d00001 diff --git a/classsplineFDBase-members.html b/classsplineFDBase-members.html new file mode 100644 index 00000000..9f75b532 --- /dev/null +++ b/classsplineFDBase-members.html @@ -0,0 +1,148 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
splineFDBase Member List
+
+
+ +

This is the complete list of members for splineFDBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AddSample(std::string SampleName, int BinningOpt, int DetID, std::vector< std::string > OscChanFileNames)splineFDBase
BinningOptssplineFDBaseprotected
BuildSampleIndexingArray(std::string SampleName)splineFDBase
calcWeights()splineFDBase
cleanUpMemory()splineFDBaseinline
CoeffIndexsplineFDBaseprotected
coeffindexvecsplineFDBaseprotected
CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0)splineFDBase
DetIDssplineFDBaseprotected
DimensionssplineFDBaseprotected
FillSampleArray(std::string SampleName, std::vector< std::string > OscChanFileNames)=0splineFDBasepure virtual
FindSplineBinning(std::string FileName, std::string SampleName)splineFDBase
FindSplineSegment()splineFDBase
FindUniqueModes()splineFDBase
getDimLabel(int BinningOpt, int Axis)splineFDBase
GetEventSplines(std::string SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)=0splineFDBasepure virtual
getNDim(int BinningOpt)splineFDBase
getSampleIndex(std::string SampleName)splineFDBase
getSplineCoeff_SepMany(int splineindex, __float__ *&xArray, __float__ *&manyArray)splineFDBase
indexvecsplineFDBaseprotected
isflatarraysplineFDBaseprotected
isValidSplineIndex(std::string SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)splineFDBase
kCoeffB enum valuesplineFDBaseprotected
kCoeffC enum valuesplineFDBaseprotected
kCoeffD enum valuesplineFDBaseprotected
kCoeffY enum valuesplineFDBaseprotected
manycoeff_arrsplineFDBaseprotected
MonolithIndexsplineFDBaseprotected
MonolithSizesplineFDBaseprotected
nOscChanssplineFDBaseprotected
nSplineParamssplineFDBaseprotected
nUniqueSystssplineFDBaseprotected
PrepForReweight()splineFDBase
PrintArrayDetails(std::string SampleName)splineFDBase
PrintArrayDimension()splineFDBase
PrintBinning(TAxis *Axis)splineFDBase
PrintSampleDetails(std::string SampleName)splineFDBase
retPointer(int sample, int oscchan, int syst, int mode, int var1bin, int var2bin, int var3bin)splineFDBaseinline
SampleNamessplineFDBaseprotected
SetupSplines()splineFDBase
SetupSplines(int BinningOpt)splineFDBase
SplineBinningsplineFDBaseprotected
splineFDBase(covarianceXsec *xsec_=NULL)splineFDBase
SplineFileParPrefixNamessplineFDBaseprotected
SplineModeVecssplineFDBaseprotected
SplineParsIndexsplineFDBaseprotected
SplineSegmentCoeffs enum namesplineFDBaseprotected
splinevec_MonolithsplineFDBaseprotected
StripDuplicatedModes(std::vector< std::vector< int > > InputVector)=0splineFDBasepure virtual
TransferToMonolith()splineFDBase
uniquecoeffindicessplineFDBaseprotected
uniquesplinevec_MonolithsplineFDBaseprotected
UniqueSystCurrSegmentsplineFDBaseprotected
UniqueSystIndicessplineFDBaseprotected
UniqueSystNamessplineFDBaseprotected
UniqueSystNKnotssplineFDBaseprotected
UniqueSystXPtssplineFDBaseprotected
weightvec_MonolithsplineFDBaseprotected
xcoeff_arrsplineFDBaseprotected
xsecsplineFDBaseprotected
xVarArraysplineFDBaseprotected
~splineFDBase()splineFDBaseinlinevirtual
+ + + + diff --git a/classsplineFDBase.html b/classsplineFDBase.html new file mode 100644 index 00000000..ec5ff486 --- /dev/null +++ b/classsplineFDBase.html @@ -0,0 +1,2766 @@ + + + + + + + +MaCh3: splineFDBase Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
splineFDBase Class Referenceabstract
+
+
+ +

#include <splineFDBase.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 splineFDBase (covarianceXsec *xsec_=NULL)
 
virtual ~splineFDBase ()
 
void SetupSplines ()
 
void SetupSplines (int BinningOpt)
 
void FindUniqueModes ()
 
bool AddSample (std::string SampleName, int BinningOpt, int DetID, std::vector< std::string > OscChanFileNames)
 
void TransferToMonolith ()
 
void cleanUpMemory ()
 
virtual void FillSampleArray (std::string SampleName, std::vector< std::string > OscChanFileNames)=0
 
virtual std::vector< std::vector< int > > StripDuplicatedModes (std::vector< std::vector< int > > InputVector)=0
 
virtual std::vector< std::vector< int > > GetEventSplines (std::string SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)=0
 
std::vector< TAxis * > FindSplineBinning (std::string FileName, std::string SampleName)
 
int CountNumberOfLoadedSplines (bool NonFlat=false, int Verbosity=0)
 
int getNDim (int BinningOpt)
 
TString getDimLabel (int BinningOpt, int Axis)
 
int getSampleIndex (std::string SampleName)
 
bool isValidSplineIndex (std::string SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)
 
void BuildSampleIndexingArray (std::string SampleName)
 
void PrepForReweight ()
 
void getSplineCoeff_SepMany (int splineindex, __float__ *&xArray, __float__ *&manyArray)
 
void PrintBinning (TAxis *Axis)
 
void PrintSampleDetails (std::string SampleName)
 
void PrintArrayDetails (std::string SampleName)
 
void PrintArrayDimension ()
 
void FindSplineSegment ()
 
void calcWeights ()
 
const doubleretPointer (int sample, int oscchan, int syst, int mode, int var1bin, int var2bin, int var3bin)
 
+ + + +

+Protected Types

enum  SplineSegmentCoeffs { kCoeffY =0 +, kCoeffB =1 +, kCoeffC =2 +, kCoeffD =3 + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

covarianceXsecxsec
 
std::vector< std::string > SampleNames
 
std::vector< intBinningOpts
 
std::vector< intDimensions
 
std::vector< intDetIDs
 
std::vector< intnSplineParams
 
std::vector< intnOscChans
 
std::vector< std::vector< int > > SplineParsIndex
 
std::vector< std::vector< std::vector< TAxis * > > > SplineBinning
 
std::vector< std::vector< std::string > > SplineFileParPrefixNames
 
std::vector< std::vector< std::vector< int > > > SplineModeVecs
 
int nUniqueSysts
 
std::vector< std::string > UniqueSystNames
 
std::vector< intUniqueSystIndices
 
std::vector< intUniqueSystNKnots
 
std::vector< intUniqueSystCurrSegment
 
std::vector< std::vector< __float__ > > UniqueSystXPts
 
std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< int > > > > > > > indexvec
 
std::vector< intcoeffindexvec
 
std::vector< intuniquecoeffindices
 
std::vector< TSpline3_red * > splinevec_Monolith
 
int MonolithSize
 
int MonolithIndex
 
int CoeffIndex
 
__float__xVarArray
 
boolisflatarray
 
__float__xcoeff_arr
 
__float__manycoeff_arr
 
std::vector< doubleweightvec_Monolith
 
std::vector< intuniquesplinevec_Monolith
 
+

Detailed Description

+
+

Definition at line 13 of file splineFDBase.h.

+

Member Enumeration Documentation

+ +

◆ SplineSegmentCoeffs

+ +
+
+ + + + + +
+ + + + +
enum splineFDBase::SplineSegmentCoeffs
+
+protected
+
+ + + + + +
Enumerator
kCoeffY 
kCoeffB 
kCoeffC 
kCoeffD 
+ +

Definition at line 127 of file splineFDBase.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ splineFDBase()

+ +
+
+ + + + + + + + +
splineFDBase::splineFDBase (covarianceXsecxsec_ = NULL)
+
+ +

Definition at line 4 of file splineFDBase.cpp.

+
4 {
+
5//****************************************
+
6//
+
7 if (xsec_ == NULL) {
+
8 std::cerr << "Trying to create splineSKBase with NULL covariance object" << std::endl;
+
9 throw;
+
10 }
+
11 xsec = xsec_;
+
12
+
13 // Keep these in class scope, important for using 1 monolith/sample!
+
14 MonolithIndex=0; //Keeps track of the monolith index we're on when filling arrays (declared here so we can have multiple FillSampleArray calls)
+
15 CoeffIndex=0; //Keeps track of our indexing the coefficient arrays [x, ybcd]
+
16}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
covarianceXsec * xsec
+ + +
+
+
+ +

◆ ~splineFDBase()

+ +
+
+ + + + + +
+ + + + + + + +
virtual splineFDBase::~splineFDBase ()
+
+inlinevirtual
+
+ +

Definition at line 20 of file splineFDBase.h.

+
20{};
+
+
+
+

Member Function Documentation

+ +

◆ AddSample()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool splineFDBase::AddSample (std::string SampleName,
int BinningOpt,
int DetID,
std::vector< std::string > OscChanFileNames 
)
+
+ +

Definition at line 19 of file splineFDBase.cpp.

+
22{
+
23 SampleNames.push_back(SampleName);
+
24 BinningOpts.push_back(BinningOpt);
+
25 Dimensions.push_back(getNDim(BinningOpt));
+
26 DetIDs.push_back(DetID);
+
27
+ +
29 std::cout << "FOund " << nSplineParam << " spline parameters" << std::endl;
+
30 nSplineParams.push_back(nSplineParam);
+
31
+
32 std::cout << "Filling with GetSplineParsIndexFromDetID" << std::endl;
+ + +
35
+
36 std::cout << "Filling with GetFDSplineFileParsNamesFromDetID" << std::endl;
+ + +
39
+ + +
42
+
43 int nOscChan = OscChanFileNames.size();
+
44 nOscChans.push_back(nOscChan);
+
45
+
46 PrintSampleDetails(SampleName);
+
47
+
48 std::vector<std::vector<TAxis *>> SampleBinning(nOscChan);
+
49 for (int iOscChan = 0; iOscChan < nOscChan; iOscChan++)
+
50 {
+
51 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+ +
53 }
+
54 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+ +
56
+
57 BuildSampleIndexingArray(SampleName);
+
58 PrintArrayDetails(SampleName);
+
59 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+
60
+ +
62 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+
63
+
64 return true;
+
65}
+
const std::vector< int > GetSplineParsIndexFromDetID(int DetID)
+
const std::vector< std::vector< int > > GetSplineModeVecFromDetID(int DetID)
+
const std::vector< std::string > GetFDSplineFileParsNamesFromDetID(int DetID)
+
int GetNumSplineParamsFromDetID(int DetID)
+
std::vector< TAxis * > FindSplineBinning(std::string FileName, std::string SampleName)
+
std::vector< std::vector< int > > SplineParsIndex
+
std::vector< std::vector< std::string > > SplineFileParPrefixNames
+
virtual std::vector< std::vector< int > > StripDuplicatedModes(std::vector< std::vector< int > > InputVector)=0
+
std::vector< std::vector< std::vector< int > > > SplineModeVecs
+
std::vector< int > Dimensions
+
std::vector< std::string > SampleNames
+
void PrintSampleDetails(std::string SampleName)
+
std::vector< int > nOscChans
+
int getNDim(int BinningOpt)
+
void BuildSampleIndexingArray(std::string SampleName)
+
std::vector< int > nSplineParams
+
std::vector< int > BinningOpts
+
virtual void FillSampleArray(std::string SampleName, std::vector< std::string > OscChanFileNames)=0
+
std::vector< int > DetIDs
+
void PrintArrayDetails(std::string SampleName)
+
std::vector< std::vector< std::vector< TAxis * > > > SplineBinning
+
+
+
+ +

◆ BuildSampleIndexingArray()

+ +
+
+ + + + + + + + +
void splineFDBase::BuildSampleIndexingArray (std::string SampleName)
+
+ +

Definition at line 297 of file splineFDBase.cpp.

+
301{
+
302 int iSample = getSampleIndex(SampleName);
+ + +
305 std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<int>>>>>> indexvec_OscChan;
+
306 for (int iOscChan = 0; iOscChan < nOscChannels; iOscChan++)
+
307 { // Loop over oscillation channels
+
308 std::vector<std::vector<std::vector<std::vector<std::vector<int >>>>> indexvec_Syst;
+
309 for (int iSyst = 0; iSyst < nSplineSysts; iSyst++)
+
310 { // Loop over systematics
+
311 std::vector<std::vector<std::vector<std::vector<int >>>> indexvec_Mode;
+ +
313 for (int iMode = 0; iMode < nModesInSyst; iMode++)
+
314 { // Loop over modes
+
315 std::vector<std::vector<std::vector<int >>> indexvec_Var1;
+
316 for (int iVar1 = 0; iVar1 < (SplineBinning[iSample][iOscChan][0])->GetNbins(); iVar1++)
+
317 { // Loop over first dimension
+
318 std::vector<std::vector<int >> indexvec_Var2;
+
319 for (int iVar2 = 0; iVar2 < (SplineBinning[iSample][iOscChan][1])->GetNbins(); iVar2++)
+
320 { // Loop over second dimension
+
321 std::vector<int> indexvec_Var3;
+
322 for (int iVar3 = 0; iVar3 < (SplineBinning[iSample][iOscChan][2])->GetNbins(); iVar3++)
+
323 { // Loop over third dimension
+
324 indexvec_Var3.push_back(0); //Don't start counting yet!
+
325 } // end iVar3 loop
+
326 indexvec_Var2.push_back(indexvec_Var3);
+
327 } // end iVar2 loop
+
328 indexvec_Var1.push_back(indexvec_Var2);
+
329 } // end iVar1 loop
+
330 indexvec_Mode.push_back(indexvec_Var1);
+
331 } // end of iMode loop
+
332 indexvec_Syst.push_back(indexvec_Mode);
+
333 } // end of iOscChan loop
+ +
335 } // end of iSyst loop
+
336 indexvec.push_back(indexvec_OscChan);
+
337}
+
int getSampleIndex(std::string SampleName)
+
std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< int > > > > > > > indexvec
+
+
+
+ +

◆ calcWeights()

+ +
+
+ + + + + + + +
void splineFDBase::calcWeights ()
+
+ +

Definition at line 258 of file splineFDBase.cpp.

+
260{
+
261 #ifdef MULTITHREAD
+
262 #pragma omp parallel for// schedule(dynamic)
+
263 #endif
+
264 for (unsigned int iCoeff = 0; iCoeff < uniquecoeffindices.size(); iCoeff++)
+
265 {
+
266
+ + + +
270
+ +
272
+
273 // These are what we can extract from the TSpline3
+ + + + + +
279
+
280 // Get the variation for this reconfigure for the ith parameter
+ +
282 // The Delta(x)
+
283 __float__ dx = xvar - x;
+
284
+
285 //Speedy 1% time boost https://en.cppreference.com/w/c/numeric/math/fma (see ND code!)
+
286 __float__ weight = fmaf(dx, fmaf(dx, fmaf(dx, d, c), b), y);
+
287 //This is the speedy version of writing dx^3+b*dx^2+c*dx+d
+
288
+
289
+
290 if(weight<0){weight=0;} //Stops is getting negative weights
+
291
+ +
293 }
+
294}
+
#define __float__
Definition Structs.h:13
+
std::vector< double > weightvec_Monolith
+
__float__ * manycoeff_arr
+
__float__ * xcoeff_arr
+
std::vector< int > uniquecoeffindices
+
std::vector< int > UniqueSystCurrSegment
+
std::vector< int > uniquesplinevec_Monolith
+
std::vector< int > coeffindexvec
+
__float__ * xVarArray
+
+
+
+ +

◆ cleanUpMemory()

+ +
+
+ + + + + +
+ + + + + + + +
void splineFDBase::cleanUpMemory ()
+
+inline
+
+ +

Definition at line 31 of file splineFDBase.h.

+
31 {
+
32 //Call once everything's been allocated in samplePDFSKBase, cleans up junk from memory!
+
33 //Not a huge saving but it's better than leaving everything up to the compiler
+
34 std::cout<<"Cleaning up spline memory"<<std::endl;
+
35
+
36 indexvec.clear();
+
37 indexvec.shrink_to_fit();
+ +
39 SplineFileParPrefixNames.shrink_to_fit();
+
40 SplineBinning.clear();
+
41 SplineBinning.shrink_to_fit();
+
42 SplineParsIndex.clear();
+
43 SplineParsIndex.shrink_to_fit();
+
44 UniqueSystNames.clear();
+
45 UniqueSystNames.shrink_to_fit();
+
46 splinevec_Monolith.clear();
+
47 splinevec_Monolith.shrink_to_fit();
+
48 delete isflatarray;
+
49 }
+
std::vector< TSpline3_red * > splinevec_Monolith
+
bool * isflatarray
+
std::vector< std::string > UniqueSystNames
+
+
+
+ +

◆ CountNumberOfLoadedSplines()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int splineFDBase::CountNumberOfLoadedSplines (bool NonFlat = false,
int Verbosity = 0 
)
+
+ +

Definition at line 461 of file splineFDBase.cpp.

+
463{
+
464 int SampleCounter_NonFlat = 0;
+
465 int SampleCounter_All = 0;
+
466 int FullCounter_NonFlat = 0;
+
467 int FullCounter_All = 0;
+
468
+
469 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
470 { // Loop over systematics
+ + +
473 std::string SampleName = SampleNames[iSample];
+
474 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
475 { // Loop over oscillation channels
+
476 for (unsigned int iSyst = 0; iSyst < indexvec[iSample][iOscChan].size(); iSyst++)
+
477 { // Loop over systematics
+
478 for (unsigned int iMode = 0; iMode < indexvec[iSample][iOscChan][iSyst].size(); iMode++)
+
479 { // Loop over modes
+
480 for (unsigned int iVar1 = 0; iVar1 < indexvec[iSample][iOscChan][iSyst][iMode].size(); iVar1++)
+
481 { // Loop over first dimension
+
482 for (unsigned int iVar2 = 0; iVar2 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1].size(); iVar2++)
+
483 { // Loop over second dimension
+
484 for (unsigned int iVar3 = 0; iVar3 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1][iVar2].size(); iVar3++)
+
485 { // Loop over third dimension
+
486 if (isValidSplineIndex(SampleName, iOscChan, iSyst, iMode, iVar1, iVar2, iVar3))
+
487 {
+ + +
490 {
+ +
492 }
+ +
494 }
+
495 }
+
496 }
+
497 }
+
498 }
+
499 }
+
500 }
+
501 if (Verbosity > 0)
+
502 {
+
503 std::cout << std::setw(10) << SampleNames[iSample] << " has " << std::setw(10) << SampleCounter_All << " splines, of which " << std::setw(10) << SampleCounter_NonFlat << " are not flat" << std::endl;
+
504 }
+
505
+ + +
508 }
+
509
+
510 if (Verbosity > 0)
+
511 {
+
512 std::cout << "Total number of splines loaded:" << FullCounter_All << std::endl;
+
513 std::cout << "Total number of non-flat splines loaded:" << FullCounter_NonFlat << std::endl;
+
514 }
+
515
+
516 if (NonFlat)
+
517 {
+
518 return FullCounter_NonFlat;
+
519 }
+
520 else
+
521 {
+
522 return FullCounter_All;
+
523 }
+
524}
+
bool isValidSplineIndex(std::string SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)
+
+
+
+ +

◆ FillSampleArray()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void splineFDBase::FillSampleArray (std::string SampleName,
std::vector< std::string > OscChanFileNames 
)
+
+pure virtual
+
+ +
+
+ +

◆ FindSplineBinning()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector< TAxis * > splineFDBase::FindSplineBinning (std::string FileName,
std::string SampleName 
)
+
+ +

Definition at line 340 of file splineFDBase.cpp.

+
342{
+
343 std::vector<TAxis *> ReturnVec;
+
344 int iSample=getSampleIndex(SampleName);
+
345
+
346 TFile *File = new TFile(FileName.c_str());
+
347 if (!File || File->IsZombie())
+
348 {
+
349 std::cerr << "File " << FileName << " not found" << std::endl;
+
350 std::cerr << "This is caused by something here! "<<__FILE__<<" : "<<__LINE__<<std::endl;
+
351 throw;
+
352 }
+
353
+
354 std::cout << "Finding binning for:" << std::endl;
+
355 std::cout << FileName << std::endl;
+
356
+
357 bool isHist2D = false;
+
358 bool isHist3D = false;
+
359
+
360 TH2F *Hist2D = NULL;
+
361 TH3F *Hist3D = NULL;
+
362
+
363 TObject *Obj = File->Get("dev_tmp_0_0");
+
364 if (!Obj)
+
365 {
+
366 std::cerr << "Error: could not find dev_tmp_0_0 in spline file. Spline binning will not be set!" << std::endl;
+
367 std::cerr << "FileName: " << FileName << std::endl;
+
368 std::cerr << "0_0, I'm here! "<<__FILE__<<" : "<<__LINE__<<std::endl;
+
369 throw;
+
370 }
+
371
+
372 if (Obj->IsA() == TH2F::Class())
+
373 {
+
374 isHist2D = true;
+
375 }
+
376 if (Obj->IsA() == TH3F::Class())
+
377 {
+
378 isHist3D = true;
+
379 }
+
380
+
381 if (isHist2D && isHist3D)
+
382 {
+
383 std::cerr << "Object inherits from both TH2D and TH3D - Odd" << std::endl;
+
384 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
385 throw;
+
386 }
+
387 if (!isHist2D && !isHist3D)
+
388 {
+
389 std::cerr << "Object doesn't inherit from either TH2D and TH3D - Odd A" << std::endl;
+
390 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
391 throw;
+
392 }
+
393
+
394 if (isHist2D)
+
395 {
+
396 if (Dimensions[iSample] != 2)
+
397 {
+
398 std::cerr << "Trying to load a 2D spline template when nDim=" << Dimensions[iSample] << std::endl;
+
399 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
400 throw;
+
401 }
+
402 Hist2D = (TH2F *)File->Get("dev_tmp_0_0");
+
403 }
+
404 if (isHist3D)
+
405 {
+
406 if (Dimensions[iSample] != 3)
+
407 {
+
408 std::cerr << "Trying to load a 3D spline template when nDim=" << Dimensions[iSample] << std::endl;
+
409 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
410 throw;
+
411 }
+
412 Hist3D = (TH3F *)File->Get("dev_tmp_0_0");
+
413 }
+
414
+
415 int nDummyBins = 1;
+
416 double *DummyEdges = new double[2];
+
417 DummyEdges[0] = -1e15;
+
418 DummyEdges[1] = 1e15;
+ +
420
+
421 if (Dimensions[iSample] == 2)
+
422 {
+
423 ReturnVec.push_back((TAxis *)(Hist2D->GetXaxis())->Clone());
+
424 ReturnVec.push_back((TAxis *)(Hist2D->GetYaxis())->Clone());
+
425 ReturnVec.push_back((TAxis *)(DummyAxis)->Clone());
+
426 }
+
427 else if (Dimensions[iSample] == 3)
+
428 {
+
429 ReturnVec.push_back((TAxis *)(Hist3D->GetXaxis())->Clone());
+
430 ReturnVec.push_back((TAxis *)(Hist3D->GetYaxis())->Clone());
+
431 ReturnVec.push_back((TAxis *)(Hist3D->GetZaxis())->Clone());
+
432 }
+
433 else
+
434 {
+
435 std::cerr << "Number of dimensions not valid! Given:" << Dimensions[iSample] << std::endl;
+
436 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
437 throw;
+
438 }
+
439
+
440 for (unsigned int iAxis = 0; iAxis < ReturnVec.size(); iAxis++)
+
441 {
+
442 std::cout << "Stored Var " << iAxis << " (" << getDimLabel(BinningOpts[iSample], iAxis) << ") Spline Binning for sample " << SampleNames[iSample] << ":" << std::endl;
+ +
444 }
+
445
+
446 //This could be NULL if 2D
+
447 if(isHist2D){
+
448 delete Hist2D;
+
449 } else {
+
450 delete Hist3D;
+
451 }
+
452
+
453 File->Close();
+
454 delete DummyAxis;
+
455 return ReturnVec;
+
456}
+
TString getDimLabel(int BinningOpt, int Axis)
+
void PrintBinning(TAxis *Axis)
+
+
+
+ +

◆ FindSplineSegment()

+ +
+
+ + + + + + + +
void splineFDBase::FindSplineSegment ()
+
+ +

Definition at line 178 of file splineFDBase.cpp.

+
180{
+
181 //HI okay let's try this, we delete+refill a new array which we'll fill with x-s for our segment
+
182 #ifdef MULTITHREAD
+
183 #pragma omp parallel //for schedule(dynamic)
+
184 #endif
+
185 for (int iSyst = 0; iSyst < nUniqueSysts; iSyst++)
+
186 {
+
187 int nPoints = UniqueSystNKnots[iSyst];
+
188 std::vector<__float__> xArray = UniqueSystXPts[iSyst];
+
189
+
190 // Get the variation for this reconfigure for the ith parameter
+ +
192
+ + +
195
+
196 //Rather than starting from 0 everytime, let's use what we know!
+ +
198 int kHigh = nPoints - 1;
+
199 // If the variation is below the lowest saved spline point
+
200 if(segment<nPoints-1 && segment>=0 && xvar>=xArray[segment] && xvar<xArray[segment+1]) //We're still in the same place!
+
201 {
+
202 continue;
+
203 }
+
204 //Now check to see if it's the segment below it
+ +
206 {
+
207 segment--;
+
208 }
+
209 //Okay what if we're above it
+ +
211 {
+
212 segment++;
+
213 }
+
214 else if (xvar <= xArray[0])
+
215 {
+
216 segment=0;
+
217 // If the variation is above the highest saved spline point
+
218 }
+
219 else if (xvar >= xArray[nPoints - 1])
+
220 {
+
221 // Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651
+
222 segment = kHigh;
+
223 // If the variation is between the maximum and minimum, perform a binary search
+
224 }
+
225 //Now we resort to binary search!
+
226 else
+
227 {
+
228 segment=0;
+
229 // The top point we've got
+
230 int kHalf = 0;
+
231 // While there is still a difference in the points (we haven't yet found the segment)
+
232 // This is a binary search, incrementing segment and decrementing kHalf until we've found the segment
+
233 while (kHigh - segment > 1)
+
234 {
+
235 // Increment the half-step
+
236 kHalf = (segment + kHigh) / 2;
+
237 // If our variation is above the kHalf, set the segment to kHalf
+
238 if (xvar > xArray[kHalf])
+
239 {
+
240 segment = kHalf;
+
241 // Else move kHigh down
+
242 }
+
243 else
+
244 {
+
245 kHigh = kHalf;
+
246 }
+
247 } // End the while: we've now done our binary search
+
248 } // End the else: we've now found our point
+
249 if (segment >= nPoints - 1 && nPoints > 1){
+
250 segment = nPoints - 2;}
+
251 // Save the segment for the ith parameter
+ +
253 }
+
254 // std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+
255}
+
double calcReWeight(const int bin)
+ +
std::vector< int > UniqueSystNKnots
+
std::vector< int > UniqueSystIndices
+
std::vector< std::vector< __float__ > > UniqueSystXPts
+
+
+
+ +

◆ FindUniqueModes()

+ +
+
+ + + + + + + +
void splineFDBase::FindUniqueModes ()
+
+ +
+
+ +

◆ getDimLabel()

+ +
+
+ + + + + + + + + + + + + + + + + + +
TString splineFDBase::getDimLabel (int BinningOpt,
int Axis 
)
+
+ +

Definition at line 775 of file splineFDBase.cpp.

+
777{
+
778 if (Axis < 0 || Axis >= 3)
+
779 {
+
780 std::cerr << "Invalid axis:" << Axis << std::endl;
+
781 throw;
+
782 }
+
783
+
784 std::string ReturnVal;
+
785 switch (BinningOpt)
+
786 {
+
787 case 0:
+
788 if (Axis == 0)
+
789 ReturnVal = "ETrue";
+
790 if (Axis == 1)
+
791 ReturnVal = "Erec";
+
792 if (Axis == 2)
+
793 ReturnVal = "Dummy";
+
794 break;
+
795 case 1:
+
796 if (Axis == 0)
+
797 ReturnVal = "ETrue";
+
798 if (Axis == 1)
+
799 ReturnVal = "Momentum";
+
800 if (Axis == 2)
+
801 ReturnVal = "Theta";
+
802 break;
+
803 case 2:
+
804 if (Axis == 0)
+
805 ReturnVal = "ETrue";
+
806 if (Axis == 1)
+
807 ReturnVal = "Erec";
+
808 if (Axis == 2)
+
809 ReturnVal = "Theta";
+
810 break;
+
811 case 3:
+
812 if (Axis == 0)
+
813 ReturnVal = "ETrue";
+
814 if (Axis == 1)
+
815 ReturnVal = "Erec";
+
816 if (Axis == 2)
+
817 ReturnVal = "Q2";
+
818 break;
+
819 case 4:
+
820 if (Axis == 0)
+
821 ReturnVal = "ETrue";
+
822 if (Axis == 1)
+
823 ReturnVal = "Momentum";
+
824 if (Axis == 2)
+
825 ReturnVal = "CosineZenith";
+
826 break;
+
827 default:
+
828 std::cout << "Unrecognised BinningOpt = " << BinningOpt << std::endl;
+
829 throw;
+
830 }
+
831
+
832 return ReturnVal;
+
833}
+
+
+
+ +

◆ GetEventSplines()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::vector< std::vector< int > > splineFDBase::GetEventSplines (std::string SampleName,
int iOscChan,
int EventMode,
double Var1Val,
double Var2Val,
double Var3Val 
)
+
+pure virtual
+
+ +
+
+ +

◆ getNDim()

+ +
+
+ + + + + + + + +
int splineFDBase::getNDim (int BinningOpt)
+
+ +

Definition at line 748 of file splineFDBase.cpp.

+
750{
+
751 int ReturnVal = -1;
+
752
+
753 switch (BinningOpt)
+
754 {
+
755 case 0:
+
756 ReturnVal = 2;
+
757 break;
+
758 case 1:
+
759 case 2:
+
760 case 3:
+
761 case 4:
+
762 ReturnVal = 3;
+
763 break;
+
764 default:
+
765 std::cout << "Unrecognised BinningOpt = " << BinningOpt << std::endl;
+
766 throw;
+
767 }
+
768
+
769 return ReturnVal;
+
770}
+
+
+
+ +

◆ getSampleIndex()

+ +
+
+ + + + + + + + +
int splineFDBase::getSampleIndex (std::string SampleName)
+
+ +

Definition at line 836 of file splineFDBase.cpp.

+
836 {
+
837 int SampleIndex = -1;
+
838 for (unsigned int iSample = 0; iSample < SampleNames.size(); iSample++)
+
839 {
+
840 if (SampleName == SampleNames[iSample])
+
841 {
+ +
843 }
+
844 }
+
845 if (SampleIndex == -1)
+
846 {
+
847 std::cerr << "Sample name not found : "<<SampleName << std::endl;
+
848 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
849 throw;
+
850 }
+
851 return SampleIndex;
+
852}
+
+
+
+ +

◆ getSplineCoeff_SepMany()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void splineFDBase::getSplineCoeff_SepMany (int splineindex,
__float__ *& xArray,
__float__ *& manyArray 
)
+
+ +

Definition at line 700 of file splineFDBase.cpp.

+
700 {
+
701
+
702 // Initialise all arrays to 1.0
+
703 int nPoints;
+
704 //No point evalutating a flat spline
+
705
+
706 nPoints = splinevec_Monolith[splineindex]->GetNp();
+
707
+
708 for (int i = 0; i < nPoints; i++) {
+
709 xArray[i] = 1.0;
+
710 for (int j = 0; j < 4; j++) {
+
711 manyArray[i*4+j] = 1.0;
+
712 }
+
713 }
+
714
+
715 for(int i=0; i<nPoints; i++){
+
716 // Spline coefficients to be
+
717 __float__ x = -999.99;
+
718 __float__ y = -999.99;
+
719 __float__ b = -999.99;
+
720 __float__ c = -999.99;
+
721 __float__ d = -999.99;
+
722 splinevec_Monolith[splineindex]->GetCoeff(i, x, y, b, c, d);
+
723 //Let's save some memory and store them as floats! (It's a surprise tool that will help with GPU later)
+
724 xArray[i]=__float__(x);
+
725
+
726 //Might as well copy ND here and
+
727 xArray[i] = __float__(x);
+
728 manyArray[i*4] = __float__(y); // 4 because manyArray stores y,b,c,d
+
729 manyArray[i*4+1] = __float__(b);
+
730 manyArray[i*4+2] = __float__(c);
+
731 manyArray[i*4+3] = __float__(d);
+
732
+
733 if((xArray[i] == -999) | (manyArray[i*4] == -999) | (manyArray[i*4+1] == -999) | (manyArray[i*4+2] == -999) | (manyArray[i*4+3] == -999)){
+
734 std::cerr << "*********** Bad params in getSplineCoeff_SepMany() ************"<<std::endl;
+
735 std::cerr << "pre cast to __float__ (x, y, b, c, d) = "<<x<<", "<<y<<", "<<b<<", "<<c<<", "<<d<<std::endl;
+
736 std::cerr << "post cast to float (x, y, b, c, d) = "<<xArray[i]<<", "<<manyArray[i*4]<<", "<<manyArray[i*4+1]<<", "<<manyArray[i*4+2]<<", "<<manyArray[i*4+3]<<std::endl;
+
737 std::cerr<<__FILE__<<"::"<<__LINE__<<std::endl;
+
738 std::cerr << "***************************************************************"<<std::endl;
+
739 throw;
+
740 }
+
741 }
+
742 //We now clean up the splines!
+ + +
745}
+
+
+
+ +

◆ isValidSplineIndex()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool splineFDBase::isValidSplineIndex (std::string SampleName,
int iSyst,
int iOscChan,
int iMode,
int iVar1,
int iVar2,
int iVar3 
)
+
+ +

Definition at line 943 of file splineFDBase.cpp.

+
945{
+
946
+
947 int iSample=getSampleIndex(SampleName);
+
948 bool isValid = true;
+
949
+
950 if (iSample < 0 || iSample >= (int)indexvec.size())
+
951 {
+
952 std::cerr << "Sample index is invalid! 0 <= Index < " << indexvec.size() << std::endl;
+
953 isValid = false;
+
954 }
+
955
+ +
957 {
+
958 std::cerr << "OscChan index is invalid! 0 <= Index < " << indexvec[iSample].size() << std::endl;
+
959 isValid = false;
+
960 }
+
961
+ +
963 {
+
964 std::cerr << "Syst index is invalid! 0 <= Index < " << indexvec[iSample][iOscChan].size() << std::endl;
+
965 isValid = false;
+
966 }
+
967
+ +
969 {
+
970 std::cerr << "Mode index is invalid! 0 <= Index < " << indexvec[iSample][iOscChan][iSyst].size() << std::endl;
+
971 isValid = false;
+
972 }
+
973
+ +
975 {
+
976 std::cerr << "Var1 index is invalid! 0 <= Index < " << indexvec[iSample][iOscChan][iSyst][iMode].size() << std::endl;
+
977 isValid = false;
+
978 }
+
979
+ +
981 {
+
982 std::cerr << "Var2 index is invalid! 0 <= Index < " << indexvec[iSample][iOscChan][iSyst][iMode][iVar1].size() << std::endl;
+
983 isValid = false;
+
984 }
+
985
+ +
987 {
+
988 std::cerr << "Var3 index is invalid! 0 <= Index < " << indexvec[iSample][iOscChan][iSyst][iMode][iVar1][iVar2].size() << std::endl;
+
989 isValid = false;
+
990 }
+
991
+
992 if (!isValid)
+
993 {
+
994 std::cerr << "Given iSample:" << iSample << std::endl;
+
995 std::cerr << "Given iOscChan:" << iOscChan << std::endl;
+
996 std::cerr << "Given iSyst:" << iSyst << std::endl;
+
997 std::cerr << "Given iMode:" << iMode << std::endl;
+
998 std::cerr << "Given iVar1:" << iVar1 << std::endl;
+
999 std::cerr << "Given iVar2:" << iVar2 << std::endl;
+
1000 std::cerr << "Given iVar3:" << iVar3 << std::endl;
+
1001 std::cerr << "Come visit me at : "<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1002 throw;
+
1003 }
+
1004
+
1005 return true;
+
1006}
+
int size
+
+
+
+ +

◆ PrepForReweight()

+ +
+
+ + + + + + + +
void splineFDBase::PrepForReweight ()
+
+ +

Definition at line 527 of file splineFDBase.cpp.

+
529{
+
530
+
531 std::vector<TSpline3_red *> UniqueSystSplines;
+
532
+
533 // DB Find all the Unique systs across each sample and oscillation channel
+
534 // This assumes that each occurence of the same systematic spline has the same knot spacing
+
535 // Which is a reasonable assumption for the current implementation of spline evaluations
+
536 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
537 { // Loop over systematics
+
538 for (unsigned int iSyst = 0; iSyst < indexvec[iSample][0].size(); iSyst++)
+
539 { // Loop over systematics
+ +
541 bool FoundSyst = false;
+
542
+
543 //ETA - this always seems to be empty to begin with??
+
544 //so this loop never gets used?
+
545 for (unsigned int iFoundSyst = 0; iFoundSyst < UniqueSystNames.size(); iFoundSyst++)
+
546 {
+ +
548 {
+
549 FoundSyst = true;
+
550 }
+
551 }
+
552 if (!FoundSyst)
+
553 {
+
554 UniqueSystNames.push_back(SystName);
+
555
+
556 bool FoundNonFlatSpline = false;
+
557 //This is all basically to check that you have some resposne from a spline
+
558 //systematic somewhere
+
559 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
560 { // Loop over oscillation channels
+
561 for (unsigned int iMode = 0; iMode < indexvec[iSample][iOscChan][iSyst].size(); iMode++)
+
562 { // Loop over modes
+
563 for (unsigned int iVar1 = 0; iVar1 < indexvec[iSample][iOscChan][iSyst][iMode].size(); iVar1++)
+
564 { // Loop over first dimension
+
565 for (unsigned int iVar2 = 0; iVar2 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1].size(); iVar2++)
+
566 { // Loop over second dimension
+
567 for (unsigned int iVar3 = 0; iVar3 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1][iVar2].size(); iVar3++)
+
568 { // Loop over third dimension
+ + +
571 {
+ + +
574 FoundNonFlatSpline = true;
+
575 }
+ +
577 {
+
578 break;
+
579 }
+
580 }//3D loop end
+ +
582 {
+
583 break;
+
584 }
+
585 }//2D loop end
+ +
587 {
+
588 break;
+
589 }
+
590 }//1D loop end
+ +
592 {
+
593 break;
+
594 }
+
595 }//mode loop end
+ +
597 {
+
598 break;
+
599 }
+
600 }//osc loop end
+
601
+ +
603 {
+
604 std::cerr << SystName << " syst has no response in sample " << iSample << std::endl;
+
605 std::cerr << "Whilst this isn't neccessarily a problem, it seems odd" << std::endl;
+
606 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
607 continue;
+
608 }
+
609 }
+
610 }//Syst loop end
+
611 }
+
612
+
613
+ +
615
+
616 // DB Find the number of splines knots which assumes each instance of the syst has the same number of knots
+ + + + +
621
+
622 for (int iSpline = 0; iSpline < nUniqueSysts; iSpline++)
+
623 {
+ + +
626 for (int iKnot = 0; iKnot < UniqueSystNKnots[iSpline]; iKnot++)
+
627 {
+
628 double xPoint = -999;
+
629 double yPoint = -999;
+ +
631 if (xPoint == -999 || yPoint == -999)
+
632 {
+
633 std::cerr << "Something has gone wrong in the knot finding" << std::endl;
+
634 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
635 throw;
+
636 }
+ +
638 }
+ + +
641 }
+
642
+
643
+
644 std::cout << "nUniqueSysts:" << nUniqueSysts << " -----------------" << std::endl;
+
645 std::cout << std::endl;
+
646
+
647 std::cout << std::setw(15) << "Spline Index"
+
648 << " | " << std::setw(20) << "Syst Name"
+
649 << " | " << std::setw(6) << "nKnots" << std::endl;
+
650 std::cout << "-----------------------------------------------------" << std::endl;
+ +
652 {
+
653 std::cout << std::setw(15) << iUniqueSyst << " | " << std::setw(20) << UniqueSystNames[iUniqueSyst] << " | " << std::setw(6) << UniqueSystNKnots[iUniqueSyst] << std::endl;
+
654 }
+
655 std::cout << std::endl;
+
656
+
657
+
658
+
659 //ETA
+
660 //Isn't this just doing what CountNumberOfLoadedSplines() does?
+ +
662 int nCombinations_All = 0;
+
663 // DB Now actually loop over splines to determine which are all NULL
+
664 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
665 { // Loop over systematics
+
666 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
667 { // Loop over oscillation channels
+
668 for (unsigned int iSyst = 0; iSyst < indexvec[iSample][iOscChan].size(); iSyst++)
+
669 { // Loop over systematics
+
670 for (unsigned int iMode = 0; iMode < indexvec[iSample][iOscChan][iSyst].size(); iMode++)
+
671 { // Loop over modes
+
672 //bool isFlat = false;
+
673 for (unsigned int iVar1 = 0; iVar1 < indexvec[iSample][iOscChan][iSyst][iMode].size(); iVar1++)
+
674 { // Loop over first dimension
+
675 for (unsigned int iVar2 = 0; iVar2 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1].size(); iVar2++)
+
676 { // Loop over second dimension
+
677 for (unsigned int iVar3 = 0; iVar3 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1][iVar2].size(); iVar3++)
+
678 { // Loop over third dimension
+ + +
681 {
+ +
683 } else{
+ + +
686 }
+
687 }
+
688 }
+
689 }
+
690 }
+
691 }
+
692 }
+
693 }
+
694 // We need to grab the maximum number of knots
+
695
+
696 std::cout << "Number of combinations of Sample, OscChan, Syst and Mode which have entirely flat response:" << nCombinations_FlatSplines << " / " << nCombinations_All << std::endl;
+
697}
+
+
+
+ +

◆ PrintArrayDetails()

+ +
+
+ + + + + + + + +
void splineFDBase::PrintArrayDetails (std::string SampleName)
+
+ +

Definition at line 875 of file splineFDBase.cpp.

+
877{
+
878 int iSample = getSampleIndex(SampleName);
+
879 int nOscChans = indexvec[iSample].size();
+
880 std::cout << "Sample " << iSample << " has " << nOscChans << " oscillation channels" << std::endl;
+
881
+
882 for (int iOscChan = 0; iOscChan < nOscChans; iOscChan++)
+
883 {
+
884 int nSysts = indexvec[iSample][iOscChan].size();
+
885 std::cout << "Oscillation channel " << iOscChan << " has " << nSysts << " systematics" << std::endl;
+
886 }
+
887}
+
+
+
+ +

◆ PrintArrayDimension()

+ +
+
+ + + + + + + +
void splineFDBase::PrintArrayDimension ()
+
+ +

Definition at line 890 of file splineFDBase.cpp.

+
892{
+
893 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+
894 std::cout << "Array dimensions.." << std::endl;
+
895 std::cout << std::endl;
+
896
+
897 std::cout << std::setw(20) << "nSamples:" << indexvec.size() << std::endl;
+
898 std::cout << std::endl;
+
899
+
900 std::cout << std::setw(20) << "nOscChans:";
+
901 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
902 {
+
903 std::cout << indexvec[iSample].size() << " ";
+
904 }
+
905 std::cout << std::endl;
+
906 std::cout << std::endl;
+
907
+
908 std::cout << std::setw(20) << "nSysts:" << std::endl;
+
909 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
910 {
+
911 std::cout << "\t"
+
912 << "Sample:" << iSample << "\t";
+
913 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
914 {
+
915 std::cout << indexvec[iSample][iOscChan].size() << " ";
+
916 }
+
917 std::cout << std::endl;
+
918 }
+
919 std::cout << std::endl;
+
920
+
921 std::cout << std::setw(20) << "nModes:" << std::endl;
+
922 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
923 {
+
924 std::cout << "\t"
+
925 << "Sample:" << iSample << "\t"
+
926 << "--------------------------" << std::endl;
+
927 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
928 {
+
929 std::cout << "\t\t"
+
930 << "OscChan:" << iOscChan << "\t";
+
931 for (unsigned int iSyst = 0; iSyst < indexvec[iSample][iOscChan].size(); iSyst++)
+
932 {
+
933 std::cout << indexvec[iSample][iOscChan][iSyst].size() << " ";
+
934 }
+
935 std::cout << std::endl;
+
936 }
+
937 std::cout << std::endl;
+
938 }
+
939 std::cout << "#----------------------------------------------------------------------------------------------------------------------------------#" << std::endl;
+
940}
+
+
+
+ +

◆ PrintBinning()

+ +
+
+ + + + + + + + +
void splineFDBase::PrintBinning (TAxisAxis)
+
+ +

Definition at line 1009 of file splineFDBase.cpp.

+
1011{
+
1012 const int NBins = Axis->GetNbins();
+
1013 const double *BinEdges = Axis->GetXbins()->GetArray();
+
1014
+
1015 std::cout << "\t";
+
1016 for (int iBin = 0; iBin < (NBins + 1); iBin++)
+
1017 {
+
1018 std::cout << BinEdges[iBin] << " ";
+
1019 }
+
1020 std::cout << std::endl;
+
1021}
+
+
+
+ +

◆ PrintSampleDetails()

+ +
+
+ + + + + + + + +
void splineFDBase::PrintSampleDetails (std::string SampleName)
+
+ +

Definition at line 855 of file splineFDBase.cpp.

+
857{
+
858
+
859 int iSample = getSampleIndex(SampleName);
+
860
+
861 std::cout << "Details about sample: " << std::setw(20) << SampleNames[iSample] << std::endl;
+
862 std::cout << "\t" << std::setw(35) << "Binning Option"
+
863 << ":" << BinningOpts[iSample] << std::endl;
+
864 std::cout << "\t" << std::setw(35) << "Dimension"
+
865 << ":" << Dimensions[iSample] << std::endl;
+
866 std::cout << "\t" << std::setw(35) << "DetID"
+
867 << ":" << DetIDs[iSample] << std::endl;
+
868 std::cout << "\t" << std::setw(35) << "Number of Spline Params"
+
869 << ":" << nSplineParams[iSample] << std::endl;
+
870 std::cout << "\t" << std::setw(35) << "Number of Oscillation Channels"
+
871 << ":" << nOscChans[iSample] << std::endl;
+
872}
+
+
+
+ +

◆ retPointer()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
const double * splineFDBase::retPointer (int sample,
int oscchan,
int syst,
int mode,
int var1bin,
int var2bin,
int var3bin 
)
+
+inline
+
+ +

Definition at line 74 of file splineFDBase.h.

+
74 {
+
75 int index = indexvec[sample][oscchan][syst][mode][var1bin][var2bin][var3bin];
+
76 return &weightvec_Monolith[index];
+
77 }
+
+
+
+ +

◆ SetupSplines() [1/2]

+ +
+
+ + + + + + + +
void splineFDBase::SetupSplines ()
+
+ +
+
+ +

◆ SetupSplines() [2/2]

+ +
+
+ + + + + + + + +
void splineFDBase::SetupSplines (int BinningOpt)
+
+ +
+
+ +

◆ StripDuplicatedModes()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector< std::vector< int > > splineFDBase::StripDuplicatedModes (std::vector< std::vector< int > > InputVector)
+
+pure virtual
+
+ +
+
+ +

◆ TransferToMonolith()

+ +
+
+ + + + + + + +
void splineFDBase::TransferToMonolith ()
+
+ +

Definition at line 68 of file splineFDBase.cpp.

+
70{
+
71 std::cout << "TRANSFERING TO MONOLITH!!" << std::endl;
+
72 //FindUniqueModes();
+ + +
75
+ +
77 std::cerr<<"Something's gone wrong when we tried to get the size of your monolith"<<std::endl;
+
78 std::cout << "MonolishSize is " << MonolithSize << std::endl;
+
79 std::cout << "MonolithIndex is " << MonolithIndex << std::endl;
+
80 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
81 throw;
+
82 }
+ + +
85 isflatarray = new bool[MonolithSize];
+
86
+
87
+ + +
90 for (unsigned int iSample = 0; iSample < indexvec.size(); iSample++)
+
91 { // Loop over sample
+
92 for (unsigned int iOscChan = 0; iOscChan < indexvec[iSample].size(); iOscChan++)
+
93 { // Loop over oscillation channels
+
94 for (unsigned int iSyst = 0; iSyst < indexvec[iSample][iOscChan].size(); iSyst++)
+
95 { // Loop over systematics
+
96 for (unsigned int iMode = 0; iMode < indexvec[iSample][iOscChan][iSyst].size(); iMode++)
+
97 { // Loop over modes
+
98 for (unsigned int iVar1 = 0; iVar1 < indexvec[iSample][iOscChan][iSyst][iMode].size(); iVar1++)
+
99 { // Loop over first dimension
+
100 for (unsigned int iVar2 = 0; iVar2 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1].size(); iVar2++)
+
101 { // Loop over second dimension
+
102 for (unsigned int iVar3 = 0; iVar3 < indexvec[iSample][iOscChan][iSyst][iMode][iVar1][iVar2].size(); iVar3++)
+
103 {
+ + +
106
+
107 bool foundUniqueSpline = false;
+ +
109 {
+ +
111 {
+ +
113 foundUniqueSpline = true;
+
114 }
+
115 }//unique syst loop end
+
116
+ +
118 {
+
119 std::cerr << "Unique spline index not found" << std::endl;
+
120 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
121 throw;
+
122 }
+
123 int splineKnots;
+ +
125 //std::cout << "Looking at splineindex " << splineindex << "and found a non-flat spline (wahoo!)" << std::endl;
+ + +
128
+
129 //Now to fill up our coefficient arrayss
+ + +
132
+ + +
135
+
136 #ifdef MULTITHREAD
+
137 #pragma omp parallel for
+
138 #endif
+
139 for(int i=0; i<splineKnots; i++){
+
140
+
141 if(tmpXCoeffArr[i]==-999){
+
142 std::cerr<<"ERROR : looks like we've got a bad X, index = "<<i<<std::endl;
+
143 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
144 throw;
+
145 }
+ +
147
+
148 for(int j=0; j<4; j++){
+
149 if(tmpManyCoeffArr[i*4+j]==-999){
+
150 std::cerr<<"Bad ybcd, index : "<<i<<", "<<j<<std::endl;
+
151 std::cerr<<"Param Values : "<<tmpManyCoeffArr[i*4]<<", "<<tmpManyCoeffArr[i*4+1]<<", "<<tmpManyCoeffArr[i*4+2]<<", "<<tmpManyCoeffArr[i*4+3]<<std::endl;
+
152 std::cerr << __FILE__<<" : "<<__LINE__<<std::endl;
+
153 throw;
+
154 }
+ +
156 }
+
157 }
+
158 delete tmpXCoeffArr;
+
159 delete tmpManyCoeffArr;
+
160 }
+
161 else {
+ +
163 }
+
164 }//3d loop end
+
165 }//2d loop end
+
166 }//1d loop end
+
167 }//mode loop end
+
168 }//syst2 loop end
+
169 }//osc loop end
+
170 }//syst1 loop end
+
171
+
172 return;
+
173}
+
int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0)
+
void PrepForReweight()
+
void getSplineCoeff_SepMany(int splineindex, __float__ *&xArray, __float__ *&manyArray)
+ +
+
+
+

Member Data Documentation

+ +

◆ BinningOpts

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::BinningOpts
+
+protected
+
+ +

Definition at line 85 of file splineFDBase.h.

+ +
+
+ +

◆ CoeffIndex

+ +
+
+ + + + + +
+ + + + +
int splineFDBase::CoeffIndex
+
+protected
+
+ +

Definition at line 115 of file splineFDBase.h.

+ +
+
+ +

◆ coeffindexvec

+ +
+
+ + + + + +
+ + + + +
std::vector<int > splineFDBase::coeffindexvec
+
+protected
+
+ +

Definition at line 108 of file splineFDBase.h.

+ +
+
+ +

◆ DetIDs

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::DetIDs
+
+protected
+
+ +

Definition at line 87 of file splineFDBase.h.

+ +
+
+ +

◆ Dimensions

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::Dimensions
+
+protected
+
+ +

Definition at line 86 of file splineFDBase.h.

+ +
+
+ +

◆ indexvec

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< std::vector< int > > > > > > > splineFDBase::indexvec
+
+protected
+
+ +

Definition at line 107 of file splineFDBase.h.

+ +
+
+ +

◆ isflatarray

+ +
+
+ + + + + +
+ + + + +
bool* splineFDBase::isflatarray
+
+protected
+
+ +

Definition at line 119 of file splineFDBase.h.

+ +
+
+ +

◆ manycoeff_arr

+ +
+
+ + + + + +
+ + + + +
__float__* splineFDBase::manycoeff_arr
+
+protected
+
+ +

Definition at line 121 of file splineFDBase.h.

+ +
+
+ +

◆ MonolithIndex

+ +
+
+ + + + + +
+ + + + +
int splineFDBase::MonolithIndex
+
+protected
+
+ +

Definition at line 114 of file splineFDBase.h.

+ +
+
+ +

◆ MonolithSize

+ +
+
+ + + + + +
+ + + + +
int splineFDBase::MonolithSize
+
+protected
+
+ +

Definition at line 113 of file splineFDBase.h.

+ +
+
+ +

◆ nOscChans

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::nOscChans
+
+protected
+
+ +

Definition at line 89 of file splineFDBase.h.

+ +
+
+ +

◆ nSplineParams

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::nSplineParams
+
+protected
+
+ +

Definition at line 88 of file splineFDBase.h.

+ +
+
+ +

◆ nUniqueSysts

+ +
+
+ + + + + +
+ + + + +
int splineFDBase::nUniqueSysts
+
+protected
+
+ +

Definition at line 99 of file splineFDBase.h.

+ +
+
+ +

◆ SampleNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> splineFDBase::SampleNames
+
+protected
+
+ +

Definition at line 84 of file splineFDBase.h.

+ +
+
+ +

◆ SplineBinning

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector< std::vector<TAxis*> > > splineFDBase::SplineBinning
+
+protected
+
+ +

Definition at line 92 of file splineFDBase.h.

+ +
+
+ +

◆ SplineFileParPrefixNames

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<std::string> > splineFDBase::SplineFileParPrefixNames
+
+protected
+
+ +

Definition at line 93 of file splineFDBase.h.

+ +
+
+ +

◆ SplineModeVecs

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector< std::vector<int> > > splineFDBase::SplineModeVecs
+
+protected
+
+ +

Definition at line 97 of file splineFDBase.h.

+ +
+
+ +

◆ SplineParsIndex

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<int> > splineFDBase::SplineParsIndex
+
+protected
+
+ +

Definition at line 91 of file splineFDBase.h.

+ +
+
+ +

◆ splinevec_Monolith

+ +
+
+ + + + + +
+ + + + +
std::vector< TSpline3_red* > splineFDBase::splinevec_Monolith
+
+protected
+
+ +

Definition at line 111 of file splineFDBase.h.

+ +
+
+ +

◆ uniquecoeffindices

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::uniquecoeffindices
+
+protected
+
+ +

Definition at line 109 of file splineFDBase.h.

+ +
+
+ +

◆ uniquesplinevec_Monolith

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::uniquesplinevec_Monolith
+
+protected
+
+ +

Definition at line 124 of file splineFDBase.h.

+ +
+
+ +

◆ UniqueSystCurrSegment

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::UniqueSystCurrSegment
+
+protected
+
+ +

Definition at line 103 of file splineFDBase.h.

+ +
+
+ +

◆ UniqueSystIndices

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::UniqueSystIndices
+
+protected
+
+ +

Definition at line 101 of file splineFDBase.h.

+ +
+
+ +

◆ UniqueSystNames

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> splineFDBase::UniqueSystNames
+
+protected
+
+ +

Definition at line 100 of file splineFDBase.h.

+ +
+
+ +

◆ UniqueSystNKnots

+ +
+
+ + + + + +
+ + + + +
std::vector<int> splineFDBase::UniqueSystNKnots
+
+protected
+
+ +

Definition at line 102 of file splineFDBase.h.

+ +
+
+ +

◆ UniqueSystXPts

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<__float__> > splineFDBase::UniqueSystXPts
+
+protected
+
+ +

Definition at line 104 of file splineFDBase.h.

+ +
+
+ +

◆ weightvec_Monolith

+ +
+
+ + + + + +
+ + + + +
std::vector<double> splineFDBase::weightvec_Monolith
+
+protected
+
+ +

Definition at line 123 of file splineFDBase.h.

+ +
+
+ +

◆ xcoeff_arr

+ +
+
+ + + + + +
+ + + + +
__float__* splineFDBase::xcoeff_arr
+
+protected
+
+ +

Definition at line 120 of file splineFDBase.h.

+ +
+
+ +

◆ xsec

+ +
+
+ + + + + +
+ + + + +
covarianceXsec* splineFDBase::xsec
+
+protected
+
+ +

Definition at line 81 of file splineFDBase.h.

+ +
+
+ +

◆ xVarArray

+ +
+
+ + + + + +
+ + + + +
__float__* splineFDBase::xVarArray
+
+protected
+
+ +

Definition at line 118 of file splineFDBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsplineInterface-members.html b/classsplineInterface-members.html new file mode 100644 index 00000000..64de8f70 --- /dev/null +++ b/classsplineInterface-members.html @@ -0,0 +1,87 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
splineInterface Member List
+
+
+ +

This is the complete list of members for splineInterface, including all inherited members.

+ + +
setupSplines()=0splineInterfacepure virtual
+ + + + diff --git a/classsplineInterface.html b/classsplineInterface.html new file mode 100644 index 00000000..af0b7597 --- /dev/null +++ b/classsplineInterface.html @@ -0,0 +1,137 @@ + + + + + + + +MaCh3: splineInterface Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
splineInterface Class Referenceabstract
+
+
+ +

#include <splineInterface.h>

+
+Inheritance diagram for splineInterface:
+
+
+ + +splineBase + +
+ + + + +

+Public Member Functions

virtual void setupSplines ()=0
 
+

Detailed Description

+
+

Definition at line 8 of file splineInterface.h.

+

Member Function Documentation

+ +

◆ setupSplines()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void splineInterface::setupSplines ()
+
+pure virtual
+
+ +

Implemented in splineBase.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsplineInterface.png b/classsplineInterface.png new file mode 100644 index 0000000000000000000000000000000000000000..efdb4336fdfa12c2dcd41fe233925a309cbcd7d0 GIT binary patch literal 516 zcmV+f0{i`mP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0004x zNkl~NC@36bo^Cb6ZEq*aZrW!fx?8x>e#k5Q+d)C2$f6UP3-@1v<^sx2tzAgXH z`}5rYX8o*>xclALPxWWSc4A$u?8OiV*NXQN-15?lu}9; zghZ0vH25SL>*IWzgQN?)e~J zM(Gv9Hp4m~=_BB;`R#sQ8|Qy{pY!};42?A$*!z>4@X>?!4KBa@zw;-kvP=H&&wR!I zX8rhrDOTK@C6x>H6Bj;7UeovTN%D0KK1s%U13#sd`soMqSx!oC5bFZ~0000 + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
stretch Member List
+
+
+ +

This is the complete list of members for stretch, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
astretchprotected
accProbstretchprotected
addSamplePDF(samplePDFBase *sample)stretch
addSystObj(covarianceBase *cov, bool isOsc=false)stretch
auto_savestretchprotected
chainLengthstretchprotected
clockstretchprotected
currentparstretchprotected
debugstretchprotected
debugFilestretchprotected
debugIntervalstretchprotected
getA()stretchinline
getGpuFit()stretchinline
getOscOnly()stretchinline
gpu_fitstretchprotected
init(std::string name, bool verbose)stretchprotected
logLCurrstretchprotected
logLPropstretchprotected
Nstretchprotected
nwalkstretchprotected
oscstretchprotected
osc_llhstretchprotected
osc_onlystretchprotected
oscbarstretchprotected
outputFilestretchprotected
outTreestretchprotected
printInitialState()stretch
proposedparstretchprotected
randomstretchprotected
runStretch()stretch
sample_llhstretchprotected
samplesstretchprotected
save_nominalstretchprotected
setA(double A)stretchinline
setChainLength(int chainl)stretch
setGpuFit(bool yes)stretchinline
setOscOnly(bool yes)stretchinline
stepstretchprotected
stretch(bool verbose=false)stretch
stretch(const char *name="output.root", int nwalkers=100, bool verbose=false)stretch
syst_llhstretchprotected
systematicsstretchprotected
~stretch()stretchvirtual
+ + + + diff --git a/classstretch.html b/classstretch.html new file mode 100644 index 00000000..284cea46 --- /dev/null +++ b/classstretch.html @@ -0,0 +1,1576 @@ + + + + + + + +MaCh3: stretch Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <stretch.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 stretch (bool verbose=false)
 
 stretch (const char *name="output.root", int nwalkers=100, bool verbose=false)
 
virtual ~stretch ()
 
void addSamplePDF (samplePDFBase *sample)
 
void addSystObj (covarianceBase *cov, bool isOsc=false)
 
void runStretch ()
 
void setChainLength (int chainl)
 
void printInitialState ()
 
void setOscOnly (bool yes)
 
bool getOscOnly ()
 
void setGpuFit (bool yes)
 
bool getGpuFit ()
 
void setA (double A)
 
double getA ()
 
+ + + +

+Protected Member Functions

void init (std::string name, bool verbose)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::vector< samplePDFBase * > samples
 
std::vector< covarianceBase * > systematics
 
std::vector< std::vector< std::vector< double > > > currentpar
 
std::vector< std::vector< std::vector< double > > > proposedpar
 
int osc
 
int oscbar
 
int chainLength
 
int nwalk
 
double a
 
int N
 
int step
 
std::vector< doublelogLCurr
 
std::vector< doublelogLProp
 
float osc_llh
 
floatsample_llh
 
floatsyst_llh
 
double accProb
 
TStopwatch clock
 
bool debug
 
int debugInterval
 
ofstream debugFile
 
TRandom3random
 
TFileoutputFile
 
TTreeoutTree
 
int auto_save
 
bool save_nominal
 
bool osc_only
 
bool gpu_fit
 
+

Detailed Description

+
+

Definition at line 17 of file stretch.h.

+

Constructor & Destructor Documentation

+ +

◆ stretch() [1/2]

+ +
+
+ + + + + + + + +
stretch::stretch (bool verbose = false)
+
+ +

Definition at line 6 of file stretch.cpp.

+
7{
+
8 random = new TRandom3(0);
+
9
+
10 init("output.root", verbose);
+
11 nwalk=100;
+
12}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
int nwalk
Definition stretch.h:56
+
TRandom3 * random
Definition stretch.h:78
+
void init(std::string name, bool verbose)
Definition stretch.cpp:23
+
+
+
+ +

◆ stretch() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
stretch::stretch (const charname = "output.root",
int nwalkers = 100,
bool verbose = false 
)
+
+ +

Definition at line 15 of file stretch.cpp.

+
16{
+
17 random = new TRandom3(0);
+ +
19
+ +
21}
+
+
+
+ +

◆ ~stretch()

+ +
+
+ + + + + +
+ + + + + + + +
stretch::~stretch ()
+
+virtual
+
+ +

Definition at line 58 of file stretch.cpp.

+
59{
+
60 if(debug)
+
61 debugFile.close();
+
62
+
63 outputFile->Close();
+
64}
+
bool debug
Definition stretch.h:73
+
TFile * outputFile
Definition stretch.h:81
+
ofstream debugFile
Definition stretch.h:75
+
+
+
+

Member Function Documentation

+ +

◆ addSamplePDF()

+ +
+
+ + + + + + + + +
void stretch::addSamplePDF (samplePDFBasesample)
+
+ +

Definition at line 71 of file stretch.cpp.

+
72{
+
73 samples.push_back(sample);
+
74}
+
std::vector< samplePDFBase * > samples
Definition stretch.h:46
+
+
+
+ +

◆ addSystObj()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void stretch::addSystObj (covarianceBasecov,
bool isOsc = false 
)
+
+ +

Definition at line 76 of file stretch.cpp.

+
77{
+
78 systematics.push_back(cov);
+
79 N+=cov->getSize();
+
80
+
81 if(save_nominal)
+
82 {
+
83 std::vector<double> vec = cov->getNominalArray();
+
84 int n = vec.size();
+
85 double *n_vec = new double[n];
+
86 for (int i = 0; i < n; ++i)
+
87 {
+
88 n_vec[i] = vec[i];
+
89 }
+ +
91 TString nameof = TString(cov->getName());
+
92 nameof = nameof.Append("_nom");
+
93 t_vec.Write(nameof);
+
94 }
+
95
+
96 std::vector< std::vector < double > > walkp;
+
97
+
98 for(int i=0; i<cov->getSize(); i++)
+
99 {
+
100 std::vector<double> ww;
+
101 for(int j=0; j<nwalk; j++)
+
102 ww.push_back(cov->getParProp(i));
+
103 walkp.push_back(ww);
+
104 }
+
105
+
106 currentpar.push_back(walkp);
+
107 proposedpar.push_back(walkp);
+
108
+
109 if(isOsc && osc==-1)
+
110 osc=systematics.size()-1;
+
111 else if(isOsc && oscbar==-1)
+
112 oscbar=systematics.size()-1;
+
113
+
114}
+
std::vector< std::vector< std::vector< double > > > currentpar
Definition stretch.h:50
+
std::vector< std::vector< std::vector< double > > > proposedpar
Definition stretch.h:51
+
bool save_nominal
Definition stretch.h:84
+
int oscbar
Definition stretch.h:53
+
int N
Definition stretch.h:58
+
std::vector< covarianceBase * > systematics
Definition stretch.h:49
+
int osc
Definition stretch.h:53
+
+
+
+ +

◆ getA()

+ +
+
+ + + + + +
+ + + + + + + +
double stretch::getA ()
+
+inline
+
+ +

Definition at line 40 of file stretch.h.

+
40{return a;}
+
double a
Definition stretch.h:57
+
+
+
+ +

◆ getGpuFit()

+ +
+
+ + + + + +
+ + + + + + + +
bool stretch::getGpuFit ()
+
+inline
+
+ +

Definition at line 37 of file stretch.h.

+
37{return gpu_fit;};
+
bool gpu_fit
Definition stretch.h:88
+
+
+
+ +

◆ getOscOnly()

+ +
+
+ + + + + +
+ + + + + + + +
bool stretch::getOscOnly ()
+
+inline
+
+ +

Definition at line 34 of file stretch.h.

+
34{return osc_only;};
+
bool osc_only
Definition stretch.h:87
+
+
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void stretch::init (std::string name,
bool verbose 
)
+
+protected
+
+ +

Definition at line 23 of file stretch.cpp.

+
24{
+
25 osc_only = false; // default value
+
26// accCount = 0;
+
27 auto_save = 100; // default to saving every 100 steps
+
28 save_nominal = true;
+
29// init_pos = false; //starting parameters should be thrown
+
30 osc=oscbar=-1;
+
31 N=0;//zero dimensions
+
32 a=2;//tuning parameter default value
+
33
+
34 // setup output file
+
35 outputFile = new TFile(outfile.c_str(), "RECREATE");
+
36// std::cout << gDirectory->pwd() << std::endl;
+
37 // setup output tree
+
38 outTree = new TTree("posteriors","Posterior Distributions");
+
39// outputFile->ls();
+
40
+
41 // fit summary and debug info
+
42 debug = verbose;
+
43
+
44 if(debug)
+
45 {
+
46 outfile += ".log";
+
47 //char *logname = ".log";
+
48 debugInterval = 50;
+
49 //strncat(outfile, logname, 4);
+
50 debugFile.open(outfile.c_str());
+
51 }
+
52
+
53 //clear samples, systs
+
54 samples.clear();
+
55 systematics.clear();
+
56}
+
int auto_save
Definition stretch.h:83
+
TTree * outTree
Definition stretch.h:82
+
int debugInterval
Definition stretch.h:74
+
+
+
+ +

◆ printInitialState()

+ +
+
+ + + + + + + +
void stretch::printInitialState ()
+
+ +
+
+ +

◆ runStretch()

+ +
+
+ + + + + + + +
void stretch::runStretch ()
+
+ +

Definition at line 123 of file stretch.cpp.

+
124{
+
125 // some checks
+
126// if(!samples.size())
+
127// {std::cerr << "no samples! Stopping MCMC" << std::endl; return;}
+
128
+
129
+
130 // if(debug)
+
131 // std::cout << "Passed initial checks " << osc << std::endl;
+
132
+
133 // prepare output tree
+
134 for(size_t i = 0; i < systematics.size(); i++)
+
135 {
+
136 for(size_t j=0; j<currentpar[i].size(); j++)
+
137 {
+
138 outTree->Branch(systematics[i]->GetParName(j).c_str(),"std::vector<double>",&currentpar[i][j]);
+
139 }
+
140 }
+
141
+
142// outTree->Branch("LogL",&logLCurr,"LogL/D");
+
143// outTree->Branch("accProb", &accProb,"accProb/D");
+
144 outTree->Branch("step", &step, "step/I");
+
145 outTree->Branch("LogL","std::vector<double>",&logLCurr);
+
146
+
147 // store individual likelihood components
+
148// sample_llh = new float[samples.size()];
+
149// syst_llh = new float[systematics.size()];
+
150
+
151// for (int i =0; i < samples.size(); ++i)
+
152// {
+
153// std::stringstream oss, oss2;
+
154// oss << "LogL_sample_" << i;
+
155// oss2 << oss.str() << "/F";
+
156// outTree->Branch(oss.str().c_str(), &sample_llh[i], oss2.str().c_str());
+
157
+
158// // For adding sample dependent branches to the posteriors tree
+
159// samples[i]->setMCMCBranches(outTree);
+
160// }
+
161
+
162// for (int i = 0; i < systematics.size(); ++i)
+
163// {
+
164// std::stringstream oss, oss2;
+
165// oss << "LogL_systematic_" << systematics[i]->getName();
+
166// oss2 << oss.str() << "/F";
+
167// outTree->Branch(oss.str().c_str(), &syst_llh[i], oss2.str().c_str());
+
168// }
+
169
+
170 std::cout << "\n---------------------starting MCMC---------------------" << std::endl;
+
171// outputFile->cd();
+
172// if(debug)
+
173// {
+
174// printInitialState();
+
175// debugFile << "-----starting MCMC-----" << std::endl;
+
176// }
+
177
+
178 // initial reweight and likelihood calc
+
179 std::vector<double> llh_init;
+
180
+
181
+
182 for(int k=0; k<nwalk; k++)
+
183 {
+
184 std::cout << k << std::endl;
+
185 llh_init.push_back(0);
+
186
+
187 for (size_t i = 0; i < systematics.size(); i++)
+
188 {
+
189 systematics[i]->throwNominal(false);
+
190 std::vector<double> startpar = systematics[i]->getNominalArray();
+
191 systematics[i]->setParameters(startpar);
+
192
+
193 for(int j=0; j<systematics[i]->getSize(); j++)
+
194 currentpar[i][j][k]=systematics[i]->getParProp(j);
+
195
+
196 systematics[i]->throwNominal();
+
197// systematics[i]->printPars();
+
198
+
199 llh_init[k] += systematics[i]->GetLikelihood();
+
200 if(debug)
+
201 debugFile << "LLH after " << systematics[i]->getName() << " " << llh_init[k] << std::endl;
+
202 }
+
203
+
204 for (size_t i = 0; i < samples.size(); i++)
+
205 {
+
206 if (osc!=-1)
+
207 {
+
208 samples[i]->reweight(((covarianceOsc*)systematics[osc])->getPropPars());
+
209 }
+
210 else
+
211 {
+
212 double* fake = NULL;
+
213 samples[i]->reweight(fake);
+
214 }
+
215
+
216 llh_init[k] += samples[i]->GetLikelihood();
+
217
+
218 if(debug)
+
219 debugFile << "LLH after sample " << i << " " << llh_init[k] << std::endl;
+
220 }
+
221
+
222 logLProp.push_back(llh_init[k]);
+
223 logLCurr.push_back(llh_init[k]);
+
224 }
+
225 outTree->Fill();
+
226
+
227 // begin!
+
228 clock.Start();
+
229 for(step = 0; step < chainLength; step++)
+
230 {
+
231 if(step%10==0)
+
232 std::cout << "At step: " << step << std::endl;
+
233
+
234 for(int nw=0; nw<nwalk; nw++)
+
235 {
+
236 logLProp[nw]=0;
+
237 bool done=false;
+
238 int ow;
+
239 while(!done)
+
240 {
+
241 ow=random->Integer(nwalk-1);
+
242 if(nw!=ow)
+
243 done=true;
+
244 }
+
245 double z=pow((a-1)*random->Uniform()+1,2)/a;
+
246 for(size_t i=0; i<systematics.size(); i++)
+
247 {
+
248 std::vector<double> pars(currentpar[i].size());
+
249 for(int j=0; j<systematics[i]->getSize(); j++)
+
250 {
+ +
252 if(!systematics[i]->isParameterFixed(j))
+
253 pars[j] = proposedpar[i][j][nw];
+
254 else
+
255 pars[j]=currentpar[i][j][nw];
+
256 // May have to put something in here for special cases, e.g. mass hierarchy
+
257 }
+
258 systematics[i]->setParameters(pars);
+
259// systematics[i]->printPars();
+
260 logLProp[nw] += systematics[i]->GetLikelihood();
+
261 }
+
262 for (size_t i = 0; i < samples.size(); i++)
+
263 {
+
264 if (osc!=-1)
+
265 {
+
266 samples[i]->reweight(((covarianceOsc*)systematics[osc])->getPropPars());
+
267 }
+
268 else
+
269 {
+
270 double* fake = NULL;
+
271 samples[i]->reweight(fake);
+
272 }
+
273
+
274 logLProp[nw] += samples[i]->GetLikelihood();
+
275 }
+
276 double q = pow(z,N-1)*exp(logLCurr[nw]-logLProp[nw]);
+
277// std::cout << nw << "," << ow << ": " << logLCurr[nw] << "," << logLProp[nw] << "," << z << "," << q << std::endl;
+
278 if(random->Uniform(0,1)>q)
+
279 {
+
280 for(size_t i=0; i<systematics.size(); i++)
+
281 for(int j=0; j<systematics[i]->getSize(); j++)
+ + +
284 }
+
285
+
286 }
+
287 for(int nw=0; nw<nwalk; nw++)
+
288 {
+
289 for(size_t i=0; i<systematics.size(); i++)
+
290 for(int j=0; j<systematics[i]->getSize(); j++)
+ + +
293 }
+
294 outTree->Fill();
+
295
+
296 // auto save
+
297 if (step % auto_save == auto_save - 1)
+
298 {
+
299 // if (debug)
+
300// std::cout << "Current Acceptance Rate: " << step / accept << std::endl;
+
301 outTree->AutoSave();
+
302 }
+
303 }
+
304 // finished MCMC //////////////////////////////
+
305
+
306 std::cout << "----------- finished MCMC --------------" << std::endl;
+
307 clock.Stop();
+
308 outTree->Write();
+
309
+
310}
+
int size
+ +
std::vector< double > logLProp
Definition stretch.h:63
+
std::vector< double > logLCurr
Definition stretch.h:62
+
int step
Definition stretch.h:61
+
TStopwatch clock
Definition stretch.h:72
+
int chainLength
Definition stretch.h:55
+
+
+
+ +

◆ setA()

+ +
+
+ + + + + +
+ + + + + + + + +
void stretch::setA (double A)
+
+inline
+
+ +

Definition at line 39 of file stretch.h.

+
39{a=A;}
+
+
+
+ +

◆ setChainLength()

+ +
+
+ + + + + + + + +
void stretch::setChainLength (int chainl)
+
+ +

Definition at line 66 of file stretch.cpp.

+
67{
+
68 chainLength = L;
+
69}
+
+
+
+ +

◆ setGpuFit()

+ +
+
+ + + + + +
+ + + + + + + + +
void stretch::setGpuFit (bool yes)
+
+inline
+
+ +

Definition at line 36 of file stretch.h.

+
36{gpu_fit = yes;};
+
+
+
+ +

◆ setOscOnly()

+ +
+
+ + + + + +
+ + + + + + + + +
void stretch::setOscOnly (bool yes)
+
+inline
+
+ +

Definition at line 33 of file stretch.h.

+
33{osc_only = yes;};
+
+
+
+

Member Data Documentation

+ +

◆ a

+ +
+
+ + + + + +
+ + + + +
double stretch::a
+
+protected
+
+ +

Definition at line 57 of file stretch.h.

+ +
+
+ +

◆ accProb

+ +
+
+ + + + + +
+ + + + +
double stretch::accProb
+
+protected
+
+ +

Definition at line 69 of file stretch.h.

+ +
+
+ +

◆ auto_save

+ +
+
+ + + + + +
+ + + + +
int stretch::auto_save
+
+protected
+
+ +

Definition at line 83 of file stretch.h.

+ +
+
+ +

◆ chainLength

+ +
+
+ + + + + +
+ + + + +
int stretch::chainLength
+
+protected
+
+ +

Definition at line 55 of file stretch.h.

+ +
+
+ +

◆ clock

+ +
+
+ + + + + +
+ + + + +
TStopwatch stretch::clock
+
+protected
+
+ +

Definition at line 72 of file stretch.h.

+ +
+
+ +

◆ currentpar

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector < std::vector <double > > > stretch::currentpar
+
+protected
+
+ +

Definition at line 50 of file stretch.h.

+ +
+
+ +

◆ debug

+ +
+
+ + + + + +
+ + + + +
bool stretch::debug
+
+protected
+
+ +

Definition at line 73 of file stretch.h.

+ +
+
+ +

◆ debugFile

+ +
+
+ + + + + +
+ + + + +
ofstream stretch::debugFile
+
+protected
+
+ +

Definition at line 75 of file stretch.h.

+ +
+
+ +

◆ debugInterval

+ +
+
+ + + + + +
+ + + + +
int stretch::debugInterval
+
+protected
+
+ +

Definition at line 74 of file stretch.h.

+ +
+
+ +

◆ gpu_fit

+ +
+
+ + + + + +
+ + + + +
bool stretch::gpu_fit
+
+protected
+
+ +

Definition at line 88 of file stretch.h.

+ +
+
+ +

◆ logLCurr

+ +
+
+ + + + + +
+ + + + +
std::vector< double > stretch::logLCurr
+
+protected
+
+ +

Definition at line 62 of file stretch.h.

+ +
+
+ +

◆ logLProp

+ +
+
+ + + + + +
+ + + + +
std::vector< double > stretch::logLProp
+
+protected
+
+ +

Definition at line 63 of file stretch.h.

+ +
+
+ +

◆ N

+ +
+
+ + + + + +
+ + + + +
int stretch::N
+
+protected
+
+ +

Definition at line 58 of file stretch.h.

+ +
+
+ +

◆ nwalk

+ +
+
+ + + + + +
+ + + + +
int stretch::nwalk
+
+protected
+
+ +

Definition at line 56 of file stretch.h.

+ +
+
+ +

◆ osc

+ +
+
+ + + + + +
+ + + + +
int stretch::osc
+
+protected
+
+ +

Definition at line 53 of file stretch.h.

+ +
+
+ +

◆ osc_llh

+ +
+
+ + + + + +
+ + + + +
float stretch::osc_llh
+
+protected
+
+ +

Definition at line 65 of file stretch.h.

+ +
+
+ +

◆ osc_only

+ +
+
+ + + + + +
+ + + + +
bool stretch::osc_only
+
+protected
+
+ +

Definition at line 87 of file stretch.h.

+ +
+
+ +

◆ oscbar

+ +
+
+ + + + + +
+ + + + +
int stretch::oscbar
+
+protected
+
+ +

Definition at line 53 of file stretch.h.

+ +
+
+ +

◆ outputFile

+ +
+
+ + + + + +
+ + + + +
TFile* stretch::outputFile
+
+protected
+
+ +

Definition at line 81 of file stretch.h.

+ +
+
+ +

◆ outTree

+ +
+
+ + + + + +
+ + + + +
TTree* stretch::outTree
+
+protected
+
+ +

Definition at line 82 of file stretch.h.

+ +
+
+ +

◆ proposedpar

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector < std::vector <double > > > stretch::proposedpar
+
+protected
+
+ +

Definition at line 51 of file stretch.h.

+ +
+
+ +

◆ random

+ +
+
+ + + + + +
+ + + + +
TRandom3* stretch::random
+
+protected
+
+ +

Definition at line 78 of file stretch.h.

+ +
+
+ +

◆ sample_llh

+ +
+
+ + + + + +
+ + + + +
float* stretch::sample_llh
+
+protected
+
+ +

Definition at line 66 of file stretch.h.

+ +
+
+ +

◆ samples

+ +
+
+ + + + + +
+ + + + +
std::vector<samplePDFBase*> stretch::samples
+
+protected
+
+ +

Definition at line 46 of file stretch.h.

+ +
+
+ +

◆ save_nominal

+ +
+
+ + + + + +
+ + + + +
bool stretch::save_nominal
+
+protected
+
+ +

Definition at line 84 of file stretch.h.

+ +
+
+ +

◆ step

+ +
+
+ + + + + +
+ + + + +
int stretch::step
+
+protected
+
+ +

Definition at line 61 of file stretch.h.

+ +
+
+ +

◆ syst_llh

+ +
+
+ + + + + +
+ + + + +
float* stretch::syst_llh
+
+protected
+
+ +

Definition at line 67 of file stretch.h.

+ +
+
+ +

◆ systematics

+ +
+
+ + + + + +
+ + + + +
std::vector<covarianceBase*> stretch::systematics
+
+protected
+
+ +

Definition at line 49 of file stretch.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classtune-members.html b/classtune-members.html new file mode 100644 index 00000000..5227e501 --- /dev/null +++ b/classtune-members.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: Member List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
tune Member List
+
+
+ +

This is the complete list of members for tune, including all inherited members.

+ + + + + + + + + +
init(TFile *file)tuneprivate
n_parstuneprivate
par_namestuneprivate
tune(std::string file)tune
tune_filetuneprivate
tune_parstuneprivate
tuneParameters(covarianceBase &cov_obj, char *prefix)tune
~tune()tunevirtual
+ + + + diff --git a/classtune.html b/classtune.html new file mode 100644 index 00000000..f9be9970 --- /dev/null +++ b/classtune.html @@ -0,0 +1,374 @@ + + + + + + + +MaCh3: tune Class Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <tune.h>

+ + + + + + + + +

+Public Member Functions

 tune (std::string file)
 
virtual ~tune ()
 
void tuneParameters (covarianceBase &cov_obj, char *prefix)
 
+ + + +

+Private Member Functions

void init (TFile *file)
 
+ + + + + + + + + +

+Private Attributes

TFiletune_file
 
floattune_pars
 
std::string * par_names
 
int n_pars
 
+

Detailed Description

+
+

Definition at line 12 of file tune.h.

+

Constructor & Destructor Documentation

+ +

◆ tune()

+ +
+
+ + + + + + + + +
tune::tune (std::string file)
+
+ +

Definition at line 3 of file tune.cpp.

+
4{
+
5 TFile *ff = new TFile(name.c_str(), "READ");
+
6 init(ff);
+
7 delete ff;
+
8}
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+
void init(TFile *file)
Definition tune.cpp:12
+
+
+
+ +

◆ ~tune()

+ +
+
+ + + + + +
+ + + + + + + +
tune::~tune ()
+
+virtual
+
+ +

Definition at line 10 of file tune.cpp.

+
10{}
+
+
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + +
void tune::init (TFilefile)
+
+private
+
+ +

Definition at line 12 of file tune.cpp.

+
13{
+
14 TVectorF *_tune_pars = (TVectorF*)file->Get("step_size");
+
15 TObjArray *_par_names = (TObjArray*)file->Get("par_names");
+
16 n_pars = _tune_pars->GetNrows();
+
17
+
18 tune_pars = new float[n_pars];
+
19 par_names = new std::string[n_pars];
+
20
+
21 for (int i = 0; i < n_pars; ++i)
+
22 {
+
23 tune_pars[i] = (*_tune_pars)(i);
+
24 par_names[i] = std::string(((TObjString*)_par_names->At(i))->GetName());
+
25 }
+
26}
+
float * tune_pars
Definition tune.h:23
+
std::string * par_names
Definition tune.h:24
+
int n_pars
Definition tune.h:25
+
+
+
+ +

◆ tuneParameters()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tune::tuneParameters (covarianceBasecov_obj,
charprefix 
)
+
+ +

Definition at line 28 of file tune.cpp.

+
29{
+
30 for (int i = 0; i < cov.getSize(); ++i)
+
31 {
+
32 char name[64];
+
33 sprintf(name, "%s%i", prefix, i);
+
34 for (int j = 0; j < n_pars; ++j)
+
35 {
+
36 if (strcmp(name, par_names[j].c_str()) == 0)
+
37 {
+
38 TF1 *p = new TF1(name,"TMath::Gaus(x,[0],[1])",-10,10);
+
39 p->SetParameters(0, tune_pars[j]);
+
40 //cov.setPropFunct(i, p);
+
41 std::cout << "- Set " << name << " tuning" << std::endl;
+
42 break;
+
43 }
+
44 if(j == n_pars-1)
+
45 {
+
46 std::cout << "- couldn't find custom tuning for " << name << std::endl;
+
47 }
+
48 }
+
49 }
+
50}
+
+
+
+

Member Data Documentation

+ +

◆ n_pars

+ +
+
+ + + + + +
+ + + + +
int tune::n_pars
+
+private
+
+ +

Definition at line 25 of file tune.h.

+ +
+
+ +

◆ par_names

+ +
+
+ + + + + +
+ + + + +
std::string* tune::par_names
+
+private
+
+ +

Definition at line 24 of file tune.h.

+ +
+
+ +

◆ tune_file

+ +
+
+ + + + + +
+ + + + +
TFile* tune::tune_file
+
+private
+
+ +

Definition at line 22 of file tune.h.

+ +
+
+ +

◆ tune_pars

+ +
+
+ + + + + +
+ + + + +
float* tune::tune_pars
+
+private
+
+ +

Definition at line 23 of file tune.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/covarianceBase_8cpp.html b/covarianceBase_8cpp.html new file mode 100644 index 00000000..8fdcb0bf --- /dev/null +++ b/covarianceBase_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceBase.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceBase.cpp File Reference
+
+ + + + + diff --git a/covarianceBase_8cpp_source.html b/covarianceBase_8cpp_source.html new file mode 100644 index 00000000..afb02301 --- /dev/null +++ b/covarianceBase_8cpp_source.html @@ -0,0 +1,2150 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceBase.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceBase.cpp
+
+
+Go to the documentation of this file.
1#include "covarianceBase.h"
+
2// ********************************************
+
+
3covarianceBase::covarianceBase(const char *name, const char *file) : inputFile(std::string(file)), pca(false) {
+
4// ********************************************
+
5
+
6 std::cout << "Constructing instance of covarianceBase" << std::endl;
+
7 init(name, file);
+
8 FirstPCAdpar = -999;
+
9 LastPCAdpar = -999;
+
10}
+
+
11// ********************************************
+
+
12covarianceBase::covarianceBase(std::vector<std::string> YAMLFile, double threshold, int FirstPCAdpar, int LastPCAdpar) : inputFile(YAMLFile[0].c_str()), pca(true), eigen_threshold(threshold), FirstPCAdpar(FirstPCAdpar), LastPCAdpar(LastPCAdpar) {
+
13// ********************************************
+
14
+
15 MACH3LOG_INFO("Constructing instance of covarianceBase using ");
+
16 for(unsigned int i = 0; i < YAMLFile.size(); i++)
+
17 {
+
18 MACH3LOG_INFO("{}", YAMLFile[i]);
+
19 }
+
20 MACH3LOG_INFO("as an input");
+
21
+
22 if (threshold < 0 || threshold >= 1) {
+
23 MACH3LOG_INFO("Principal component analysis but given the threshold for the principal components to be less than 0, or greater than (or equal to) 1. This will not work");
+
24 MACH3LOG_INFO("Please specify a number between 0 and 1");
+
25 MACH3LOG_INFO("You specified: ");
+
26 MACH3LOG_INFO("Am instead calling the usual non-PCA constructor...");
+
27 pca = false;
+
28 }
+
29
+
30 init(YAMLFile);
+
31 // Call the innocent helper function
+
32 if (pca) ConstructPCA();
+
33}
+
+
34
+
35// ********************************************
+
+
36covarianceBase::covarianceBase(const char *name, const char *file, int seed) : inputFile(std::string(file)), pca(false) {
+
37// ********************************************
+
38
+
39 #ifdef MULTITHREAD
+
40 if(seed != 0)
+
41 {
+
42 std::cerr<<"You have set seed to "<<seed<<std::endl;
+
43 std::cerr<<"And you are running with MULTITHREAD"<<std::endl;
+
44 std::cerr<<"TRandom for each thread will have same seed"<<std::endl;
+
45 std::cerr<<"This is fine if this was your intention"<<std::endl;
+
46 }
+
47 #endif
+
48
+
49 init(name, file);
+
50 FirstPCAdpar = -999;
+
51 LastPCAdpar = -999;
+
52
+
53}
+
+
54// ********************************************
+
+
55covarianceBase::covarianceBase(const char *name, const char *file, int seed, double threshold, int firstpcapar, int lastpcapar) : inputFile(std::string(file)), pca(true), eigen_threshold(threshold), FirstPCAdpar(firstpcapar), LastPCAdpar(lastpcapar) {
+
56// ********************************************
+
57
+
58 if (threshold < 0 || threshold >= 1) {
+
59 MACH3LOG_INFO("NOTE: {} {}", name, file);
+
60 MACH3LOG_INFO("Principal component analysis but given the threshold for the principal components to be less than 0, or greater than (or equal to) 1. This will not work");
+
61 MACH3LOG_INFO("Please specify a number between 0 and 1");
+
62 MACH3LOG_INFO("You specified: ");
+
63 MACH3LOG_INFO("Am instead calling the usual non-PCA constructor...");
+
64 pca = false;
+
65 }
+
66#ifdef MULTITHREAD
+
67 if(seed != 0)
+
68 {
+
69 std::cerr<<"You have set seed to "<<seed<<std::endl;
+
70 std::cerr<<"And you are running with MULTITHREAD"<<std::endl;
+
71 std::cerr<<"TRandom for each thread will have same seed"<<std::endl;
+
72 std::cerr<<"This is fine if this was your intention"<<std::endl;
+
73 }
+
74#endif
+
75 MACH3LOG_INFO("Constructing instance of covarianceBase");
+
76 init(name, file);
+
77 // Call the innocent helper function
+
78 if (pca) ConstructPCA();
+
79}
+
+
80
+
81// ********************************************
+
82//Destructor
+
+ +
84// ********************************************
+
85
+
86 _fPreFitValue.clear();
+
87 _fError.clear();
+
88 _fCurrVal.clear();
+
89 _fPropVal.clear();
+
90 _fLowBound.clear();
+
91 _fUpBound.clear();
+
92 _fIndivStepScale.clear();
+
93 _fFlatPrior.clear();
+
94
+
95 delete[] randParams;
+
96
+
97 if (covMatrix != NULL) delete covMatrix;
+
98 if (invCovMatrix != NULL) delete invCovMatrix;
+ +
100
+
101 for(int i = 0; i < size; i++)
+
102 {
+
103 delete[] InvertCovMatrix[i];
+
104 delete[] throwMatrixCholDecomp[i];
+
105 }
+
106 delete[] InvertCovMatrix;
+
107 delete[] throwMatrixCholDecomp;
+
108
+
109 const int nThreads = MaCh3Utils::GetNThreads();
+
110 for (int iThread = 0;iThread < nThreads; iThread++) delete random_number[iThread];
+
111 delete[] random_number;
+
112 if (throwMatrix != NULL) delete throwMatrix;
+
113}
+
+
114
+
115// ********************************************
+
+ +
117// ********************************************
+
118
+
119 // Check that covariance matrix exists
+
120 if (covMatrix == NULL) {
+
121 MACH3LOG_ERROR("Covariance matrix for {} has not yet been set", matrixName);
+
122 MACH3LOG_ERROR("Can not construct PCA until it is set");
+
123 throw;
+
124 }
+
125
+
126 //Check whether first and last pcadpar are set and if not just PCA everything
+
127 if(FirstPCAdpar == -999 || LastPCAdpar == -999){
+
128 if(FirstPCAdpar == -999 && LastPCAdpar == -999){
+
129 FirstPCAdpar = 0;
+
130 LastPCAdpar = covMatrix->GetNrows()-1;
+
131 }
+
132 else{
+
133 MACH3LOG_ERROR("You must either leave FirstPCAdpar and LastPCAdpar at -999 or set them both to something");
+
134 throw;
+
135 }
+
136 }
+
137 if(FirstPCAdpar > covMatrix->GetNrows()-1 || LastPCAdpar>covMatrix->GetNrows()-1){
+
138 MACH3LOG_ERROR("FirstPCAdpar and LastPCAdpar are higher than the number of parameters");
+
139 MACH3LOG_ERROR("first: {} last: {}, params: {}", FirstPCAdpar, LastPCAdpar, covMatrix->GetNrows()-1);
+
140 throw;
+
141 }
+
142 if(FirstPCAdpar < 0 || LastPCAdpar < 0){
+
143 MACH3LOG_ERROR("FirstPCAdpar and LastPCAdpar are less than 0 but not default -999");
+
144 MACH3LOG_ERROR("first: {} last: {}", FirstPCAdpar, LastPCAdpar);
+
145 throw;
+
146 }
+
147
+
148 MACH3LOG_INFO("PCAing parameters {} through {} inclusive", FirstPCAdpar, LastPCAdpar);
+
149 int numunpcadpars = covMatrix->GetNrows()-(LastPCAdpar-FirstPCAdpar+1);
+
150
+
151 TMatrixDSym submat(covMatrix->GetSub(FirstPCAdpar,LastPCAdpar,FirstPCAdpar,LastPCAdpar));
+
152
+
153 //CW: Calculate how many eigen values this threshold corresponds to
+
154 TMatrixDSymEigen eigen(submat);
+
155 eigen_values.ResizeTo(eigen.GetEigenValues());
+
156 eigen_vectors.ResizeTo(eigen.GetEigenVectors());
+
157 eigen_values = eigen.GetEigenValues();
+
158 eigen_vectors = eigen.GetEigenVectors();
+
159 double sum = 0;
+
160 // Loop over eigen values and sum them up
+
161 for (int i = 0; i < eigen_values.GetNrows(); ++i) {
+
162 sum += eigen_values(i);
+
163 }
+
164 nKeptPCApars=eigen_values.GetNrows();
+
165 //CW: Now go through again and see how many eigen values correspond to threshold
+
166 for (int i = 0; i < eigen_values.GetNrows(); ++i) {
+
167 // Get the relative size of the eigen value
+
168 double sig = eigen_values(i)/sum;
+
169 // Check against the threshold
+
170 if (sig < eigen_threshold) {
+
171 nKeptPCApars = i;
+
172 break;
+
173 }
+
174 }
+
175 npars = numunpcadpars+nKeptPCApars;
+
176 MACH3LOG_INFO("Threshold of {} on eigen values relative sum of eigen value ({}) generates {} eigen vectors, plus we have {} unpcad pars, for a total of {}", eigen_threshold, sum, nKeptPCApars, numunpcadpars, npars);
+
177
+
178 //DB Create array of correct size so eigen_values can be used in CorrelateSteps
+
179 eigen_values_master = std::vector<double>(npars,1.0);
+ +
181
+
182 // Now construct the transfer matrices
+
183 //These matrices will be as big as number of unPCAd pars plus number of eigenvalues kept
+
184 TransferMat.ResizeTo(covMatrix->GetNrows(), npars);
+
185 TransferMatT.ResizeTo(covMatrix->GetNrows(), npars);
+
186
+
187 // Get a subset of the eigen vector matrix
+
188 TMatrixD temp(eigen_vectors.GetSub(0, eigen_vectors.GetNrows()-1, 0, nKeptPCApars-1));
+
189
+
190 //Make transfer matrix which is two blocks of identity with a block of the PCA transfer matrix in between
+
191 TMatrixD temp2;
+
192 temp2.ResizeTo(covMatrix->GetNrows(), npars);
+
193
+
194 //First set the whole thing to 0
+
195 for(int iRow = 0; iRow < covMatrix->GetNrows(); iRow++){
+
196 for(int iCol = 0; iCol < npars; iCol++){
+
197 temp2[iRow][iCol] = 0;
+
198 }
+
199 }
+
200 //Set the first identity block
+
201 if(FirstPCAdpar != 0){
+
202 for(int iRow = 0; iRow < FirstPCAdpar; iRow++){
+
203 temp2[iRow][iRow] = 1;
+
204 }
+
205 }
+
206
+
207 //Set the transfer matrix block for the PCAd pars
+
208 temp2.SetSub(FirstPCAdpar,FirstPCAdpar,temp);
+
209
+
210 //Set the second identity block
+
211 if(LastPCAdpar != covMatrix->GetNrows()-1){
+
212 for(int iRow = 0;iRow < (covMatrix->GetNrows()-1)-LastPCAdpar; iRow++){
+
213 temp2[LastPCAdpar+1+iRow][FirstPCAdpar+nKeptPCApars+iRow] = 1;
+
214 }
+
215 }
+
216
+
217 TransferMat = temp2;
+
218 // Copy the contents
+ +
220 // And then transpose
+
221 TransferMatT.T();
+
222
+
223 // Make a note that we have now done PCA
+
224 pca = true;
+
225
+
226 // Make the PCA parameter arrays
+
227 fParCurr_PCA.ResizeTo(npars);
+
228 fParProp_PCA.ResizeTo(npars);
+
229
+
230 //KS: make easy map so we could easily find un-decomposed parameters
+
231 isDecomposed_PCA.resize(npars);
+
232 fParSigma_PCA.resize(npars);
+
233 for (int i = 0; i < npars; ++i)
+
234 {
+
235 fParSigma_PCA[i] = 1;
+
236 isDecomposed_PCA[i] = -1;
+
237 }
+
238 for (int i = 0; i < FirstPCAdpar; ++i) isDecomposed_PCA[i] = i;
+
239
+
240 for (int i = FirstPCAdpar+nKeptPCApars+1; i < npars; ++i) isDecomposed_PCA[i] = i+(size-npars);
+
241
+
242 #ifdef DEBUG_PCA
+
243 //KS: Let's dump all useful matrices to properly validate PCA
+
244 DebugPCA(sum, temp, submat);
+
245 #endif
+
246}
+
+
247
+
+
248void covarianceBase::init(const char *name, const char *file)
+
249{
+
250 // Set the covariance matrix from input ROOT file (e.g. flux, ND280, NIWG)
+
251 TFile *infile = new TFile(file, "READ");
+
252 if (infile->IsZombie()) {
+
253 MACH3LOG_ERROR("Could not open input covariance ROOT file {} !!!", file);
+
254 MACH3LOG_ERROR("Was about to retrieve matrix with name {}", name);
+
255 throw;
+
256 }
+
257
+
258 // Should put in a
+
259 TMatrixDSym *covMatrix = (TMatrixDSym*)(infile->Get(name));
+
260 if (covMatrix == NULL) {
+
261 std::cerr << "Could not find covariance matrix name " << name << " in file " << file << std::endl;
+
262 std::cerr << "Are you really sure " << name << " exists in the file?" << std::endl;
+
263 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
264 throw;
+
265 }
+
266
+
267 PrintLength = 35;
+
268
+
269 const int nThreads = MaCh3Utils::GetNThreads();
+
270 //KS: set Random numbers for each thread so each thread has different seed
+
271 //or for one thread if without MULTITHREAD
+
272 random_number = new TRandom3*[nThreads]();
+
273 for (int iThread = 0; iThread < nThreads; iThread++) {
+
274 random_number[iThread] = new TRandom3(0);
+
275 }
+
276
+
277 // Not using adaptive by default
+
278 use_adaptive = false;
+
279 total_steps = 0;
+
280 lower_adapt = -999;
+
281 upper_adapt = -999;
+
282
+
283 // Set the covariance matrix
+
284 size = covMatrix->GetNrows();
+
285 _fNumPar = size;
+
286
+
287 InvertCovMatrix = new double*[_fNumPar]();
+
288 throwMatrixCholDecomp = new double*[_fNumPar]();
+
289 // Set the defaults to true
+
290 for(int i = 0; i < _fNumPar; i++)
+
291 {
+
292 InvertCovMatrix[i] = new double[_fNumPar]();
+
293 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
294 for (int j = 0; j < _fNumPar; j++)
+
295 {
+
296 InvertCovMatrix[i][j] = 0.;
+
297 throwMatrixCholDecomp[i][j] = 0.;
+
298 }
+
299 }
+
300
+
301 setName(name);
+
302 size = covMatrix->GetNrows();
+ + +
305
+
306 if (size <= 0) {
+
307 std::cerr << "Covariance matrix " << getName() << " has " << size << " entries!" << std::endl;
+
308 throw;
+
309 }
+
310 npars = size;
+
311
+ +
313
+
314 infile->Close();
+
315
+
316 MACH3LOG_INFO("Created covariance matrix named: {}", getName());
+
317 MACH3LOG_INFO("from file: {}", file);
+
318
+
319 delete infile;
+
320}
+
+
321
+
322// ETA
+
323// An init function for the YAML constructor
+
324// All you really need from the YAML file is the number of Systematics
+
325// Then get all the info from the YAML file in the covarianceXsec::ParseYAML function
+
+
326void covarianceBase::init(std::vector<std::string> YAMLFile)
+
327{
+
328 _fYAMLDoc["Systematics"] = YAML::Node(YAML::NodeType::Sequence);
+
329 for(unsigned int i = 0; i < YAMLFile.size(); i++)
+
330 {
+
331 YAML::Node YAMLDocTemp = YAML::LoadFile(YAMLFile[i]);
+
332 for (const auto& item : YAMLDocTemp["Systematics"]) {
+
333 _fYAMLDoc["Systematics"].push_back(item);
+
334 }
+
335 }
+
336
+
337 const int nThreads = MaCh3Utils::GetNThreads();
+
338 //KS: set Random numbers for each thread so each thread has different seed
+
339 //or for one thread if without MULTITHREAD
+
340 random_number = new TRandom3*[nThreads]();
+
341 for (int iThread = 0; iThread < nThreads; iThread++) {
+
342 random_number[iThread] = new TRandom3(0);
+
343 }
+
344
+
345 PrintLength = 35;
+
346
+
347 // Not using adaptive by default
+
348 use_adaptive = false;
+
349 total_steps = 0;
+
350 lower_adapt = -999;
+
351 upper_adapt = -999;
+
352
+
353 // Set the covariance matrix
+
354 _fNumPar = _fYAMLDoc["Systematics"].size();
+
355 size = _fNumPar;
+
356
+
357 InvertCovMatrix = new double*[_fNumPar]();
+
358 throwMatrixCholDecomp = new double*[_fNumPar]();
+
359 // Set the defaults to true
+
360 for(int i = 0; i < _fNumPar; i++)
+
361 {
+
362 InvertCovMatrix[i] = new double[_fNumPar]();
+
363 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
364 for (int j = 0; j < _fNumPar; j++)
+
365 {
+
366 InvertCovMatrix[i][j] = 0.;
+
367 throwMatrixCholDecomp[i][j] = 0.;
+
368 }
+
369 }
+
370
+ +
372
+
373 TMatrixDSym* _fCovMatrix = new TMatrixDSym(_fNumPar);
+
374 //_fDetString = std::vector<std::string>(_fNumPar);
+
375
+
376 int i = 0;
+
377 std::vector<std::map<std::string,double>> Correlations(_fNumPar);
+
378 std::map<std::string, int> CorrNamesMap;
+
379
+
380 //ETA - read in the systematics. Would be good to add in some checks to make sure
+
381 //that there are the correct number of entries i.e. are the _fNumPars for Names,
+
382 //PreFitValues etc etc.
+
383 for (auto const &param : _fYAMLDoc["Systematics"])
+
384 {
+
385 _fFancyNames[i] = (param["Systematic"]["Names"]["FancyName"].as<std::string>());
+
386 _fPreFitValue[i] = (param["Systematic"]["ParameterValues"]["PreFitValue"].as<double>());
+
387 _fGenerated[i] = (param["Systematic"]["ParameterValues"]["Generated"].as<double>());
+
388 _fIndivStepScale[i] = (param["Systematic"]["StepScale"]["MCMC"].as<double>());
+
389 _fError[i] = (param["Systematic"]["Error"].as<double>());
+
390
+
391 //ETA - a bit of a fudge but works
+
392 std::vector<double> TempBoundsVec = param["Systematic"]["ParameterBounds"].as<std::vector<double>>();
+
393 _fLowBound[i] = TempBoundsVec[0];
+
394 _fUpBound[i] = TempBoundsVec[1];
+
395
+
396 //ETA - now for parameters which are optional and have default values
+
397 if (param["Systematic"]["FlatPrior"]) {
+
398 _fFlatPrior[i] = param["Systematic"]["FlatPrior"].as<bool>();
+
399 } else {
+
400 _fFlatPrior[i] = false;
+
401 }
+
402
+
403 //Fill the map to get the correlations later as well
+
404 CorrNamesMap[param["Systematic"]["Names"]["FancyName"].as<std::string>()]=i;
+
405
+
406 //Also loop through the correlations
+
407 if(param["Systematic"]["Correlations"]) {
+
408 for(unsigned int Corr_i = 0; Corr_i < param["Systematic"]["Correlations"].size(); ++Corr_i){
+
409 for (YAML::const_iterator it=param["Systematic"]["Correlations"][Corr_i].begin();it!=param["Systematic"]["Correlations"][Corr_i].end();++it) {
+
410 Correlations[i][it->first.as<std::string>()] = it->second.as<double>();
+
411 }
+
412 }
+
413 }
+
414 i++;
+
415 }
+
416
+
417 //ETA
+
418 //Now that we've been through all systematic let's fill the covmatrix
+
419 //This makes the root TCov from YAML
+
420 for(int i=0; i < _fNumPar; i++) {
+
421 (*_fCovMatrix)(i,i)=_fError[i]*_fError[i];
+
422 //Get the map of parameter name to correlation fomr the Correlations object
+
423 for (auto const& [key, val] : Correlations[i]) {
+
424 int index = -1;
+
425
+
426 //If you found the parameter name then get the index
+
427 if (CorrNamesMap.find(key) != CorrNamesMap.end()) {
+
428 index=CorrNamesMap[key];
+
429 }
+
430 else {
+
431 std::cout << "Parameter " << key << " not in list! Check your spelling?" << std::endl;
+
432 exit(5);
+
433 }
+
434
+
435 //
+
436 double Corr1 = val;
+
437 double Corr2 = 0;
+
438 if(Correlations[index].find(_fFancyNames[i]) != Correlations[index].end()) {
+
439 Corr2 = Correlations[index][_fFancyNames[i]];
+
440 //Do they agree to better than float precision?
+
441 if(std::abs(Corr2 - Corr1) > FLT_EPSILON) {
+
442 std::cout << "Correlations are not equal between " << _fFancyNames[i] << " and " << key << std::endl;
+
443 std::cout << "Got : " << Corr2 << " and " << Corr1 << std::endl;
+
444 exit(5);
+
445 }
+
446 } else {
+
447 std::cout << "Correlation does not appear reciprocally between " << _fFancyNames[i] << " and " << key << std::endl;
+
448 exit(5);
+
449 }
+
450 (*_fCovMatrix)(i,index)= (*_fCovMatrix)(index,i) = Corr1*_fError[i]*_fError[index];
+
451 }
+
452 }
+
453
+
454 //Now make positive definite
+
455 MakePosDef(_fCovMatrix);
+
456 setCovMatrix(_fCovMatrix);
+
457
+
458 if (size <= 0) {
+
459 std::cerr << "Covariance object has " << size << " systematics!" << std::endl;
+
460 throw;
+
461 }
+
462 npars = size;
+
463
+
464 MACH3LOG_INFO("Created covariance matrix from files: ");
+
465 for(const auto &file : YAMLFile){
+
466 MACH3LOG_INFO("{} ", file);
+
467 }
+
468 MACH3LOG_INFO("----------------");
+
469 MACH3LOG_INFO("Found {} systematics parameters in total", size);
+
470 MACH3LOG_INFO("----------------");
+
471
+
472 return;
+
473}
+
+
474
+
+
475void covarianceBase::init(TMatrixDSym* covMat) {
+
476
+
477 size = covMat->GetNrows();
+
478 _fNumPar = size;
+
479 InvertCovMatrix = new double*[_fNumPar]();
+
480 throwMatrixCholDecomp = new double*[_fNumPar]();
+
481 // Set the defaults to true
+
482 for(int i = 0; i < _fNumPar; i++)
+
483 {
+
484 InvertCovMatrix[i] = new double[_fNumPar]();
+
485 throwMatrixCholDecomp[i] = new double[_fNumPar]();
+
486 for (int j = 0; j < _fNumPar; j++)
+
487 {
+
488 InvertCovMatrix[i][j] = 0.;
+
489 throwMatrixCholDecomp[i][j] = 0.;
+
490 }
+
491 }
+
492
+
493 setCovMatrix(covMat);
+
494
+ +
496
+
497 std::cout << "Created covariance matrix named: " << getName() << std::endl;
+
498}
+
+
499
+
500// Set the covariance matrix for this class
+
+
501void covarianceBase::setCovMatrix(TMatrixDSym *cov) {
+
502 if (cov == NULL) {
+
503 std::cerr << "Could not find covariance matrix you provided to setCovMatrix" << std::endl;
+
504 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
505 throw;
+
506 }
+
507 covMatrix = cov;
+
508 invCovMatrix = (TMatrixDSym*)cov->Clone();
+
509 invCovMatrix->Invert();
+
510 //KS: ROOT has bad memory management, using standard double means we can decrease most operation by factor 2 simply due to cache hits
+
511 for (int i = 0; i < size; i++)
+
512 {
+
513 for (int j = 0; j < size; ++j)
+
514 {
+
515 InvertCovMatrix[i][j] = (*invCovMatrix)(i,j);
+
516 }
+
517 }
+
518
+
519 setThrowMatrix(cov);
+
520}
+
+
521
+
+
522void covarianceBase::ReserveMemory(const int SizeVec) {
+
523
+
524 _fNames = std::vector<std::string>(SizeVec);
+
525 _fFancyNames = std::vector<std::string>(SizeVec);
+
526 _fGenerated = std::vector<double>(SizeVec);
+
527 _fPreFitValue = std::vector<double>(SizeVec);
+
528 _fError = std::vector<double>(SizeVec);
+
529 _fCurrVal = std::vector<double>(SizeVec);
+
530 _fPropVal = std::vector<double>(SizeVec);
+
531 _fLowBound = std::vector<double>(SizeVec);
+
532 _fUpBound = std::vector<double>(SizeVec);
+
533 _fFlatPrior = std::vector<bool>(SizeVec);
+
534 _fIndivStepScale = std::vector<double>(SizeVec);
+
535
+
536 corr_throw = new double[SizeVec]();
+
537 // set random parameter vector (for correlated steps)
+
538 randParams = new double[size];
+
539
+
540 // Set the defaults to true
+
541 for(int i = 0; i < SizeVec; i++) {
+
542 _fGenerated.at(i) = 1.;
+
543 _fPreFitValue.at(i) = 1.;
+
544 _fError.at(i) = 0.;
+
545 _fCurrVal.at(i) = 0.;
+
546 _fPropVal.at(i) = 0.;
+
547 _fLowBound.at(i) = -999.99;
+
548 _fUpBound.at(i) = 999.99;
+
549 _fFlatPrior.at(i) = false;
+
550 _fIndivStepScale.at(i) = 1.;
+
551 corr_throw[i] = 0.0;
+
552 }
+
553
+
554 _fGlobalStepScale = 1.0;
+
555}
+
+
556
+
557// Set all the covariance matrix parameters to a user-defined value
+
558// Might want to split this
+
+
559void covarianceBase::setPar(int i , double val) {
+
560
+
561 std::cout << "Over-riding " << GetParName(i) << ": " << std::endl;
+
562 std::cout << "_fPropVal (" << _fPropVal[i];
+
563 std::cout << "), _fCurrVal (" << _fCurrVal[i];
+
564 std::cout << "), _fPreFitValue (" << _fPreFitValue[i];
+
565 std::cout << ") to " << val << std::endl;
+
566
+
567 _fPropVal[i] = val;
+
568 _fCurrVal[i] = val;
+
569 _fPreFitValue[i] = val;
+
570
+
571 // Transfer the parameter values to the PCA basis
+
572 if (pca) TransferToPCA();
+
573}
+
+
574
+
575// Transfer a parameter variation in the parameter basis to the eigen basis
+
+ +
577 if (!pca) {
+
578 std::cerr << "Can not transfer to PCA if PCA isn't enabled" << std::endl;
+
579 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
580 throw;
+
581 }
+
582 // Make the temporary vectors
+
583 TVectorD fParCurr_vec(size);
+
584 TVectorD fParProp_vec(size);
+
585 for (int i = 0; i < size; ++i) {
+
586 fParCurr_vec(i) = _fCurrVal[i];
+
587 fParProp_vec(i) = _fPropVal[i];
+
588 }
+
589
+
590 fParCurr_PCA = TransferMatT*fParCurr_vec;
+
591 fParProp_PCA = TransferMatT*fParProp_vec;
+
592}
+
+
593
+
594// Transfer a parameter variation in the eigen basis to the parameter basis
+
+ +
596 if (!pca) {
+
597 std::cerr << "Can not transfer to PCA if PCA isn't enabled" << std::endl;
+
598 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
599 throw;
+
600 }
+
601
+
602 // Make the temporary vectors
+
603 TVectorD fParProp_vec = TransferMat*fParProp_PCA;
+
604 TVectorD fParCurr_vec = TransferMat*fParCurr_PCA;
+
605#ifdef MULTITHREAD
+
606#pragma omp parallel for
+
607#endif
+
608 for (int i = 0; i < size; ++i) {
+
609 _fPropVal[i] = fParProp_vec(i);
+
610 _fCurrVal[i] = fParCurr_vec(i);
+
611 }
+
612}
+
+
613
+
+
614const std::vector<double> covarianceBase::getProposed() const {
+
615 std::vector<double> props;
+
616 for (int i = 0; i < size; ++i) props.push_back(_fPropVal[i]);
+
617 return props;
+
618}
+
+
619
+
620// Throw nominal values
+
+
621void covarianceBase::throwNominal(bool nomValues, int seed) {
+
622
+
623 TVectorD* vec = new TVectorD(size);
+
624 for (int i = 0; i < size; i++) {
+
625 (*vec)(i) = 1.0;
+
626 }
+
627
+
628 ThrowParms* nom_throws = new ThrowParms(*vec, (*covMatrix));
+
629 nom_throws->SetSeed(seed);
+
630 std::vector<double> nominal = getNominalArray();
+
631 nominal.clear();
+
632 nominal.resize(size);
+
633
+
634 // If we want to put the nominals somewhere else than user specified
+
635 // Don't fully understand this though: won't we have to reweight the MC somehow?
+
636 // nominal[i] is used in GetLikelihood() as the penalty term, so we're essentially setting a random parameter penalty term?
+
637 if (!nomValues)
+
638 {
+
639 bool throw_again = true;
+
640
+
641 while(throw_again == true)
+
642 {
+
643 throw_again = false;
+
644 std::cout << "- setting " << getName() << " nominal values to random throws." << std::endl;
+
645 nom_throws->ThrowSet(nominal);
+
646
+
647 for (int i = 0; i < size; i++)
+
648 {
+
649 // if parameter is fixed, dont throw
+
650 if (_fError[i] < 0) {
+
651 nominal[i] = 1.0;
+
652 continue;
+
653 }
+
654
+
655 if (nominal[i] < 0) {
+
656 nominal[i] = 0.0;
+
657 throw_again = true;
+
658 }
+
659 }
+
660 }
+
661 } else {
+
662
+
663 // If we want nominal values, set all entries to 1 (defined as nominal in MaCh3)
+
664 for (int i = 0; i < int(nominal.size()); i++) {
+
665 nominal[i] = 1.0;
+
666 }
+
667 }
+
668
+
669 delete nom_throws;
+
670 delete vec;
+
671}
+
+
672
+
673// *************************************
+
674// Throw the parameters according to the covariance matrix
+
675// This shouldn't be used in MCMC code ase it can break Detailed Balance;
+
+ +
677// *************************************
+
678
+
679 // First draw new randParams
+
680 randomize();
+
681
+
682 if (!pca) {
+ +
684
+
685#ifdef MULTITHREAD
+
686#pragma omp parallel for
+
687#endif
+
688 for (int i = 0; i < size; ++i) {
+
689 // Check if parameter is fixed first: if so don't randomly throw
+
690 if (isParameterFixed(i)) continue;
+
691
+ +
693 int throws = 0;
+
694 // Try again if we the initial parameter proposal falls outside of the range of the parameter
+
695 while (_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]) {
+
696#ifdef MULTITHREAD
+
697 randParams[i] = random_number[omp_get_thread_num()]->Gaus(0, 1);
+
698#else
+
699 randParams[i] = random_number[0]->Gaus(0,1);
+
700#endif
+
701 const double corr_throw_single = MatrixVectorMultiSingle(throwMatrixCholDecomp, randParams, size, i);
+
702 _fPropVal[i] = _fPreFitValue[i] + corr_throw_single;
+
703 if (throws > 10000)
+
704 {
+
705 //KS: Since we are multithreading there is danger that those messages
+
706 //will be all over the place, small price to pay for faster code
+
707 std::cerr << "Tried " << throws << " times to throw parameter ";
+
708 std::cerr << i << " but failed" << std::endl;
+
709 std::cerr << "Matrix: " << matrixName << std::endl;
+
710 std::cerr << "Param: " << _fNames[i] << std::endl;
+
711 std::cerr << "Setting _fPropVal: " << _fPropVal[i] <<" to "<< _fPreFitValue[i]<<std::endl;
+
712 std::cerr << "I live at " << __FILE__ << ":" << __LINE__ << std::endl;
+
713 _fPropVal[i] = _fPreFitValue[i];
+
714 //throw;
+
715 }
+
716 throws++;
+
717 }
+
718 _fCurrVal[i] = _fPropVal[i];
+
719 }
+
720 }
+
721 else
+
722 {
+
723 MACH3LOG_CRITICAL("Hold on, you are trying to run Prior Predicitve Code with PCA, which is wrong");
+
724 MACH3LOG_CRITICAL("Sorry I have to kill you, I mean your job");
+
725 throw;
+
726 }
+
727}
+
+
728
+
729// *************************************
+
730// Throw each parameter within their 1 sigma range
+
731// Used to start the chain in different states
+
+ +
733 // *************************************
+
734 // Have the 1 sigma for each parameter in each covariance class, sweet!
+
735 // Don't want to change the nominal array because that's what determines our likelihood
+
736 // Want to change the fParProp, fParCurr, fParInit
+
737 // fParInit and the others will already be set
+
738 for (int i = 0; i < size; ++i) {
+
739 // Check if parameter is fixed first: if so don't randomly throw
+
740 if (isParameterFixed(i)) continue;
+
741 // Check that the sigma range is larger than the parameter range
+
742 // If not, throw in the valid parameter range instead
+
743 const double paramrange = _fUpBound[i] - _fLowBound[i];
+
744 const double sigma = sqrt((*covMatrix)(i,i));
+
745 double throwrange = sigma;
+
746 if (paramrange < sigma) throwrange = paramrange;
+
747
+
748 _fPropVal[i] = _fPreFitValue[i] + random_number[0]->Gaus(0, 1)*throwrange;
+
749 // Try again if we the initial parameter proposal falls outside of the range of the parameter
+
750 // Really only relevant for the xsec parameters; the flux and ND280 have -999 and 999 set to the limits!
+
751 int throws = 0;
+
752 while (_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]) {
+
753 if (throws > 1000) {
+
754 std::cerr << "Tried " << throws << " times to throw parameter " << i << " but failed" << std::endl;
+
755 std::cerr << "Matrix: " << matrixName << std::endl;
+
756 std::cerr << "Param: " << _fNames[i].c_str() << std::endl;
+
757 throw;
+
758 }
+
759 _fPropVal[i] = _fPreFitValue[i] + random_number[0]->Gaus(0, 1)*throwrange;
+
760 throws++;
+
761 }
+
762 std::cout << "Setting current step in " << matrixName << " param " << i << " = " << _fPropVal[i] << " from " << _fCurrVal[i] << std::endl;
+
763 _fCurrVal[i] = _fPropVal[i];
+
764 }
+
765 if (pca) TransferToPCA();
+
766
+
767}
+
+
768
+
769// *************************************
+
770// Set a single parameter
+
+
771void covarianceBase::setSingleParameter(const int parNo, const double parVal) {
+
772 // *************************************
+
773 _fPropVal[parNo] = parVal;
+
774 _fCurrVal[parNo] = parVal;
+
775 std::cout << "Setting " << GetParName(parNo) << "(parameter " << parNo << ") to " << parVal << std::endl;
+
776
+
777 if (pca) TransferToPCA();
+
778}
+
+
779
+
+
780void covarianceBase::setParCurrProp(const int parNo, const double parVal) {
+
781 _fPropVal[parNo] = parVal;
+
782 _fCurrVal[parNo] = parVal;
+
783 std::cout << "Setting " << GetParName(parNo) << "(parameter " << parNo << ") to " << parVal << std::endl;
+
784 if (pca) TransferToPCA();
+
785}
+
+
786
+
787// Propose a step for the set of systematics parameters this covariance class holds
+
+ +
789 // Make the random numbers for the step proposal
+
790 randomize();
+ + +
793}
+
+
794
+
795// ************************************************
+
796// "Randomize" the parameters in the covariance class for the proposed step
+
797// Used the proposal kernel and the current parameter value to set proposed step
+
798// Also get a new random number for the randParams
+
+ +
800// ************************************************
+
801 if (!pca) {
+
802//KS: By multithreading here we gain at least factor 2 with 8 threads with ND only fit
+
803#ifdef MULTITHREAD
+
804#pragma omp parallel for
+
805#endif
+
806 for (int i = 0; i < size; ++i) {
+
807 // If parameter isn't fixed
+
808 if (_fError[i] > 0.0) {
+
809#ifdef MULTITHREAD
+
810 randParams[i] = random_number[omp_get_thread_num()]->Gaus(0, 1);
+
811#else
+
812 randParams[i] = random_number[0]->Gaus(0, 1);
+
813#endif
+
814 // If parameter IS fixed
+
815 } else {
+
816 randParams[i] = 0.0;
+
817 }
+
818 } // end for
+
819 // If we're in the PCA basis we instead throw parameters there (only npars parameter)
+
820 } else {
+
821 // Scale the random parameters by the sqrt of eigen values for the throw
+
822#ifdef MULTITHREAD
+
823#pragma omp parallel for
+
824#endif
+
825 for (int i = 0; i < size; ++i)
+
826 {
+
827 if (fParSigma_PCA[i] > 0. && i < npars)
+
828 {
+
829#ifdef MULTITHREAD
+
830 randParams[i] = random_number[omp_get_thread_num()]->Gaus(0,1);
+
831#else
+
832 randParams[i] = random_number[0]->Gaus(0,1);
+
833#endif
+
834 } else { // If parameter IS fixed or out od bounds
+
835 randParams[i] = 0.0;
+
836 }
+
837 }
+
838 }
+
839}
+
+
840
+
841
+
842// ************************************************
+
843// Correlate the steps by setting the proposed step of a parameter to its current value + some correlated throw
+
+ +
845// ************************************************
+
846 //KS: Using custom function compared to ROOT one with 8 threads we have almost factor 2 performance increase, by replacing TMatrix with just double we increase it even more
+ +
848
+
849 // If not doing PCA
+
850 if (!pca) {
+
851#ifdef MULTITHREAD
+
852#pragma omp parallel for
+
853#endif
+
854 for (int i = 0; i < size; ++i) {
+
855 if (_fError[i] > 0.) {
+ +
857 }
+
858 }
+
859 // If doing PCA throw uncorrelated in PCA basis (orthogonal basis by definition)
+
860 } else {
+
861 // Throw around the current step
+
862#ifdef MULTITHREAD
+
863#pragma omp parallel for
+
864#endif
+
865 for (int i = 0; i < npars; ++i)
+
866 {
+
867 if (fParSigma_PCA[i] > 0.)
+
868 {
+
869 double IndStepScale = 1.;
+
870 //KS: If undecomposed parameter apply individual step scale and cholesky for better acceptance rate
+
871 if(isDecomposed_PCA[i] >= 0)
+
872 {
+
873 IndStepScale *= _fIndivStepScale[isDecomposed_PCA[i]];
+
874 IndStepScale *= corr_throw[isDecomposed_PCA[i]];
+
875 }
+
876 //If decomposed apply only random number
+
877 else
+
878 {
+
879 IndStepScale *= randParams[i];
+
880 //KS: All PCA-ed parameters have the same step scale
+
881 IndStepScale *= _fIndivStepScale[FirstPCAdpar];
+
882 }
+ +
884 }
+
885 }
+
886 // Then update the parameter basis
+ +
888 }
+
889}
+
+
890
+
891// Update so that current step becomes the previously proposed step
+
+ +
893 if (!pca) {
+
894#ifdef MULTITHREAD
+
895#pragma omp parallel for
+
896#endif
+
897 for (int i = 0; i < size; ++i) {
+
898 // Update state so that current state is proposed state
+
899 _fCurrVal[i] = _fPropVal[i];
+
900 }
+
901 } else {
+
902 // Update the book-keeping for the output
+
903#ifdef MULTITHREAD
+
904#pragma omp parallel for
+
905#endif
+
906 for (int i = 0; i < npars; ++i) {
+ +
908 }
+
909 // Then update the parameter basis
+ +
911 }
+
912}
+
+
913
+
914// Throw the proposed parameter by mag sigma
+
915// Should really just have the user specify this throw by having argument double
+
+
916void covarianceBase::throwParProp(const double mag) {
+
917 randomize();
+
918 if (!pca) {
+
919 // Make the correlated throw
+ +
921 // Number of sigmas we throw
+
922 for (int i = 0; i < size; i++) {
+
923 if (_fError[i] > 0.)
+
924 _fPropVal[i] = _fCurrVal[i] + corr_throw[i]*mag;
+
925 }
+
926 } else {
+
927 for (int i = 0; i < size; i++) {
+
928 fParProp_PCA(i) = fParCurr_PCA(i)+mag*randParams[i];
+
929 }
+
930 // And update the fParCurr in the basis
+
931 // Then update the fParProp in the parameter basis using the transfer matrix, so likelihood is evaluated correctly
+
932 TVectorD proposed = TransferMat*fParProp_PCA;
+
933 for (int i = 0; i < size; ++i) {
+
934 if (fParSigma_PCA[i] > 0.) {
+
935 _fPropVal[i] = proposed(i);
+
936 }
+
937 }
+
938 }
+
939}
+
+
940
+
941// Helper function to throw the current parameter by mag sigmas
+
942// Can study bias in MCMC with this; put different starting parameters
+
+
943void covarianceBase::throwParCurr(const double mag)
+
944{
+
945 randomize();
+
946 if (!pca) {
+
947 // Get the correlated throw vector
+ +
949 // The number of sigmas to throw
+
950 // Should probably have this as a default parameter input to the function instead
+
951 for (int i = 0; i < size; i++) {
+
952 if (_fError[i] > 0.){
+
953 _fCurrVal[i] = corr_throw[i]*mag;
+
954 }
+
955 }
+
956 } else {
+
957 for (int i = 0; i < size; i++) {
+
958 fParProp_PCA(i) = mag*randParams[i];
+
959 }
+
960 // And update the fParCurr in the basis
+
961 // Then update the fParProp in the parameter basis using the transfer matrix, so likelihood is evaluated correctly
+
962 TVectorD current = TransferMat*fParCurr_PCA;
+
963 for (int i = 0; i < size; ++i) {
+
964 if (fParSigma_PCA[i] > 0.) {
+
965 _fCurrVal[i] = current(i);
+
966 }
+
967 }
+
968 }
+
969}
+
+
970
+
971// Function to print the nominal values
+
+ +
973 MACH3LOG_INFO("Prior values for {} covarianceBase:", getName());
+
974 for (int i = 0; i < size; i++) {
+
975 std::cout << " " << GetParFancyName(i) << " " << getParInit(i) << "\n";
+
976 }
+
977 std::cout << std::endl;
+
978}
+
+
979
+
980// Function to print the nominal, current and proposed values
+
+ +
982
+
983 MACH3LOG_INFO("Printing parameters for {}", getName());
+
984 // Dump out the PCA parameters too
+
985 if (pca) {
+
986 MACH3LOG_INFO("PCA:");
+
987 for (int i = 0; i < npars; ++i) {
+
988 std::cout << std::setw(PrintLength) << std::left << "PCA " << i << " Current: " << fParCurr_PCA(i) << " Proposed: " << fParProp_PCA(i) << std::endl;
+
989 }
+
990 }
+
991 MACH3LOG_INFO("{:<30} {:<10} {:<10} {:<10}", "Name", "Prior", "Current", "Proposed");
+
992 for (int i = 0; i < size; ++i) {
+
993 MACH3LOG_INFO("{:<30} {:<10.2f} {:<10.2f} {:<10.2f}", GetParFancyName(i), _fPreFitValue[i], _fCurrVal[i], _fPropVal[i]);
+
994 }
+
995 //KS: "\n" is faster performance wise, keep std::endl at the end to flush just in case, also looks pretty
+
996 std::cout << std::endl;
+
997}
+
+
998
+
999// Get the likelihood in the case where we want to include priors on the parameters
+
1000// fParEvalLikelihood stores if we want to evaluate the likelihood for the given parameter
+
1001// true = evaluate likelihood (so run with a prior)
+
1002// false = don't evaluate likelihood (so run without a prior)
+
+ +
1004 double logL = 0.0;
+
1005 //TStopwatch clock;
+
1007 #ifdef MULTITHREAD
+
1008 #pragma omp parallel for reduction(+:logL)
+
1009 #endif
+
1010 for(int i = 0; i < size; ++i){
+
1011 for (int j = 0; j <= i; ++j) {
+
1012 if (!_fFlatPrior[i] && !_fFlatPrior[j]) {
+
1013 //KS: Since matrix is symmetric we can calcaute non diagonal elements only once and multiply by 2, can bring up to factor speed decrease.
+
1014 int scale = 1;
+
1015 if(i != j) scale = 2;
+
1016 logL += scale * 0.5*(_fPropVal[i] - _fPreFitValue[i])*(_fPropVal[j] - _fPreFitValue[j])*InvertCovMatrix[i][j];
+
1017 }
+
1018 }
+
1019 }
+
1020 //clock.Stop();
+
1021 //std::cout << __FILE__ << "::GetLikelihood took " << clock.RealTime() << "s" << std::endl;
+
1022
+
1023 return logL;
+
1024}
+
+
1025
+
+ +
1027 int NOutside = 0;
+
1028 #ifdef MULTITHREAD
+
1029 #pragma omp parallel for reduction(+:NOutside)
+
1030 #endif
+
1031 for (int i = 0; i < _fNumPar; ++i){
+
1032 if(_fPropVal[i] > _fUpBound[i] || _fPropVal[i] < _fLowBound[i]){
+
1033 NOutside++;
+
1034 }
+
1035 }
+
1036 return NOutside;
+
1037}
+
+
1038
+
+ +
1040 // Checkbounds and calclikelihood are virtual
+
1041 // Default behaviour is to reject negative values + do std llh calculation
+
1042 const int NOutside = CheckBounds();
+
1043
+
1044 if(NOutside > 0)
+
1045 return NOutside*__LARGE_LOGL__;
+
1046
+
1047 return CalcLikelihood();
+
1048}
+
+
1049
+
1050
+
+ +
1052
+
1053 std::cout << "Number of pars: " << size << std::endl;
+
1054 std::cout << "current " << matrixName << " parameters:" << std::endl;
+
1055 for(int i = 0; i < size; i++) {
+
1056 std::cout << std::fixed << std::setprecision(5) << _fNames[i].c_str() << " current: \t" << _fCurrVal[i] << " \tproposed: \t" << _fPropVal[i] << std::endl;
+
1057 }
+
1058
+
1059 return;
+
1060}
+
+
1061
+
1062// Sets the proposed parameters to the nominal values
+
+
1063void covarianceBase::setParameters(std::vector<double> pars) {
+
1064
+
1065 // If empty, set the proposed to nominal
+
1066 if (pars.empty()) {
+
1067 // For xsec this means setting to the prior (because nominal is the prior)
+
1068 for (int i = 0; i < size; i++) {
+
1069 _fPropVal[i] = _fPreFitValue[i];
+
1070 }
+
1071 // If not empty, set the parameters to the specified
+
1072 } else {
+
1073
+
1074 if (pars.size() != size_t(size)) {
+
1075 std::cerr << "Warning: parameter arrays of incompatible size! Not changing parameters! " << matrixName << " has size " << pars.size() << " but was expecting " << size << std::endl;
+
1076 throw;
+
1077 }
+
1078
+
1079 unsigned int parsSize = pars.size();
+
1080 for (unsigned int i = 0; i < parsSize; i++) {
+
1081 //Make sure that you are actually passing a number to set the parameter to
+
1082 if(isnan(pars[i])) {
+
1083 std::cerr << "Error: trying to set parameter value to a nan for parameter " << GetParName(i) << " in matrix " << matrixName << ". This will not go well!" << std::endl;
+
1084 throw;
+
1085 } else {
+
1086 _fPropVal[i] = pars[i];
+
1087 }
+
1088 }
+
1089 }
+
1090
+
1091 // And if pca make the transfer
+
1092 if (pca) {
+
1093 TransferToPCA();
+ +
1095 }
+
1096
+
1097 return;
+
1098}
+
+
1099
+
+ +
1101 // loop over parameters and set a branch
+
1102 for (int i = 0; i < size; ++i) {
+
1103 tree.Branch(_fNames[i].c_str(), &_fCurrVal[i], Form("%s/D", _fNames[i].c_str()));
+
1104 }
+
1105 // When running PCA, also save PCA parameters
+
1106 if (pca) {
+
1107 for (int i = 0; i < npars; ++i) {
+
1108 tree.Branch(Form("%s_PCA", _fNames[i].c_str()), (double*)&(fParCurr_PCA.GetMatrixArray()[i]), Form("%s_PCA/D", _fNames[i].c_str()));
+
1109 }
+
1110 }
+
1111}
+
+
1112
+
+ +
1114 if(scale == 0)
+
1115 {
+
1116 std::cerr << "You are trying so set StepScale to 0 this will not work"<< std::endl;
+
1117 throw;
+
1118 }
+
1119 std::cout << getName() << " setStepScale() = " << scale << std::endl;
+
1120 _fGlobalStepScale = scale;
+
1121}
+
+
1122
+
1123// ********************************************
+
+ +
1125// ********************************************
+
1126 // fix or unfix all parameters by multiplying by -1
+
1127 if(!pca)
+
1128 {
+
1129 for (int i = 0; i < size; i++) _fError[i] *= -1.0;
+
1130 } else{
+
1131 for (int i = 0; i < npars; i++) fParSigma_PCA[i] *= -1.0;
+
1132 }
+
1133 return;
+
1134}
+
+
1135
+
1136// ********************************************
+
+ +
1138// ********************************************
+
1139 if(!pca) {
+
1140 if (i > size) {
+
1141 std::cerr << "Can't toggleFixParameter for parameter " << i << " because size of covariance =" << size << std::endl;
+
1142 std::cerr << "Fix this in your config file please!" << std::endl;
+
1143 throw;
+
1144 } else {
+
1145 _fError[i] *= -1.0;
+
1146 std::cout << "Setting " << GetParName(i) << "(parameter " << i << ") to fixed at " << _fCurrVal[i] << std::endl;
+
1147 }
+
1148 } else {
+
1149 int isDecom = -1;
+
1150 for (int im = 0; im < npars; ++im) {
+
1151 if(isDecomposed_PCA[im] == i) {isDecom = im;}
+
1152 }
+
1153 if(isDecom < 0) {
+
1154 std::cerr << "Parameter " << GetParName(i) << " is PCA decomposed can't fix this" << std::endl;
+
1155 //throw;
+
1156 } else {
+
1157 fParSigma_PCA[isDecom] *= -1.0;
+
1158 std::cout << "Setting un-decomposed " << GetParName(i) << "(parameter " << i <<"/"<< isDecom<< " in PCA base) to fixed at " << _fCurrVal[i] << std::endl;
+
1159 }
+
1160 }
+
1161
+
1162 return;
+
1163}
+
+
1164
+
+ +
1166
+
1167 std::cout << "covarianceBase::setEvalLikelihood set to " << eL << std::endl;
+
1168 if (i > size) {
+
1169 std::cerr << "Can't setEvalLikelihood for " << getName() << "_" << i << " because size of covarianceXsec2015 = " << size << std::endl;
+
1170 std::cerr << "Fix this in your config file please!" << std::endl;
+
1171 throw;
+
1172 } else {
+
1173 std::cout << "Setting " << GetParName(i) << " (parameter " << i << ") to flat prior? " << eL << std::endl;
+
1174 _fFlatPrior[i] = eL;
+
1175 }
+
1176}
+
+
1177
+
1178//KS: Custom function to perform multiplication of matrix and vector with mulithreadeing
+
+
1179void covarianceBase::MatrixVectorMulti(double* VecMulti, double** matrix, const double* vector, const int n) {
+
1180 #ifdef MULTITHREAD
+
1181 #pragma omp parallel for
+
1182 #endif
+
1183 for (int i = 0; i < n; ++i)
+
1184 {
+
1185 double result = 0.0;
+
1186 for (int j = 0; j < n; ++j)
+
1187 {
+
1188 result += matrix[i][j]*vector[j];
+
1189 }
+
1190 VecMulti[i] = result;
+
1191 }
+
1192}
+
+
1193
+
+
1194double covarianceBase::MatrixVectorMultiSingle(double** matrix, const double* vector, const int Length, const int i)
+
1195{
+
1196 double Element = 0.0;
+
1197 for (int j = 0; j < Length; j++) {
+
1198 Element += matrix[i][j]*vector[j];
+
1199 }
+
1200 return Element;
+
1201}
+
+
1202
+
+
1203void covarianceBase::setIndivStepScale(std::vector<double> stepscale) {
+
1204 if ((int)stepscale.size()!=size) {
+
1205 std::cout << "Stepscale vector not equal to number of parameters. Qutting.." << std::endl;
+
1206 std::cout << "Size of argument vector:" << stepscale.size() << std::endl;
+
1207 std::cout << "Expected size:" << size << std::endl;
+
1208 return;
+
1209 }
+
1210
+
1211 for (int iParam=0;iParam<size;iParam++) {
+
1212 _fIndivStepScale[iParam] = stepscale[iParam];
+
1213 }
+
1214
+ +
1216
+
1217 return;
+
1218}
+
+
1219
+
1220
+
+ +
1222 std::cout << "============================================================" << std::endl;
+
1223 std::cout << std::setw(PrintLength) << "Parameter:" << " | " << std::setw(11) << "Step scale:" << std::endl;
+
1224 for (int iParam=0;iParam<size;iParam++) {
+
1225 std::cout << std::setw(PrintLength) << _fNames[iParam].c_str() << " | " << std::setw(11) << _fIndivStepScale[iParam] << std::endl;
+
1226 }
+
1227 std::cout << "============================================================" << std::endl;
+
1228}
+
+
1229
+
1230//Makes sure that matrix is positive-definite (so no error is thrown when
+
1231//throwNominal() is called) by adding a small number to on-diagonal elements
+
+
1232void covarianceBase::MakePosDef(TMatrixDSym *cov) {
+
1233 //DB Save original warning state and then increase it in this function to suppress 'matrix not positive definite' messages
+
1234 //Means we no longer need to overload
+
1235 if(cov==NULL){
+
1236 cov = &*covMatrix;
+
1237 }
+
1238
+
1239 int originalErrorWarning = gErrorIgnoreLevel;
+
1240 gErrorIgnoreLevel = kFatal;
+
1241
+
1242 //DB Loop 1000 times adding 1e-9 which tops out at 1e-6 shift on the diagonal before throwing error
+
1243 int MaxAttempts = 1e5;
+
1244 int iAttempt = 0;
+
1245 bool CanDecomp = false;
+
1246 TDecompChol chdcmp;
+
1247
+
1248 for (iAttempt=0;iAttempt<MaxAttempts;iAttempt++) {
+
1249 chdcmp = TDecompChol(*cov);
+
1250 if (chdcmp.Decompose()) {
+
1251 CanDecomp = true;
+
1252 break;
+
1253 } else {
+
1254#ifdef MULTITHREAD
+
1255#pragma omp parallel for
+
1256#endif
+
1257 for (int iVar=0;iVar<size;iVar++) {
+
1258 (*cov)(iVar,iVar) += pow(10,-9);
+
1259 }
+
1260 }
+
1261 }
+
1262
+
1263 if (!CanDecomp) {
+
1264 std::cerr << "Tried " << MaxAttempts << " times to shift diagonal but still can not decompose the matrix" << std::endl;
+
1265 std::cerr << "This indicates that something is wrong with the input matrix" << std::endl;
+
1266 throw;
+
1267 }
+
1268 if(total_steps < 2) {
+
1269 MACH3LOG_INFO("Had to shift diagonal {} time(s) to allow the covariance matrix to be decomposed", iAttempt);
+
1270 }
+
1271 //DB Reseting warning level
+
1272 gErrorIgnoreLevel = originalErrorWarning;
+
1273
+
1274 return;
+
1275}
+
+
1276
+
+ +
1278 std::vector<double> stepScales(size);
+
1279 for (int i=0;i<size;i++) {
+
1280 stepScales[i] = 1.;
+
1281 }
+ +
1283 setIndivStepScale(stepScales);
+
1284}
+
+
1285
+
1286// HW: Code for throwing from separate throw matrix, needs to be set after init to ensure pos-def
+
+
1287void covarianceBase::setThrowMatrix(TMatrixDSym *cov){
+
1288 if (cov == NULL) {
+
1289 std::cerr << "Could not find covariance matrix you provided to setThrowMatrix" << std::endl;
+
1290 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1291 throw;
+
1292 }
+
1293
+
1294 if (covMatrix->GetNrows() != cov->GetNrows()) {
+
1295 std::cerr << "Matrix given for throw Matrix is not the same size as the covariance matrix stored in object!" << std::endl;
+
1296 std::cerr << "Stored covariance matrix size:" << covMatrix->GetNrows() << std::endl;
+
1297 std::cerr << "Given matrix size:" << cov->GetNrows() << std::endl;
+
1298 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1299 throw;
+
1300 }
+
1301
+
1302 throwMatrix = (TMatrixDSym*)cov->Clone();
+ +
1304 else MakePosDef(throwMatrix);
+
1305
+
1306 TDecompChol TDecompChol_throwMatrix(*throwMatrix);
+
1307
+
1308 if(!TDecompChol_throwMatrix.Decompose()) {
+
1309 std::cerr << "Cholesky decomposition failed for " << matrixName << " trying to make positive definite" << std::endl;
+
1310
+
1311 std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
1312 throw;
+
1313 }
+
1314
+
1315 throwMatrix_CholDecomp = new TMatrixD(TDecompChol_throwMatrix.GetU());
+ +
1317
+
1318 //KS: ROOT has bad memory management, using standard double means we can decrease most operation by factor 2 simply due to cache hits
+
1319#ifdef MULTITHREAD
+
1320#pragma omp parallel for
+
1321#endif
+
1322 for (int i = 0; i < size; i++)
+
1323 {
+
1324 for (int j = 0; j < size; ++j)
+
1325 {
+
1326 throwMatrixCholDecomp[i][j] = (*throwMatrix_CholDecomp)(i,j);
+
1327 }
+
1328 }
+
1329}
+
+
1330
+
+ +
1332 delete throwMatrix;
+
1333 throwMatrix = NULL;
+ + +
1336 setThrowMatrix(cov);
+
1337}
+
+
1338
+
1339// The setter
+
+
1340void covarianceBase::useSeparateThrowMatrix(TString throwMatrixFileName, TString throwMatrixName, TString meansVectorName){
+
1341// Firstly let's check if the file exists
+
1342 TFile* throwMatrixFile = new TFile(throwMatrixFileName);
+ +
1344 if(throwMatrixFile->IsZombie()) {
+
1345 std::cerr<<"ERROR : Couldn't find throw Matrix file : "<<throwMatrixFileName<<std::endl;
+
1346 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1347 throw;
+
1348 } //We're done for now
+
1349
+
1350 TMatrixDSym* tmp_throwMatrix = (TMatrixDSym*)throwMatrixFile->Get(throwMatrixName);
+
1351 TVectorD* tmp_meansvec = (TVectorD*)throwMatrixFile->Get(meansVectorName);
+
1352
+
1353 if(!tmp_throwMatrix){
+
1354 std::cerr<<"ERROR : Couldn't find throw matrix "<<throwMatrixName<<" in "<<throwMatrixFileName<<std::endl;
+
1355 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1356 throw;
+
1357 }
+
1358
+
1359 if(!tmp_meansvec){
+
1360 std::cerr<<"ERROR : Couldn't find means vector "<<meansVectorName<<" in "<<throwMatrixFileName<<std::endl;
+
1361 std::cerr<<__FILE__<<" : "<<__LINE__<<std::endl;
+
1362 throw;
+
1363 }
+
1364
+
1365 adaptiveCovariance = (TMatrixDSym*)tmp_throwMatrix->Clone();
+
1366 for(int iMean=0; iMean<tmp_meansvec->GetNrows(); iMean++){
+
1367 par_means.push_back((*tmp_meansvec)(iMean));
+ +
1369 }
+
1370 delete tmp_throwMatrix;
+
1371 delete tmp_meansvec;
+
1372 throwMatrixFile->Close();
+
1373 delete throwMatrixFile; // Just in case
+
1374}
+
+
1375
+
1376
+ +
1381
+
1382//HW: Truly adaptive MCMC!
+
+ +
1384 // https://projecteuclid.org/journals/bernoulli/volume-7/issue-2/An-adaptive-Metropolis-algorithm/bj/1080222083.full
+
1385 // Updates adaptive matrix
+
1386 // First we update the total means
+
1387
+
1388#ifdef MULTITHREAD
+
1389#pragma omp parallel for
+
1390#endif
+
1391 for(int iRow=0; iRow<size; iRow++){
+
1392 par_means_prev[iRow]=par_means[iRow];
+
1393 par_means[iRow]=(_fCurrVal[iRow]+par_means[iRow]*total_steps)/(total_steps+1);
+
1394 }
+
1395
+
1396 //Now we update the covariances using cov(x,y)=E(xy)-E(x)E(y)
+
1397#ifdef MULTITHREAD
+
1398#pragma omp parallel for
+
1399#endif
+
1400 for(int iRow=0; iRow<size; iRow++){
+
1401 for(int iCol=0; iCol<=iRow; iCol++){
+
1402
+
1403 double cov_val = (*adaptiveCovariance)(iRow, iCol)*size/5.6644;
+
1404 cov_val += par_means_prev[iRow]*par_means_prev[iCol]; //First we remove the current means
+
1405 cov_val = (cov_val*total_steps+_fCurrVal[iRow]*_fCurrVal[iCol])/(total_steps+1); //Now get mean(iRow*iCol)
+
1406 cov_val -= par_means[iCol]*par_means[iRow];
+
1407 cov_val*=5.6644/size;
+
1408 (*adaptiveCovariance)(iRow, iCol) = cov_val;
+
1409 (*adaptiveCovariance)(iCol, iRow) = cov_val;
+
1410 }
+
1411 }
+
1412 //This is likely going to be the slow bit!
+
1413 total_steps+=1;
+ +
1415 {
+ +
1417 }
+
1418
+ +
1420 updateThrowMatrix(adaptiveCovariance); //Now we update and continue!
+
1421 }
+
1422 // if(total_steps%1000==0 && total_steps>1000){
+
1423 // suboptimality_vals.push_back(calculatesuboptimality(covSqrt, adaptiveCovariance));
+
1424 // }
+
1425}
+
+
1426
+
+ +
1428 // If we don't have a covariance matrix to start from for adaptive tune we need to make one!
+
1429 adaptiveCovariance = new TMatrixDSym(size);
+
1430 // par_means.reserve(size);
+
1431 for(int i=0; i<size; i++){
+
1432 par_means.push_back(0);
+
1433 par_means_prev.push_back(0);
+
1434 for(int j=0; j<=i; j++){
+
1435 (*adaptiveCovariance)(i,j)=0.0; // Just make an empty matrix
+
1436 (*adaptiveCovariance)(j,i)=0.0; // Just make an empty matrix
+
1437 }
+
1438 }
+
1439}
+
+
1440
+
+
1441void covarianceBase::saveAdaptiveToFile(TString outFileName, TString systematicName){
+
1442 TFile* outFile = new TFile(outFileName, "UPDATE");
+
1443 if(outFile->IsZombie()){
+
1444 std::cerr<<"ERROR : Couldn't find "<<outFileName<<std::endl;
+
1445 throw;
+
1446 }
+
1447 TVectorD* outMeanVec = new TVectorD((int)par_means.size());
+
1448 for(int i=0; i<(int)par_means.size(); i++){
+
1449 (*outMeanVec)(i)=par_means[i];
+
1450 }
+
1451 outFile->cd();
+
1452 adaptiveCovariance->Write(systematicName+"_postfit_matrix");
+
1453 outMeanVec->Write(systematicName+"_mean_vec");
+
1454 outFile->Close();
+
1455 delete outFile;
+
1456
+
1457}
+
+
1458
+
1459//HW: Finds closest possible positive definite matrix in Frobenius Norm ||.||_frob
+
1460// Where ||X||_frob=sqrt[sum_ij(x_ij^2)] (basically just turns an n,n matrix into vector in n^2 space
+
1461// then does Euclidean norm)
+
+ +
1463{
+
1464 // Want to get cov' = (cov_sym+cov_polar)/2
+
1465 // cov_sym=(cov+cov^T)/2
+
1466 // cov_polar-> SVD cov to cov=USV^T then cov_polar=VSV^T
+
1467
+
1468 //Get frob norm of cov
+
1469// Double_t cov_norm=cov->E2Norm();
+
1470
+
1471 TMatrixDSym* cov_trans = cov;
+
1472 cov_trans->T();
+
1473 TMatrixDSym cov_sym = 0.5*(*cov+*cov_trans); //If cov is symmetric does nothing, otherwise just ensures symmetry
+
1474
+
1475 //Do SVD to get polar form
+
1476 TDecompSVD cov_sym_svd=TDecompSVD(cov_sym);
+
1477 if(!cov_sym_svd.Decompose()){
+
1478 std::cerr<<"Cannot do SVD on input matrix!"<<std::endl;
+
1479 throw;
+
1480 }
+
1481
+
1482 TMatrixD cov_sym_v = (TMatrixD)cov_sym_svd.GetV();
+
1483 TMatrixD cov_sym_vt = cov_sym_v;
+
1484 cov_sym_vt.T();
+
1485 //SVD returns as vector (grrr) so need to get into matrix form for multiplying!
+
1486 TVectorD cov_sym_sigvect = (TVectorD)cov_sym_svd.GetSig();
+
1487 const Int_t nCols = cov_sym_v.GetNcols(); //square so only need rows hence lack of cols
+
1488 TMatrixDSym cov_sym_sig(nCols);
+
1489 TMatrixDDiag cov_sym_sig_diag(cov_sym_sig);
+
1490 cov_sym_sig_diag=cov_sym_sigvect;
+
1491
+
1492
+
1493 //Can finally get H=VSV
+
1494 TMatrixDSym cov_sym_polar =cov_sym_sig.SimilarityT(cov_sym_vt);//V*S*V^T (this took forver to find!)
+
1495
+
1496 //Now we can construct closest approximater Ahat=0.5*(B+H)
+
1497 TMatrixDSym cov_closest_approx = 0.5*(cov_sym+cov_sym_polar);//Not fully sure why this is even needed since symmetric B -> U=V
+
1498 //Get norm of transformed
+
1499// Double_t approx_norm=cov_closest_approx.E2Norm();
+
1500
+
1501 //std::cout<<"Initial Norm : "<<cov_norm<<" | Norm after transformation : "<<approx_norm<<" | Ratio : "<<cov_norm/approx_norm<<std::endl;
+
1502
+
1503 *cov = cov_closest_approx;
+
1504 //Now can just add a makeposdef!
+
1505 MakePosDef(cov);
+
1506}
+
+
1507
+
+ +
1509{
+
1510 std::vector<double> nominal;
+
1511 for (int i = 0; i < size; i++)
+
1512 {
+
1513 nominal.push_back(_fPreFitValue[i]);
+
1514 }
+
1515 return nominal;
+
1516
+
1517}
+
+
1518
+
1519// ********************************************
+
+ +
1521// ********************************************
+
1522
+
1523 TH2D* hMatrix = new TH2D(getName(), getName(), _fNumPar, 0.0, _fNumPar, _fNumPar, 0.0, _fNumPar);
+
1524
+
1525 for(int i = 0; i < _fNumPar; i++)
+
1526 {
+
1527 hMatrix->SetBinContent(i+1, i+1, 1.);
+
1528 hMatrix->GetXaxis()->SetBinLabel(i+1, GetParFancyName(i).c_str());
+
1529 hMatrix->GetYaxis()->SetBinLabel(i+1, GetParFancyName(i).c_str());
+
1530 }
+
1531
+
1532 #ifdef MULTITHREAD
+
1533 #pragma omp parallel for
+
1534 #endif
+
1535 for(int i = 0; i < _fNumPar; i++)
+
1536 {
+
1537 for(int j = 0; j <= i; j++)
+
1538 {
+
1539 const double Corr = (*covMatrix)(i,j) / ( getDiagonalError(i) * getDiagonalError(j));
+
1540 hMatrix->SetBinContent(i+1, j+1, Corr);
+
1541 hMatrix->SetBinContent(j+1, i+1, Corr);
+
1542 }
+
1543 }
+
1544 return hMatrix;
+
1545}
+
+
1546
+
1547#ifdef DEBUG_PCA
+
1548//KS: Let's dump all useful matrices to properly validate PCA
+
1549void covarianceBase::DebugPCA(const double sum, TMatrixD temp, TMatrixDSym submat)
+
1550{
+
1551 (void)submat;//This is used if DEBUG_PCA==2, this hack is to avoid compiler warnings
+
1552 TFile *PCA_Debug = new TFile("Debug_PCA.root", "RECREATE");
+
1553 PCA_Debug->cd();
+
1554
+
1555 bool PlotText = true;
+
1556 //KS: If we have more than 200 plot becomes unreadable :(
+
1557 if(size > 200) PlotText = false;
+
1558
+
1559 TH1D* heigen_values = new TH1D("eigen_values", "Eigen Values", (int)eigen_values.GetNrows(), 0.0, (int)eigen_values.GetNrows());
+
1560 TH1D* heigen_cumulative = new TH1D("heigen_cumulative", "heigen_cumulative", (int)eigen_values.GetNrows(), 0.0, (int)eigen_values.GetNrows());
+
1561 TH1D* heigen_frac = new TH1D("heigen_fractional", "heigen_fractional", (int)eigen_values.GetNrows(), 0.0, (int)eigen_values.GetNrows());
+
1562 heigen_values->GetXaxis()->SetTitle("Eigen Vector");
+
1563 heigen_values->GetYaxis()->SetTitle("Eigen Value");
+
1564
+
1565 double Cumulative = 0;
+
1566 for(int i = 0; i < eigen_values.GetNrows(); i++)
+
1567 {
+
1568 heigen_values->SetBinContent(i+1, (eigen_values)(i));
+
1569 heigen_cumulative->SetBinContent(i+1, (eigen_values)(i)/sum + Cumulative);
+
1570 heigen_frac->SetBinContent(i+1, (eigen_values)(i)/sum);
+
1571 Cumulative += (eigen_values)(i)/sum;
+
1572 }
+
1573 heigen_values->Write("heigen_values");
+
1574 eigen_values.Write("eigen_values");
+
1575 heigen_cumulative->Write("heigen_values_cumulative");
+
1576 heigen_frac->Write("heigen_values_frac");
+
1577
+
1578 TH2D* heigen_vectors = MaCh3Utils::TMatrixIntoTH2D(eigen_vectors, "eigen_vectors");
+
1579 heigen_vectors->GetXaxis()->SetTitle("Parameter in Normal Base");
+
1580 heigen_vectors->GetYaxis()->SetTitle("Parameter in Decomposed Base");
+
1581 heigen_vectors->Write("heigen_vectors");
+
1582 eigen_vectors.Write("eigen_vectors");
+
1583
+
1584 TH2D* SubsetPCA = MaCh3Utils::TMatrixIntoTH2D(temp, "SubsetPCA");
+
1585 SubsetPCA->GetXaxis()->SetTitle("Parameter in Normal Base");
+
1586 SubsetPCA->GetYaxis()->SetTitle("Parameter in Decomposed Base");
+
1587
+
1588 SubsetPCA->Write("hSubsetPCA");
+
1589 temp.Write("SubsetPCA");
+
1590 TH2D* hTransferMat = MaCh3Utils::TMatrixIntoTH2D(TransferMat, "hTransferMat");
+
1591 hTransferMat->GetXaxis()->SetTitle("Parameter in Normal Base");
+
1592 hTransferMat->GetYaxis()->SetTitle("Parameter in Decomposed Base");
+
1593 TH2D* hTransferMatT = MaCh3Utils::TMatrixIntoTH2D(TransferMatT, "hTransferMatT");
+
1594
+
1595 hTransferMatT->GetXaxis()->SetTitle("Parameter in Decomposed Base");
+
1596 hTransferMatT->GetYaxis()->SetTitle("Parameter in Normal Base");
+
1597
+
1598 hTransferMat->Write("hTransferMat");
+
1599 TransferMat.Write("TransferMat");
+
1600 hTransferMatT->Write("hTransferMatT");
+
1601 TransferMatT.Write("TransferMatT");
+
1602
+
1603 TCanvas *c1 = new TCanvas("c1"," ", 0, 0, 1024, 1024);
+
1604 c1->SetBottomMargin(0.1);
+
1605 c1->SetTopMargin(0.05);
+
1606 c1->SetRightMargin(0.05);
+
1607 c1->SetLeftMargin(0.12);
+
1608 c1->SetGrid();
+
1609
+
1610 gStyle->SetPaintTextFormat("4.1f");
+
1611 gStyle->SetOptFit(0);
+
1612 gStyle->SetOptStat(0);
+
1613 // Make pretty correlation colors (red to blue)
+
1614 const int NRGBs = 5;
+
1615 TColor::InitializeColors();
+
1616 Double_t stops[NRGBs] = { 0.00, 0.25, 0.50, 0.75, 1.00 };
+
1617 Double_t red[NRGBs] = { 0.00, 0.25, 1.00, 1.00, 0.50 };
+
1618 Double_t green[NRGBs] = { 0.00, 0.25, 1.00, 0.25, 0.00 };
+
1619 Double_t blue[NRGBs] = { 0.50, 1.00, 1.00, 0.25, 0.00 };
+
1620 TColor::CreateGradientColorTable(5, stops, red, green, blue, 255);
+
1621 gStyle->SetNumberContours(255);
+
1622
+
1623 double maxz = 0;
+
1624 double minz = 0;
+
1625
+
1626 c1->Print("Debug_PCA.pdf[");
+
1627 TLine *EigenLine = new TLine(nKeptPCApars, 0, nKeptPCApars, heigen_cumulative->GetMaximum());
+
1628 EigenLine->SetLineColor(kPink);
+
1629 EigenLine->SetLineWidth(2);
+
1630 EigenLine->SetLineStyle(kSolid);
+
1631
+
1632 TText* text = new TText(0.5, 0.5, Form("Threshold = %g", eigen_threshold));
+
1633 text->SetTextFont (43);
+
1634 text->SetTextSize (40);
+
1635
+
1636 heigen_values->SetLineColor(kRed);
+
1637 heigen_values->SetLineWidth(2);
+
1638 heigen_cumulative->SetLineColor(kGreen);
+
1639 heigen_cumulative->SetLineWidth(2);
+
1640 heigen_frac->SetLineColor(kBlue);
+
1641 heigen_frac->SetLineWidth(2);
+
1642
+
1643 c1->SetLogy();
+
1644 heigen_values->SetMaximum(heigen_cumulative->GetMaximum()+heigen_cumulative->GetMaximum()*0.4);
+
1645 heigen_values->Draw();
+
1646 heigen_frac->Draw("SAME");
+
1647 heigen_cumulative->Draw("SAME");
+
1648 EigenLine->Draw("Same");
+
1649 text->DrawTextNDC(0.42, 0.84,Form("Threshold = %g", eigen_threshold));
+
1650
+
1651 TLegend *leg = new TLegend(0.2, 0.2, 0.6, 0.5);
+
1652 leg->SetTextSize(0.04);
+
1653 leg->AddEntry(heigen_values, "Absolute", "l");
+
1654 leg->AddEntry(heigen_frac, "Fractional", "l");
+
1655 leg->AddEntry(heigen_cumulative, "Cumulative", "l");
+
1656
+
1657 leg->SetLineColor(0);
+
1658 leg->SetLineStyle(0);
+
1659 leg->SetFillColor(0);
+
1660 leg->SetFillStyle(0);
+
1661 leg->Draw("Same");
+
1662
+
1663 c1->Print("Debug_PCA.pdf");
+
1664 c1->SetRightMargin(0.15);
+
1665 c1->SetLogy(0);
+
1666 delete EigenLine;
+
1667 delete leg;
+
1668 delete text;
+
1669 delete heigen_values;
+
1670 delete heigen_frac;
+
1671 delete heigen_cumulative;
+
1672
+
1673 heigen_vectors->SetMarkerSize(0.2);
+
1674 minz = heigen_vectors->GetMinimum();
+
1675 if (fabs(0-maxz)>fabs(0-minz)) heigen_vectors->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1676 else heigen_vectors->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1677 if(PlotText) heigen_vectors->Draw("COLZ TEXT");
+
1678 else heigen_vectors->Draw("COLZ");
+
1679
+
1680 TLine *Eigen_Line = new TLine(0, nKeptPCApars, LastPCAdpar-FirstPCAdpar, nKeptPCApars);
+
1681 Eigen_Line->SetLineColor(kGreen);
+
1682 Eigen_Line->SetLineWidth(2);
+
1683 Eigen_Line->SetLineStyle(kDotted);
+
1684 Eigen_Line->Draw("SAME");
+
1685 c1->Print("Debug_PCA.pdf");
+
1686 delete Eigen_Line;
+
1687
+
1688 SubsetPCA->SetMarkerSize(0.2);
+
1689 minz = SubsetPCA->GetMinimum();
+
1690 if (fabs(0-maxz)>fabs(0-minz)) SubsetPCA->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1691 else SubsetPCA->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1692 if(PlotText) SubsetPCA->Draw("COLZ TEXT");
+
1693 else SubsetPCA->Draw("COLZ");
+
1694 c1->Print("Debug_PCA.pdf");
+
1695 delete SubsetPCA;
+
1696
+
1697 hTransferMat->SetMarkerSize(0.15);
+
1698 minz = hTransferMat->GetMinimum();
+
1699 if (fabs(0-maxz)>fabs(0-minz)) hTransferMat->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1700 else hTransferMat->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1701 if(PlotText) hTransferMat->Draw("COLZ TEXT");
+
1702 else hTransferMat->Draw("COLZ");
+
1703 c1->Print("Debug_PCA.pdf");
+
1704 delete hTransferMat;
+
1705
+
1706 hTransferMatT->SetMarkerSize(0.15);
+
1707 minz = hTransferMatT->GetMinimum();
+
1708 if (fabs(0-maxz)>fabs(0-minz)) hTransferMatT->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1709 else hTransferMatT->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1710 if(PlotText) hTransferMatT->Draw("COLZ TEXT");
+
1711 else hTransferMatT->Draw("COLZ");
+
1712 c1->Print( "Debug_PCA.pdf");
+
1713 delete hTransferMatT;
+
1714
+
1715
+
1716 //KS: Crosscheck against Eigen library
+
1717 #if DEBUG_PCA == 2
+
1718 Eigen::MatrixXd Submat_Eigen(submat.GetNrows(), submat.GetNcols());
+
1719
+
1720 #ifdef MULTITHREAD
+
1721 #pragma omp parallel for
+
1722 #endif
+
1723 for(int i = 0; i < submat.GetNrows(); i++)
+
1724 {
+
1725 for(int j = 0; j < submat.GetNcols(); j++)
+
1726 {
+
1727 Submat_Eigen(i,j) = (submat)(i,j);
+
1728 }
+
1729 }
+
1730 Eigen::EigenSolver<Eigen::MatrixXd> EigenSolver;
+
1731 EigenSolver.compute(Submat_Eigen);
+
1732 Eigen::VectorXd eigen_val = EigenSolver.eigenvalues().real();
+
1733 Eigen::MatrixXd eigen_vect = EigenSolver.eigenvectors().real();
+
1734 std::vector<std::tuple<double, Eigen::VectorXd>> eigen_vectors_and_values;
+
1735 double Sum_Eigen = 0;
+
1736 for(int i = 0; i < eigen_val.size(); i++)
+
1737 {
+
1738 std::tuple<double, Eigen::VectorXd> vec_and_val(eigen_val[i], eigen_vect.row(i));
+
1739 eigen_vectors_and_values.push_back(vec_and_val);
+
1740 Sum_Eigen += eigen_val[i];
+
1741 }
+
1742 std::sort(eigen_vectors_and_values.begin(), eigen_vectors_and_values.end(),
+
1743 [&](const std::tuple<double, Eigen::VectorXd>& a, const std::tuple<double, Eigen::VectorXd>& b) -> bool
+
1744 { return std::get<0>(a) > std::get<0>(b); } );
+
1745 int index = 0;
+
1746 for(auto const vect : eigen_vectors_and_values)
+
1747 {
+
1748 eigen_val(index) = std::get<0>(vect);
+
1749 eigen_vect.row(index) = std::get<1>(vect);
+
1750 index++;
+
1751 }
+
1752 TH1D* heigen_values_Eigen = new TH1D("eig_values", "Eigen Values", eigen_val.size(), 0.0, eigen_val.size());
+
1753 TH1D* heigen_cumulative_Eigen = new TH1D("eig_cumulative", "heigen_cumulative", eigen_val.size(), 0.0, eigen_val.size());
+
1754 TH1D* heigen_frac_Eigen = new TH1D("eig_fractional", "heigen_fractional", eigen_val.size(), 0.0, eigen_val.size());
+
1755 heigen_values_Eigen->GetXaxis()->SetTitle("Eigen Vector");
+
1756 heigen_values_Eigen->GetYaxis()->SetTitle("Eigen Value");
+
1757
+
1758 double Cumulative_Eigen = 0;
+
1759 for(int i = 0; i < eigen_val.size(); i++)
+
1760 {
+
1761 heigen_values_Eigen->SetBinContent(i+1, eigen_val(i));
+
1762 heigen_cumulative_Eigen->SetBinContent(i+1, eigen_val(i)/sum + Cumulative_Eigen);
+
1763 heigen_frac_Eigen->SetBinContent(i+1, eigen_val(i)/sum);
+
1764 Cumulative_Eigen += eigen_val(i)/sum;
+
1765 }
+
1766 heigen_values_Eigen->SetLineColor(kRed);
+
1767 heigen_values_Eigen->SetLineWidth(2);
+
1768 heigen_cumulative_Eigen->SetLineColor(kGreen);
+
1769 heigen_cumulative_Eigen->SetLineWidth(2);
+
1770 heigen_frac_Eigen->SetLineColor(kBlue);
+
1771 heigen_frac_Eigen->SetLineWidth(2);
+
1772
+
1773 c1->SetLogy();
+
1774 heigen_values_Eigen->SetMaximum(heigen_cumulative_Eigen->GetMaximum()+heigen_cumulative_Eigen->GetMaximum()*0.4);
+
1775 heigen_values_Eigen->Draw();
+
1776 heigen_cumulative_Eigen->Draw("SAME");
+
1777 heigen_frac_Eigen->Draw("SAME");
+
1778
+
1779 TLegend *leg_Eigen = new TLegend(0.2, 0.2, 0.6, 0.5);
+
1780 leg_Eigen->SetTextSize(0.04);
+
1781 leg_Eigen->AddEntry(heigen_values_Eigen, "Absolute", "l");
+
1782 leg_Eigen->AddEntry(heigen_frac_Eigen, "Fractional", "l");
+
1783 leg_Eigen->AddEntry(heigen_cumulative_Eigen, "Cumulative", "l");
+
1784
+
1785 leg_Eigen->SetLineColor(0);
+
1786 leg_Eigen->SetLineStyle(0);
+
1787 leg_Eigen->SetFillColor(0);
+
1788 leg_Eigen->SetFillStyle(0);
+
1789 leg_Eigen->Draw("Same");
+
1790
+
1791 c1->Print( "Debug_PCA.pdf");
+
1792 c1->SetLogy(0);
+
1793 delete heigen_values_Eigen;
+
1794 delete heigen_cumulative_Eigen;
+
1795 delete heigen_frac_Eigen;
+
1796 delete leg_Eigen;
+
1797
+
1798 TH2D* heigen_vectors_Eigen = new TH2D("Eigen_Vectors", "Eigen_Vectors", eigen_val.size(), 0.0, eigen_val.size(), eigen_val.size(), 0.0, eigen_val.size());
+
1799
+
1800 for(int i = 0; i < eigen_val.size(); i++)
+
1801 {
+
1802 for(int j = 0; j < eigen_val.size(); j++)
+
1803 {
+
1804 //KS: +1 because there is offset in histogram relative to TMatrix
+
1805 heigen_vectors_Eigen->SetBinContent(i+1,j+1, eigen_vect(i,j));
+
1806 }
+
1807 }
+
1808 heigen_vectors_Eigen->GetXaxis()->SetTitle("Parameter in Normal Base");
+
1809 heigen_vectors_Eigen->GetYaxis()->SetTitle("Parameter in Decomposed Base");
+
1810 heigen_vectors_Eigen->SetMarkerSize(0.15);
+
1811 minz = heigen_vectors_Eigen->GetMinimum();
+
1812 if (fabs(0-maxz)>fabs(0-minz)) heigen_vectors_Eigen->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1813 else heigen_vectors_Eigen->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1814
+
1815 if(PlotText) heigen_vectors_Eigen->Draw("COLZ TEXT");
+
1816 else heigen_vectors_Eigen->Draw("COLZ");
+
1817 c1->Print( "Debug_PCA.pdf");
+
1818
+
1819 heigen_vectors->SetTitle("ROOT minus Eigen");
+
1820 heigen_vectors->Add(heigen_vectors_Eigen, -1.);
+
1821 minz = heigen_vectors->GetMinimum();
+
1822 if (fabs(0-maxz)>fabs(0-minz)) heigen_vectors->GetZaxis()->SetRangeUser(0-fabs(0-maxz),0+fabs(0-maxz));
+
1823 else heigen_vectors->GetZaxis()->SetRangeUser(0-fabs(0-minz),0+fabs(0-minz));
+
1824 if(PlotText) heigen_vectors->Draw("COLZ TEXT");
+
1825 else heigen_vectors->Draw("COLZ");
+
1826 c1->Print( "Debug_PCA.pdf");
+
1827 delete heigen_vectors_Eigen;
+
1828
+
1829 #endif
+
1830 delete heigen_vectors;
+
1831
+
1832 c1->Print( "Debug_PCA.pdf]");
+
1833 delete c1;
+
1834 PCA_Debug->Close();
+
1835 delete PCA_Debug;
+
1836}
+
1837#endif
+
std::vector< int > nominal
+
#define MACH3LOG_CRITICAL
Definition MaCh3Logger.h:12
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+ +
void SetSeed(int seed=0)
Definition ThrowParms.h:32
+
void ThrowSet(std::vector< double > &parms)
+ + +
double getDiagonalError(const int i)
+
std::string GetParName(const int i)
+ +
std::vector< double > par_means_prev
+
std::vector< double > _fPropVal
+
void setParCurrProp(int i, double val)
+ +
void setStepScale(double scale)
+
double getParInit(const int i)
+ +
virtual ~covarianceBase()
+
bool isParameterFixed(const int i)
+
TVectorD fParProp_PCA
+
std::vector< double > _fUpBound
+ +
std::vector< double > _fError
+
TMatrixDSym * invCovMatrix
+ +
void setParameters(std::vector< double > pars=std::vector< double >())
+
void MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)
+
std::vector< double > _fIndivStepScale
+
std::vector< std::string > _fNames
+
const char * matrixName
+
double ** InvertCovMatrix
+
TMatrixDSym * adaptiveCovariance
+
void throwParCurr(const double mag=1.)
+
void updateAdaptiveCovariance()
+
const std::vector< double > getProposed() const
+
TMatrixD TransferMatT
+ + +
void setCovMatrix(TMatrixDSym *cov)
+
void setName(const char *name)
+
TRandom3 ** random_number
+ + +
std::string GetParFancyName(const int i)
+
TMatrixDSym * covMatrix
+
TMatrixDSym * throwMatrix
+ + +
const char * getName()
+
std::vector< double > _fPreFitValue
+
void ReserveMemory(const int size)
+ +
std::vector< double > fParSigma_PCA
+ +
void updateThrowMatrix(TMatrixDSym *cov)
+ + + +
void makeClosestPosDef(TMatrixDSym *cov)
+ +
void setBranches(TTree &tree)
+
std::vector< double > _fLowBound
+
YAML::Node _fYAMLDoc
+
virtual void proposeStep()
+
std::vector< std::string > _fFancyNames
+
void setSingleParameter(const int parNo, const double parVal)
+
void setEvalLikelihood(int i, bool eL)
+
std::vector< double > _fGenerated
+
virtual double GetLikelihood()
+
unsigned int PrintLength
+
void MakePosDef(TMatrixDSym *cov=NULL)
+ + +
std::vector< double > par_means
+
TVectorD fParCurr_PCA
+
void setPar(const int i, const double val)
+
void toggleFixParameter(const int i)
+ +
TMatrixD * throwMatrix_CholDecomp
+ + +
void init(const char *name, const char *file)
+
TH2D * GetCorrelationMatrix()
+
void throwNominal(bool nomValues=false, int seed=0)
+ +
virtual int CheckBounds()
+
void initialiseNewAdaptiveChain()
+
TMatrixD eigen_vectors
+ + +
double ** throwMatrixCholDecomp
+
double MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)
+ +
TVectorD eigen_values
+
void saveAdaptiveToFile(TString outFileName, TString systematicName)
+
void setIndivStepScale(int ParameterIndex, double StepScale)
+
std::vector< bool > _fFlatPrior
+ + +
virtual std::vector< double > getNominalArray()
+
std::vector< double > _fCurrVal
+
std::vector< int > isDecomposed_PCA
+
std::vector< double > eigen_values_master
+ +
void setThrowMatrix(TMatrixDSym *cov)
+
void throwParProp(const double mag=1.)
+ +
covarianceBase(std::vector< std::string > YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
+ +
#define __LARGE_LOGL__
+ +
TH2D * TMatrixIntoTH2D(const TMatrix &Matrix, std::string title)
+
+ + + + diff --git a/covarianceBase_8h.html b/covarianceBase_8h.html new file mode 100644 index 00000000..d7c503c5 --- /dev/null +++ b/covarianceBase_8h.html @@ -0,0 +1,125 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceBase.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
covarianceBase.h File Reference
+
+
+
#include "samplePDF/Structs.h"
+#include "covariance/CovarianceUtils.h"
+#include "covariance/ThrowParms.h"
+#include "yaml-cpp/yaml.h"
+#include "manager/MaCh3Logger.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  covarianceBase
 
+ + + +

+Macros

#define __LARGE_LOGL__   1234567890.0
 
+

Macro Definition Documentation

+ +

◆ __LARGE_LOGL__

+ +
+
+ + + + +
#define __LARGE_LOGL__   1234567890.0
+
+ +

Definition at line 13 of file covarianceBase.h.

+ +
+
+
+ + + + diff --git a/covarianceBase_8h_source.html b/covarianceBase_8h_source.html new file mode 100644 index 00000000..bf8b9019 --- /dev/null +++ b/covarianceBase_8h_source.html @@ -0,0 +1,670 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceBase.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceBase.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// MaCh3 includes
+
4#include "samplePDF/Structs.h"
+ + +
7
+
8// Don't forget yaml!
+
9#include "yaml-cpp/yaml.h"
+
10#include "manager/MaCh3Logger.h"
+
11
+
12#ifndef __LARGE_LOGL__
+
13#define __LARGE_LOGL__ 1234567890.0
+
14#endif
+
15
+
16//#define DEBUG_PCA 1
+
17#ifdef DEBUG_PCA
+
18//KS: When debugging we produce some fancy plots, but we don't need it during normal work flow
+
19#include "TROOT.h"
+
20#include "TStyle.h"
+
21#include "TColor.h"
+
22#include "TLine.h"
+
23#include "TText.h"
+
24#include "TLegend.h"
+
25
+
26#if DEBUG_PCA == 2
+
27#include "Eigen/Eigenvalues"
+
28#endif
+
29
+
30#endif
+
31
+
+ +
33 public:
+
34 //ETA - constructor for a YAML file
+
35 covarianceBase(std::vector<std::string> YAMLFile, double threshold = -1, int FirstPCAdpar = -999, int LastPCAdpar = -999);
+
36 //"Usual" constructors from root file
+
37 covarianceBase(const char *name, const char *file);
+
38 covarianceBase(const char *name, const char *file, int seed);
+
39 // For Eigen Value decomp
+
40 covarianceBase(const char *name, const char *file, int seed, double threshold,int FirstPCAdpar, int LastPCAdpar);
+
41 virtual ~covarianceBase();
+
42
+
43 // Setters
+
44 // ETA - maybe need to add checks to index on the setters? i.e. if( i > _fPropVal.size()){throw;}
+
45 void setCovMatrix(TMatrixDSym *cov);
+
46 void setName(const char *name) { matrixName = name; }
+
47 void setParName(int i, char *name) { _fNames.at(i) = std::string(name); }
+
48 void setSingleParameter(const int parNo, const double parVal);
+
49 void setPar(const int i, const double val);
+
50 void setParCurrProp(int i, double val);
+
+
51 void setParProp(int i, double val) {
+
52 _fPropVal[i] = val;
+
53 if (pca) TransferToPCA();
+
54 };
+
+
55 void setParameters(std::vector<double> pars = std::vector<double>());
+
56 void setEvalLikelihood(int i, bool eL);
+
57
+
58 // set branches for output file
+
59 void setBranches(TTree &tree);
+
60 void setStepScale(double scale);
+
61 //DB Function to set fIndivStepScale from a vector (Can be used from execs and inside covariance constructors)
+
62 void setIndivStepScale(int ParameterIndex, double StepScale){ _fIndivStepScale.at(ParameterIndex) = StepScale; };
+
63 void setIndivStepScale(std::vector<double> stepscale);
+
64 //KS: In case someone really want to change this
+
65 inline void setPrintLength(const unsigned int PriLen) { PrintLength = PriLen; };
+
66
+
67 // Throwers
+
68 void throwParProp(const double mag = 1.);
+
69 void throwParCurr(const double mag = 1.);
+
70 void throwParameters();
+
71 void throwNominal(bool nomValues = false, int seed = 0);
+
72 // Randomly throw the parameters in their 1 sigma range
+ +
74
+
75 //LLH Related
+
76 virtual int CheckBounds();
+
77 double CalcLikelihood();
+
78 virtual double GetLikelihood();
+
79
+
80 // Getters
+
81 TMatrixDSym *getCovMatrix() { return covMatrix; };
+
82 TMatrixDSym *getInvCovMatrix() { return invCovMatrix; };
+
83 bool getEvalLikelihood(const int i) { return _fFlatPrior[i]; };
+
84
+
85 const char *getName() { return matrixName; };
+
86 std::string GetParName(const int i) {return _fNames[i];};
+
87 const char* GetParName(const int i) const { return _fNames[i].c_str(); };
+
88 std::string GetParFancyName(const int i) {return _fFancyNames[i];};
+
89 const char* GetParFancyName(const int i) const { return _fFancyNames[i].c_str(); };
+
90 std::string const getInputFile() const { return inputFile; };
+
91
+
92 // Get diagonal error for ith parameter
+
93 inline double getDiagonalError(const int i) { return std::sqrt((*covMatrix)(i,i)); }
+
94
+
95 // Adaptive Step Tuning Stuff
+ +
97 void useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName="");
+ +
99 void saveAdaptiveToFile(TString outFileName, TString systematicName);
+
100
+
101 void setThrowMatrix(TMatrixDSym *cov);
+
102 void updateThrowMatrix(TMatrixDSym *cov);
+
+
103 void setNumberOfSteps(const int nsteps){
+
104 total_steps = nsteps;
+ +
106 }
+
+
107 // Set thresholds for MCMC steps
+
108 inline void setAdaptiveThresholds(const int low_threshold = 10000, const int up_threshold = 1000000){lower_adapt=low_threshold; upper_adapt = up_threshold;}
+
109
+
110 inline TMatrixDSym *getThrowMatrix(){return throwMatrix;}
+ +
112 inline std::vector<double> getParameterMeans(){return par_means;}
+
113 TH2D* GetCorrelationMatrix();
+
114
+
115 // What parameter Gets reweighted by what amount according to MCMC
+
+
116 inline double calcReWeight(const int bin) {
+
117 if (bin >= 0 && bin < _fNumPar) {
+
118 return _fPropVal[bin];
+
119 } else {
+
120 std::cerr << "Specified bin is <= 0 OR bin > npar!" << std::endl;
+
121 std::cerr << "bin = " << bin << ", npar = " << _fNumPar << std::endl;
+
122 std::cerr << "This won't ruin much that this step in the MCMC, but does indicate something wrong in memory!" << std::endl;
+
123 return 1.0;
+
124 }
+
125 return 1.0;
+
126 };
+
+
127 //========
+
128 //DB Pointer return
+
129 //ETA - This might be a bit squiffy? If the vector gots moved from say a
+
130 //push_back then the pointer is no longer valid... maybe need a better
+
131 //way to deal with this? It was fine before when the return was to an
+
132 //element of a new array. There must be a clever C++ way to be careful
+
133 //========
+
134 const double* retPointer(int iParam) {return &(_fPropVal.data()[iParam]);}
+
135
+
136 //Some Getters
+
137 int GetNumParams() {return _fNumPar;}
+
138 virtual std::vector<double> getNominalArray();
+
139 const std::vector<double>& getPreFitValues(){return _fPreFitValue;}
+
140 const std::vector<double>& getGeneratedValues(){return _fGenerated;}
+
141 const std::vector<double> getProposed() const;
+
142 inline double getParProp(const int i) { return _fPropVal[i]; }
+
143 inline double getParCurr(const int i) { return _fCurrVal[i]; }
+
144 inline double getParInit(const int i) { return _fPreFitValue[i]; }
+
145
+
146 virtual double getNominal(const int i) { return getParInit(i); }
+
147 inline double GetGenerated(const int i) { return _fGenerated[i];}
+
148 inline double GetUpperBound(const int i){ return _fUpBound[i];}
+
149 inline double GetLowerBound(const int i){ return _fLowBound[i]; }
+
150
+
+
151 double getParProp_PCA(const int i) {
+
152 if (!pca) {
+
153 MACH3LOG_ERROR("Am not running in PCA mode");
+
154 throw;
+
155 }
+
156 return fParProp_PCA(i);
+
157 };
+
+
158
+
+
159 double getParCurr_PCA(const int i) {
+
160 if (!pca) {
+
161 MACH3LOG_ERROR("Am not running in PCA mode");
+
162 throw;
+
163 }
+
164 return fParCurr_PCA(i);
+
165 };
+
+
166
+
+
167 bool isParameterFixedPCA(const int i) {
+
168 if (fParSigma_PCA[i] < 0) {
+
169 return true;
+
170 } else {
+
171 return false;
+
172 }
+
173 }
+
+
174
+
+
175 const TMatrixD getTransferMatrix() {
+
176 if (!pca) {
+
177 MACH3LOG_ERROR("Am not running in PCA mode");
+
178 throw;
+
179 }
+
180 return TransferMat;
+
181 }
+
+
182
+
+
183 const TMatrixD getEigenVectors() {
+
184 if (!pca) {
+
185 MACH3LOG_ERROR("Am not running in PCA mode");
+
186 throw;
+
187 }
+
188 return eigen_vectors;
+
189 }
+
+
190
+
+
191 const TVectorD getEigenValues() {
+
192 if (!pca) {
+
193 MACH3LOG_ERROR("Am not running in PCA mode");
+
194 throw;
+
195 }
+
196 return eigen_values;
+
197 }
+
+
198
+
+
199 inline const std::vector<double> getEigenValuesMaster() {
+
200 if (!pca) {
+
201 MACH3LOG_ERROR("Am not running in PCA mode");
+
202 throw;
+
203 }
+
204 return eigen_values_master;
+
205 }
+
+
206
+
+
207 void setParProp_PCA(const int i, const double value) {
+
208 if (!pca) {
+
209 MACH3LOG_ERROR("Am not running in PCA mode");
+
210 throw;
+
211 }
+
212 fParProp_PCA(i) = value;
+
213 // And then transfer back to the parameter basis
+ +
215 }
+
+
216
+
+
217 void setParCurr_PCA(const int i, const double value) {
+
218 if (!pca) {
+
219 MACH3LOG_ERROR("Am not running in PCA mode");
+
220 throw;
+
221 }
+
222 fParCurr_PCA(i) = value;
+
223 // And then transfer back to the parameter basis
+ +
225 }
+
+
226
+
+
227 inline void setParameters_PCA(std::vector<double> pars)
+
228 {
+
229 if (!pca)
+
230 {
+
231 MACH3LOG_ERROR("Am not running in PCA mode");
+
232 throw;
+
233 }
+
234 if (pars.size() != size_t(npars)) {
+
235 std::cerr << "Warning: parameter arrays of incompatible size! Not changing parameters! " << matrixName << " has size " << pars.size() << " but was expecting " << size << std::endl;
+
236 throw;
+
237 }
+
238 unsigned int parsSize = pars.size();
+
239 for (unsigned int i = 0; i < parsSize; i++)
+
240 {
+
241 fParProp_PCA(i) = pars[i];
+
242 }
+
243 //KS: Transfer to normal base
+ +
245 }
+
+
246
+
247 inline int getSize() { return size; };
+
+
248 inline int getNpars() {
+
249 if (pca) return npars;
+
250 else return size;
+
251 }
+
+
252
+
253 // Printers
+
254 void printNominal();
+ +
256 void printPars();
+
257 void printIndivStepScale();
+
258
+
259 // Steppers
+
260 virtual void proposeStep(); // generate a new proposed state
+
261 void acceptStep(); // accepted this step
+
262
+
263 // fix parameters at nominal values
+ +
265 void toggleFixParameter(const int i);
+
+
266 bool isParameterFixed(const int i) {
+
267 if (_fError[i] < 0) {
+
268 return true;
+
269 } else {
+
270 return false;
+
271 }
+
272 }
+
+
273 void ConstructPCA();
+
274 #ifdef DEBUG_PCA
+
275 void DebugPCA(const double sum, TMatrixD temp, TMatrixDSym submat);
+
276 #endif
+
277
+
278 // is PCA, can use to query e.g. LLH scans
+
279 bool IsPCA() { return pca; };
+
280
+
281 inline void MatrixVectorMulti(double* VecMulti, double** matrix, const double* vector, const int n);
+
282 inline double MatrixVectorMultiSingle(double** matrix, const double* vector, const int Length, const int i);
+
283
+
284 //Turn on/off true adaptive MCMC
+
285 //Also set thresholds for use (having a lower threshold gives us some data to adapt from!)
+
+
286 void enableAdaptiveMCMC(bool enable = true){
+
287 use_adaptive = enable;
+
288 total_steps = 0; //Set these to default values
+
289 lower_adapt = 10000;
+
290 upper_adapt = 10000000;
+
291 }
+
+ +
293
+
294 protected:
+
295 void init(const char *name, const char *file);
+
296 //YAML init
+
297 void init(std::vector<std::string> YAMLFile);
+
298 void init(TMatrixDSym* covMat);
+
299 void ReserveMemory(const int size);
+
300
+
301 void randomize();
+
302 void CorrelateSteps();
+
303
+
304 void MakePosDef(TMatrixDSym *cov = NULL);
+
305 void makeClosestPosDef(TMatrixDSym *cov);
+
306 void TransferToPCA();
+
307 void TransferToParam();
+
308
+
309 //Handy function to return 1 for any systs
+
310 const double* ReturnUnity(){return &Unity;}
+
311
+
312 // The input root file we read in
+
313 const std::string inputFile;
+
314
+
315 int size;
+
316 // Name of cov matrix
+
317 const char *matrixName;
+
318 // The covariance matrix
+
319 TMatrixDSym *covMatrix;
+
320 // The inverse covariance matrix
+
321 TMatrixDSym *invCovMatrix;
+
322 //KS: Same as above but much faster as TMatrixDSym cache miss
+ +
324
+
325 //KS: set Random numbers for each thread so each thread has different seed
+
326 TRandom3 **random_number;
+
327
+
328 // For Cholesky decomposed parameter throw
+
329 double* randParams;
+
330 double* corr_throw;
+ +
332
+
333 //KS: This is used when printing parameters, sometimes we have super long parameters name, we want to flexibly adjust couts
+
334 unsigned int PrintLength;
+
335
+
336 // state info (now mostly vectors)
+
337 //ETA - duplication of some of these
+
338 //ideally these should all be private and we have setters be protected
+
339 //setters and public getters
+
340 //_fNames is set automatically in the covariance class to be something like xsec_i
+
341 //this is currently to make things compatible with the Diagnostic tools
+
342 std::vector<std::string> _fNames;
+
343 std::vector<std::string> _fFancyNames;
+ +
345 YAML::Node _fYAMLDoc;
+
346 std::vector<double> _fPreFitValue;
+
347 std::vector<double> _fCurrVal;
+
348 std::vector<double> _fPropVal;
+
349 std::vector<double> _fGenerated;
+
350 std::vector<double> _fError;
+
351 std::vector<double> _fLowBound;
+
352 std::vector<double> _fUpBound;
+
353 std::vector<double> _fIndivStepScale;
+
354 std::vector<bool> _fFlatPrior;
+
355
+
356 //Unity for null systs to point back to
+
357 const double Unity = 1.0;
+
358
+
359 // PCA
+
360 bool pca;
+ +
362 int npars;
+ + + +
366 TVectorD eigen_values;
+ +
368 std::vector<double> eigen_values_master;
+
369 TMatrixD TransferMat;
+
370 TMatrixD TransferMatT;
+
371 // Also save current and proposed parameter in PCA basis
+
372 TVectorD fParProp_PCA;
+
373 TVectorD fParCurr_PCA;
+
374 std::vector<double> fParSigma_PCA;
+
375 std::vector<int> isDecomposed_PCA;
+
376
+
377 //Adaptive MCMC
+
378 TMatrixDSym* throwMatrix;
+ +
380 //Same as above but much faster as TMatrixDSym cache miss
+ +
382
+
383 // Truly Adaptive Stuff
+ +
385 // TMatrixD* getMatrixSqrt(TMatrixDSym* inputMatrix);
+
386 // double calculateSubmodality(TMatrixD* sqrtVectorCov, TMatrixDSym* throwCov);
+ + +
389 int lower_adapt, upper_adapt; //Thresholds for when to turn on/off adaptive MCMC
+
390 // TMatrixD* covSqrt;
+
391 std::vector<double> par_means;
+
392 std::vector<double> par_means_prev;
+
393 TMatrixDSym* adaptiveCovariance;
+
394};
+
+ + +
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+ + + + + +
double getDiagonalError(const int i)
+
std::string GetParName(const int i)
+
double getParCurr(const int i)
+ +
double GetUpperBound(const int i)
+
std::vector< double > par_means_prev
+
const std::vector< double > getEigenValuesMaster()
+
std::string const getInputFile() const
+
TMatrixDSym * getInvCovMatrix()
+
std::vector< double > _fPropVal
+
void setParCurrProp(int i, double val)
+
double calcReWeight(const int bin)
+
void setParProp(int i, double val)
+ +
void setStepScale(double scale)
+
double getParInit(const int i)
+ +
void setNumberOfSteps(const int nsteps)
+
virtual ~covarianceBase()
+
bool isParameterFixed(const int i)
+ +
const char * GetParName(const int i) const
+
TVectorD fParProp_PCA
+ +
std::vector< double > _fUpBound
+
void setPrintLength(const unsigned int PriLen)
+ +
std::vector< double > _fError
+
TMatrixDSym * invCovMatrix
+ +
double getParProp(const int i)
+
void setParameters(std::vector< double > pars=std::vector< double >())
+
void MatrixVectorMulti(double *VecMulti, double **matrix, const double *vector, const int n)
+
std::vector< double > _fIndivStepScale
+
double GetGenerated(const int i)
+ +
double getParProp_PCA(const int i)
+
const double * ReturnUnity()
+
std::vector< std::string > _fNames
+
const char * matrixName
+
const std::vector< double > & getPreFitValues()
+
double ** InvertCovMatrix
+
TMatrixDSym * adaptiveCovariance
+
void throwParCurr(const double mag=1.)
+
void updateAdaptiveCovariance()
+
const char * GetParFancyName(const int i) const
+
const std::vector< double > getProposed() const
+
const std::string inputFile
+
TMatrixD * getThrowMatrix_CholDecomp()
+
void setParCurr_PCA(const int i, const double value)
+
TMatrixDSym * getCovMatrix()
+
bool getEvalLikelihood(const int i)
+
virtual double getNominal(const int i)
+
TMatrixD TransferMatT
+ + +
void setCovMatrix(TMatrixDSym *cov)
+
void setName(const char *name)
+
TRandom3 ** random_number
+
double GetLowerBound(const int i)
+ + +
std::string GetParFancyName(const int i)
+
TMatrixDSym * covMatrix
+
TMatrixDSym * throwMatrix
+ + +
const char * getName()
+
std::vector< double > _fPreFitValue
+
void ReserveMemory(const int size)
+
const double Unity
+ +
std::vector< double > fParSigma_PCA
+
void setParProp_PCA(const int i, const double value)
+ +
void setAdaptiveThresholds(const int low_threshold=10000, const int up_threshold=1000000)
+
void updateThrowMatrix(TMatrixDSym *cov)
+ + + +
void makeClosestPosDef(TMatrixDSym *cov)
+ +
void setBranches(TTree &tree)
+
std::vector< double > _fLowBound
+
YAML::Node _fYAMLDoc
+
virtual void proposeStep()
+
std::vector< std::string > _fFancyNames
+
void setSingleParameter(const int parNo, const double parVal)
+
void setEvalLikelihood(int i, bool eL)
+
void enableAdaptiveMCMC(bool enable=true)
+
std::vector< double > _fGenerated
+
virtual double GetLikelihood()
+
unsigned int PrintLength
+
void MakePosDef(TMatrixDSym *cov=NULL)
+ +
const std::vector< double > & getGeneratedValues()
+
TMatrixDSym * getThrowMatrix()
+ +
std::vector< double > par_means
+
TVectorD fParCurr_PCA
+
void setPar(const int i, const double val)
+
void toggleFixParameter(const int i)
+ + +
bool isParameterFixedPCA(const int i)
+
std::vector< double > getParameterMeans()
+
TMatrixD * throwMatrix_CholDecomp
+ + +
void init(const char *name, const char *file)
+
const double * retPointer(int iParam)
+
TH2D * GetCorrelationMatrix()
+
void throwNominal(bool nomValues=false, int seed=0)
+ +
virtual int CheckBounds()
+
void initialiseNewAdaptiveChain()
+
TMatrixD eigen_vectors
+ + +
double ** throwMatrixCholDecomp
+
const TMatrixD getTransferMatrix()
+
double MatrixVectorMultiSingle(double **matrix, const double *vector, const int Length, const int i)
+
void setParName(int i, char *name)
+
const TMatrixD getEigenVectors()
+ +
TVectorD eigen_values
+
void saveAdaptiveToFile(TString outFileName, TString systematicName)
+
void setIndivStepScale(int ParameterIndex, double StepScale)
+
std::vector< bool > _fFlatPrior
+ +
const TVectorD getEigenValues()
+ +
virtual std::vector< double > getNominalArray()
+
std::vector< double > _fCurrVal
+
std::vector< int > isDecomposed_PCA
+
std::vector< double > eigen_values_master
+ +
void setParameters_PCA(std::vector< double > pars)
+
void setThrowMatrix(TMatrixDSym *cov)
+
double getParCurr_PCA(const int i)
+
void throwParProp(const double mag=1.)
+ +
+ + + + diff --git a/covarianceOsc_8cpp.html b/covarianceOsc_8cpp.html new file mode 100644 index 00000000..e4c678af --- /dev/null +++ b/covarianceOsc_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceOsc.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceOsc.cpp File Reference
+
+ + + + + diff --git a/covarianceOsc_8cpp_source.html b/covarianceOsc_8cpp_source.html new file mode 100644 index 00000000..483235de --- /dev/null +++ b/covarianceOsc_8cpp_source.html @@ -0,0 +1,409 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceOsc.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceOsc.cpp
+
+
+Go to the documentation of this file.
1#include "covarianceOsc.h"
+
2
+
3// *************************************
+
+
4covarianceOsc::covarianceOsc(const char* name, const char *file)
+
5: covarianceBase(name, file) {
+
6// *************************************
+
7
+
8 //Read in osc pars from xml file
+
9 TFile *infile = new TFile(file, "READ");
+
10 TVectorD* osc_prior = (TVectorD*)infile->Get("osc_nom");
+
11 TVectorD* osc_stepscale = (TVectorD*)infile->Get("osc_stepscale");
+
12 TVectorD* osc_sigma = (TVectorD*)infile->Get("osc_sigma");
+
13 TVectorD* osc_flat_prior = (TVectorD*)infile->Get("osc_flat_prior");
+
14
+
15 TObjArray* objarr_name = (TObjArray*)(infile->Get("osc_param_names"));
+
16
+
17 TVectorD* osc_baseline = (TVectorD*)infile->Get("osc_baseline");
+
18 TVectorD* osc_density = (TVectorD*)infile->Get("osc_density");
+
19 double fScale = 1.0;
+
20
+
21 //KS: Save all necessary information from covariance
+
22 for(int io = 0; io < size; io++)
+
23 {
+
24 _fNames[io] = std::string(((TObjString*)objarr_name->At(io))->GetString());
+
25
+
26 _fPreFitValue[io] = (*osc_prior)(io);
+
27 _fCurrVal[io] = _fPropVal[io] = _fPreFitValue[io];
+
28 _fError[io] = (*osc_sigma)(io);
+
29
+
30 _fIndivStepScale[io] = fScale * (*osc_stepscale)(io);
+
31
+
32 //KS: Set flat prior
+
33 if( (bool)((*osc_flat_prior)(io)) ) setEvalLikelihood(io,false);
+
34 }
+
35
+
36 kDeltaCP = -999;
+
37 kDeltaM23 = -999;
+
38 kSinTheta23 = -999;
+
39 kBeta = -999;
+
40 PerformBetaStudy = false;
+
41 for(int io = 0; io < size; io++)
+
42 {
+
43 if(_fNames[io] == "delta_cp") kDeltaCP = io;
+
44 if(_fNames[io] == "delm2_23") kDeltaM23 = io;
+
45 if(_fNames[io] == "sin2th_23") kSinTheta23 = io;
+
46 if(_fNames[io] == "beta")
+
47 {
+
48 PerformBetaStudy = true;
+
49 kBeta = io;
+
50 }
+
51 }
+
52
+
53 L = (*osc_baseline)(0);
+
54 density = (*osc_density)(0);
+
55
+
56 flipdelM = false;
+
57 reactorPrior = false;
+
58 flipBeta = false;
+
59
+
60 randomize();
+
61
+
62 oscpars1 = new double[10];
+
63
+
64 //KS:those are constant no need to overwrite them each time
+
65 oscpars1[6] = 2;
+
66 oscpars1[7] = L;
+
67 oscpars1[8] = density;
+
68
+
69 Print();
+ +
71
+
72 infile->Close();
+
73 delete infile;
+
74
+
75 std::cout << "created oscillation parameter handler" << std::endl;
+
76}
+
+
77
+
78// *************************************
+
+ +
80// *************************************
+
81
+
82 delete[] oscpars1;
+
83}
+
+
84
+
85// *************************************
+
+ +
87// *************************************
+
88 int NOutside = 0;
+
89
+
90 // ensure osc params don't go unphysical
+
91 if (_fPropVal[0] > 1.0 || _fPropVal[0] < 0 ||
+ +
93 _fPropVal[2] > 1.0 || _fPropVal[2] < 0
+
94 //|| _fPropVal[kDeltaM23] < 0.0 || _fPropVal[kDeltaM23] > 20E-3 // don't let dm32 go to IH
+
95 //|| fabs(_fPropVal[kDeltaM23]) > 0.004 || fabs(_fPropVal[kDeltaM23]) < 0.001
+
96 //|| _fPropVal[kDeltaCP] < -1*TMath::Pi() || _fPropVal[kDeltaCP] > TMath::Pi()
+
97 ){ NOutside++;}
+
98
+ +
100 if(_fPropVal[kBeta] < 0) { // Don't let beta be less than 0 (no upper limit)
+
101 NOutside++;
+
102 }
+
103 }
+
104
+
105 return NOutside;
+
106}
+
+
107// *************************************
+
+ +
109// *************************************
+
110
+
111 double logL = 0.0;
+ +
113
+
114 // reactor prior
+
115 // ETA - we can remove this
+
116 if (reactorPrior)
+
117 {
+
118 // Reactor prior from 2013 PDG: sin^2(2theta13) = 0.095 +/- 0.01
+
119 // Reactor prior from 2014 PDG: sin^2(2theta13) = 0.093 +/- 0.008
+
120 // Reactor prior from 2015 PDG: sin^2(2theta13) = 0.085 +/- 0.005
+
121 // Reactor prior from 2016ca PDG: sin^2(2theta13) = 0.0857 +/- 0.0046
+
122 // Next convert between single angle (what we have) and double angle (what the PDG gives)
+
123 // double dblang = 4*_fPropVal[2]*(1-_fPropVal[2]);
+
124 // double tmp = (dblang-0.0857) / 0.0046;
+
125
+
126 // Reactor prior from 2018 PDG: sin^2(theta13) = 0.0212 +/- 0.0008
+
127 // Reactor prior from 2019 PDG: sin^2(theta13) = 0.0218 +/- 0.0007
+
128 // Reactor prior from 2021 PDG: sin^2(theta13) = 0.0220 +/- 0.0007
+
129 // This time we don't have to convert between single<->double angle, PDG gives RC in single angle.
+
130
+
131 // Now calculate penalty
+
132 double tmp = (_fPropVal[2]-0.0220) / 0.0007;
+
133 //double tmp = (dblang-0.095) / 0.01;
+
134
+
135 // this line for T2K joint fit result, NOT REACTOR CONSTRAINT!
+
136 //double tmp = (_fPropVal[2] - 0.04571) / 0.01125;
+
137
+
138 // Finally: add to likelihood
+
139 logL += 0.5 * tmp * tmp;
+
140 //std::cout << "oscllh post-RC: " << logL << std::endl;
+
141 }
+
142 return logL;
+
143}
+
+
144
+
145// *************************************
+
+ +
147// *************************************
+
148
+
149 for(int i = 0; i < 6; i++)
+
150 oscpars1[i] = _fPropVal[i];
+
151
+
152 //Those are constant we initialised them already
+
153 //oscpars1[6] = 2;
+
154 //oscpars1[7] = L;
+
155 //oscpars1[8] = density;
+ + +
158 else
+
159 oscpars1[9] = 1;
+
160
+
161 return oscpars1;
+
162}
+
+
163// *************************************
+
+ +
165// *************************************
+
166
+ +
168
+
169 //ETA
+
170 //this won't work if abs(_fPropVal) > 2pi so we should consider
+
171 //plonking a while here
+
172 if(_fPropVal[kDeltaCP] > TMath::Pi()) {
+
173 _fPropVal[kDeltaCP] = (-2.*TMath::Pi() + _fPropVal[kDeltaCP]);
+
174 } else if (_fPropVal[kDeltaCP] < -TMath::Pi()) {
+
175 _fPropVal[kDeltaCP] = (2.*TMath::Pi() + _fPropVal[kDeltaCP]);
+
176 }
+
177
+
178 // Okay now we've done the standard steps, we can add in our nice flips
+
179 // hierarchy flip first
+
180 if(random_number[0]->Uniform() < 0.5 && flipdelM){
+
181 _fPropVal[kDeltaM23] *= -1;
+
182 }
+
183 // now octant flip
+
184 if(random_number[0]->Uniform() < 0.5){
+
185 // flip octant around point of maximal disappearance (0.5112)
+
186 // this ensures we move to a parameter value which has the same oscillation probability
+
187 _fPropVal[kSinTheta23] = 0.5112 - (_fPropVal[kSinTheta23] - 0.5112);
+
188 }
+
189 // And the beta flip (not sure if beta will still work...)
+
190 if(flipBeta)
+
191 {
+
192 if(random_number[0]->Uniform() < 0.5) _fPropVal[kBeta] = 1-_fCurrVal[kBeta];
+
193 }
+
194}
+
+
195
+
196// *************************************
+
+ +
198// *************************************
+
199
+
200 // set branches to save current and proposed osc pars for dm_32 and th_23
+
201 // Is this any different for any of the other parameters?
+
202 // Or can this SetExtraBranches just be in the base class?
+
203 for (int i = 0; i < size; ++i)
+
204 {
+
205 if (!(i==1 || i==4)) continue;
+
206
+
207 char bit_c[1024] = "c_";
+
208 strcat(bit_c, _fNames[i].c_str());
+
209 strcat(bit_c, "/D");
+
210 char name_c[1024] = "c_";
+
211 strcat(name_c, _fNames[i].c_str());
+
212 tree.Branch(name_c, (double*)&_fCurrVal[i], bit_c);
+
213
+
214 char bit_p[1024] = "p_";
+
215 strcat(bit_p, _fNames[i].c_str());
+
216 strcat(bit_p, "/D");
+
217 char name_p[1024] = "p_";
+
218 strcat(name_p, _fNames[i].c_str());
+
219 tree.Branch(name_p, (double*)&_fPropVal[i], bit_p);
+
220 }
+
221}
+
+
222// *************************************
+
223//KS: Print all usefull informations after initialization
+
+ +
225// *************************************
+
226
+
227 std::cout << "Number of pars: " << size << std::endl;
+
228 std::cout << "current " << matrixName << " parameters:" << std::endl;
+
229 std::cout << std::left << std::setw(5) << "#" << std::setw(2) << "|" << std::setw(25) << "Name" << std::setw(2) << "|" << std::setw(10) << "Nom." << std::setw(2) << "|" << std::setw(15) << "IndivStepScale" << std::setw(2) << "|" <<std::setw(15) << "_fError" << std::endl;
+
230 for(int i = 0; i < size; i++) {
+
231 std::cout << std::fixed << std::setprecision(5) << std::left << std::setw(5) << i << std::setw(2) << "|" << std::setw(25) << _fNames[i].c_str() << std::setw(2) << "|" << std::setw(10) << _fPreFitValue[i]<< std::setw(2) << "|" << std::setw(15) << _fIndivStepScale[i] << std::setw(2) << "|" << std::setw(15)<< _fError[i]<< std::endl;
+
232 }
+
233
+
234 std::cout<<"Baseline: "<< L <<std::endl;
+
235 std::cout<<"Earth Density: "<< density <<std::endl;
+
236}
+
+
237
+
238// *************************************
+
239//KS: Currently prob3++/probgp requires particular order so we need to check this is the case
+
+ +
241// *************************************
+
242
+
243 std::vector<int> wrongParam;
+
244 bool wrongMatrix = false;
+
245 if(strcmp( _fNames[0].c_str(),"sin2th_12") != 0 ){wrongParam.push_back(0); wrongMatrix = true;};
+
246 if(strcmp( _fNames[1].c_str(),"sin2th_23") != 0 ){wrongParam.push_back(1); wrongMatrix = true;};
+
247 if(strcmp( _fNames[2].c_str(),"sin2th_13") != 0 ){wrongParam.push_back(2); wrongMatrix = true;};
+
248 if(strcmp( _fNames[3].c_str(),"delm2_12") != 0 ){wrongParam.push_back(3); wrongMatrix = true;};
+
249 if(strcmp( _fNames[4].c_str(),"delm2_23") != 0 ){wrongParam.push_back(4); wrongMatrix = true;};
+
250 if(strcmp( _fNames[5].c_str(),"delta_cp") != 0 ){wrongParam.push_back(5); wrongMatrix = true;};
+
251 if(PerformBetaStudy && strcmp( _fNames[6].c_str(),"beta") != 0 ){wrongParam.push_back(6); wrongMatrix = true;};
+
252
+
253 if(wrongMatrix)
+
254 {
+
255 for(unsigned int i = 0; i < wrongParam.size(); i++ )
+
256 {
+
257 std::cerr << "Osc Patameter "<< _fNames[i].c_str() <<" isn't in good order"<<std::endl;
+
258 }
+
259 std::cerr << "Currently prob3++/probgp requires particular order"<< std::endl;
+
260 std::cerr << "Please modify XML and make new matrix with good order"<< std::endl;
+
261 std::cerr << "Find me here "<<__FILE__ << ":" << __LINE__ << std::endl;
+
262 throw;
+
263 }
+
264}
+
+ +
std::vector< double > _fPropVal
+ +
std::vector< double > _fError
+
std::vector< double > _fIndivStepScale
+
std::vector< std::string > _fNames
+
const char * matrixName
+
TRandom3 ** random_number
+
std::vector< double > _fPreFitValue
+ +
virtual void proposeStep()
+
void setEvalLikelihood(int i, bool eL)
+
virtual double GetLikelihood()
+
std::vector< double > _fCurrVal
+ +
double * getPropPars()
+ + + +
void setExtraBranches(TTree &tree)
+
void CheckOrderOfParams()
+
covarianceOsc(const char *name, const char *file)
+ + +
virtual ~covarianceOsc()
+ +
void proposeStep() override
+
double GetLikelihood()
+ + +
int CheckBounds() override
+
double * oscpars1
+ + + +
+ + + + diff --git a/covarianceOsc_8h.html b/covarianceOsc_8h.html new file mode 100644 index 00000000..1636eab0 --- /dev/null +++ b/covarianceOsc_8h.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceOsc.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
covarianceOsc.h File Reference
+
+ + + + + diff --git a/covarianceOsc_8h_source.html b/covarianceOsc_8h_source.html new file mode 100644 index 00000000..f0c9717d --- /dev/null +++ b/covarianceOsc_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceOsc.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceOsc.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// MaCh3 includes
+ +
5
+
+ +
7{
+
8 public:
+
9 covarianceOsc(const char* name, const char *file);
+
10 virtual ~covarianceOsc();
+
11 double GetLikelihood();
+
12 inline int CheckBounds() override;
+
13 double *getPropPars();
+
14 void proposeStep() override;
+
15 void setFlipDeltaM23(bool flip){flipdelM = flip;}
+
16 void setFlipBeta(bool flip){flipBeta = flip;}
+
17 void useReactorPrior(bool reactor){reactorPrior = reactor;};
+
18 void setExtraBranches(TTree &tree);
+
19
+
20 inline double GetPathLength() { return L;}
+
21 inline double GetDensity() { return density;}
+ +
23 //KS: Print all useful information's after initialization
+
24 void Print();
+
25 //KS: Currently prob3++/probgp requires particular order so we need to check this is the case
+
26 void CheckOrderOfParams();
+
27
+
28 protected:
+
29 double L, density;
+ + + +
33 double *oscpars1;
+ +
35
+ + + +
39 int kBeta;
+
40};
+
+
41
+ + +
bool GetPerformBetaStudy()
+ +
double GetPathLength()
+
void setFlipBeta(bool flip)
+
double * getPropPars()
+ + + +
void setExtraBranches(TTree &tree)
+
void CheckOrderOfParams()
+
void useReactorPrior(bool reactor)
+ + +
virtual ~covarianceOsc()
+ +
void setFlipDeltaM23(bool flip)
+
double GetDensity()
+
void proposeStep() override
+
double GetLikelihood()
+ + +
int CheckBounds() override
+
double * oscpars1
+ + + +
+ + + + diff --git a/covarianceXsec_8cpp.html b/covarianceXsec_8cpp.html new file mode 100644 index 00000000..70a3a823 --- /dev/null +++ b/covarianceXsec_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceXsec.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceXsec.cpp File Reference
+
+ + + + + diff --git a/covarianceXsec_8cpp_source.html b/covarianceXsec_8cpp_source.html new file mode 100644 index 00000000..9900d445 --- /dev/null +++ b/covarianceXsec_8cpp_source.html @@ -0,0 +1,1069 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceXsec.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceXsec.cpp
+
+
+Go to the documentation of this file.
1#include "covarianceXsec.h"
+
2
+
3// ********************************************
+
4// ETA - YAML constructor
+
5// this will replace the root file constructor but let's keep it in
+
6// to do some validations
+
+
7covarianceXsec::covarianceXsec(std::vector<std::string> YAMLFile, double threshold, int FirstPCAdpar, int LastPCAdpar)
+
8 : covarianceBase(YAMLFile, threshold, FirstPCAdpar, LastPCAdpar){
+
9// ********************************************
+
10
+
11 setName("xsec_cov");
+ + +
14
+
15 //ETA - again this really doesn't need to be hear...
+
16 for (int i = 0; i < _fNumPar; i++)
+
17 {
+
18 // Sort out the print length
+
19 if(_fNames[i].length() > PrintLength) PrintLength = _fNames[i].length();
+
20 } // end the for loop
+
21
+
22 MACH3LOG_INFO("Constructing instance of covarianceXsec");
+
23 initParams(0.001);
+
24 // Print
+
25 Print();
+
26}
+
+
27
+
28// ********************************************
+
+ +
30// ********************************************
+
31
+
32 _fDetID = std::vector<int>(_fNumPar);
+
33 _fParamType = std::vector<std::string>(_fNumPar);
+
34 //_fDetString = std::vector<std::string>(_fNumPar);
+
35 isFlux.resize(_fNumPar);
+
36 //Vector of vectors of strings to contain potentially multiple variables that
+
37 //might be cut on
+
38 _fKinematicPars = std::vector<std::vector<std::string>>(_fNumPar);
+
39 //Vector of vector of ints to contain the lower and upper bounds of a cut
+
40 //for a particular kinematic variables
+
41 _fKinematicBounds = std::vector<std::vector<std::vector<double>>>(_fNumPar);
+
42
+
43 int i = 0;
+
44
+
45 //ETA - read in the systematics. Would be good to add in some checks to make sure
+
46 //that there are the correct number of entries i.e. are the _fNumPars for Names,
+
47 //PreFitValues etc etc.
+
48 for (auto const &param : _fYAMLDoc["Systematics"])
+
49 {
+
50 _fParamType[i] = (param["Systematic"]["Type"].as<std::string>());
+
51 _fDetID[i] = (param["Systematic"]["DetID"].as<int>());
+
52
+
53 //Fill the map to get the correlations later as well
+
54 std::string ParamType = param["Systematic"]["Type"].as<std::string>();
+
55 int nFDSplines;
+
56 //Now load in varaibles for spline systematics only
+
57 if (ParamType.find("Spline") != std::string::npos) {
+
58
+
59 if (param["Systematic"]["SplineInformation"]["FDSplineName"]) {
+
60 _fFDSplineNames.push_back(param["Systematic"]["SplineInformation"]["FDSplineName"].as<std::string>());
+
61 nFDSplines++;
+
62 }
+
63
+
64 if (param["Systematic"]["SplineInformation"]["FDMode"]) {
+
65 _fFDSplineModes.push_back(param["Systematic"]["SplineInformation"]["FDMode"].as<std::vector<int>>());
+
66 }
+
67
+
68 if (param["Systematic"]["SplineInformation"]["NDSplineName"]) {
+
69 _fNDSplineNames.push_back(param["Systematic"]["SplineInformation"]["NDSplineName"].as<std::string>());
+
70 //MASSIVE HACKK!!! This only works because we only need the interpolation type at the ND
+
71 //Now get the Spline interpolation type
+
72 if (param["Systematic"]["SplineInformation"]["InterpolationType"]){
+
73 for(int InterpType = 0; InterpType < kSplineInterpolations ; InterpType++){
+
74 if(param["Systematic"]["SplineInformation"]["InterpolationType"].as<std::string>() == SplineInterpolation_ToString(SplineInterpolation(InterpType)))
+
75 {
+ +
77 }
+
78 }
+
79 }
+
80 //KS: By default use TSpline3
+
81 else
+
82 {
+ +
84 }
+
85 }
+
86
+
87 } else if(param["Systematic"]["Type"].as<std::string>() == "Norm") {
+
88
+
89 //Empty DummyVector can be used to specify no cut for mode, target and neutrino flavour
+
90 std::vector<int> DummyModeVec;
+
91 //Ultimately all thsi information ends up in the NormParams vector
+
92
+
93 // Set the target of the normalisation parameter
+
94 if(param["Systematic"]["TargetNuclei"]){
+
95 _fTargetNuclei.push_back(param["Systematic"]["TargetNuclei"].as<std::vector<int>>());
+
96 } else{
+
97 //Has to be of size 0 to mean apply to all
+
98 _fTargetNuclei.push_back(DummyModeVec);
+
99 }
+
100
+
101 // Set the neutrino flavours to apply to
+
102 if(param["Systematic"]["NeutrinoFlavour"]){
+
103 _fNeutrinoFlavour.push_back(param["Systematic"]["NeutrinoFlavour"].as<std::vector<int>>());
+
104 } else{
+
105 //Has to be of size 0 to mean apply to all
+
106 _fNeutrinoFlavour.push_back(DummyModeVec);
+
107 }
+
108
+
109 // Set the unoscillated neutrino flavours to apply to which is often used for flux systs
+
110 if(param["Systematic"]["NeutrinoFlavourUnosc"]){
+
111 _fNeutrinoFlavourUnosc.push_back(param["Systematic"]["NeutrinoFlavourUnosc"].as<std::vector<int>>());
+
112 } else{
+
113 //Has to be of size 0 to mean apply to all
+
114 _fNeutrinoFlavourUnosc.push_back(DummyModeVec);
+
115 }
+
116
+
117 //First check to see if we have specified a mode
+
118 //std::cout << "Found a norm parameter at " << i << std::endl;
+
119 if(param["Systematic"]["Mode"]){
+
120 _fNormModes.push_back(param["Systematic"]["Mode"].as<std::vector<int>>());
+
121 } else{
+
122 //Has to be of size 0 to mean apply to all
+
123 _fNormModes.push_back(DummyModeVec);
+
124 }
+
125 }
+
126 else if(param["Systematic"]["Type"].as<std::string>() == "Functional"){
+
127 //std::cout << "Found a functional parameter!!" << std::endl;
+
128
+
129 }
+
130 else{
+
131 MACH3LOG_ERROR("Given unrecognised systematic type: {}", param["Systematic"]["Type"].as<std::string>());
+
132 MACH3LOG_ERROR("Expecting \"Norm\", \"Spline\" or \"Functional\"");
+
133 throw;
+
134 }
+
135
+
136 //ETA - I think this can go in the norm parameters only if statement above
+
137 int NumKinematicCuts = 0;
+
138 if(param["Systematic"]["KinematicCuts"]){
+
139
+
140 NumKinematicCuts = param["Systematic"]["KinematicCuts"].size();
+
141 //std::cout << "Number of Kinematic cuts is " << NumKinematicCuts << std::endl;
+
142
+
143 std::vector<std::string> TempKinematicStrings;
+
144 std::vector<std::vector<double>> TempKinematicBounds;
+
145 //First element of TempKinematicBounds is always -999, and size is then 3
+
146
+
147 for(int KinVar_i = 0 ; KinVar_i < NumKinematicCuts ; ++KinVar_i){
+
148 //ETA
+
149 //This is a bit messy, Kinematic cuts is a list of maps
+
150 //The for loop h
+
151 for (YAML::const_iterator it=param["Systematic"]["KinematicCuts"][KinVar_i].begin();it!=param["Systematic"]["KinematicCuts"][KinVar_i].end();++it) {
+
152 TempKinematicStrings.push_back(it->first.as<std::string>());
+
153 TempKinematicBounds.push_back(it->second.as<std::vector<double>>());
+
154 std::vector<double> bounds = it->second.as<std::vector<double>>();
+
155 }
+
156 }
+
157
+
158 _fKinematicPars.at(i) = TempKinematicStrings;
+
159 _fKinematicBounds.at(i) = TempKinematicBounds;
+
160 }
+
161
+
162 if(_fFancyNames[i].find("b_")==0) isFlux[i] = true;
+
163 else isFlux[i] = false;
+
164 i++;
+
165 }
+
166
+
167 return;
+
168}
+
+
169
+
170// ********************************************
+
+ +
172// ********************************************
+
173
+
174
+
175}
+
+
176
+
177// ********************************************
+
178// DB Grab the Number of splines for the relevant DetID
+
+ +
180 int returnVal = 0;
+
181 for (int i = 0; i < _fNumPar; ++i) {
+
182 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
183 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
184 returnVal += 1;
+
185 }
+
186 }
+
187 }
+
188
+
189 return returnVal;
+
190}
+
+
191// ********************************************
+
192
+
193// ********************************************
+
194// DB Grab the Spline Names for the relevant DetID
+
+
195const std::vector<std::string> covarianceXsec::GetSplineParsNamesFromDetID(int DetID) {
+
196
+
197 std::vector<std::string> returnVec;
+
198
+
199 int nd_counter = 0;
+
200 //int counter = 0;
+
201 for (int i = 0; i < _fNumPar; ++i) {
+
202 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
203 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
204
+
205 //ETA - Horrible hard-code becuase ND and FD spline names are different...
+
206 // this is only true at T2K and needs to change!
+
207 if(DetID == 1){
+
208 returnVec.push_back(_fNDSplineNames[nd_counter]);
+
209 nd_counter++;
+
210 }
+
211 else{
+
212 returnVec.push_back(GetParName(i));
+
213 }
+
214 }
+
215 }
+
216 }
+
217
+
218 return returnVec;
+
219}
+
+
220// ********************************************
+
221//
+
222
+
223// ETA - this is a complete fudge for now and is only here because on
+
224// T2K the splines at ND280 and SK have different names...
+
225// this is completely temporary and will be removed in the future
+
+
226const std::vector<std::string> covarianceXsec::GetFDSplineFileParsNamesFromDetID(int DetID) {
+
227
+
228 std::vector<std::string> returnVec;
+
229 int FDSplineCounter = 0;
+
230 for (int i = 0; i < _fNumPar; ++i) {
+
231 //std::cout << " Param i has DetID " << GetParDetID(i) << " from yaml" << std::endl;
+
232 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
233 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
234 //This is horrible but has to be here whilst the ND and FD splines are named
+
235 //differently on T2K. This is easy to fix but isn't currently available.
+
236 //std::cout << "FDSplineIndex is " << std::endl;
+
237 //std::cout << "Getting FD spline name " << _fFDSplineNames[FDSplineCounter] << " compared DetID " << DetID << " with " << GetParDetID(i) << std::endl;
+
238 returnVec.push_back(_fFDSplineNames[FDSplineCounter]); //Append spline name
+
239 FDSplineCounter++;
+
240 }
+
241 }
+
242 }
+
243 return returnVec;
+
244}
+
+
245
+
246// ETA - this is another fudge for now and is only here because on
+
247// T2K the splines at ND280 and SK have different names...
+
248// this is completely temporary and will be removed in the future
+
+
249const std::vector<std::string> covarianceXsec::GetNDSplineFileParsNamesFromDetID(int DetID) {
+
250
+
251 std::vector<std::string> returnVec;
+
252 int NDSplineCounter = 0;
+
253 for (int i = 0; i < _fNumPar; ++i) {
+
254 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
255 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
256 //This is horrible but has to be here whilst the ND and ND splines are named
+
257 //differently on T2K. This is easy to fix but isn't currently available.
+
258 std::cout << "Getting ND spline name " << _fNDSplineNames[NDSplineCounter] << std::endl;
+
259 returnVec.push_back(_fNDSplineNames[NDSplineCounter]); //Append spline name
+
260 }
+
261 NDSplineCounter++;
+
262 }
+
263 }
+
264 return returnVec;
+
265}
+
+
266
+
267// ********************************************
+
268// DB Grab the Spline Names for the relevant DetID
+
+
269const std::vector<std::string> covarianceXsec::GetSplineFileParsNamesFromDetID(int DetID) {
+
270 std::vector<std::string> returnVec;
+
271
+
272 int FDSplineCounter = 0;
+
273 int NDSplineCounter = 0;
+
274 for (int i = 0; i < _fNumPar; ++i) {
+
275 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
276 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
277 //This is horrible but has to be here whilst the ND and FD splines are named
+
278 //differently on T2K. This is easy to fix but isn't currently available.
+
279 if((GetParDetID(i) & 1) == 1){
+
280 returnVec.push_back(_fNDSplineNames[NDSplineCounter]);
+
281 NDSplineCounter++;
+
282 } else{
+
283 returnVec.push_back(_fFDSplineNames[FDSplineCounter]);
+
284 FDSplineCounter++;
+
285 }
+
286 }
+
287 }
+
288 }
+
289
+
290 return returnVec;
+
291}
+
+
292// ********************************************
+
293
+
294// ********************************************
+
295// DB Grab the Spline Modes for the relevant DetID
+
+
296const std::vector< std::vector<int> > covarianceXsec::GetSplineModeVecFromDetID(int DetID) {
+
297 std::vector< std::vector<int> > returnVec;
+
298
+
299 //Need a counter or something to correctly get the index in _fFDSplineModes since it's not of length nPars
+
300 //Should probably just make a std::map<std::string, int> for param name to FD spline index
+
301 int nFDSplineCounter = 0;
+
302 for (int i = 0; i < _fNumPar; ++i) {
+
303 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
304 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
305 returnVec.push_back(_fFDSplineModes[nFDSplineCounter]);
+
306 nFDSplineCounter++;
+
307 }
+
308 }
+
309 }
+
310
+
311 return returnVec;
+
312}
+
+
313// ********************************************
+
314
+
315// ********************************************
+
316// DB Grab the Spline Indices for the relevant DetID
+
+
317const std::vector<int> covarianceXsec::GetSplineParsIndexFromDetID(int DetID) {
+
318 std::vector<int> returnVec;
+
319
+
320 for (int i = 0; i < _fNumPar; ++i) {
+
321 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
322 if (strcmp(GetParamType(i), "Spline") == 0) { //If parameter is implemented as a spline
+
323 returnVec.push_back(i);
+
324 }
+
325 }
+
326 }
+
327
+
328 return returnVec;
+
329}
+
+
330// ********************************************
+
331
+
332// ********************************************
+
333// DB Grab the Normalisation parameters
+
334// ETA - this should be the same as GetNormParsFromDetID but not dependent on the DetID
+
335// I have changed this because it is quite nice for the covariance object not to care
+
336// which samplePDF a parameter should affect or not.
+
+ +
338
+
339 //ETA - in case NormParams already is filled
+
340 NormParams.clear();
+
341
+
342 int norm_counter = 0;
+
343 for (int i = 0; i < _fNumPar; ++i) {
+
344 if (strcmp(GetParamType(i), "Norm") == 0) { //If parameter is implemented as a normalisation
+
345
+
346 std::vector<int> temp;
+
347 XsecNorms4 norm;
+
348 norm.name = GetParFancyName(i);
+
349
+
350 //Copy the mode information into an XsecNorms4 struct
+
351 norm.modes = _fNormModes[norm_counter];
+
352 norm.pdgs = _fNeutrinoFlavour[norm_counter];
+
353 norm.preoscpdgs = _fNeutrinoFlavourUnosc[norm_counter];
+
354 norm.targets = _fTargetNuclei[norm_counter];
+
355
+
356 //Next ones are kinematic bounds on where normalisation parameter should apply (at the moment only etrue but hope to add q2
+
357 //We set a bool to see if any bounds exist so we can short-circuit checking all of them every step
+
358 bool HasKinBounds=false;
+
359
+
361 //New generic cuts things
+
363 if(_fKinematicPars.at(i).size() > 0){
+
364 HasKinBounds = true;
+
365 }
+
366
+
367 for(unsigned int KinematicCut_i = 0 ; KinematicCut_i < _fKinematicPars[i].size() ; ++KinematicCut_i){
+
368 //Push back with the string for the kinematic cut
+
369 norm.KinematicVarStr.push_back(_fKinematicPars.at(i).at(KinematicCut_i));
+
370 //Push back with the bounds for the kinematic cut
+
371 norm.Selection.push_back(_fKinematicBounds.at(i).at(KinematicCut_i));
+
372 }
+
373 norm.hasKinBounds=HasKinBounds;
+
374 //End of kinematic bound checking
+
375
+
376 // Set the global parameter index of the normalisation parameter
+
377 norm.index=i;
+
378 //Add this parameter to the vector of parameters
+
379 NormParams.push_back(norm);
+
380 norm_counter++;
+
381 }
+
382 }
+
383
+
384 return;
+
385}
+
+
386// ********************************************
+
387
+
388
+
389// ********************************************
+
390// DB Grab the Normalisation parameters for the relevant DetID
+
391// ETA - I think this doesn't need to be the same as scanParameters, haven't we already got this info??
+
+
392const std::vector<XsecNorms4> covarianceXsec::GetNormParsFromDetID(int DetID) {
+
393 std::vector<XsecNorms4> returnVec;
+
394 int norm_counter = 0;
+
395
+
396 for (int i = 0; i < _fNumPar; ++i) {
+
397 if (strcmp(GetParamType(i), "Norm") == 0) { //If parameter is implemented as a normalisation
+
398
+
399 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
400
+
401 std::vector<int> temp;
+
402
+
403 XsecNorms4 norm;
+
404 norm.name=GetParFancyName(i);
+
405
+
406 //Copy the mode information into an XsecNorms4 struct
+
407 norm.modes = _fNormModes[norm_counter];
+
408 norm.pdgs = _fNeutrinoFlavour[norm_counter];
+
409 norm.preoscpdgs = _fNeutrinoFlavourUnosc[norm_counter];
+
410 norm.targets = _fTargetNuclei[norm_counter];
+
411
+
412 //Next ones are kinematic bounds on where normalisation parameter should apply (at the moment only etrue but hope to add q2
+
413 //We set a bool to see if any bounds exist so we can shortcircuit checking all of them every step
+
414 bool HasKinBounds=false;
+
415
+
417 //New generic cuts things
+
419 if(_fKinematicPars.at(i).size() > 0){
+
420 HasKinBounds = true;
+
421 }
+
422
+
423 for(unsigned int KinematicCut_i = 0 ; KinematicCut_i < _fKinematicPars[i].size() ; ++KinematicCut_i){
+
424 //Push back with the string for the kinematic cut
+
425 //std::cout << "----------------------" << std::endl;
+
426 //std::cout << "Will apply a cut on " << _fKinematicPars.at(i).at(KinematicCut_i) << std::endl;
+
427 norm.KinematicVarStr.push_back(_fKinematicPars.at(i).at(KinematicCut_i));
+
428 //std::cout << "With bounds " << _fKinematicBounds.at(i).at(KinematicCut_i).at(0) << " to " << _fKinematicBounds.at(i).at(KinematicCut_i).at(1) << std::endl;
+
429 //Push back with the bounds for the kinematic cut
+
430 norm.Selection.push_back(_fKinematicBounds.at(i).at(KinematicCut_i));
+
431 }
+
432
+
433 norm.hasKinBounds=HasKinBounds;
+
434 //End of kinematic bound checking
+
435
+
436 // Set the global parameter index of the normalisation parameter
+
437 norm.index=i;
+
438 //Add this parameter to the vector of parameters
+
439 returnVec.push_back(norm);
+
440 }
+
441 norm_counter++;
+
442 }
+
443 }
+
444
+
445 return returnVec;
+
446}
+
+
447// ********************************************
+
448
+
449// ********************************************
+
450// DB Grab the number of Normalisation parameters for the relevant DetID
+
+ +
452 int returnVal = 0;
+
453
+
454 for (int i = 0; i < _fNumPar; ++i) {
+
455 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
456 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional parameter
+
457 returnVal += 1;
+
458 }
+
459 }
+
460 }
+
461
+
462 return returnVal;
+
463}
+
+
464// ********************************************
+
465
+
466// ********************************************
+
467// DB Grab the Functional parameter names for the relevant DetID
+
+
468const std::vector<std::string> covarianceXsec::GetFuncParsNamesFromDetID(int DetID) {
+
469 std::vector<std::string> returnVec;
+
470
+
471 for (int i = 0; i < _fNumPar; ++i) {
+
472 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
473 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional param
+
474 returnVec.push_back(GetParFancyName(i));
+
475 }
+
476 }
+
477 }
+
478
+
479 return returnVec;
+
480}
+
+
481// ********************************************
+
482
+
483// ********************************************
+
484// DB Grab the Functional parameter indices for the relevant DetID
+
+
485const std::vector<int> covarianceXsec::GetFuncParsIndexFromDetID(int DetID) {
+
486 std::vector<int> returnVec;
+
487
+
488 for (int i = 0; i < _fNumPar; ++i) {
+
489 //std::cout << "TRYING TO SETUP FUNCTIONAL PARAMETER for " << i << " which is of type " << GetParamType(i) << std::endl;
+
490 if ((GetParDetID(i) & DetID)) { //If parameter applies to required DetID
+
491 if (strcmp(GetParamType(i), "Functional") == 0) { //If parameter is implemented as a functional param
+
492 //std::cout << "Found Functional parameter" << std::endl;
+
493 returnVec.push_back(i);
+
494 }
+
495 }
+
496 }
+
497
+
498 return returnVec;
+
499}
+
+
500// ********************************************
+
501
+
502// ********************************************
+
503// Scan the parameters, e.g. number of spline parameters, functional parameters, Far only parameters, and so on
+
504//void covarianceXsec::ScanParameters() {
+
505// // ********************************************
+
506//
+
507// // Should be able to count the normalisation parameters from the covarianceXsec class
+
508// nNearSplineParams = 0;
+
509// nSplineParamsUniq = 0; //!!decide what to do with this, doesn't currently have an Far analogue
+
510// nNearNormParams = 0;
+
511// nNearFuncParams = 0;
+
512// // Parameters that apply to Far only
+
513//
+
514// nFarSplineParams = 0;
+
515// nFarNormParams = 0;
+
516// nFaronlyNormParams = 0;
+
517// nFarFuncParams = 0;
+
518//
+
519// int norm_counter = 0;
+
520//
+
521// for (int i = 0; i < _fNumPar; ++i) {
+
522//
+
523// //ETA - need to rethink this and just check against strings
+
524// /*bool isValidDetID = false;
+
525// int DetIDCounter = 0;
+
526// int ParamaDetID = GetXSecParamID(i,1);
+
527// //DB Loop over all supported DetIDs to ensure Root/XML inputs are familiar
+
528// for (int iKnownDetID=0;iKnownDetID<MaCh3Utils::nKnownDetIDs;iKnownDetID++) {
+
529// if ((ParamaDetID & MaCh3Utils::KnownDetIDsMap[iKnownDetID]) == MaCh3Utils::KnownDetIDsMap[iKnownDetID]) {
+
530// isValidDetID = true;
+
531// //DetIDCounter += MaCh3Utils::KnownDetIDsMap[iKnownDetID];
+
532// }
+
533// }
+
534// //DB Throw if Param DetID is unsupported. Also check that only supported DetIDs are contained in the param DetID
+
535// if (!isValidDetID || ((ParamaDetID - DetIDCounter)!=0)) {
+
536// std::cerr << "Unknown DetID:" << GetXSecParamID(i,1) << std::endl;
+
537// std::cerr << "DetIDCounter:" << DetIDCounter << std::endl;
+
538// std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
539// throw;
+
540// }
+
541// */
+
542//
+
543//
+
544// ///////////////
+
545// // ETA: for norm parameters the ND and FD treatment is the same so just need to check
+
546// // against the type of parameter. For splines and functional there are some
+
547// // different checks and hacks that need to be done for ND or FD.
+
548// ///////////////
+
549//
+
550// //ETA - adding in a counter for the number of norms as xsec_norm_kinematic_type is only of length of the number of norm parameters
+
551// //Not sure how this wasn't broken already??
+
552// //I think ScanParameters should just get the counters and set names? Even the setting names I don't like,
+
553// // as "Scan" implies it is just counting and printing stuff
+
554// if(strcmp(GetParamType(i), "Norm") == 0){
+
555//
+
556//
+
557// //XsecNorms4 tmp_xsec;
+
558// //tmp_xsec.name=GetParName(i);
+
559//
+
560// //tmp_xsec.modes=_fNormModes[norm_counter];
+
561// //
+
562//
+
563//
+
564// //Next ones are kinematic bounds on where normalisation parameter should apply (at the moment only etrue but hope to add q2
+
565// //We set a bool to see if any bounds exist so we can shortcircuit checking all of them every step
+
566// bool haskinbounds=false;
+
567//
+
568// ////////////////////
+
569// //New generic cuts things
+
570// ////////////////////
+
571// //Only consider the kinematic string and the boundaries if you've actually given it a string to use...
+
572// /*if( _fKinematicPars[i].size() > 0 ){
+
573// haskinbounds = true;
+
574//
+
575// //ETA - This can be a vector :) can provide different kinematic variables to cut on
+
576// tmp_xsec.KinematicVarStr = _fKinematicPars[i];
+
577//
+
578// //ETA - This can be a vector :) can provide different kinematic variables to cut on
+
579// std::vector< std::vector<double> > Selections(_fKinematicPars[i].size());
+
580//
+
581// //ETA - push back kinematic type with dummy -999 since this needs to be converted into an enum for a kinematic type within
+
582// //a samplePDFFD daughter class
+
583// for(unsigned int KinVar_i = 0 ; KinVar_i < _fKinematicPars[i].size() ; ++KinVar_i) {
+
584// Selections[KinVar_i].push_back(-999.9);
+
585// Selections[KinVar_i].push_back(_fKinematicBounds[i][KinVar_i][0]);
+
586// Selections[KinVar_i].push_back(_fKinematicBounds[i][KinVar_i][1]);
+
587// //std::cout << " - " << _fKinematicPars[i][KinVar_i] << " from " << Selections[KinVar_i][1] << " to " << Selections[KinVar_i][2] << std::endl;
+
588// }
+
589// tmp_xsec.Selection = Selections;
+
590// }
+
591//
+
592// tmp_xsec.hasKinBounds=haskinbounds;
+
593// //End of kinematic bound checking
+
594// // Set the global parameter index of the normalisation parameter
+
595// tmp_xsec.index=i;
+
596// */
+
597// if((GetParDetID(i) & 24)){
+
598// //Add this parameter to the vector of parameters
+
599// //FarNormParams.push_back(tmp_xsec);
+
600// nFarNormParams++;
+
601//
+
602// //non-Near affecting Far affecting norm parameters
+
603// if(!((GetParDetID(i) & 1))) {
+
604// nFaronlyNormParams++;
+
605// }
+
606// }
+
607//
+
608// if((GetParDetID(i) & 1)){
+
609// //NearNormParams.push_back(tmp_xsec);
+
610// nNearNormParams++;
+
611// }
+
612// else{std::cout << "Found DetId of " << GetParDetID(i) << std::endl;}
+
613// norm_counter++;
+
614//
+
615// }//End FarNormPars
+
616//
+
617// /////////
+
618// //ETA:
+
619// //For splines and functional parameter there are some differences with the ND
+
620// //and the FD still... so need to explicitly check against a hard-coded DetID
+
621// ////////////
+
622//
+
623// // Also make some helper arrays with all the Far parameters, so we have Near parameters, Far parameters, and all parameters
+
624// // These are parameters that have 24 or 25 in ID(i,1), so can be fancy and do a bitwise comparison to 01000
+
625// if ((GetParDetID(i) & 24) == 24) {//Far pars
+
626//
+
627// // Now check if it's a spline parameter or not
+
628// //This needs to be updated to check against a string
+
629// if (strcmp(GetParamType(i), "Spline") == 0) {//FarSplinePars
+
630// FarSplineParsNames.push_back(GetParName(i));
+
631// FarSplineParsIndex.push_back(i);
+
632//
+
633// FarSplineModes.push_back(_fFDSplineModes[nFarSplineParams]);
+
634// nFarSplineParams++;
+
635//
+
636// // Or a normalisation parameter
+
637// } //End FarSplinePars
+
638// else if (strcmp(GetParamType(i), "Functional") == 0){//Far functional parameter
+
639// nFarFuncParams++;
+
640// FarFuncParsNames.push_back(GetParName(i));
+
641// FarFuncParsIndex.push_back(i);
+
642// }//End Far funcpars
+
643// else if(!strcmp(GetParamType(i), "Norm") == 0){
+
644// std::cerr << "Found a parameter in covarianceXsec which wasn't Functional, Spline or Norm!" << std::endl;
+
645// std::cerr << "This is undefined behaviour currently, and implementation should change" << std::endl;
+
646// std::cerr << "Param " << GetParName(i) << " (param " << i << ") = " << GetParamType(i) << std::endl;
+
647// std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
648// throw;
+
649// }
+
650// }//End Far pars
+
651//
+
652// //Near affecting parameters
+
653// /*if((GetParDetID(i) & 1) == 1) {//Near affecting parameters
+
654//
+
655// if (strcmp(GetParamType(i), "Functional") == 0) {//Near affecting func pars
+
656// NearfuncParsNames.push_back(GetParName(i));
+
657// NearfuncParsIndex.push_back(i);
+
658// nNearFuncParams++;
+
659// }//End Near affecting func pars
+
660// else if (strcmp(GetParamType(i), "Spline") == 0) {
+
661// //std::cout << "FOUND AN ND SPLINE PARAMETER!!" << std::endl;
+
662// //NearsplineParsNames.push_back(GetParName(i));
+
663// //NearsplineParsIndex.push_back(i);
+
664// //nNearSplineParams++;
+
665// }//End Near affecting spline pars
+
666// else if(!strcmp(GetParamType(i), "Norm") == 0){
+
667// std::cerr << "Found a parameter in covarianceXsec which wasn't Functional, Spline or Norm!" << std::endl;
+
668// std::cerr << "This is undefined behaviour currently, and implementation should change" << std::endl;
+
669// std::cerr << "Param " << GetParName(i) << " (param " << i << ") = " << GetParamType(i) << std::endl;
+
670// std::cerr << __FILE__ << ":" << __LINE__ << std::endl;
+
671// throw;
+
672// }
+
673// */
+
674// }//End Near affecting parameters
+
675// }
+
676//
+
677// // Now count the repeated parameters and save their indices and names
+
678// // This is useful because we only need to store 1 spline for e.g. neutrino and anti-neutrino interactions, but we still want to have separate neutrino/anti-neutrino parameters in covarianceXsec class
+
679// // This then feeds into samplePDFND2014
+
680// std::string paramName = "empty";
+
681// std::string nextName = "empty";
+
682// // Counter for unique splines (not repeated)
+
683// nSplineParamsUniq = 0;
+
684// // Counter for shared parameter (identified here by presence of "_nubar" in end of name)
+
685// // Maybe this should be worked on for the future, perhaps by having the input matrix specify instead which parameters share splines with each other; would require whoever makes the splines to talk to whoever makes the covariance matrix
+
686// nSplineParamsShare = 0;
+
687// int itCnt = 0;
+
688// for (std::vector<std::string>::iterator it = NearsplineParsNames.begin(); it != NearsplineParsNames.end(); it++) {
+
689//
+
690// // The name of the current parameter
+
691// std::string nextName = *it;
+
692// std::string nextName_cut = nextName.substr(0, nextName.find_last_of("_"));
+
693//
+
694//
+
695// paramName = nextName_cut;
+
696// splineParsUniqIndex.push_back(NearsplineParsIndex[itCnt]);
+
697// splineParsUniqNames.push_back(*it);
+
698// splineParsShareToUniq.push_back(nSplineParamsUniq);
+
699//
+
700// nSplineParamsUniq++;
+
701// itCnt++;
+
702// } // end for loop
+
703// return;
+
704//} // end ScanParameters
+
705
+
706// ********************************************
+
+
707void covarianceXsec::initParams(double fScale) {
+
708 // ********************************************
+
709
+
710 for (int i = 0; i < _fNumPar; ++i) {
+
711 //ETA - set the name to be xsec_% as this is what ProcessorMCMC expects
+
712 _fNames[i] = "xsec_"+std::to_string(i);
+
713
+
714 // Set covarianceBase parameters (Curr = current, Prop = proposed, Sigma = step)
+
715 _fCurrVal[i] = _fPreFitValue[i];
+
716 _fPropVal[i] = _fCurrVal[i];
+
717
+
718 // Any param with nom == 1 should be > 0
+
719 if (_fGenerated[i] == 1) {
+
720 // If the _fPreFitValue is negative we should try to throw it above this
+
721 // We don't really do this ever...
+
722 while (_fPreFitValue[i] <= 0) {
+
723 _fPreFitValue[i] = random_number[0]->Gaus(_fPreFitValue[i], fScale*TMath::Sqrt( (*covMatrix)(i,i) ));
+
724 }
+
725 }
+
726 }
+
727 //DB Set Individual Step scale for PCA parameters to the LastPCAdpar fIndivStepScale because the step scale for those parameters is set by 'eigen_values[i]' but needs an overall step scale
+
728 // However, individual step scale for non-PCA parameters needs to be set correctly
+
729 if (pca) {
+
730 for (int i = FirstPCAdpar; i <= LastPCAdpar; i++) {
+ +
732 }
+
733 }
+
734
+
735 randomize();
+
736 //KS: Transfer the starting parameters to the PCA basis, you don't want to start with zero..
+
737 if (pca) TransferToPCA();
+ +
739}
+
+
740
+
741// ********************************************
+
742// Print everything we know about the inputs we're Getting
+
+ +
744// ********************************************
+
745
+
746 // Get the precision so we can go back to normal for cout later
+
747 //std::streamsize ss = std::cout.precision();
+
748
+
749 MACH3LOG_INFO("#################################################");
+
750 MACH3LOG_INFO("Printing covarianceXsec:");
+
751
+
752 std::cout<<"======================================================================================================================"<<std::endl;
+
753 std::cout << std::left << std::setw(5) << "#" << std::setw(2) << "|" << std::setw(25) << "Name" << std::setw(2) << "|" << std::setw(10) << "Nom." << std::setw(2) << "|" << std::setw(10) << "Prior" << std::setw(2) << "|" << std::setw(15) << "Error" << std::setw(2) << "|" << std::setw(10) << "Lower" << std::setw(2) << "|" << std::setw(10) << "Upper" << "|" << std::setw(10) << "StepScale" << "|" << std::setw(5) << "DetID" << std::endl;;
+
754 std::cout<<"----------------------------------------------------------------------------------------------------------------------"<<std::endl;
+
755
+
756 for (int i = 0; i < GetNumParams(); i++) {
+
757 std::cout << std::left << std::setprecision(3) << std::setw(5) << i << std::setw(2) << "|" << std::setw(25) << GetParFancyName(i) << std::setw(2) << "|" << std::setw(10) << _fGenerated[i] << std::setw(2) << "|" << std::setw(10) << _fPreFitValue[i] << std::setw(2) << "|" << "+/- " << std::setw(11) << _fError[i] << std::setw(2) << "|" << std::setw(10) << _fLowBound[i] << std::setw(2) << "|" << std::setw(10) << _fUpBound[i] << "|" << std::setw(10) << _fIndivStepScale[i] << "|" << _fDetID[i] << std::endl;
+
758 }
+
759 std::cout<<"======================================================================================================================"<<std::endl;
+
760
+
761 // Output the normalisation parameters as a sanity check!
+
762 MACH3LOG_INFO("Normalisation parameters: {}", NormParams.size());
+
763
+
764 //KS: Consider making some class producing table..
+
765 MACH3LOG_INFO("┌────┬──────────┬────────────────────┬──────────┬──────────┬──────────┐");
+
766 MACH3LOG_INFO("│# │Global # │Name │Int. mode │Target │pdg │");
+
767 MACH3LOG_INFO("├────┼──────────┼────────────────────┼──────────┼──────────┼──────────┤");
+
768
+
769 for (unsigned int i = 0; i < NormParams.size(); ++i)
+
770 {
+
771 std::string intModeString;
+
772 for (unsigned int j = 0; j < NormParams[i].modes.size(); j++) {
+
773 intModeString += std::to_string(NormParams[i].modes[j]);
+
774 intModeString += " ";
+
775 }
+
776 if (NormParams[i].modes.empty()) intModeString += "all";
+
777
+
778 std::string targetString;
+
779 for (unsigned int j = 0; j < NormParams[i].targets.size(); j++) {
+
780 targetString += std::to_string(NormParams[i].targets[j]);
+
781 targetString += " ";
+
782 }
+
783 if (NormParams[i].targets.empty()) targetString += "all";
+
784
+
785 std::string pdgString;
+
786 for (unsigned int j = 0; j < NormParams[i].pdgs.size(); j++) {
+
787 pdgString += std::to_string(NormParams[i].pdgs[j]);
+
788 pdgString += " ";
+
789 }
+
790 if (NormParams[i].pdgs.empty()) pdgString += "all";
+
791
+
792 MACH3LOG_INFO("│{: <4}│{: <10}│{: <20}│{: <10}│{: <10}│{: <10}│", i, NormParams[i].index, NormParams[i].name, intModeString, targetString, pdgString);
+
793 }
+
794 MACH3LOG_INFO("└────┴──────────┴────────────────────┴──────────┴──────────┴──────────┘");
+
795
+
796 std::vector<int> SplineParsIndex;
+
797 for (int i = 0; i < _fNumPar; ++i)
+
798 {
+
799 if (strcmp(GetParamType(i), "Spline") == 0) { SplineParsIndex.push_back(i); }
+
800 }
+
801
+
802 MACH3LOG_INFO("Spline parameters: {}", SplineParsIndex.size());
+
803
+
804
+
805 MACH3LOG_INFO("=====================================================");
+
806 MACH3LOG_INFO("{:<4} {:<2} {:<10} {:<2} {:<30} {:<2}", "#", "|", "Name", "|", "Spline Interpolation", "|");
+
807 MACH3LOG_INFO("-----------------------------------------------------");
+
808 for (unsigned int i = 0; i < SplineParsIndex.size(); ++i) {
+
809 MACH3LOG_INFO("{:<4} {:<2} {:<10} {:<2} {:<30} {:<2}", i, "|", GetParFancyName(SplineParsIndex[i]), "|", SplineInterpolation_ToString(SplineInterpolation(SplineParsIndex[i])), "|");
+
810 }
+
811 MACH3LOG_INFO("=====================================================");
+
812
+
813 std::vector<int> FuncParsIndex;
+
814 for (int i = 0; i < _fNumPar; ++i)
+
815 {
+
816 if (strcmp(GetParamType(i), "Functional") == 0) { FuncParsIndex.push_back(i); }
+
817 }
+
818
+
819 MACH3LOG_INFO("Functional parameters: {}", FuncParsIndex.size());
+
820 MACH3LOG_INFO("=================================");
+
821 MACH3LOG_INFO("{0:4} {1:2} {2:10}", "#", "|", "Name");
+
822 MACH3LOG_INFO("---------------------------------");
+
823 for (unsigned int i = 0; i < FuncParsIndex.size(); ++i) {
+
824 MACH3LOG_INFO("{0:4} {1:2} {2:10}", std::to_string(i), "|", GetParFancyName(FuncParsIndex[i]));
+
825 }
+
826 MACH3LOG_INFO("=================================");
+
827
+
828} // End
+
+
829
+
830// ********************************************
+
831// Sets the proposed Flux parameters to the prior values
+
+ +
833// ********************************************
+
834 if(!pca)
+
835 {
+
836 for (int i = 0; i < _fNumPar; i++)
+
837 {
+
838 if(isFlux[i]) _fPropVal[i] = _fPreFitValue[i];
+
839 }
+
840 }
+
841 else
+
842 {
+
843 MACH3LOG_ERROR("setFluxOnlyParameters not implemented for PCA");
+
844 throw;
+
845 }
+
846
+
847}
+
+
848
+
849// ********************************************
+
850// Sets the proposed Flux parameters to the prior values
+
+ +
852// ********************************************
+
853 if(!pca)
+
854 {
+
855 for (int i = 0; i < _fNumPar; i++)
+
856 {
+
857 if(!isFlux[i]) _fPropVal[i] = _fPreFitValue[i];
+
858 }
+
859 }
+
860 else
+
861 {
+
862 MACH3LOG_ERROR("setXsecOnlyParameters not implemented for PCA");
+
863 throw;
+
864 }
+
865}
+
+
#define MACH3LOG_ERROR
Definition MaCh3Logger.h:11
+
#define MACH3LOG_INFO
Definition MaCh3Logger.h:9
+
std::string SplineInterpolation_ToString(SplineInterpolation i)
Definition Structs.h:317
+
SplineInterpolation
Definition Structs.h:307
+
@ kTSpline3
Definition Structs.h:308
+
@ kSplineInterpolations
Definition Structs.h:312
+ +
std::vector< int > targets
Definition Structs.h:86
+
std::vector< std::vector< double > > Selection
Definition Structs.h:91
+
std::vector< std::string > KinematicVarStr
Definition Structs.h:97
+
int index
Definition Structs.h:100
+
std::string name
Definition Structs.h:76
+
bool hasKinBounds
Definition Structs.h:88
+
std::vector< int > preoscpdgs
Definition Structs.h:84
+
std::vector< int > modes
Definition Structs.h:78
+
std::vector< int > pdgs
Definition Structs.h:82
+ +
std::string GetParName(const int i)
+
std::vector< double > _fPropVal
+
std::vector< double > _fUpBound
+ +
std::vector< double > _fError
+
std::vector< double > _fIndivStepScale
+ +
std::vector< std::string > _fNames
+ +
void setName(const char *name)
+
TRandom3 ** random_number
+ +
std::string GetParFancyName(const int i)
+
TMatrixDSym * covMatrix
+
std::vector< double > _fPreFitValue
+
std::vector< double > _fLowBound
+
YAML::Node _fYAMLDoc
+
std::vector< std::string > _fFancyNames
+
std::vector< double > _fGenerated
+
unsigned int PrintLength
+ + + + +
std::vector< double > _fCurrVal
+ +
std::vector< std::vector< int > > _fFDSplineModes
+
covarianceXsec(std::vector< std::string > FileNames, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)
+
std::vector< int > _fDetID
+
std::vector< SplineInterpolation > _fSplineInterpolationType
+
const std::vector< int > GetFuncParsIndexFromDetID(int DetID)
+
void initParams(const double fScale)
+
std::vector< std::vector< std::vector< double > > > _fKinematicBounds
+
std::vector< std::vector< std::string > > _fKinematicPars
+
const std::vector< int > GetSplineParsIndexFromDetID(int DetID)
+
const std::vector< std::string > GetSplineFileParsNamesFromDetID(int DetID)
+
const std::vector< std::vector< int > > GetSplineModeVecFromDetID(int DetID)
+
std::vector< std::vector< int > > _fNeutrinoFlavour
+
const std::vector< std::string > GetSplineParsNamesFromDetID(int DetID)
+
const std::vector< std::string > GetNDSplineFileParsNamesFromDetID(int DetID)
+
std::vector< bool > isFlux
+
const std::vector< std::string > GetFDSplineFileParsNamesFromDetID(int DetID)
+
std::vector< std::string > _fFDSplineNames
+ +
int GetNumFuncParamsFromDetID(int DetID)
+
std::vector< std::vector< int > > _fTargetNuclei
+
int GetNumSplineParamsFromDetID(int DetID)
+
int GetParDetID(const int i) const
+
std::vector< std::string > _fNDSplineNames
+
const std::vector< std::string > GetFuncParsNamesFromDetID(int DetID)
+
std::vector< XsecNorms4 > NormParams
+
std::vector< std::vector< int > > _fNormModes
+ + +
const char * GetParamType(const int i) const
+
std::vector< std::string > _fParamType
+
const std::vector< XsecNorms4 > GetNormParsFromDetID(int DetID)
+
std::vector< std::vector< int > > _fNeutrinoFlavourUnosc
+ + + +
+ + + + diff --git a/covarianceXsec_8h.html b/covarianceXsec_8h.html new file mode 100644 index 00000000..93d1da70 --- /dev/null +++ b/covarianceXsec_8h.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceXsec.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
covarianceXsec.h File Reference
+
+
+
#include <math.h>
+#include <map>
+#include "TList.h"
+#include "covariance/covarianceBase.h"
+#include "samplePDF/Structs.h"
+#include "yaml-cpp/yaml.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  covarianceXsec
 
+
+ + + + diff --git a/covarianceXsec_8h_source.html b/covarianceXsec_8h_source.html new file mode 100644 index 00000000..d10d65e9 --- /dev/null +++ b/covarianceXsec_8h_source.html @@ -0,0 +1,248 @@ + + + + + + + +MaCh3: /github/workspace/covariance/covarianceXsec.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covarianceXsec.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3// C++ includes
+
4#include <math.h>
+
5#include <map>
+
6
+
7// ROOT includes
+
8#include "TList.h"
+
9
+
10// MaCh3 includes
+ +
12#include "samplePDF/Structs.h"
+
13
+
14#include "yaml-cpp/yaml.h"
+
15
+
+ +
17
+
18 public:
+
19 covarianceXsec(std::vector<std::string> FileNames, double threshold = -1, int FirstPCAdpar = -999, int LastPCAdpar = -999);
+ +
21
+
22 //ETA - trying out the yaml parsing
+
23 inline void InitXsecFromConfig();
+
24
+
25 // Print information about the whole object once it is set
+
26 inline void Print();
+
27
+
28 // General Getter functions not split by detector
+
29 // ETA - a lot of these can go... they're just duplications from the base class.
+
30 //ETA - just return the int of the DetID, this can be removed to do a string comp at some point.
+
31 int GetParDetID(const int i) const { return _fDetID[i];};
+
32 //ETA - just return a string of "spline", "norm" or "functional"
+
33 const char* GetParamType(const int i) const {return _fParamType[i].c_str();}
+
34
+
35 const std::vector<SplineInterpolation>& GetSplineInterpolation() const{return _fSplineInterpolationType;}
+ +
37
+
38 //DB Get spline parameters depending on given DetID
+
39 const std::vector<std::string> GetSplineParsNamesFromDetID(int DetID);
+
40 const std::vector<std::string> GetSplineFileParsNamesFromDetID(int DetID);
+
41 //ETA - what does this even do?
+
42 const std::vector<std::string> GetFDSplineFileParsNamesFromDetID(int DetID);
+
43 const std::vector<std::string> GetNDSplineFileParsNamesFromDetID(int DetID);
+
44 const std::vector< std::vector<int> > GetSplineModeVecFromDetID(int DetID);
+
45 const std::vector<int> GetSplineParsIndexFromDetID(int DetID);
+
46 int GetNumSplineParamsFromDetID(int DetID);
+
47
+
48 //DB Get norm/func parameters depending on given DetID
+
49 const std::vector<XsecNorms4> GetNormParsFromDetID(int DetID);
+
50 void SetupNormPars();
+
51 int GetNumFuncParamsFromDetID(int DetID);
+
52 const std::vector<std::string> GetFuncParsNamesFromDetID(int DetID);
+
53 const std::vector<int> GetFuncParsIndexFromDetID(int DetID);
+
54
+
55 //KS: For most covariances nominal and fparInit (prior) are the same, however for Xsec those can be different
+
56 // For example Sigma Var are done around nominal in ND280, no idea why though...
+
+
57 std::vector<double> getNominalArray() override
+
58 {
+
59 std::vector<double> nominal;
+
60 for (int i = 0; i < size; i++)
+
61 {
+
62 nominal.push_back(_fPreFitValue.at(i));
+
63 }
+
64 return nominal;
+
65 }
+
+
66 inline double getNominal(const int i) override { return _fPreFitValue.at(i); };
+
67
+
68 bool IsParFlux(const int i){ return isFlux[i]; }
+
69
+
70 //KS Function to set to nominal either flux or xsec parameters
+ + +
73
+
74 protected:
+
75 void initParams(const double fScale);
+ +
77 std::vector<bool> isFlux;
+
78
+
79 std::vector<int> _fDetID;
+
80 //std::vector<std::string> _fDetString;
+
81 std::vector<std::string> _fParamType;
+
82
+
83 //Some "usual" variables. Don't think we really need the ND/FD split
+
84 std::vector<std::vector<int>> _fNormModes;
+
85 std::vector<std::vector<int>> _fTargetNuclei;
+
86 std::vector<std::vector<int>> _fNeutrinoFlavour;
+
87 std::vector<std::vector<int>> _fNeutrinoFlavourUnosc;
+
88
+
89 //Variables related to spline systematics
+
90 std::vector<std::string> _fNDSplineNames;
+
91 std::vector<std::string> _fFDSplineNames;
+
92 std::vector<std::vector<int>> _fFDSplineModes;
+
93 std::vector<SplineInterpolation> _fSplineInterpolationType;
+
94
+
95 //Information to be able to apply generic cuts
+
96 std::vector<std::vector<std::string>> _fKinematicPars;
+
97 std::vector<std::vector<std::vector<double>>> _fKinematicBounds;
+
98
+
99 //Vector containing info for normalisation systematics
+
100 std::vector<XsecNorms4> NormParams;
+
101};
+
+
std::vector< int > nominal
+
std::vector< std::string > FileNames
+ +
SplineInterpolation
Definition Structs.h:307
+ + +
std::vector< double > _fPreFitValue
+ + + + +
bool IsParFlux(const int i)
+
std::vector< std::vector< int > > _fFDSplineModes
+
std::vector< int > _fDetID
+
void setXsecParNames()
+
std::vector< SplineInterpolation > _fSplineInterpolationType
+
const std::vector< SplineInterpolation > & GetSplineInterpolation() const
+
const std::vector< int > GetFuncParsIndexFromDetID(int DetID)
+
void initParams(const double fScale)
+
std::vector< std::vector< std::vector< double > > > _fKinematicBounds
+
std::vector< std::vector< std::string > > _fKinematicPars
+
const std::vector< int > GetSplineParsIndexFromDetID(int DetID)
+
const std::vector< std::string > GetSplineFileParsNamesFromDetID(int DetID)
+
const std::vector< std::vector< int > > GetSplineModeVecFromDetID(int DetID)
+
std::vector< std::vector< int > > _fNeutrinoFlavour
+
const std::vector< std::string > GetSplineParsNamesFromDetID(int DetID)
+
const std::vector< std::string > GetNDSplineFileParsNamesFromDetID(int DetID)
+
std::vector< bool > isFlux
+
const std::vector< std::string > GetFDSplineFileParsNamesFromDetID(int DetID)
+
std::vector< std::string > _fFDSplineNames
+ +
int GetNumFuncParamsFromDetID(int DetID)
+
std::vector< std::vector< int > > _fTargetNuclei
+
std::vector< double > getNominalArray() override
+
int GetNumSplineParamsFromDetID(int DetID)
+
SplineInterpolation GetParSplineInterpolation(int i)
+
int GetParDetID(const int i) const
+
std::vector< std::string > _fNDSplineNames
+
const std::vector< std::string > GetFuncParsNamesFromDetID(int DetID)
+
std::vector< XsecNorms4 > NormParams
+
std::vector< std::vector< int > > _fNormModes
+ + +
const char * GetParamType(const int i) const
+
std::vector< std::string > _fParamType
+
const std::vector< XsecNorms4 > GetNormParsFromDetID(int DetID)
+
double getNominal(const int i) override
+
std::vector< std::vector< int > > _fNeutrinoFlavourUnosc
+ + + +
+ + + + diff --git a/dir_335e938d2c12c5a13717c0a8a9316e75.html b/dir_335e938d2c12c5a13717c0a8a9316e75.html new file mode 100644 index 00000000..2fcdc05c --- /dev/null +++ b/dir_335e938d2c12c5a13717c0a8a9316e75.html @@ -0,0 +1,105 @@ + + + + + + + +MaCh3: /github/workspace/Diagnostics Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Diagnostics Directory Reference
+
+ + + + + diff --git a/dir_8ab82b4d49d905c57b21b814a783a10f.html b/dir_8ab82b4d49d905c57b21b814a783a10f.html new file mode 100644 index 00000000..fd8509e2 --- /dev/null +++ b/dir_8ab82b4d49d905c57b21b814a783a10f.html @@ -0,0 +1,119 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
samplePDF Directory Reference
+
+ + + + + diff --git a/dir_9d1483aea13a0d690c9337bf5d7dafcd.html b/dir_9d1483aea13a0d690c9337bf5d7dafcd.html new file mode 100644 index 00000000..ad3494e8 --- /dev/null +++ b/dir_9d1483aea13a0d690c9337bf5d7dafcd.html @@ -0,0 +1,125 @@ + + + + + + + +MaCh3: /github/workspace/mcmc Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
mcmc Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 FitterBase.cpp
 
 FitterBase.h
 
 gpuMCMCProcessorUtils.cu
 
 LikelihoodFit.cpp
 
 LikelihoodFit.h
 
 mcmc.cpp
 
 mcmc.h
 
 MCMCProcessor.cpp
 
 MCMCProcessor.h
 
 MinuitFit.cpp
 
 MinuitFit.h
 
 PSO.cpp
 
 PSO.h
 
 stretch.cpp
 
 stretch.h
 
 tune.cpp
 
 tune.h
 
+
+ + + + diff --git a/dir_a3857b76c57a33866f3a59ae3b67734b.html b/dir_a3857b76c57a33866f3a59ae3b67734b.html new file mode 100644 index 00000000..0ce663c8 --- /dev/null +++ b/dir_a3857b76c57a33866f3a59ae3b67734b.html @@ -0,0 +1,109 @@ + + + + + + + +MaCh3: /github/workspace/splines Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
splines Directory Reference
+
+ + + + + diff --git a/dir_ad7582af392f69120f12d3a638849ade.html b/dir_ad7582af392f69120f12d3a638849ade.html new file mode 100644 index 00000000..951c67fd --- /dev/null +++ b/dir_ad7582af392f69120f12d3a638849ade.html @@ -0,0 +1,111 @@ + + + + + + + +MaCh3: /github/workspace/covariance Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
covariance Directory Reference
+
+ + + + + diff --git a/dir_ddd8689fa3d60c0bca74cd8eb27076fe.html b/dir_ddd8689fa3d60c0bca74cd8eb27076fe.html new file mode 100644 index 00000000..8ce4b6ba --- /dev/null +++ b/dir_ddd8689fa3d60c0bca74cd8eb27076fe.html @@ -0,0 +1,95 @@ + + + + + + + +MaCh3: /github/workspace/OscClass Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OscClass Directory Reference
+
+
+ + + + + + +

+Files

 OscClass_CUDAProb3.cpp
 
 OscClass_CUDAProb3.h
 
+
+ + + + diff --git a/dir_f4fde8e27670e448c9f2b9269bfa4d83.html b/dir_f4fde8e27670e448c9f2b9269bfa4d83.html new file mode 100644 index 00000000..ab2cb568 --- /dev/null +++ b/dir_f4fde8e27670e448c9f2b9269bfa4d83.html @@ -0,0 +1,105 @@ + + + + + + + +MaCh3: /github/workspace/manager Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
manager Directory Reference
+
+
+ + + + + + + + + + + + + + + + +

+Files

 MaCh3Logger.h
 
 manager.cpp
 
 manager.h
 
 Monitor.cpp
 
 Monitor.h
 
 YamlHelper.cpp
 
 YamlHelper.h
 
+
+ + + + diff --git a/doc.svg b/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..009a9b55 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 00000000..79a76354 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..9b281563 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,199 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ +$(document).ready(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/files.html b/files.html new file mode 100644 index 00000000..8f0b4a91 --- /dev/null +++ b/files.html @@ -0,0 +1,160 @@ + + + + + + + +MaCh3: File List + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+ + + + + diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..5dffc87b --- /dev/null +++ b/functions.html @@ -0,0 +1,115 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- _ -

+
+ + + + diff --git a/functions_a.html b/functions_a.html new file mode 100644 index 00000000..ccf9a349 --- /dev/null +++ b/functions_a.html @@ -0,0 +1,107 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 00000000..e04240fb --- /dev/null +++ b/functions_b.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 00000000..5f8e53e7 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,147 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 00000000..3cc02802 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,108 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 00000000..8b4b1865 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/functions_enum.html b/functions_enum.html new file mode 100644 index 00000000..1f03a79f --- /dev/null +++ b/functions_enum.html @@ -0,0 +1,83 @@ + + + + + + + +MaCh3: Class Members - Enumerations + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the classes they belong to:
+
+ + + + diff --git a/functions_eval.html b/functions_eval.html new file mode 100644 index 00000000..9c61384d --- /dev/null +++ b/functions_eval.html @@ -0,0 +1,86 @@ + + + + + + + +MaCh3: Class Members - Enumerator + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enum values with links to the classes they belong to:
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 00000000..9734f4fc --- /dev/null +++ b/functions_f.html @@ -0,0 +1,152 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 00000000..d65e3c6d --- /dev/null +++ b/functions_func.html @@ -0,0 +1,95 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/functions_func_b.html b/functions_func_b.html new file mode 100644 index 00000000..a43d72cb --- /dev/null +++ b/functions_func_b.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/functions_func_c.html b/functions_func_c.html new file mode 100644 index 00000000..5fff2b9f --- /dev/null +++ b/functions_func_c.html @@ -0,0 +1,111 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/functions_func_d.html b/functions_func_d.html new file mode 100644 index 00000000..ace67766 --- /dev/null +++ b/functions_func_d.html @@ -0,0 +1,95 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/functions_func_e.html b/functions_func_e.html new file mode 100644 index 00000000..e3c5fcfa --- /dev/null +++ b/functions_func_e.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/functions_func_f.html b/functions_func_f.html new file mode 100644 index 00000000..f3493d09 --- /dev/null +++ b/functions_func_f.html @@ -0,0 +1,107 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/functions_func_g.html b/functions_func_g.html new file mode 100644 index 00000000..858f99f0 --- /dev/null +++ b/functions_func_g.html @@ -0,0 +1,222 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/functions_func_i.html b/functions_func_i.html new file mode 100644 index 00000000..4649fee4 --- /dev/null +++ b/functions_func_i.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/functions_func_l.html b/functions_func_l.html new file mode 100644 index 00000000..65d0256a --- /dev/null +++ b/functions_func_l.html @@ -0,0 +1,88 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/functions_func_m.html b/functions_func_m.html new file mode 100644 index 00000000..cfb86941 --- /dev/null +++ b/functions_func_m.html @@ -0,0 +1,106 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/functions_func_n.html b/functions_func_n.html new file mode 100644 index 00000000..431a363c --- /dev/null +++ b/functions_func_n.html @@ -0,0 +1,88 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/functions_func_o.html b/functions_func_o.html new file mode 100644 index 00000000..9849f67e --- /dev/null +++ b/functions_func_o.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/functions_func_p.html b/functions_func_p.html new file mode 100644 index 00000000..1fc72d3b --- /dev/null +++ b/functions_func_p.html @@ -0,0 +1,113 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/functions_func_r.html b/functions_func_r.html new file mode 100644 index 00000000..a4538099 --- /dev/null +++ b/functions_func_r.html @@ -0,0 +1,125 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/functions_func_s.html b/functions_func_s.html new file mode 100644 index 00000000..b6cad363 --- /dev/null +++ b/functions_func_s.html @@ -0,0 +1,188 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/functions_func_t.html b/functions_func_t.html new file mode 100644 index 00000000..b637aaa1 --- /dev/null +++ b/functions_func_t.html @@ -0,0 +1,101 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/functions_func_u.html b/functions_func_u.html new file mode 100644 index 00000000..04edfd59 --- /dev/null +++ b/functions_func_u.html @@ -0,0 +1,91 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/functions_func_v.html b/functions_func_v.html new file mode 100644 index 00000000..33ec9e42 --- /dev/null +++ b/functions_func_v.html @@ -0,0 +1,87 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- v -

    +
  • vector_add() : PSO
  • +
  • vector_multiply() : PSO
  • +
  • vector_subtract() : PSO
  • +
+
+ + + + diff --git a/functions_func_w.html b/functions_func_w.html new file mode 100644 index 00000000..45cd8b0e --- /dev/null +++ b/functions_func_w.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- w -

    +
  • WriteOutput() : PSO
  • +
+
+ + + + diff --git a/functions_func_x.html b/functions_func_x.html new file mode 100644 index 00000000..78ee7eb0 --- /dev/null +++ b/functions_func_x.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/functions_func_~.html b/functions_func_~.html new file mode 100644 index 00000000..9e47cab4 --- /dev/null +++ b/functions_func_~.html @@ -0,0 +1,108 @@ + + + + + + + +MaCh3: Class Members - Functions + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 00000000..8b36d04d --- /dev/null +++ b/functions_g.html @@ -0,0 +1,232 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 00000000..b796bd7a --- /dev/null +++ b/functions_h.html @@ -0,0 +1,102 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 00000000..e7cc7db5 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,119 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 00000000..48e4838f --- /dev/null +++ b/functions_k.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- k -

+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 00000000..b571e77d --- /dev/null +++ b/functions_l.html @@ -0,0 +1,100 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 00000000..aac5a203 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,123 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 00000000..692428e5 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,154 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 00000000..77b5efe9 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,107 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 00000000..78614c05 --- /dev/null +++ b/functions_p.html @@ -0,0 +1,164 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 00000000..3f7bc1bd --- /dev/null +++ b/functions_r.html @@ -0,0 +1,141 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 00000000..78b8ab48 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,239 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 00000000..258da1b6 --- /dev/null +++ b/functions_t.html @@ -0,0 +1,115 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 00000000..f24a1704 --- /dev/null +++ b/functions_u.html @@ -0,0 +1,107 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 00000000..2e6f748b --- /dev/null +++ b/functions_v.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..8569f455 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,115 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- _ -

+
+ + + + diff --git a/functions_vars_a.html b/functions_vars_a.html new file mode 100644 index 00000000..8b44f16c --- /dev/null +++ b/functions_vars_a.html @@ -0,0 +1,96 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/functions_vars_b.html b/functions_vars_b.html new file mode 100644 index 00000000..4fde0075 --- /dev/null +++ b/functions_vars_b.html @@ -0,0 +1,92 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/functions_vars_c.html b/functions_vars_c.html new file mode 100644 index 00000000..1c42da06 --- /dev/null +++ b/functions_vars_c.html @@ -0,0 +1,120 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/functions_vars_d.html b/functions_vars_d.html new file mode 100644 index 00000000..d791b308 --- /dev/null +++ b/functions_vars_d.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/functions_vars_e.html b/functions_vars_e.html new file mode 100644 index 00000000..c14acbad --- /dev/null +++ b/functions_vars_e.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/functions_vars_f.html b/functions_vars_f.html new file mode 100644 index 00000000..d51f6bf0 --- /dev/null +++ b/functions_vars_f.html @@ -0,0 +1,129 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/functions_vars_g.html b/functions_vars_g.html new file mode 100644 index 00000000..70d0f913 --- /dev/null +++ b/functions_vars_g.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/functions_vars_h.html b/functions_vars_h.html new file mode 100644 index 00000000..a53d8099 --- /dev/null +++ b/functions_vars_h.html @@ -0,0 +1,102 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/functions_vars_i.html b/functions_vars_i.html new file mode 100644 index 00000000..c90dac7c --- /dev/null +++ b/functions_vars_i.html @@ -0,0 +1,100 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/functions_vars_k.html b/functions_vars_k.html new file mode 100644 index 00000000..a8c8681d --- /dev/null +++ b/functions_vars_k.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- k -

+
+ + + + diff --git a/functions_vars_l.html b/functions_vars_l.html new file mode 100644 index 00000000..c1724012 --- /dev/null +++ b/functions_vars_l.html @@ -0,0 +1,96 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/functions_vars_m.html b/functions_vars_m.html new file mode 100644 index 00000000..8722277f --- /dev/null +++ b/functions_vars_m.html @@ -0,0 +1,101 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/functions_vars_n.html b/functions_vars_n.html new file mode 100644 index 00000000..6b624248 --- /dev/null +++ b/functions_vars_n.html @@ -0,0 +1,150 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/functions_vars_o.html b/functions_vars_o.html new file mode 100644 index 00000000..74851520 --- /dev/null +++ b/functions_vars_o.html @@ -0,0 +1,107 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/functions_vars_p.html b/functions_vars_p.html new file mode 100644 index 00000000..36249818 --- /dev/null +++ b/functions_vars_p.html @@ -0,0 +1,135 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/functions_vars_r.html b/functions_vars_r.html new file mode 100644 index 00000000..2bdade3c --- /dev/null +++ b/functions_vars_r.html @@ -0,0 +1,100 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/functions_vars_s.html b/functions_vars_s.html new file mode 100644 index 00000000..70e4a64c --- /dev/null +++ b/functions_vars_s.html @@ -0,0 +1,134 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/functions_vars_t.html b/functions_vars_t.html new file mode 100644 index 00000000..bf936077 --- /dev/null +++ b/functions_vars_t.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/functions_vars_u.html b/functions_vars_u.html new file mode 100644 index 00000000..50e924df --- /dev/null +++ b/functions_vars_u.html @@ -0,0 +1,100 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/functions_vars_v.html b/functions_vars_v.html new file mode 100644 index 00000000..7bf6aa1e --- /dev/null +++ b/functions_vars_v.html @@ -0,0 +1,87 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/functions_vars_w.html b/functions_vars_w.html new file mode 100644 index 00000000..b3d1754f --- /dev/null +++ b/functions_vars_w.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/functions_vars_x.html b/functions_vars_x.html new file mode 100644 index 00000000..7a1193ae --- /dev/null +++ b/functions_vars_x.html @@ -0,0 +1,100 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/functions_vars_y.html b/functions_vars_y.html new file mode 100644 index 00000000..5ece2527 --- /dev/null +++ b/functions_vars_y.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: Class Members - Variables + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- y -

+
+ + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 00000000..5c10e23c --- /dev/null +++ b/functions_w.html @@ -0,0 +1,86 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/functions_x.html b/functions_x.html new file mode 100644 index 00000000..5497c873 --- /dev/null +++ b/functions_x.html @@ -0,0 +1,101 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/functions_y.html b/functions_y.html new file mode 100644 index 00000000..9ef5969b --- /dev/null +++ b/functions_y.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- y -

+
+ + + + diff --git a/functions_~.html b/functions_~.html new file mode 100644 index 00000000..de5dd8be --- /dev/null +++ b/functions_~.html @@ -0,0 +1,108 @@ + + + + + + + +MaCh3: Class Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/globals.html b/globals.html new file mode 100644 index 00000000..f9ec82fb --- /dev/null +++ b/globals.html @@ -0,0 +1,96 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- _ -

+
+ + + + diff --git a/globals_b.html b/globals_b.html new file mode 100644 index 00000000..e2e5ddb5 --- /dev/null +++ b/globals_b.html @@ -0,0 +1,87 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- b -

+
+ + + + diff --git a/globals_c.html b/globals_c.html new file mode 100644 index 00000000..6f0e5039 --- /dev/null +++ b/globals_c.html @@ -0,0 +1,105 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- c -

+
+ + + + diff --git a/globals_d.html b/globals_d.html new file mode 100644 index 00000000..4564d0be --- /dev/null +++ b/globals_d.html @@ -0,0 +1,91 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- d -

+
+ + + + diff --git a/globals_defs.html b/globals_defs.html new file mode 100644 index 00000000..19ab6945 --- /dev/null +++ b/globals_defs.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all macros with links to the files they belong to:
+
+ + + + diff --git a/globals_e.html b/globals_e.html new file mode 100644 index 00000000..b7674a4c --- /dev/null +++ b/globals_e.html @@ -0,0 +1,91 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- e -

+
+ + + + diff --git a/globals_enum.html b/globals_enum.html new file mode 100644 index 00000000..d299cce9 --- /dev/null +++ b/globals_enum.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the files they belong to:
+
+ + + + diff --git a/globals_eval.html b/globals_eval.html new file mode 100644 index 00000000..488cef51 --- /dev/null +++ b/globals_eval.html @@ -0,0 +1,142 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enum values with links to the files they belong to:
+ +

- e -

+ + +

- k -

+ + +

- m -

+ + +

- t -

+
+ + + + diff --git a/globals_f.html b/globals_f.html new file mode 100644 index 00000000..d906413b --- /dev/null +++ b/globals_f.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- f -

+
+ + + + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 00000000..38f01f31 --- /dev/null +++ b/globals_func.html @@ -0,0 +1,221 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+ +

- c -

+ + +

- d -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- y -

+
+ + + + diff --git a/globals_g.html b/globals_g.html new file mode 100644 index 00000000..725467b7 --- /dev/null +++ b/globals_g.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- g -

+
+ + + + diff --git a/globals_i.html b/globals_i.html new file mode 100644 index 00000000..1ea140f7 --- /dev/null +++ b/globals_i.html @@ -0,0 +1,88 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- i -

+
+ + + + diff --git a/globals_k.html b/globals_k.html new file mode 100644 index 00000000..e6474190 --- /dev/null +++ b/globals_k.html @@ -0,0 +1,122 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- k -

+
+ + + + diff --git a/globals_l.html b/globals_l.html new file mode 100644 index 00000000..e0d5fd70 --- /dev/null +++ b/globals_l.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- l -

+
+ + + + diff --git a/globals_m.html b/globals_m.html new file mode 100644 index 00000000..dae3398c --- /dev/null +++ b/globals_m.html @@ -0,0 +1,113 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- m -

+
+ + + + diff --git a/globals_n.html b/globals_n.html new file mode 100644 index 00000000..b76841c7 --- /dev/null +++ b/globals_n.html @@ -0,0 +1,99 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- n -

+
+ + + + diff --git a/globals_o.html b/globals_o.html new file mode 100644 index 00000000..b272569f --- /dev/null +++ b/globals_o.html @@ -0,0 +1,88 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- o -

+
+ + + + diff --git a/globals_p.html b/globals_p.html new file mode 100644 index 00000000..90656031 --- /dev/null +++ b/globals_p.html @@ -0,0 +1,110 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- p -

+
+ + + + diff --git a/globals_r.html b/globals_r.html new file mode 100644 index 00000000..64cf2866 --- /dev/null +++ b/globals_r.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- r -

+
+ + + + diff --git a/globals_s.html b/globals_s.html new file mode 100644 index 00000000..c0edbc29 --- /dev/null +++ b/globals_s.html @@ -0,0 +1,103 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- s -

+
+ + + + diff --git a/globals_t.html b/globals_t.html new file mode 100644 index 00000000..39d7fd34 --- /dev/null +++ b/globals_t.html @@ -0,0 +1,97 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- t -

+
+ + + + diff --git a/globals_type.html b/globals_type.html new file mode 100644 index 00000000..a2a05e0f --- /dev/null +++ b/globals_type.html @@ -0,0 +1,83 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the files they belong to:
+
+ + + + diff --git a/globals_u.html b/globals_u.html new file mode 100644 index 00000000..30113aa7 --- /dev/null +++ b/globals_u.html @@ -0,0 +1,86 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- u -

+
+ + + + diff --git a/globals_v.html b/globals_v.html new file mode 100644 index 00000000..833fc75f --- /dev/null +++ b/globals_v.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- v -

+
+ + + + diff --git a/globals_vars.html b/globals_vars.html new file mode 100644 index 00000000..c47c42d7 --- /dev/null +++ b/globals_vars.html @@ -0,0 +1,234 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the files they belong to:
+ +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- x -

+ + +

- y -

+
+ + + + diff --git a/globals_x.html b/globals_x.html new file mode 100644 index 00000000..f29cd476 --- /dev/null +++ b/globals_x.html @@ -0,0 +1,85 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- x -

+
+ + + + diff --git a/globals_y.html b/globals_y.html new file mode 100644 index 00000000..4b20ca9d --- /dev/null +++ b/globals_y.html @@ -0,0 +1,86 @@ + + + + + + + +MaCh3: File Members + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- y -

+
+ + + + diff --git a/gpuMCMCProcessorUtils_8cu.html b/gpuMCMCProcessorUtils_8cu.html new file mode 100644 index 00000000..c9f5ecc7 --- /dev/null +++ b/gpuMCMCProcessorUtils_8cu.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/gpuMCMCProcessorUtils.cu File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
gpuMCMCProcessorUtils.cu File Reference
+
+ + + + + diff --git a/gpuMCMCProcessorUtils_8cu_source.html b/gpuMCMCProcessorUtils_8cu_source.html new file mode 100644 index 00000000..e39f4d23 --- /dev/null +++ b/gpuMCMCProcessorUtils_8cu_source.html @@ -0,0 +1,371 @@ + + + + + + + +MaCh3: /github/workspace/mcmc/gpuMCMCProcessorUtils.cu Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
gpuMCMCProcessorUtils.cu
+
+
+Go to the documentation of this file.
1// MaCh3 utils for processing/diagnosic MCMC
+
2// Written by Kamil Skwarczynski
+
3//
+
4// Contains code to run on CUDA GPUs. Right now only can calculate autocorealtions
+
5// Potential extensions:
+
6// -Covariance matrix calculations and other matrix operations
+
7// -Effective Sample Size evaluation
+
8
+
9
+
10// C i/o for printf and others
+
11#include <stdio.h>
+
12
+
13// CUDA specifics
+
14#include <cuda_runtime.h>
+
15
+
16#ifdef CUDA_ERROR_CHECK
+
17#include <helper_functions.h>
+
18#include <helper_cuda.h>
+
19#endif
+
20
+
21// Define the macros
+
22#define CudaSafeCall(err) __cudaSafeCall(err, __FILE__, __LINE__)
+
23#define CudaCheckError() __cudaCheckError(__FILE__, __LINE__)
+
24
+
25//KS: Need it for shared memory, there is way to use dynamic shared memory but I am lazy right now
+
26#define __BlockSize__ 1024
+
27
+
28// **************************************************
+
29// ERROR CHECKING ROUTINES
+
30// Also exist in helper_cuda.h
+
31// **************************************************
+
32
+
33// **************************************************
+
34// Check for a safe call on GPU
+
35inline void __cudaSafeCall( cudaError err, const char *file, const int line ) {
+
36// **************************************************
+
37#ifdef CUDA_ERROR_CHECK
+
38 if (cudaSuccess != err) {
+
39 fprintf(stderr, "cudaSafeCall() failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
40 exit(-1);
+
41 }
+
42#endif
+
43 return;
+
44}
+
45
+
46// **************************************************
+
47// Check if there's been an error
+
48inline void __cudaCheckError( const char *file, const int line ) {
+
49// **************************************************
+
50#ifdef CUDA_ERROR_CHECK
+
51 cudaError err = cudaGetLastError();
+
52 if (cudaSuccess != err) {
+
53 fprintf(stderr, "cudaCheckError() failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
54 exit(-1);
+
55 }
+
56
+
57 // More careful checking. However, this will affect performance.
+
58 // Comment away if needed.
+
59 err = cudaDeviceSynchronize();
+
60 if (cudaSuccess != err) {
+
61 fprintf(stderr, "cudaCheckError() with sync failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
62 exit(-1);
+
63 }
+
64#endif
+
65 return;
+
66}
+
67
+
68// ******************************************
+
69// CONSTANTS
+
70// ******************************************
+
71
+
72// d_NAME declares DEVICE constants (live on GPU)
+
73__device__ __constant__ int d_nLag;
+
74__device__ __constant__ int d_nDraws;
+
75__device__ __constant__ int d_nEntries;
+
76
+
77// h_NAME declares HOST constants (live on CPU)
+
78static int h_nLag = -1;
+
79static int h_nDraws = -1;
+
80static int h_nEntries = -1;
+
81
+
82// *******************************************
+
83// INITIALISE GPU
+
84// *******************************************
+
85
+
86// *******************************************
+
87//KS: Initaliser, here we allocate memory for variables and copy constants
+
88__host__ void InitGPU_AutoCorr(
+
89// *******************************************
+
90 float **ParStep_gpu,
+
91 float **NumeratorSum_gpu,
+
92 float **ParamSums_gpu,
+
93 float **DenomSum_gpu,
+
94
+
95 int n_Entries,
+
96 int n_Pars,
+
97 const int n_Lags) {
+
98
+
99 // Write to the global statics (h_* denotes host stored variable)
+
100 h_nDraws = n_Pars;
+
101 h_nLag = n_Lags;
+
102 h_nEntries = n_Entries;
+
103
+
104 // Copy the constants
+
105 cudaMemcpyToSymbol(d_nLag, &h_nLag, sizeof(h_nLag));
+
106 CudaCheckError();
+
107
+
108 cudaMemcpyToSymbol(d_nDraws, &h_nDraws, sizeof(h_nDraws));
+
109 CudaCheckError();
+
110
+
111 cudaMemcpyToSymbol(d_nEntries, &h_nEntries, sizeof(h_nEntries));
+
112 CudaCheckError();
+
113
+
114 // Allocate chunks of memory to GPU
+
115 //Numerator which is directly used for calcualing LagL
+
116 cudaMalloc((void **) NumeratorSum_gpu, h_nLag*h_nDraws*sizeof(float));
+
117 CudaCheckError();
+
118
+
119 //Denominator which is directly used for calcualing LagL
+
120 cudaMalloc((void **) DenomSum_gpu, h_nLag*h_nDraws*sizeof(float));
+
121 CudaCheckError();
+
122
+
123 //Mean value for a given parameter
+
124 cudaMalloc((void **) ParamSums_gpu, h_nDraws*sizeof(float));
+
125 CudaCheckError();
+
126
+
127 //store value of paramter for each step
+
128 cudaMalloc((void **) ParStep_gpu, h_nDraws*h_nEntries*sizeof(float*));
+
129 CudaCheckError();
+
130
+
131 printf(" Allocated in total %f MB for autocorealtions calculations on GPU\n", double(sizeof(float)*(h_nLag*h_nDraws+h_nLag*h_nDraws+h_nDraws+h_nDraws*h_nEntries))/1.E6);
+
132
+
133}
+
134
+
135// ******************************************************
+
136// START COPY TO GPU
+
137// ******************************************************
+
138
+
139// ******************************************************
+
140//KS: Copy neccesary variables from CPU to GPU
+
141__host__ void CopyToGPU_AutoCorr(
+
142// ******************************************************
+
143 float *ParStep_cpu,
+
144 float *NumeratorSum_cpu,
+
145 float *ParamSums_cpu,
+
146 float *DenomSum_cpu,
+
147
+
148 float *ParStep_gpu,
+
149 float *NumeratorSum_gpu,
+
150 float *ParamSums_gpu,
+
151 float *DenomSum_gpu) {
+
152
+
153 //store value of paramter for each step
+
154 cudaMemcpy(ParStep_gpu, ParStep_cpu, h_nDraws*h_nEntries*sizeof(float), cudaMemcpyHostToDevice);
+
155 CudaCheckError();
+
156
+
157 //Mean value for a given parameter
+
158 cudaMemcpy(ParamSums_gpu, ParamSums_cpu, h_nDraws*sizeof(float), cudaMemcpyHostToDevice);
+
159 CudaCheckError();
+
160
+
161 //Numerator which is directly used for calcualing LagL
+
162 cudaMemcpy(NumeratorSum_gpu, NumeratorSum_cpu, h_nLag*h_nDraws*sizeof(float), cudaMemcpyHostToDevice);
+
163 CudaCheckError();
+
164
+
165 //Denominator which is directly used for calcualing LagL
+
166 cudaMemcpy(DenomSum_gpu, DenomSum_cpu, h_nLag*h_nDraws*sizeof(float), cudaMemcpyHostToDevice);
+
167 CudaCheckError();
+
168}
+
169
+
170
+
171// ********************************************************
+
172// START GPU KERNELS
+
173//*********************************************************
+
174
+
175//*********************************************************
+
176//Eval autocorealtions based on Box and Jenkins
+
177__global__ void EvalOnGPU_AutoCorr(
+
178 const float* __restrict__ ParStep_gpu,
+
179 const float* __restrict__ ParamSums_gpu,
+
180 float* NumeratorSum_gpu,
+
181 float* DenomSum_gpu) {
+
182//*********************************************************
+
183
+
184 const unsigned int CurrentLagNum = (blockIdx.x * blockDim.x + threadIdx.x);
+
185
+
186 //KS: Accesing shared memory is much much faster than global memory hence we use shared memory for calcualtion and then write to global memory
+
187 __shared__ float shared_NumeratorSum[__BlockSize__];
+
188 __shared__ float shared_DenomSum[__BlockSize__];
+
189
+
190 // this is the stopping condition!
+
191 if (CurrentLagNum < d_nLag*d_nDraws)
+
192 {
+
193 shared_NumeratorSum[threadIdx.x] = 0;
+
194 shared_DenomSum[threadIdx.x] = 0;
+
195
+
196 //KS: Might consider caching this information, which MIGHT be faster too lazy right now
+
197 const int Param = int(CurrentLagNum/d_nLag);
+
198 const int nLag = CurrentLagNum - Param*d_nLag;
+
199 // Loop over the number of entries
+
200 for (int i = 0; i < d_nEntries; ++i)
+
201 {
+
202 //KS: Use fmaf to have it tiny bit faster, for something easier to read: Param*d_nEntries + i
+
203 int CurrParStep = fmaf(Param, d_nEntries, i);
+
204 const float Diff = ParStep_gpu[CurrParStep]-ParamSums_gpu[Param];
+
205 // Only sum the numerator up to i = N-k
+
206 if (i < d_nEntries-nLag)
+
207 {
+
208 //KS: Use fmaf to have it tiny bit faster, for something easier to read: Param*d_nEntries + (i + nLag)
+
209 CurrParStep = fmaf(Param, d_nEntries, i + nLag);
+
210 const float LagTerm = ParStep_gpu[CurrParStep]-ParamSums_gpu[Param];
+
211 const float Product = Diff*LagTerm;
+
212 shared_NumeratorSum[threadIdx.x] += Product;
+
213 }
+
214 // Square the difference to form the denominator
+
215 const float Denom = Diff*Diff;
+
216 shared_DenomSum[threadIdx.x] += Denom;
+
217 }
+
218
+
219 //KS: Make sure threads are synchorised before moving to global memory
+
220 __syncthreads();
+
221 NumeratorSum_gpu[CurrentLagNum] = shared_NumeratorSum[threadIdx.x];
+
222 DenomSum_gpu[CurrentLagNum] = shared_DenomSum[threadIdx.x];
+
223 }
+
224}
+
225
+
226// *****************************************
+
227//KS: This call the main kernel responsible for calculating LagL and later copy results back to CPU
+
228__host__ void RunGPU_AutoCorr(
+
229 float* ParStep_gpu,
+
230 float* ParamSums_gpu,
+
231 float* NumeratorSum_gpu,
+
232 float* DenomSum_gpu,
+
233 float* NumeratorSum_cpu,
+
234 float* DenomSum_cpu) {
+
235// *****************************************
+
236
+
237 dim3 block_size;
+
238 dim3 grid_size;
+
239
+
240 block_size.x = __BlockSize__;
+
241 grid_size.x = (h_nLag*h_nDraws / block_size.x) + 1;
+
242
+
243 EvalOnGPU_AutoCorr<<<grid_size, block_size>>>(
+
244 ParStep_gpu,
+
245 ParamSums_gpu,
+
246 NumeratorSum_gpu,
+
247 DenomSum_gpu);
+
248 CudaCheckError();
+
249
+
250 printf(" Finished calculating now copying results back to CPU \n");
+
251
+
252 //KS: Finally copy paste memory from GPU to CPU
+
253 cudaMemcpy(NumeratorSum_cpu, NumeratorSum_gpu, h_nLag*h_nDraws*sizeof(float), cudaMemcpyDeviceToHost);
+
254 CudaCheckError();
+
255
+
256 cudaMemcpy(DenomSum_cpu, DenomSum_gpu, h_nLag*h_nDraws*sizeof(float), cudaMemcpyDeviceToHost);
+
257 CudaCheckError();
+
258}
+
259
+
260// *********************************
+
261// CLEANING
+
262// *********************************
+
263
+
264// *********************************
+
265//KS:
+
266__host__ void CleanupGPU_AutoCorr(
+
267 float *ParStep_gpu,
+
268 float *NumeratorSum_gpu,
+
269 float *ParamSums_gpu,
+
270 float *DenomSum_gpu) {
+
271// *********************************
+
272 cudaFree(ParStep_gpu);
+
273 cudaFree(NumeratorSum_gpu);
+
274 cudaFree(ParamSums_gpu);
+
275 cudaFree(DenomSum_gpu);
+
276
+
277 printf(" Cleared memory at GPU, I am free \n");
+
278 return;
+
279}
+
+ + + + diff --git a/gpuSplineUtils_8cu.html b/gpuSplineUtils_8cu.html new file mode 100644 index 00000000..0816c11b --- /dev/null +++ b/gpuSplineUtils_8cu.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: /github/workspace/splines/gpuSplineUtils.cu File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
gpuSplineUtils.cu File Reference
+
+ + + + + diff --git a/gpuSplineUtils_8cu_source.html b/gpuSplineUtils_8cu_source.html new file mode 100644 index 00000000..eab50ea8 --- /dev/null +++ b/gpuSplineUtils_8cu_source.html @@ -0,0 +1,1017 @@ + + + + + + + +MaCh3: /github/workspace/splines/gpuSplineUtils.cu Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
gpuSplineUtils.cu
+
+
+Go to the documentation of this file.
1// MaCh3 event-by-event cross-section spline code
+
2// Written by Richard Calland, Asher Kaboth, Clarence Wret, Kamil Skwarczynski
+
3//
+
4// Contains code to run on CUDA GPUs. Essentially we load up stripped TSpline3 objects to the GPU and do the equivalent of TSpline3->Eval(double) for all events
+
5// Now also supports TF1 evals
+
6// Called from samplePDF/samplePDFND.cpp -> splines/SplineMonolith.cpp -> splines/gpuSplineUtils.cu
+
7
+
8// C i/o for printf and others
+
9#include <stdio.h>
+
10#include <vector>
+
11
+
12// CUDA specifics
+
13
+
14#include <cuda_runtime.h>
+
15
+
16#ifdef CUDA_ERROR_CHECK
+
17#include <helper_functions.h>
+
18#include <helper_cuda.h>
+
19#endif
+
20
+
21// Define the macros
+
22#define CudaSafeCall(err) __cudaSafeCall(err, __FILE__, __LINE__)
+
23#define CudaCheckError() __cudaCheckError(__FILE__, __LINE__)
+
24
+
25// Hard code the number of splines
+
26// Not entirely necessary: only used for val_gpu and segment_gpu being device constants. Could move them to not being device constants
+
27// EM: for OA2022:
+
28#ifdef NSPLINES_ND280
+
29#pragma message("using User Specified N splines")
+
30#define __N_SPLINES__ NSPLINES_ND280
+
31// EM: for OA2024:
+
32#else
+
33#define __N_SPLINES__ 160
+
34#pragma message("using default N splines")
+
35#endif
+
36
+
37
+
38//KS: We store coefficients {y,b,c,d} in one array one by one, this is only to define it once rather then insert "4" all over the code
+
39#define _nCoeff_ 4
+
40
+
41//KS: Need it for shared memory, there is way to use dynamic shared memory but I am lazy right now
+
42#define __BlockSize__ 1024
+
43
+
44// CUDA_ERROR_CHECK is now defined in the makefile instead
+
45//#define CUDA_ERROR_CHECK
+
46//#define Weight_On_SplineBySpline_Basis
+
47
+
48// **************************************************
+
49// ERROR CHECKING ROUTINES
+
50// Also exist in helper_cuda.h
+
51// **************************************************
+
52
+
53// **************************************************
+
54// Check for a safe call on GPU
+
55inline void __cudaSafeCall( cudaError err, const char *file, const int line ) {
+
56// **************************************************
+
57#ifdef CUDA_ERROR_CHECK
+
58 if (cudaSuccess != err) {
+
59 fprintf(stderr, "cudaSafeCall() failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
60 exit(-1);
+
61 }
+
62#endif
+
63 return;
+
64}
+
65
+
66// **************************************************
+
67// Check if there's been an error
+
68inline void __cudaCheckError( const char *file, const int line ) {
+
69// **************************************************
+
70#ifdef CUDA_ERROR_CHECK
+
71 cudaError err = cudaGetLastError();
+
72 if (cudaSuccess != err) {
+
73 fprintf(stderr, "cudaCheckError() failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
74 exit(-1);
+
75 }
+
76
+
77 // More careful checking. However, this will affect performance.
+
78 // Comment away if needed.
+
79 err = cudaDeviceSynchronize();
+
80 if (cudaSuccess != err) {
+
81 fprintf(stderr, "cudaCheckError() with sync failed at %s:%i : %s\n", file, line, cudaGetErrorString(err));
+
82 exit(-1);
+
83 }
+
84#endif
+
85 return;
+
86}
+
87
+
88// ******************************************
+
89// CONSTANTS
+
90// ******************************************
+
91
+
92// d_NAME declares DEVICE constants (live on GPU)
+
93__device__ __constant__ unsigned int d_n_splines;
+
94__device__ __constant__ short int d_spline_size;
+
95#ifndef Weight_On_SplineBySpline_Basis
+
96__device__ __constant__ int d_n_events;
+
97#endif
+
98//CW: Constant memory needs to be hard-coded on compile time
+
99// Could make this texture memory instead, but don't care enough right now...
+
100__device__ __constant__ float val_gpu[__N_SPLINES__];
+
101__device__ __constant__ short int segment_gpu[__N_SPLINES__];
+
102
+
103// h_NAME declares HOST constants (live on CPU)
+
104static short int h_spline_size = -1;
+
105static int h_n_params = -1;
+
106#ifndef Weight_On_SplineBySpline_Basis
+
107static int h_n_events = -1;
+
108#endif
+
109
+
110// ******************************************
+
111// TEXTURES
+
112// ******************************************
+
113//KS: Textures are L1 cache variables which are well optimised for fetching. Make texture only for variables you often access but rarely overwrite. There are limits on texture memory so don't use huge arrays
+
114cudaTextureObject_t text_coeff_x = 0;
+
115#ifndef Weight_On_SplineBySpline_Basis
+
116//KS: Map keeping track how many parameters applies to each event, we keep two numbers here {number of splines per event, index where splines start for a given event}
+
117cudaTextureObject_t text_nParamPerEvent = 0;
+
118#endif
+
119
+
120
+
121// *******************************************
+
122// Utils
+
123// *******************************************
+
124
+
125// *******************************************
+
126//KS: Get some fancy info about VRAM usage
+
127inline void checkGpuMem() {
+
128// *******************************************
+
129
+
130 float free_m, total_m,used_m;
+
131 size_t free_t, total_t;
+
132
+
133 cudaMemGetInfo(&free_t, &total_t);
+
134
+
135 free_m = (uint)free_t/1048576.0;
+
136 total_m = (uint)total_t/1048576.0;
+
137 used_m = total_m - free_m;
+
138
+
139 printf(" Memory free %f MB, total memory %f MB, memory used %f MB\n", free_m, total_m, used_m);
+
140}
+
141
+
142// *******************************************
+
143//KS: Get some fancy info about GPU
+
144inline void PrintNdevices() {
+
145// *******************************************
+
146
+
147 int nDevices;
+
148 cudaGetDeviceCount(&nDevices);
+
149
+
150 printf(" Found %i GPUs, currenlty I only support one GPU\n", nDevices);
+
151}
+
152
+
153// *******************************************
+
154// INITIALISE GPU
+
155// *******************************************
+
156
+
157// *******************************************
+
158// Initialiser when using the x array and combined y,b,c,d array
+
159__host__ void InitGPU_SepMany(
+
160// *******************************************
+
161 float **gpu_x_array,
+
162 float **gpu_many_array,
+
163 float **gpu_weights,
+
164
+
165 short int** gpu_paramNo_arr,
+
166 unsigned int** gpu_nKnots_arr,
+
167
+
168 #ifndef Weight_On_SplineBySpline_Basis
+
169 float **cpu_total_weights,
+
170 float **gpu_total_weights,
+
171 int n_events,
+
172 unsigned int** gpu_nParamPerEvent,
+
173 #endif
+
174 unsigned int sizeof_array,
+
175 unsigned int n_splines,
+
176 int Eve_size) {
+
177
+
178 // Allocate chunks of memory to GPU
+
179 cudaMalloc((void **) gpu_paramNo_arr, n_splines*sizeof(short int));
+
180 CudaCheckError();
+
181
+
182 cudaMalloc((void **) gpu_nKnots_arr, n_splines*sizeof(unsigned int));
+
183 CudaCheckError();
+
184
+
185 cudaMalloc((void **) gpu_x_array, Eve_size*sizeof(float));
+
186 CudaCheckError();
+
187
+
188 cudaMalloc((void **) gpu_many_array, _nCoeff_*sizeof_array*sizeof(float));
+
189 CudaCheckError();
+
190
+
191 // Allocate memory for the array of weights to be returned to CPU
+
192 cudaMalloc((void **) gpu_weights, n_splines*sizeof(float));
+
193 CudaCheckError();
+
194#ifndef Weight_On_SplineBySpline_Basis
+
195 //KS: Rather than allocate memory in standard way this fancy cuda tool allows to pin host memory which make memory transfer faster
+
196 cudaMallocHost((void **) cpu_total_weights, n_events*sizeof(float));
+
197 CudaCheckError();
+
198
+
199 //KS: Allocate memory for the array of total weights to be returned to CPU
+
200 cudaMalloc((void **) gpu_total_weights, n_events*sizeof(float));
+
201 CudaCheckError();
+
202
+
203 //KS: Allocate memory for the map keeping track how many splines each parameter has
+
204 cudaMalloc((void **) gpu_nParamPerEvent, 2*n_events*sizeof(unsigned int));
+
205 CudaCheckError();
+
206
+
207#endif
+
208
+
209 // Print allocation info to user
+
210 printf(" Allocated %i entries for paramNo and nKnots arrays, size = %f MB\n", n_splines, double(sizeof(short int)*n_splines+sizeof(unsigned int)*n_splines)/1.E6);
+
211 printf(" Allocated %i entries for x coeff arrays, size = %f MB\n", Eve_size, double(sizeof(float)*Eve_size)/1.E6);
+
212 printf(" Allocated %i entries for {ybcd} coeff arrays, size = %f MB\n", _nCoeff_*sizeof_array, double(sizeof(float)*_nCoeff_*sizeof_array)/1.E6);
+
213
+
214 //KS: Ask CUDA about memory usage
+
215 checkGpuMem();
+
216 PrintNdevices();
+
217}
+
218
+
219// *******************************************
+
220// Initialiser when using the x array and combined y,b,c,d array
+
221__host__ void InitGPU_TF1(
+
222// *******************************************
+
223 float **gpu_coeffs,
+
224 short int** gpu_paramNo_arr,
+
225 short int** gpu_nPoints_arr,
+
226 float **gpu_weights,
+
227
+
228 #ifndef Weight_On_SplineBySpline_Basis
+
229 float **cpu_total_weights,
+
230 float **gpu_total_weights,
+
231 int n_events,
+
232
+
233 unsigned int** gpu_nParamPerEvent,
+
234 #endif
+
235 unsigned int n_splines) {
+
236
+
237 // Holds the parameter number
+
238 cudaMalloc((void **) gpu_paramNo_arr, n_splines*sizeof(short int));
+
239 CudaCheckError();
+
240
+
241 // Holds the number of points
+
242 cudaMalloc((void **) gpu_nPoints_arr, n_splines*sizeof(short int));
+
243 CudaCheckError();
+
244
+
245 // Holds the coefficients (5th order polynomial and constant term == 1) -> 5
+
246 cudaMalloc((void **) gpu_coeffs, 5*n_splines*sizeof(float));
+
247 CudaCheckError();
+
248
+
249 // Allocate memory for the array of weights to be returned to CPU
+
250 cudaMalloc((void **) gpu_weights, n_splines*sizeof(float));
+
251 CudaCheckError();
+
252
+
253#ifndef Weight_On_SplineBySpline_Basis
+
254 //KS: Rather than allocate memory in standard way this fancy cuda tool allows to pin host memory which make memory transfer faster
+
255 cudaMallocHost((void **) cpu_total_weights, n_events*sizeof(float));
+
256 CudaCheckError();
+
257
+
258 //KS: Allocate memory for the array of total weights to be returned to CPU
+
259 cudaMalloc((void **) gpu_total_weights, n_events*sizeof(float));
+
260 CudaCheckError();
+
261
+
262 //KS: Allocate memory for the map keeping track how many splines each parameter has
+
263 cudaMalloc((void **) gpu_nParamPerEvent, 2*n_events*sizeof(unsigned int));
+
264 CudaCheckError();
+
265#endif
+
266
+
267 // Print allocation info to user
+
268 printf(" Allocated %i entries for paramNo and nPoints arrays, size = %f MB\n", n_splines, double(2.0*sizeof(int)*n_splines)/1.E6);
+
269 printf(" Allocated %i entries for coefficient arrays, size = %f MB\n", 5*n_splines, double(sizeof(float)*5*n_splines)/1.E6);
+
270
+
271 //KS: Ask CUDA about memory usage
+
272 checkGpuMem();
+
273 PrintNdevices();
+
274}
+
275
+
276
+
277// *******************************************
+
278// Allocate memory for spline segments
+
279__host__ void InitGPU_Segments(short int **segment) {
+
280// *******************************************
+
281
+
282 //KS: Rather than allocate memory in standard way this fancy cuda tool allows to pin host memory which make memory transfer faster
+
283 cudaMallocHost((void **) segment, __N_SPLINES__*sizeof(short int));
+
284 CudaCheckError();
+
285}
+
286
+
287// *******************************************
+
288// Allocate memory for spline segments
+
289__host__ void InitGPU_Vals(float **vals) {
+
290// *******************************************
+
291
+
292 //KS: Rather than allocate memory in standard way this fancy cuda tool allows to pin host memory which make memory transfer faster
+
293 cudaMallocHost((void **) vals, __N_SPLINES__*sizeof(float));
+
294 CudaCheckError();
+
295}
+
296
+
297
+
298// ******************************************************
+
299// START COPY TO GPU
+
300// ******************************************************
+
301
+
302// ******************************************************
+
303// Copy to GPU for x array and separate ybcd array
+
304__host__ void CopyToGPU_SepMany(
+
305// ******************************************************
+
306 short int *gpu_paramNo_arr,
+
307 unsigned int *gpu_nKnots_arr,
+
308 float *gpu_x_array,
+
309 float *gpu_many_array,
+
310
+
311 std::vector<short int> paramNo_arr,
+
312 std::vector<unsigned int> nKnots_arr,
+
313 std::vector<float> cpu_x_array,
+
314 std::vector<float> cpu_many_array,
+
315
+
316 #ifndef Weight_On_SplineBySpline_Basis
+
317 int n_events,
+
318 std::vector<unsigned int> cpu_nParamPerEvent,
+
319 unsigned int *gpu_nParamPerEvent,
+
320 #endif
+
321 int n_params,
+
322 unsigned int n_splines,
+
323 short int spline_size,
+
324 unsigned int sizeof_array) {
+
325 if (n_params != __N_SPLINES__) {
+
326 printf("Number of splines not equal to %i, GPU code for event-by-event splines will fail\n", __N_SPLINES__);
+
327 printf("n_params = %i\n", n_params);
+
328 printf("%s : %i\n", __FILE__, __LINE__);
+
329 exit(-1);
+
330 }
+
331
+
332 // Write to the global statics (h_* denotes host stored variable)
+
333 h_n_params = n_params;
+
334 h_spline_size = spline_size;
+
335#ifndef Weight_On_SplineBySpline_Basis
+
336 h_n_events = n_events;
+
337#endif
+
338 // Copy the constants
+
339 // Total number of valid splines for all loaded events
+
340 cudaMemcpyToSymbol(d_n_splines, &n_splines, sizeof(n_splines));
+
341 CudaCheckError();
+
342 // Total spline size per spline; i.e. just the number of points or knots in the spline
+
343 cudaMemcpyToSymbol(d_spline_size, &h_spline_size, sizeof(h_spline_size));
+
344 CudaCheckError();
+
345#ifndef Weight_On_SplineBySpline_Basis
+
346 // Number of events
+
347 cudaMemcpyToSymbol(d_n_events, &h_n_events, sizeof(h_n_events));
+
348 CudaCheckError();
+
349#endif
+
350 // Copy the coefficient arrays to the GPU; this only happens once per entire Markov Chain so is OK to do multiple extensive memory copies
+
351 cudaMemcpy(gpu_many_array, cpu_many_array.data(), sizeof(float)*sizeof_array*_nCoeff_, cudaMemcpyHostToDevice);
+
352 CudaCheckError();
+
353
+
354 cudaMemcpy(gpu_x_array, cpu_x_array.data(), sizeof(float)*spline_size*n_params, cudaMemcpyHostToDevice);
+
355 CudaCheckError();
+
356
+
357 //KS: Bind our texture with the GPU variable
+
358 //KS: Tried also moving gpu_many_array to texture memory it only worked with restricted number of MC runs, most likely hit texture memory limit :(
+
359 struct cudaResourceDesc resDesc_coeff_x;
+
360 memset(&resDesc_coeff_x, 0, sizeof(resDesc_coeff_x));
+
361 resDesc_coeff_x.resType = cudaResourceTypeLinear;
+
362 resDesc_coeff_x.res.linear.devPtr = gpu_x_array;
+
363 resDesc_coeff_x.res.linear.desc = cudaCreateChannelDesc<float>();
+
364 resDesc_coeff_x.res.linear.sizeInBytes = sizeof(float)*spline_size*n_params;
+
365
+
366 // Specify texture object parameters
+
367 struct cudaTextureDesc texDesc_coeff_x;
+
368 memset(&texDesc_coeff_x, 0, sizeof(texDesc_coeff_x));
+
369 texDesc_coeff_x.readMode = cudaReadModeElementType;
+
370
+
371 // Create texture object
+
372 cudaCreateTextureObject(&text_coeff_x, &resDesc_coeff_x, &texDesc_coeff_x, NULL);
+
373 CudaCheckError();
+
374
+
375 // Also copy the parameter number for each spline onto the GPU; i.e. what spline parameter are we calculating right now
+
376 cudaMemcpy(gpu_paramNo_arr, paramNo_arr.data(), n_splines*sizeof(short int), cudaMemcpyHostToDevice);
+
377 CudaCheckError();
+
378
+
379 // Also copy the knot map for each spline onto the GPU;
+
380 cudaMemcpy(gpu_nKnots_arr, nKnots_arr.data(), n_splines*sizeof(unsigned int), cudaMemcpyHostToDevice);
+
381 CudaCheckError();
+
382
+
383 #ifndef Weight_On_SplineBySpline_Basis
+
384 //KS: Keep track how much splines each event has
+
385 cudaMemcpy(gpu_nParamPerEvent, cpu_nParamPerEvent.data(), 2*n_events*sizeof(unsigned int), cudaMemcpyHostToDevice);
+
386 CudaCheckError();
+
387
+
388 //KS: Bind our texture with the GPU variable
+
389 // create a resource descriptor based on device pointers
+
390 struct cudaResourceDesc resDesc_nParamPerEvent;
+
391 memset(&resDesc_nParamPerEvent, 0, sizeof(resDesc_nParamPerEvent));
+
392 resDesc_nParamPerEvent.resType = cudaResourceTypeLinear;
+
393 resDesc_nParamPerEvent.res.linear.devPtr = gpu_nParamPerEvent;
+
394 resDesc_nParamPerEvent.res.linear.desc = cudaCreateChannelDesc<unsigned int>();
+
395 resDesc_nParamPerEvent.res.linear.sizeInBytes = 2*n_events*sizeof(unsigned int);
+
396
+
397 // Specify texture object parameters
+
398 struct cudaTextureDesc texDesc_nParamPerEvent;
+
399 memset(&texDesc_nParamPerEvent, 0, sizeof(texDesc_nParamPerEvent));
+
400 texDesc_nParamPerEvent.readMode = cudaReadModeElementType;
+
401
+
402 //Finally create texture object
+
403 cudaCreateTextureObject(&text_nParamPerEvent, &resDesc_nParamPerEvent, &texDesc_nParamPerEvent, NULL);
+
404 CudaCheckError();
+
405 #endif
+
406}
+
407
+
408// ******************************************************
+
409// Copy to GPU for x array and separate ybcd array
+
410__host__ void CopyToGPU_TF1(
+
411// ******************************************************
+
412 float *gpu_coeffs,
+
413 short int *gpu_paramNo_arr,
+
414 short int *gpu_nPoints_arr,
+
415
+
416 std::vector<float> cpu_coeffs,
+
417 std::vector<short int> paramNo_arr,
+
418 std::vector<short int> nPoints_arr,
+
419
+
420 #ifndef Weight_On_SplineBySpline_Basis
+
421 int n_events,
+
422 std::vector<unsigned int> cpu_nParamPerEvent,
+
423 unsigned int *gpu_nParamPerEvent,
+
424 #endif
+
425 int n_params,
+
426 unsigned int n_splines,
+
427 short int _max_knots) {
+
428
+
429 if (n_params != __N_SPLINES__) {
+
430 printf("Number of splines not equal to %i, GPU code for event-by-event splines will fail\n", __N_SPLINES__);
+
431 printf("n_params = %i\n", n_params);
+
432 printf("%s : %i\n", __FILE__, __LINE__);
+
433 exit(-1);
+
434 }
+
435
+
436 // Write to the global statics (h_* denotes host stored variable)
+
437 h_n_params = n_params;
+
438 h_spline_size = _max_knots;
+
439#ifndef Weight_On_SplineBySpline_Basis
+
440 h_n_events = n_events;
+
441#endif
+
442 // Copy the constants
+
443 // Total number of valid splines for all loaded events
+
444 cudaMemcpyToSymbol(d_n_splines, &n_splines, sizeof(n_splines));
+
445 CudaCheckError();
+
446 // Total spline size per spline; i.e. just the number of points or knots in the spline
+
447 cudaMemcpyToSymbol(d_spline_size, &h_spline_size, sizeof(h_spline_size));
+
448 CudaCheckError();
+
449
+
450#ifndef Weight_On_SplineBySpline_Basis
+
451 // Number of events
+
452 cudaMemcpyToSymbol(d_n_events, &h_n_events, sizeof(h_n_events));
+
453 CudaCheckError();
+
454#endif
+
455 // Move the coefficients
+
456 cudaMemcpy(gpu_coeffs, cpu_coeffs.data(), n_splines*5*sizeof(float), cudaMemcpyHostToDevice);
+
457 CudaCheckError();
+
458
+
459 // Also copy the parameter number for each spline onto the GPU; i.e. what spline parameter are we calculating right now
+
460 cudaMemcpy(gpu_paramNo_arr, paramNo_arr.data(), n_splines*sizeof(short int), cudaMemcpyHostToDevice);
+
461 CudaCheckError();
+
462
+
463 cudaMemcpy(gpu_nPoints_arr, nPoints_arr.data(), n_splines*sizeof(short int), cudaMemcpyHostToDevice);
+
464 CudaCheckError();
+
465
+
466 #ifndef Weight_On_SplineBySpline_Basis
+
467 //KS: Keep track how much splines each event has
+
468 cudaMemcpy(gpu_nParamPerEvent, cpu_nParamPerEvent.data(), 2*n_events*sizeof(unsigned int), cudaMemcpyHostToDevice);
+
469 CudaCheckError();
+
470
+
471 //KS: Bind our texture with the GPU variable
+
472 // create a resource descriptor based on device pointers
+
473 struct cudaResourceDesc resDesc_nParamPerEvent;
+
474 memset(&resDesc_nParamPerEvent, 0, sizeof(resDesc_nParamPerEvent));
+
475 resDesc_nParamPerEvent.resType = cudaResourceTypeLinear;
+
476 resDesc_nParamPerEvent.res.linear.devPtr = gpu_nParamPerEvent;
+
477 resDesc_nParamPerEvent.res.linear.desc = cudaCreateChannelDesc<float>();
+
478 resDesc_nParamPerEvent.res.linear.sizeInBytes = 2*n_events*sizeof(unsigned int);
+
479
+
480 // Specify texture object parameters
+
481 struct cudaTextureDesc texDesc_nParamPerEvent;
+
482 memset(&texDesc_nParamPerEvent, 0, sizeof(texDesc_nParamPerEvent));
+
483 texDesc_nParamPerEvent.readMode = cudaReadModeElementType;
+
484
+
485 //Lastly create texture object
+
486 cudaCreateTextureObject(&text_nParamPerEvent, &resDesc_nParamPerEvent, &texDesc_nParamPerEvent, NULL);
+
487 CudaCheckError();
+
488 #endif
+
489}
+
490
+
491// ********************************************************
+
492// START GPU KERNELS
+
493//*********************************************************
+
494// All the GPU kernels have similar tasks but different implementations
+
495// Essentially they perform a binary search to find which TSpline3 point is nearest to our parameter variation
+
496// Once it knows this, we simply extract the pre-computed coefficients for that spline point and multiply together to get a weight
+
497
+
498//*********************************************************
+
499// Evaluate the spline on the GPU
+
500// Using one {y,b,c,d} array
+
501// And one {x} array
+
502// Should be most efficient at cache hitting and memory coalescence
+
503// But using spline segments rather than the parameter value: avoids doing binary search on GPU
+
504__global__ void EvalOnGPU_SepMany(
+
505 const short int* __restrict__ gpu_paramNo_arr,
+
506 const unsigned int* __restrict__ gpu_nKnots_arr,
+
507 const float* __restrict__ gpu_coeff_many,
+
508 float *gpu_weights,
+
509 const cudaTextureObject_t __restrict__ text_coeff_x) {
+
510//*********************************************************
+
511
+
512 // points per spline is the offset to skip in the index to move between splines
+
513 const unsigned int splineNum = (blockIdx.x * blockDim.x + threadIdx.x);
+
514
+
515 // Note, the new arrays are arranged as:
+
516 // gpu_paramNo_arr has length = spln_counter (keeps track of which parameter we're using on this thread)
+
517 // gpu_nKnots_arrhas length = spln_counter (keeps track where current spline starts)
+
518 // text_coeff_x has length = n_params * spline_size
+
519 // gpu_coeff_many has length = nKnots * 4
+
520 // ...
+
521 // gpu_weights has length = spln_counter * spline_size
+
522
+
523 // this is the stopping condition!
+
524 if (splineNum < d_n_splines) {
+
525 // This is the segment we want for this parameter variation
+
526 // for this particular splineNum; 0 = MACCQE, 1 = pFC, 2 = EBC, etc
+
527
+
528 //CW: Which Parameter we are accesing
+
529 const short int Param = gpu_paramNo_arr[splineNum];
+
530
+
531 //CW: Avoids doing costly binary search on GPU
+
532 const short int segment = segment_gpu[Param];
+
533
+
534 //KS: Segment for coeff_x is simply parameter*max knots + segment as each parmeters has the same spacing
+
535 const short int segment_X = Param*d_spline_size+segment;
+
536
+
537 //KS: Find knot position in out monolitical structure
+
538 const unsigned int CurrentKnotPos = gpu_nKnots_arr[splineNum]*_nCoeff_+segment*_nCoeff_;
+
539
+
540 // We've read the segment straight from CPU and is saved in segment_gpu
+
541 // polynomial parameters from the monolithic splineMonolith
+
542 const float fY = gpu_coeff_many[CurrentKnotPos];
+
543 const float fB = gpu_coeff_many[CurrentKnotPos+1];
+
544 const float fC = gpu_coeff_many[CurrentKnotPos+2];
+
545 const float fD = gpu_coeff_many[CurrentKnotPos+3];
+
546 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
547 const float dx = val_gpu[Param] - tex1Dfetch<float>(text_coeff_x, segment_X);
+
548
+
549 //CW: Wooow, let's use some fancy intrinsics and pull down the processing time by <1% from normal multiplication! HURRAY
+
550 gpu_weights[splineNum] = fmaf(dx, fmaf(dx, fmaf(dx, fD, fC), fB), fY);
+
551 // Or for the more "easy to read" version:
+
552 //gpu_weights[splineNum] = (fY+dx*(fB+dx*(fC+dx*fD)));
+
553
+
554#ifdef DEBUG
+
555 printf("splineNum = %i/%i, paramNo = %i, variation = %f, segment = %i, fX = %f, fX+1 = %f, dx = %f, d_n_splines = %i, d_spline_size = %i, weight = %f \n", splineNum, d_n_splines, gpu_paramNo_arr[splineNum], val_gpu[Param], segment, tex1Dfetch<float>(text_coeff_x, segment_X), tex1Dfetch<float>(text_coeff_x, segment_X+1), dx, d_n_splines, d_spline_size, gpu_weights[splineNum]);
+
556#endif
+
557 }
+
558}
+
559
+
560//*********************************************************
+
561// Evaluate the TF1 on the GPU
+
562// Using 5th order polynomial
+
563__global__ void EvalOnGPU_TF1(
+
564 const float* __restrict__ gpu_coeffs,
+
565 const short int* __restrict__ gpu_paramNo_arr,
+
566 const short int* __restrict__ gpu_nPoints_arr,
+
567 float *gpu_weights) {
+
568//*********************************************************
+
569
+
570 // points per spline is the offset to skip in the index to move between splines
+
571 const unsigned int splineNum = (blockIdx.x * blockDim.x + threadIdx.x);
+
572
+
573 // Note, the new arrays are arranged as:
+
574 // gpu_paramNo_arr has length = spln_counter (keeps track of which parameter we're using on this thread)
+
575 // gpu_coeff_x has length = n_params * spline_size
+
576 // gpu_coeff_many has length = spln_counter * spline_size * 4
+
577 // ...
+
578 // gpu_weights has length = spln_counter * spline_size
+
579
+
580 if (splineNum < d_n_splines) {
+
581 // The is the variation itself (needed to evaluate variation - stored spline point = dx)
+
582 const float x = val_gpu[gpu_paramNo_arr[splineNum]];
+
583
+
584 // Read the coefficients
+
585 const float a = gpu_coeffs[splineNum*d_spline_size];
+
586 const float b = gpu_coeffs[splineNum*d_spline_size+1];
+
587 const float c = gpu_coeffs[splineNum*d_spline_size+2];
+
588 const float d = gpu_coeffs[splineNum*d_spline_size+3];
+
589 const float e = gpu_coeffs[splineNum*d_spline_size+4];
+
590
+
591 // Match these with form in SetSplines
+
592 // Might not be great to have this if statement: maybe split two kernels?
+
593 if (gpu_nPoints_arr[splineNum] == 5) {
+
594 gpu_weights[splineNum] = 1 + a*x + b*x*x + c*x*x*x + d*x*x*x*x + e*x*x*x*x*x;
+
595 } else if (gpu_nPoints_arr[splineNum] == 2) {
+
596 gpu_weights[splineNum] = (x<=0)*(1+a*x) + (x>0)*(1+b*x);
+
597 } else {
+
598 printf("Big problems, I found a nPoints array which is not 5 or 2 on GPU!\n");
+
599 }
+
600
+
601#ifdef DEBUG
+
602 //if (splineNum < 200) {
+
603 if (gpu_nPoints_arr[splineNum] == 2) {
+
604 printf("splineNum = %i, spline_size=%i, paramNo = %i, variation = %f, a = %f, b = %f, c = %f, d = %f, e = %f, weight = %f\n", splineNum, d_spline_size, gpu_paramNo_arr[splineNum], x, a, b, c, d, e, gpu_weights[splineNum] );
+
605 }
+
606#endif
+
607 }
+
608}
+
609
+
610#ifndef Weight_On_SplineBySpline_Basis
+
611//*********************************************************
+
612//KS: Evaluate the total spline event weight on the GPU, as in most cases GPU is faster, even more this significant reduce memory transfer from GPU to CPU
+
613__global__ void EvalOnGPU_TotWeight(
+
614 const float* __restrict__ gpu_weights,
+
615 float *gpu_total_weights,
+
616 const cudaTextureObject_t __restrict__ text_nParamPerEvent) {
+
617//*********************************************************
+
618 const unsigned int EventNum = (blockIdx.x * blockDim.x + threadIdx.x);
+
619 //KS: Accessing shared memory is much much faster than global memory hence we use shared memory for calculation and then write to global memory
+
620 __shared__ float shared_total_weights[__BlockSize__];
+
621 if(EventNum < d_n_events) //stopping condition
+
622 {
+
623 shared_total_weights[threadIdx.x] = 1.f;
+
624 const unsigned int EventOffset = 2*EventNum;
+
625 for (unsigned int id = 0; id < tex1Dfetch<unsigned int>(text_nParamPerEvent, EventOffset); ++id)
+
626 {
+
627 shared_total_weights[threadIdx.x] *= gpu_weights[tex1Dfetch<unsigned int>(text_nParamPerEvent, EventOffset+1) + id];
+
628 #ifdef DEBUG
+
629 printf("Event = %i, Spline_Num = %i, gpu_weights = %f \n",
+
630 EventNum, tex1Dfetch<unsigned int>(text_nParamPerEvent, 2*EventNum+1) + id, gpu_weights[tex1Dfetch<unsigned int>(text_nParamPerEvent, 2*EventNum+1) + id];
+
631 #endif
+
632 }
+
633 gpu_total_weights[EventNum] = shared_total_weights[threadIdx.x];
+
634 }
+
635}
+
636#endif
+
637
+
638// *****************************************
+
639// Run the GPU code for the separate many arrays
+
640// As in separate {x}, {y,b,c,d} arrays
+
641// Pass the segment and the parameter values
+
642// (binary search already performed in samplePDFND::FindSplineSegment()
+
643__host__ void RunGPU_SepMany(
+
644 const short int* gpu_paramNo_arr,
+
645 const unsigned int* gpu_nKnots_arr,
+
646
+
647 const float *gpu_coeff_many,
+
648
+
649 float* gpu_weights,
+
650#ifdef Weight_On_SplineBySpline_Basis
+
651 float* cpu_weights,
+
652#else
+
653 float* gpu_total_weights,
+
654 float* cpu_total_weights,
+
655#endif
+
656 // Holds the changes in parameters
+
657 float *vals,
+
658 // Holds the segments for parameters
+
659 short int *segment,
+
660 const unsigned int h_n_splines) {
+
661// *****************************************
+
662
+
663 dim3 block_size;
+
664 dim3 grid_size;
+
665
+
666 block_size.x = __BlockSize__;
+
667 grid_size.x = (h_n_splines / block_size.x) + 1;
+
668
+
669 // Copy the segment values to the GPU (segment_gpu), which is h_n_params long
+
670 cudaMemcpyToSymbol(segment_gpu, segment, h_n_params*sizeof(short int));
+
671 CudaCheckError();
+
672
+
673 // Copy the parameter values values to the GPU (vals_gpu), which is h_n_params long
+
674 cudaMemcpyToSymbol(val_gpu, vals, h_n_params*sizeof(float));
+
675 CudaCheckError();
+
676
+
677#ifdef DEBUG
+
678 printf("\n***********************\nGPU DEBUGGING ENABLED\n***********************\n");
+
679 printf("block_size.x = %i, grid_size.x = %i \n", block_size.x, grid_size.x);
+
680 printf("RunGPU_SepMany segments\n");
+
681 for (int i = 0; i < h_n_params; i++) {
+
682 printf("val[%i] = %f in segment %i\n", i, vals[i], segment[i]);
+
683 }
+
684 printf("nParams = %i, n_splines = %i", h_n_params, h_n_splines);
+
685 printf("\n***********************\nAM NOW CALLING KERNEL\n***********************\n");
+
686#endif
+
687
+
688 // Set the cache config to prefer L1 for the kernel
+
689 //cudaFuncSetCacheConfig(EvalOnGPU_SepMany, cudaFuncCachePreferL1);
+
690 EvalOnGPU_SepMany<<<grid_size, block_size>>>(
+
691 gpu_paramNo_arr,
+
692 gpu_nKnots_arr,
+
693
+
694 gpu_coeff_many,
+
695
+
696 gpu_weights,
+
697 text_coeff_x
+
698 );
+
699 CudaCheckError();
+
700
+
701#ifdef DEBUG
+
702 printf("Evaluated kernel with SUCCESS (drink beer)\n");
+
703#endif
+
704
+
705//KS: We can either copy gpu_weight and calculate total weight in reweighting loop, or not copy and calculate total weight stall at GPU, which means less memory transfer
+
706#ifdef Weight_On_SplineBySpline_Basis
+
707 // Here we have to make a somewhat large GPU->CPU transfer because it's all the splines' response
+
708 cudaMemcpy(cpu_weights, gpu_weights, h_n_splines*sizeof(float), cudaMemcpyDeviceToHost);
+
709 CudaCheckError();
+
710 #ifdef DEBUG
+
711 printf("Copied GPU weights to CPU with SUCCESS (drink more beer)\n");
+
712 printf("Released calculated response from GPU with SUCCESS (drink most beer)\n");
+
713 #endif
+
714
+
715//KS: Else calculate Total Weight
+
716#else
+
717 grid_size.x = (h_n_events / block_size.x) + 1;
+
718
+
719 #ifdef DEBUG
+
720 printf("\n***********************\nGPU DEBUGGING ENABLED\n***********************\n");
+
721 printf("block_size.x = %i, grid_size.x = %i \n", block_size.x, grid_size.x);
+
722 printf("RunGPU_TotWeight\n");
+
723
+
724 printf("nEvents = %i, n_splines = %i, d_n_params", h_n_events, h_n_splines, h_n_params);
+
725 printf("\n***********************\nI AM NOW CALLING KERNEL\n***********************\n");
+
726 #endif
+
727 EvalOnGPU_TotWeight<<<grid_size, block_size>>>(
+
728 gpu_weights,
+
729 gpu_total_weights,
+
730 text_nParamPerEvent
+
731 );
+
732 #ifdef DEBUG
+
733 CudaCheckError();
+
734 printf("Evaluated kernel with SUCCESS (drink tea)\n");
+
735 #endif
+
736 //KS: Here we have to make a somewhat large GPU->CPU transfer because it is proportional to number of events
+
737 //KS: Normally code wait for memory transfer to finish before moving further cudaMemcpyAsync means we will continue to execute code and in a meantime keep copying stuff.
+
738 cudaMemcpyAsync(cpu_total_weights, gpu_total_weights, h_n_events * sizeof(float), cudaMemcpyDeviceToHost, 0);
+
739
+
740 #ifdef DEBUG
+
741 CudaCheckError();
+
742 printf("Copied GPU total weights to CPU with SUCCESS (drink moar tea)\n");
+
743 printf("Released calculated response from GPU with SUCCESS (drink most tea)\n");
+
744 #endif
+
745#endif
+
746}
+
747
+
748// *****************************************
+
749// Run the GPU code for the TF1
+
750__host__ void RunGPU_TF1(
+
751 const float *gpu_coeffs,
+
752 const short int* gpu_paramNo_arr,
+
753 const short int* gpu_nPoints_arr,
+
754
+
755 float* gpu_weights,
+
756#ifdef Weight_On_SplineBySpline_Basis
+
757 float* cpu_weights,
+
758#else
+
759 float* gpu_total_weights,
+
760 float* cpu_total_weights,
+
761#endif
+
762
+
763 // Holds the changes in parameters
+
764 float *vals,
+
765 const unsigned int h_n_splines) {
+
766// *****************************************
+
767
+
768 dim3 block_size;
+
769 dim3 grid_size;
+
770
+
771 block_size.x = __BlockSize__;
+
772 grid_size.x = (h_n_splines / block_size.x) + 1;
+
773
+
774 // Copy the parameter values values to the GPU (vals_gpu), which is h_n_params long
+
775 cudaMemcpyToSymbol(val_gpu, vals, h_n_params*sizeof(float));
+
776 CudaCheckError();
+
777
+
778#ifdef DEBUG
+
779 printf("\n***********************\nGPU DEBUGGING ENABLED\n***********************\n");
+
780 printf("block_size.x = %i, grid_size.x = %i \n", block_size.x, grid_size.x);
+
781 printf("RunGPU_TF1 segments\n");
+
782 for (int i = 0; i < h_n_params; i++) {
+
783 printf("val[%i] = %f \n", i, vals[i]);
+
784 }
+
785 printf("nParams = %i, n_splines = %i", h_n_params, h_n_splines);
+
786 printf("\n***********************\nAM NOW CALLING KERNEL\n***********************\n");
+
787#endif
+
788
+
789 // Set the cache config to prefer L1 for the kernel
+
790 //cudaFuncSetCacheConfig(EvalOnGPU_TF1, cudaFuncCachePreferL1);
+
791 EvalOnGPU_TF1<<<grid_size, block_size>>>(
+
792 gpu_coeffs,
+
793 gpu_paramNo_arr,
+
794 gpu_nPoints_arr,
+
795
+
796 gpu_weights
+
797 );
+
798 CudaCheckError();
+
799
+
800#ifdef DEBUG
+
801 printf("Evaluated TF1 kernel with SUCCESS (drink beer)\n");
+
802#endif
+
803
+
804//KS: We can either copy gpu_weight and calculate total weight in reweighting loop, or not copy and calculate total weight stall at GPU, which means less memory transfer
+
805#ifdef Weight_On_SplineBySpline_Basis
+
806 // Here we have to make a somewhat large GPU->CPU transfer because it's all the splines' response
+
807 cudaMemcpy(cpu_weights, gpu_weights, h_n_splines*sizeof(float), cudaMemcpyDeviceToHost);
+
808 CudaCheckError();
+
809
+
810 #ifdef DEBUG
+
811 printf("Copied TF1 GPU weights to CPU with SUCCESS (drink moar beer)\n");
+
812 printf("Released TF1 calculated response from GPU with SUCCESS (drink most beer)\n");
+
813 #endif
+
814
+
815//KS: Else calculate Total Weight
+
816#else
+
817 grid_size.x = (h_n_events / block_size.x) + 1;
+
818
+
819 #ifdef DEBUG
+
820 printf("\n***********************\nGPU DEBUGGING ENABLED\n***********************\n");
+
821 printf("block_size.x = %i, grid_size.x = %i \n", block_size.x, grid_size.x);
+
822 printf("RunGPU_TotWeight\n");
+
823
+
824 printf("nEvents = %i, n_splines = %i, d_n_params", h_n_events, h_n_splines, h_n_params);
+
825 printf("\n***********************\nI AM NOW CALLING KERNEL\n***********************\n");
+
826 #endif
+
827 EvalOnGPU_TotWeight<<<grid_size, block_size>>>(
+
828 gpu_weights,
+
829 gpu_total_weights,
+
830 text_nParamPerEvent
+
831 );
+
832 #ifdef DEBUG
+
833 CudaCheckError();
+
834 printf("Evaluated kernel with SUCCESS (drink tea)\n");
+
835 #endif
+
836 //KS: Here we have to make a somewhat large GPU->CPU transfer because it is proportional to number of events
+
837 //KS: In the future it might be worth to calculate only weight for events which have splines, this should reduce memory transfer
+
838 cudaMemcpy(cpu_total_weights, gpu_total_weights, h_n_events*sizeof(float), cudaMemcpyDeviceToHost);
+
839 #ifdef DEBUG
+
840 CudaCheckError();
+
841 printf("Copied GPU total weights to CPU with SUCCESS (drink moar tea)\n");
+
842 printf("Released calculated response from GPU with SUCCESS (drink most tea)\n");
+
843 #endif
+
844#endif
+
845}
+
846
+
847// *****************************************
+
848// Make sure all Cuda threads finished execution
+
849__host__ void SynchroniseSplines() {
+
850 cudaDeviceSynchronize();
+
851}
+
852
+
853// *********************************
+
854// CLEANING
+
855// *********************************
+
856
+
857// *********************************
+
858// Clean up the {x},{ybcd} arrays
+
859__host__ void CleanupGPU_SepMany(
+
860 short int *gpu_paramNo_arr,
+
861 unsigned int *gpu_nKnots_arr,
+
862
+
863 float *gpu_x_array,
+
864 float *gpu_many_array,
+
865#ifndef Weight_On_SplineBySpline_Basis
+
866 float *gpu_total_weights,
+
867 unsigned int *gpu_nParamPerEvent,
+
868 float *cpu_total_weights,
+
869#endif
+
870 float *gpu_weights) {
+
871// *********************************
+
872 cudaFree(gpu_paramNo_arr);
+
873 cudaFree(gpu_nKnots_arr);
+
874
+
875 // free the coefficient arrays
+
876 cudaDestroyTextureObject(text_coeff_x);
+
877 cudaFree(gpu_x_array);
+
878 cudaFree(gpu_many_array);
+
879
+
880 // free weights on the gpu
+
881 cudaFree(gpu_weights);
+
882#ifndef Weight_On_SplineBySpline_Basis
+
883 cudaFree(gpu_total_weights);
+
884 //KS: Before removing variable let's destroy texture
+
885 cudaDestroyTextureObject(text_nParamPerEvent);
+
886 cudaFree(gpu_nParamPerEvent);
+
887 cudaFreeHost(cpu_total_weights);
+
888#endif
+
889 return;
+
890}
+
891
+
892// *******************************************
+
893// Clean up pinned variables at CPU
+
894__host__ void CleanupGPU_Segments(short int *segment, float *vals) {
+
895// *******************************************
+
896 cudaFreeHost(segment);
+
897 cudaFreeHost(vals);
+
898
+
899 return;
+
900}
+
901
+
902// *********************************
+
903// Clean up the TF1 arrays
+
904__host__ void CleanupGPU_TF1(
+
905 float *gpu_coeffs,
+
906 short int *gpu_paramNo_arr,
+
907 short int *gpu_nPoints_arr,
+
908
+
909#ifndef Weight_On_SplineBySpline_Basis
+
910 float *gpu_total_weights,
+
911 float *cpu_total_weights,
+
912#endif
+
913 float *gpu_weights) {
+
914// *********************************
+
915 cudaFree(gpu_coeffs);
+
916 cudaFree(gpu_paramNo_arr);
+
917 cudaFree(gpu_nPoints_arr);
+
918 cudaFree(gpu_weights);
+
919#ifndef Weight_On_SplineBySpline_Basis
+
920 cudaFree(gpu_total_weights);
+
921 cudaFreeHost(cpu_total_weights);
+
922#endif
+
923
+
924 return;
+
925}
+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 00000000..711c3321 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,125 @@ + + + + + + + +MaCh3: Class Hierarchy + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..e45aa9f7 --- /dev/null +++ b/index.html @@ -0,0 +1,88 @@ + + + + + + + +MaCh3: MaCh3 Reference Documentation + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
MaCh3 Reference Documentation
+
+
+

+Introduction

+

Welcome to MaCh3!

+

This is the Reference Guide of the MaCh3 software.

+
+
+ + + + diff --git a/interfacePDFEbE_8cpp.html b/interfacePDFEbE_8cpp.html new file mode 100644 index 00000000..71f9f1ec --- /dev/null +++ b/interfacePDFEbE_8cpp.html @@ -0,0 +1,90 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/interfacePDFEbE.cpp File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interfacePDFEbE.cpp File Reference
+
+ + + + + diff --git a/interfacePDFEbE_8cpp_source.html b/interfacePDFEbE_8cpp_source.html new file mode 100644 index 00000000..cfdc3482 --- /dev/null +++ b/interfacePDFEbE_8cpp_source.html @@ -0,0 +1,94 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/interfacePDFEbE.cpp Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interfacePDFEbE.cpp
+
+ + + + + diff --git a/interfacePDFEbE_8h.html b/interfacePDFEbE_8h.html new file mode 100644 index 00000000..65bcc99e --- /dev/null +++ b/interfacePDFEbE_8h.html @@ -0,0 +1,98 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/interfacePDFEbE.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
interfacePDFEbE.h File Reference
+
+
+
#include <vector>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  interfacePDFEbE
 
+
+ + + + diff --git a/interfacePDFEbE_8h_source.html b/interfacePDFEbE_8h_source.html new file mode 100644 index 00000000..8158385a --- /dev/null +++ b/interfacePDFEbE_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/interfacePDFEbE.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interfacePDFEbE.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <vector>
+
4
+
+ +
6{
+
7 public:
+
8 virtual double GetEventWeight(int sample, int event)=0;
+
9 virtual double getDiscVar(int sample , int event, int varindx)=0;
+
10 virtual int getNMCSamples()=0;
+
11 virtual int getNEventsInSample(int sample)=0;
+
12};
+
+
13
+
Type GetFromManager(const YAML::Node &node, Type defval)
Definition YamlHelper.h:14
+ +
virtual int getNMCSamples()=0
+
virtual int getNEventsInSample(int sample)=0
+
virtual double getDiscVar(int sample, int event, int varindx)=0
+
virtual double GetEventWeight(int sample, int event)=0
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..1dffb65b --- /dev/null +++ b/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/kdeGpu2_8cu.html b/kdeGpu2_8cu.html new file mode 100644 index 00000000..a75dd805 --- /dev/null +++ b/kdeGpu2_8cu.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/kdeGpu2.cu File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
kdeGpu2.cu File Reference
+
+ + + + + diff --git a/kdeGpu2_8cu_source.html b/kdeGpu2_8cu_source.html new file mode 100644 index 00000000..9eee75cd --- /dev/null +++ b/kdeGpu2_8cu_source.html @@ -0,0 +1,380 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/kdeGpu2.cu Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
kdeGpu2.cu
+
+
+Go to the documentation of this file.
1// -*- c++ -*-
+
2#define BLOCK_SIZE 256
+
3#define GRID_SIZE 1000
+
4#define MULTI_DATA 10
+
5#define CUDA_ERROR_CHECK
+
6#include "stdio.h"
+
7#include <iostream>
+
8#include <assert.h>
+
9#include "math_constants.h"
+
10#include <iomanip>
+
11
+
12#define CudaCheckError() __cudaCheckError( __FILE__, __LINE__ )
+
13
+
14inline void __cudaCheckError( const char *file, const int line )
+
15{
+
16#ifdef CUDA_ERROR_CHECK
+
17 cudaError err = cudaGetLastError();
+
18 if ( cudaSuccess != err )
+
19 {
+
20 fprintf( stderr, "cudaCheckError() failed at %s:%i : %s\n",
+
21 file, line, cudaGetErrorString( err ) );
+
22 exit( -1 );
+
23 }
+
24
+
25 // More careful checking. However, this will affect performance.
+
26 // Comment away if needed.
+
27 err = cudaDeviceSynchronize();
+
28 if( cudaSuccess != err )
+
29 {
+
30 fprintf( stderr, "cudaCheckError() with sync failed at %s:%i : %s\n",
+
31 file, line, cudaGetErrorString( err ) );
+
32 exit( -1 );
+
33 }
+
34#endif
+
35
+
36 return;
+
37}
+
38
+
39
+
40__global__ void calcKde2d(int n_data, int n_mc,
+
41 double *d_data_x, double *d_data_y,
+
42 double *d_mc_x,
+
43 double *d_mc_y,
+
44 double *d_mc_sx,
+
45 double *d_mc_sy,
+
46 double *d_mcweights,
+
47 //double *d_pdfatdata)//,
+
48 double *d_datamcweights)
+
49{
+
50 __shared__ float s_mc_x[BLOCK_SIZE];
+
51 __shared__ float s_mc_y[BLOCK_SIZE];
+
52 __shared__ float s_mcweights[BLOCK_SIZE];
+
53 __shared__ float s_mc_sx[BLOCK_SIZE];
+
54 __shared__ float s_mc_sy[BLOCK_SIZE];
+
55
+
56 float l_data_x[MULTI_DATA];
+
57 float l_data_y[MULTI_DATA];
+
58 float l_pdfatdata[MULTI_DATA];
+
59
+
60 const int theIndex(blockIdx.x * blockDim.x + threadIdx.x);
+
61 const int n_mcChunks(n_mc/blockDim.x+1);
+
62 const int n_dataChunks(n_data/MULTI_DATA+1);
+
63 const int dataChunk(theIndex%n_dataChunks);
+
64 const int mcChunk(theIndex/n_dataChunks);
+
65
+
66 int lo_data_idx(0);
+
67 for (int dataIdx=dataChunk;dataIdx<n_data;dataIdx+=n_dataChunks)
+
68 {
+
69 l_data_x[lo_data_idx]=d_data_x[dataIdx];
+
70 l_data_y[lo_data_idx]=d_data_y[dataIdx];
+
71 l_pdfatdata[lo_data_idx]=0;
+
72 lo_data_idx++;
+
73 }
+
74
+
75 if(mcChunk<n_mcChunks)
+
76 {
+
77 const int firstMCIdx(mcChunk*blockDim.x);
+
78 const int loadMCIdx(firstMCIdx+threadIdx.x);
+
79 if(loadMCIdx<n_mc)
+
80 {
+
81 s_mc_x[threadIdx.x]=d_mc_x[loadMCIdx];
+
82 s_mc_y[threadIdx.x]=d_mc_y[loadMCIdx];
+
83 s_mc_sx[threadIdx.x]=d_mc_sx[loadMCIdx];
+
84 s_mc_sy[threadIdx.x]=d_mc_sy[loadMCIdx];
+
85 s_mcweights[threadIdx.x]=d_mcweights[loadMCIdx];
+
86 }
+
87 else
+
88 {
+
89 s_mc_x[threadIdx.x]=100;
+
90 s_mc_y[threadIdx.x]=0;
+
91 s_mc_sx[threadIdx.x]=100;
+
92 s_mc_sy[threadIdx.x]=10;
+
93 s_mcweights[threadIdx.x]=0.0;
+
94 }
+
95
+
96 __syncthreads();
+
97
+
98 for (int i=0;i<blockDim.x;i++)
+
99 {
+
100 const int l_MCIndex((i));//+threadIdx.x)%blockDim.x);
+
101 const float l_sigmax(s_mc_sx[l_MCIndex]);
+
102 const float l_sigmay(s_mc_sy[l_MCIndex]);
+
103 const float l_minuspt5oversigmaxsqrd(-0.5/l_sigmax/l_sigmax);
+
104 const float l_minuspt5oversigmaysqrd(-0.5/l_sigmay/l_sigmay);
+
105 //const float l_sigmaxsqrd(l_sigmax*l_sigmax);
+
106 //const float l_sigmaysqrd(l_sigmay*l_sigmay);
+
107 //const float l_sigmaxy(l_sigmax*l_sigmay);
+
108 const float l_mc_x(s_mc_x[l_MCIndex]);
+
109 const float l_mc_y(s_mc_y[l_MCIndex]);
+
110 const float l_mcweightOverSigmaxy(s_mcweights[l_MCIndex]/
+
111 l_sigmax/l_sigmay);
+
112
+
113 for(int l_data_idx=0; l_data_idx<MULTI_DATA; l_data_idx++)
+
114 {
+
115 float l_data_minus_mc_x(l_data_x[l_data_idx]-l_mc_x);
+
116 float l_data_minus_mc_y(l_data_y[l_data_idx]-l_mc_y);
+
117
+
118 l_pdfatdata[l_data_idx]+=
+
119
+
120 __expf(
+
121
+
122 l_minuspt5oversigmaxsqrd*
+
123 l_data_minus_mc_x*l_data_minus_mc_x+
+
124
+
125 l_minuspt5oversigmaysqrd*
+
126 l_data_minus_mc_y*l_data_minus_mc_y
+
127 )
+
128 *l_mcweightOverSigmaxy;
+
129 }
+
130 }
+
131
+
132 int l_data_idx=0;
+
133
+
134 for (int dataIdx=dataChunk;dataIdx<n_data;dataIdx+=n_dataChunks)
+
135 {
+
136 int outIdx(dataIdx+n_data*mcChunk);
+
137 d_datamcweights[outIdx]=l_pdfatdata[l_data_idx];
+
138 l_data_idx++;
+
139 }
+
140 }
+
141 return;
+
142}
+
143
+
144
+
145__global__ void calcPdfAtData2d(int n_data, int n_things,
+
146 double *d_datamcweights,
+
147 double *d_pdfatdata)
+
148{
+
149 int thisIdx = (blockIdx.x * blockDim.x + threadIdx.x);
+
150 if(thisIdx<n_data)
+
151 {
+
152 double thisValue(0);
+
153 for(int thingIdx=0; thingIdx<n_things; thingIdx++)
+
154 {
+
155 int bigIdx(thisIdx+n_data*thingIdx);
+
156 thisValue+=d_datamcweights[bigIdx];
+
157 }
+
158 d_pdfatdata[thisIdx]=thisValue/2.0/CUDART_PI;
+
159 }
+
160 return;
+
161}
+
162
+
163
+
164extern "C" __host__ double* calcKdeWeights2d(int n_data, int n_mc,
+
165 double sigmax,
+
166 double sigmay,
+
167 double h_data_x[],
+
168 double h_data_y[],
+
169 double h_mc_x[],
+
170 double h_mc_y[],
+
171 double h_mc_sx[],
+
172 double h_mc_sy[],
+
173 double h_mcweights[])
+
174{
+
175 dim3 block_size;
+
176 block_size.x = BLOCK_SIZE;
+
177 dim3 grid_size;
+
178
+
179 grid_size.x = GRID_SIZE;
+
180
+
181 int n_mcChunks(n_mc/block_size.x+1);
+
182 int n_mcData(n_data*n_mcChunks);
+
183 std::cout << "n_mc " << n_mc << " n_data " << n_data
+
184 << " n_mcData " << n_mcData << std::endl;
+
185
+
186 double *d_mc_x, *d_mc_y,
+
187 *d_mc_sx, *d_mc_sy,
+
188 *d_data_x, *d_data_y,
+
189 *d_mcweights, *d_datamcweights,
+
190 *d_pdfatdata;
+
191
+
192 size_t datasize = n_data * sizeof(double);
+
193 size_t mcsize = n_mc * sizeof(double);
+
194 size_t mcDatasize = n_mcData * sizeof(double);
+
195
+
196 assert(cudaSuccess==cudaMalloc(&d_pdfatdata, datasize));
+
197 double* h_pdfatdata = (double *)malloc(datasize);//n_data);
+
198
+
199
+
200 assert(cudaSuccess==cudaMalloc(&d_datamcweights, mcDatasize));
+
201 //Useful for testing but very slow
+
202 //double* h_datamcweights = (double *)malloc(mcDatasize);
+
203 //mcDatasize);//n_data);
+
204 //for(int i=0;i<n_mcData;i++) h_datamcweights[i]=100000.0;
+
205 //cudaMemcpy(d_datamcweights, h_datamcweights, mcDatasize, cudaMemcpyHostToDevice);
+
206
+
207 assert(cudaSuccess==cudaMalloc(&d_data_x, datasize));
+
208 cudaMemcpy(d_data_x, h_data_x, datasize, cudaMemcpyHostToDevice);
+
209 assert(cudaSuccess==cudaMalloc(&d_data_y, datasize));
+
210 cudaMemcpy(d_data_y, h_data_y, datasize, cudaMemcpyHostToDevice);
+
211
+
212 assert(cudaSuccess==cudaMalloc(&d_mcweights, mcsize));
+
213 cudaMemcpy(d_mcweights, h_mcweights, mcsize, cudaMemcpyHostToDevice);
+
214 assert(cudaSuccess==cudaMalloc(&d_mc_x, mcsize));
+
215 cudaMemcpy(d_mc_x, h_mc_x, mcsize, cudaMemcpyHostToDevice);
+
216 assert(cudaSuccess==cudaMalloc(&d_mc_y, mcsize));
+
217 cudaMemcpy(d_mc_y, h_mc_y, mcsize, cudaMemcpyHostToDevice);
+
218 assert(cudaSuccess==cudaMalloc(&d_mc_sx, mcsize));
+
219 cudaMemcpy(d_mc_sx, h_mc_sx, mcsize, cudaMemcpyHostToDevice);
+
220 assert(cudaSuccess==cudaMalloc(&d_mc_sy, mcsize));
+
221 cudaMemcpy(d_mc_sy, h_mc_sy, mcsize, cudaMemcpyHostToDevice);
+
222
+
223
+
224 const int n_dataChunks(n_data/MULTI_DATA+1);
+
225 grid_size.x=(n_dataChunks/block_size.x+1)*n_mcChunks;
+
226
+
227 std::cout << "Grid size " << grid_size.x << " block size "
+
228 << block_size.x << std::endl;
+
229
+
230 calcKde2d<<<grid_size, block_size>>>(n_data, n_mc,
+
231 d_data_x, d_data_y,
+
232 d_mc_x, d_mc_y,
+
233 d_mc_sx, d_mc_sy,
+
234 d_mcweights,
+
235 d_datamcweights);
+
236 CudaCheckError();
+
237
+
238 grid_size.x=n_data/block_size.x+1;
+
239 calcPdfAtData2d<<<grid_size, block_size>>>(n_data, n_mcChunks,
+
240 d_datamcweights, d_pdfatdata);
+
241 CudaCheckError();
+
242
+
243 cudaMemcpy(h_pdfatdata, d_pdfatdata, datasize, cudaMemcpyDeviceToHost);
+
244
+
245 //For testing
+
246 /*
+
247 cudaMemcpy(h_datamcweights, d_datamcweights, mcDatasize,
+
248 cudaMemcpyDeviceToHost);
+
249 int ooooo(0);
+
250 int ooooo2(0);
+
251 for(int i=0;i<n_mcData;i++)
+
252 {
+
253 //if(h_datamcweights[i]>0&&i/n_data>=1.0)
+
254 //{
+
255 // std::cout << std::setprecision(23)
+
256 // << "ooooo " << h_datamcweights[i]
+
257 // << " " << int(i/n_data) << std::endl;
+
258 //}
+
259 if(h_datamcweights[i]<0)
+
260 {
+
261 ooooo2++;
+
262 }
+
263
+
264 if(h_datamcweights[i]==0)
+
265 {
+
266 //std::cout << "ooooo " << i << std::endl;
+
267 ooooo++;
+
268 }
+
269 }
+
270 std::cout << "ooooo n " << ooooo <<"/"<< n_mcData << std::endl;
+
271 std::cout << "ooooo2 n " << ooooo2 <<"/"<< n_mcData << std::endl;
+
272 */
+
273
+
274 cudaFree(d_mc_x);
+
275 cudaFree(d_mc_y);
+
276 cudaFree(d_mc_sx);
+
277 cudaFree(d_mc_sy);
+
278 cudaFree(d_data_x);
+
279 cudaFree(d_data_y);
+
280 cudaFree(d_mcweights);
+
281 cudaFree(d_datamcweights);
+
282 cudaFree(d_pdfatdata);
+
283
+
284 //free(h_datamcweights);
+
285
+
286 return h_pdfatdata;
+
287}
+
288
+
+ + + + diff --git a/kdeGpu_8cu.html b/kdeGpu_8cu.html new file mode 100644 index 00000000..0d4e8182 --- /dev/null +++ b/kdeGpu_8cu.html @@ -0,0 +1,89 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/kdeGpu.cu File Reference + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
kdeGpu.cu File Reference
+
+ + + + + diff --git a/kdeGpu_8cu_source.html b/kdeGpu_8cu_source.html new file mode 100644 index 00000000..17ea8f9b --- /dev/null +++ b/kdeGpu_8cu_source.html @@ -0,0 +1,217 @@ + + + + + + + +MaCh3: /github/workspace/samplePDF/kdeGpu.cu Source File + + + + + + + + + +
+
+ + + + + + + +
+
MaCh3 1.1.0 +
+
Reference Guide
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
kdeGpu.cu
+
+
+Go to the documentation of this file.
1// -*- c++ -*-
+
2#include "stdio.h"
+
3#include <iostream>
+
4#include <assert.h>
+
5#include "math_constants.h"
+
6
+
7__constant__ double c_data_x[1000];
+
8
+
9__global__ void calcKde(int n_data, int n_mc, double sigma, //double *d_data_x,
+
10 double *d_mc_x,// double *d_sigmas,
+
11 double *d_mcweights,
+
12 double *d_pdfatdata,
+
13 double *d_datamcweights)
+
14{
+
15 int theIndex(blockIdx.x * blockDim.x + threadIdx.x);
+
16 int wholeThing(blockDim.x * gridDim.x);
+
17 int thingsForEachData(wholeThing/n_data);
+
18 int dataIdx(theIndex/thingsForEachData);
+
19 if(dataIdx<n_data)
+
20 {
+
21 const double l_data_x(c_data_x[dataIdx]);
+
22 const double sigmasqrd(sigma*sigma);
+
23 double l_sum(0.0);
+
24 int firstMcIdx(theIndex-dataIdx*thingsForEachData);
+
25
+
26 for (int mcIdx=firstMcIdx;mcIdx<n_mc;mcIdx+=thingsForEachData)
+
27 {
+
28 l_sum+= d_mcweights[mcIdx]*exp(-0.5*(l_data_x-d_mc_x[mcIdx])*
+
29 (l_data_x-d_mc_x[mcIdx])/sigmasqrd);
+
30 }
+
31 l_sum/=sqrt(2.0*CUDART_PI);//This might be better off elsewhere
+
32 l_sum/=sigma;//but it probably doesn't matter
+
33 d_datamcweights[dataIdx+n_data*firstMcIdx]=l_sum;//shared here?
+
34 //or swap order so coalesced and use shared memory in calcpdfdata
+
35 }
+
36 return;
+
37}
+
38
+
39__global__ void calcPdfAtData(int n_data, int n_mc, double sigma,
+
40 double *d_datamcweights,
+
41 double *d_pdfatdata)
+
42{
+
43 int thisIdx = (blockIdx.x * blockDim.x + threadIdx.x);
+
44 if (thisIdx < n_data)
+
45 {
+
46 double thisValue(0);
+
47 for(int mcIdx=0; mcIdx<n_mc; mcIdx++)
+
48 {
+
49 int bigIdx(thisIdx+n_data*mcIdx);
+
50 thisValue+=d_datamcweights[bigIdx];
+
51 }
+
52 d_pdfatdata[thisIdx]=thisValue;
+
53 }
+
54 return;
+
55}
+
56
+
57
+
58extern "C" __host__ double* calcKdeWeights(int n_data, int n_mc,
+
59 double sigma,
+
60 //double norm,
+
61 double h_data_x[],
+
62 double h_mc_x[],
+
63 //double h_sigmas[],
+
64 double h_mcweights[])
+
65{
+
66 if(n_data>1000)
+
67 std::cout << "Bad news: a maximum limit of 1000 data events for any given sample is hardcoded into kdeGpu.cu. This is the price you pay for using lovely fast constant memory."
+
68 << std::endl << "Good news: just change c_data_x[1000] to c_data_x[whatever]. You have 64KB to play with." << std::endl;
+
69 assert(n_data<=1000);
+
70
+
71 dim3 block_size;
+
72 block_size.x = 256;//1024;
+
73 dim3 grid_size;
+
74 grid_size.x = 100;
+
75 assert(block_size.x*grid_size.x>(unsigned int)n_data);
+
76
+
77 int wholeThing(block_size.x * grid_size.x);
+
78 int thingsForEachData(wholeThing/n_data);
+
79 int n_mcData(n_data*thingsForEachData);//n_mc);
+
80
+
81 double *d_mc_x, //*d_sigmas,
+
82 *d_mcweights, *d_datamcweights,
+
83 *d_pdfatdata;
+
84
+
85 size_t datasize = n_data * sizeof(double);
+
86 size_t mcsize = n_mc * sizeof(double);
+
87 size_t mcDatasize = n_mcData * sizeof(double);
+
88
+
89 cudaMalloc(&d_pdfatdata, datasize);
+
90 double* h_pdfatdata = (double *)malloc(datasize);//n_data);
+
91 //Initalize d_pdfatdata or BAD THINGS actually I think this is now unnecesary
+
92 for(int i=0;i<n_data;i++) h_pdfatdata[i]=0.0;
+
93
+
94 double* h_datamcweights = (double *)malloc(mcDatasize);//n_data);
+
95
+
96 for(int i=0;i<n_mcData;i++) h_datamcweights[i]=0.0;
+
97 cudaMalloc(&d_datamcweights, mcDatasize);
+
98 cudaMemcpy(d_datamcweights, h_datamcweights, mcDatasize, cudaMemcpyHostToDevice);
+
99
+
100 cudaMemcpyToSymbol(c_data_x, h_data_x, datasize);
+
101
+
102 cudaMalloc(&d_mcweights, mcsize);
+
103 cudaMemcpy(d_mcweights, h_mcweights, mcsize, cudaMemcpyHostToDevice);
+
104 cudaMalloc(&d_mc_x, mcsize);
+
105 cudaMemcpy(d_mc_x, h_mc_x, mcsize, cudaMemcpyHostToDevice);
+
106
+
107 calcKde<<<grid_size, block_size>>>(n_data, n_mc, sigma,
+
108 //d_data_x,
+
109 d_mc_x, //d_sigmas,
+
110 d_mcweights,d_pdfatdata,
+
111 d_datamcweights);
+
112 grid_size.x = (n_data / block_size.x) + 1;
+
113 calcPdfAtData<<<grid_size, block_size>>>(n_data, thingsForEachData, sigma,
+
114 d_datamcweights, d_pdfatdata);
+
115
+
116 cudaMemcpy(h_pdfatdata, d_pdfatdata, datasize, cudaMemcpyDeviceToHost);
+
117
+
118 cudaFree(d_mc_x);
+
119 cudaFree(d_mcweights);
+
120 cudaFree(d_datamcweights);
+
121 cudaFree(d_pdfatdata);
+
122
+
123 return h_pdfatdata;
+
124}
+
125
+
+ + + + diff --git a/mach3logo.png b/mach3logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a1267b979427b7571d307337acae44d3e71725d7 GIT binary patch literal 226358 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%0Dp=O0%mx|f#8rR71oT9&+kmH12Rb{JOQ~7Ne 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 literal 0 HcmV?d00001 diff --git a/mainpage_8md.html b/mainpage_8md.html new file mode 100644 index 00000000..c4cd96e2 --- /dev/null +++ b/mainpage_8md.html @@ -0,0 +1,83 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: mainpage.md File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">mainpage.md File Reference</div></div> +</div><!--header--> +<div class="contents"> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/manager_8cpp.html b/manager_8cpp.html new file mode 100644 index 00000000..9f06b824 --- /dev/null +++ b/manager_8cpp.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/manager/manager.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_f4fde8e27670e448c9f2b9269bfa4d83.html">manager</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">manager.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;TFile.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="manager_8h_source.html">manager/manager.h</a>&quot;</code><br /> +</div> +<p><a href="manager_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/manager_8cpp_source.html b/manager_8cpp_source.html new file mode 100644 index 00000000..23b3937a --- /dev/null +++ b/manager_8cpp_source.html @@ -0,0 +1,230 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/manager/manager.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_f4fde8e27670e448c9f2b9269bfa4d83.html">manager</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">manager.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="manager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;TFile.h&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;<a class="code" href="manager_8h.html">manager/manager.h</a>&quot;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// *************************</span></div> +<div class="foldopen" id="foldopen00006" data-start="{" data-end="}"> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"><a class="line" href="classmanager.html#a33e8fc4162ae32f5107c3eb35a5831ec"> 6</a></span><a class="code hl_function" href="classmanager.html#a33e8fc4162ae32f5107c3eb35a5831ec">manager::manager</a>(std::string <span class="keyword">const</span> &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">filename</a>)</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> : <a class="code hl_variable" href="GetPostfitParamPlots_8cpp.html#a01d92a800904faa16b8c1c1372c40fb3">config</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YAML</a>::<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">LoadFile</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">filename</a>)) {</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <a class="code hl_variable" href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">FileName</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">filename</a>;</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <a class="code hl_function" href="MaCh3Logger_8h.html#aa603c55ea73cd86d1994901227883e1e">SetMaCh3LoggerFormat</a>();</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <a class="code hl_function" href="namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c">MaCh3Utils::MaCh3Welcome</a>();</div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <a class="code hl_function" href="namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf">MaCh3Utils::GetCPUInfo</a>();</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <a class="code hl_function" href="namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928">MaCh3Utils::GetGPUInfo</a>();</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Setting config to be: {}&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">filename</a>);</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Config is now: &quot;</span>);</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> std::cout &lt;&lt; <a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a>[<span class="stringliteral">&quot;LikelihoodOptions&quot;</span>])</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> {</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager&lt;std::string&gt;</a>(<a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a>[<span class="stringliteral">&quot;LikelihoodOptions&quot;</span>][<span class="stringliteral">&quot;TestStatistic&quot;</span>], <span class="stringliteral">&quot;Barlow-Beeston&quot;</span>);</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> == <span class="stringliteral">&quot;Barlow-Beeston&quot;</span>) <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4">kBarlowBeeston</a>);</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> == <span class="stringliteral">&quot;IceCube&quot;</span>) <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472">kIceCube</a>);</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> == <span class="stringliteral">&quot;Poisson&quot;</span>) <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a>);</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> == <span class="stringliteral">&quot;Pearson&quot;</span>) <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7">kPearson</a>);</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a> == <span class="stringliteral">&quot;Dembinski-Abdelmotteleb&quot;</span>) <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb">kDembinskiAbdelmottele</a>);</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a>(<span class="stringliteral">&quot;Wrong form of test-statistic specified!&quot;</span>);</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a>(<span class="stringliteral">&quot;You gave {} and I only support:&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">likelihood</a>);</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1459dbcc0f1b68b266cf0ddc37c34aee">kNTestStatistics</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726">TestStatistic_ToString</a>(<a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)));</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> }</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a> = <a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a>;</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> }</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div> +</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// Empty destructor, for now...</span></div> +<div class="foldopen" id="foldopen00046" data-start="{" data-end="}"> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2"> 46</a></span><a class="code hl_function" href="classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2">manager::~manager</a>() {</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>}</div> +</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">// Save all the settings of the class to an output file</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">// Reflection in C++ is a bit of a pain :(</span></div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">// Outputfile is the TFile pointer we write to</span></div> +<div class="foldopen" id="foldopen00056" data-start="{" data-end="}"> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classmanager.html#a0990af01a220479a19ead5d0231aaf94"> 56</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmanager.html#a0990af01a220479a19ead5d0231aaf94">manager::SaveSettings</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>* <span class="keyword">const</span> OutputFile) {</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OutputFilename</a> = std::string(OutputFile-&gt;GetName());</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> OutputFile-&gt;cd();</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// EM: embed the config used for this app</span></div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMacro</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3Config</a>(<span class="stringliteral">&quot;MaCh3_Config&quot;</span>, <span class="stringliteral">&quot;MaCh3_Config&quot;</span>);</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3Config</a>.ReadFile(<a class="code hl_variable" href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">FileName</a>.c_str());</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3Config</a>.Write();</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// The Branch!</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a>(<span class="stringliteral">&quot;Settings&quot;</span>, <span class="stringliteral">&quot;Settings&quot;</span>);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// Fill the doubles</span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Branch(<span class="stringliteral">&quot;Output&quot;</span>, &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OutputFilename</a>);</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Branch(<span class="stringliteral">&quot;TestStatistic&quot;</span>, &amp;<a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a>);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// Get settings defined by pre-processor directives, e.g. CPU MP and GPU</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cpu_mp_on</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_cpus</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">omp_get_max_threads</a>();</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor"> #else</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cpu_mp_on</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_cpus</a> = 1;</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor"> #ifdef CUDA</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">gpu_on</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="preprocessor"> #else</span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">gpu_on</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Branch(<span class="stringliteral">&quot;GPU&quot;</span>, &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">gpu_on</a>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Branch(<span class="stringliteral">&quot;CPUMP&quot;</span>, &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cpu_mp_on</a>);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Branch(<span class="stringliteral">&quot;nCPUs&quot;</span>, &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_cpus</a>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Fill();</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>-&gt;Write();</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SaveBranch</a>;</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>}</div> +</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment">// *************************</span></div> +<div class="foldopen" id="foldopen00100" data-start="{" data-end="}"> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff"> 100</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff">manager::Print</a>() {</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;---------------------------------&quot;</span>);</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> std::cout &lt;&lt; <a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;---------------------------------&quot;</span>);</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div> +</div> +<div class="ttc" id="aGetPostfitParamPlots_8cpp_html_a01d92a800904faa16b8c1c1372c40fb3"><div class="ttname"><a href="GetPostfitParamPlots_8cpp.html#a01d92a800904faa16b8c1c1372c40fb3">config</a></div><div class="ttdeci">YAML::Node config</div><div class="ttdef"><b>Definition</b> <a href="GetPostfitParamPlots_8cpp_source.html#l00030">GetPostfitParamPlots.cpp:30</a></div></div> +<div class="ttc" id="aMaCh3Logger_8h_html_a61052119a625282d0ec6d4a97adf3ee2"><div class="ttname"><a href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a></div><div class="ttdeci">#define MACH3LOG_ERROR</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00011">MaCh3Logger.h:11</a></div></div> +<div class="ttc" id="aMaCh3Logger_8h_html_a95fa4dffc648e4c5536c9292c2bdcac3"><div class="ttname"><a href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a></div><div class="ttdeci">#define MACH3LOG_INFO</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00009">MaCh3Logger.h:9</a></div></div> +<div class="ttc" id="aMaCh3Logger_8h_html_aa603c55ea73cd86d1994901227883e1e"><div class="ttname"><a href="MaCh3Logger_8h.html#aa603c55ea73cd86d1994901227883e1e">SetMaCh3LoggerFormat</a></div><div class="ttdeci">void SetMaCh3LoggerFormat()</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00016">MaCh3Logger.h:16</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a></div><div class="ttdeci">TestStatistic</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01000">Structs.h:1000</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a1459dbcc0f1b68b266cf0ddc37c34aee"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1459dbcc0f1b68b266cf0ddc37c34aee">kNTestStatistics</a></div><div class="ttdeci">@ kNTestStatistics</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01007">Structs.h:1006</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7">kPearson</a></div><div class="ttdeci">@ kPearson</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01004">Structs.h:1004</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4">kBarlowBeeston</a></div><div class="ttdeci">@ kBarlowBeeston</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01002">Structs.h:1002</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472">kIceCube</a></div><div class="ttdeci">@ kIceCube</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01003">Structs.h:1003</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb">kDembinskiAbdelmottele</a></div><div class="ttdeci">@ kDembinskiAbdelmottele</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01005">Structs.h:1005</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a></div><div class="ttdeci">@ kPoisson</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01001">Structs.h:1001</a></div></div> +<div class="ttc" id="aStructs_8h_html_afe33f23691e6b5e3e0f5ab97aaeb7726"><div class="ttname"><a href="Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726">TestStatistic_ToString</a></div><div class="ttdeci">std::string TestStatistic_ToString(TestStatistic i)</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01011">Structs.h:1011</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassmanager_html_a0990af01a220479a19ead5d0231aaf94"><div class="ttname"><a href="classmanager.html#a0990af01a220479a19ead5d0231aaf94">manager::SaveSettings</a></div><div class="ttdeci">void SaveSettings(TFile *const OutputFile)</div><div class="ttdoc">Add manager useful information's to TFile, in most cases to Fitter.</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00056">manager.cpp:56</a></div></div> +<div class="ttc" id="aclassmanager_html_a1004958d1431ff607c08fa795b5953b7"><div class="ttname"><a href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">manager::FileName</a></div><div class="ttdeci">std::string FileName</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00047">manager.h:47</a></div></div> +<div class="ttc" id="aclassmanager_html_a10ff16396efbc1dedcbd931c50ff7eff"><div class="ttname"><a href="classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff">manager::Print</a></div><div class="ttdeci">void Print()</div><div class="ttdoc">Print currently used config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00100">manager.cpp:100</a></div></div> +<div class="ttc" id="aclassmanager_html_a33e8fc4162ae32f5107c3eb35a5831ec"><div class="ttname"><a href="classmanager.html#a33e8fc4162ae32f5107c3eb35a5831ec">manager::manager</a></div><div class="ttdeci">manager(std::string const &amp;)</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00006">manager.cpp:6</a></div></div> +<div class="ttc" id="aclassmanager_html_a7519c9ab5670ae939d18485d31057b46"><div class="ttname"><a href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">manager::config</a></div><div class="ttdeci">YAML::Node config</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00046">manager.h:46</a></div></div> +<div class="ttc" id="aclassmanager_html_aa7619b235f224c34e77f8d09f42a5911"><div class="ttname"><a href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">manager::mc_stat_llh</a></div><div class="ttdeci">int mc_stat_llh</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00048">manager.h:48</a></div></div> +<div class="ttc" id="aclassmanager_html_ad5f9fad9ba7b6e4ff0d65834a478bfc2"><div class="ttname"><a href="classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2">manager::~manager</a></div><div class="ttdeci">virtual ~manager()</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00046">manager.cpp:46</a></div></div> +<div class="ttc" id="amanager_8h_html"><div class="ttname"><a href="manager_8h.html">manager.h</a></div></div> +<div class="ttc" id="anamespaceMaCh3Utils_html_a8a55fb4e064bedc9b679c5da048ce2bf"><div class="ttname"><a href="namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf">MaCh3Utils::GetCPUInfo</a></div><div class="ttdeci">void GetCPUInfo()</div><div class="ttdef"><b>Definition</b> <a href="Monitor_8cpp_source.html#l00053">Monitor.cpp:53</a></div></div> +<div class="ttc" id="anamespaceMaCh3Utils_html_a9b97c309891603fece844f2579f30928"><div class="ttname"><a href="namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928">MaCh3Utils::GetGPUInfo</a></div><div class="ttdeci">void GetGPUInfo()</div><div class="ttdef"><b>Definition</b> <a href="Monitor_8cpp_source.html#l00076">Monitor.cpp:76</a></div></div> +<div class="ttc" id="anamespaceMaCh3Utils_html_ac6f4a3b6a7749967ff9a011469352f6c"><div class="ttname"><a href="namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c">MaCh3Utils::MaCh3Welcome</a></div><div class="ttdeci">void MaCh3Welcome()</div><div class="ttdoc">KS: Prints welcome message with MaCh3 logo.</div><div class="ttdef"><b>Definition</b> <a href="Monitor_8cpp_source.html#l00006">Monitor.cpp:6</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/manager_8h.html b/manager_8h.html new file mode 100644 index 00000000..adf56d6a --- /dev/null +++ b/manager_8h.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/manager/manager.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_f4fde8e27670e448c9f2b9269bfa4d83.html">manager</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">manager.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &lt;fstream&gt;</code><br /> +<code>#include &lt;string&gt;</code><br /> +<code>#include &lt;vector&gt;</code><br /> +<code>#include &lt;cstdlib&gt;</code><br /> +<code>#include &quot;TTree.h&quot;</code><br /> +<code>#include &quot;TBranch.h&quot;</code><br /> +<code>#include &quot;TMacro.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="MaCh3Logger_8h_source.html">manager/MaCh3Logger.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="Structs_8h_source.html">samplePDF/Structs.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="YamlHelper_8h_source.html">manager/YamlHelper.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="Monitor_8h_source.html">manager/Monitor.h</a>&quot;</code><br /> +</div> +<p><a href="manager_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmanager.html">manager</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/manager_8h_source.html b/manager_8h_source.html new file mode 100644 index 00000000..3f91d914 --- /dev/null +++ b/manager_8h_source.html @@ -0,0 +1,154 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/manager/manager.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_f4fde8e27670e448c9f2b9269bfa4d83.html">manager</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">manager.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="manager_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// C++ includes</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;fstream&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;string&gt;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;vector&gt;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;cstdlib&gt;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// ROOT include</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;TTree.h&quot;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;TBranch.h&quot;</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;TMacro.h&quot;</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;<a class="code" href="MaCh3Logger_8h.html">manager/MaCh3Logger.h</a>&quot;</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;<a class="code" href="Structs_8h.html">samplePDF/Structs.h</a>&quot;</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;<a class="code" href="YamlHelper_8h.html">manager/YamlHelper.h</a>&quot;</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;<a class="code" href="Monitor_8h.html">manager/Monitor.h</a>&quot;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//KS: Joy of forward declaration https://gieseanw.wordpress.com/2018/02/25/the-joys-of-forward-declarations-results-from-the-real-world/</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">class </span><a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>;</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="foldopen" id="foldopen00024" data-start="{" data-end="};"> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classmanager.html"> 24</a></span><span class="keyword">class </span><a class="code hl_class" href="classmanager.html">manager</a> {</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">public</span>:</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_class" href="classmanager.html">manager</a>(std::string <span class="keyword">const</span> &amp;);</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2">~manager</a>();</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classmanager.html#a149d43d444a7492187d0051c531923bd"> 31</a></span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classmanager.html#a149d43d444a7492187d0051c531923bd">GetMCStatLLH</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a>;}</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classmanager.html#ab81f0be941a168843b372d38999877f2"> 34</a></span> <span class="keyword">inline</span> std::string <a class="code hl_function" href="classmanager.html#ab81f0be941a168843b372d38999877f2">GetFileName</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">FileName</a>;}</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520"> 37</a></span> <span class="keyword">inline</span> YAML::Node <span class="keyword">const</span> &amp;<a class="code hl_function" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">raw</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a>;}</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmanager.html#a0990af01a220479a19ead5d0231aaf94">SaveSettings</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>* <span class="keyword">const</span> OutputFile);</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff">Print</a>();</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">private</span>:</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46"> 46</a></span> YAML::Node <a class="code hl_variable" href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">config</a>;</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classmanager.html#a1004958d1431ff607c08fa795b5953b7"> 47</a></span> std::string <a class="code hl_variable" href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">FileName</a>;</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911"> 48</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">mc_stat_llh</a>;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>};</div> +</div> +<div class="ttc" id="aMaCh3Logger_8h_html"><div class="ttname"><a href="MaCh3Logger_8h.html">MaCh3Logger.h</a></div></div> +<div class="ttc" id="aMonitor_8h_html"><div class="ttname"><a href="Monitor_8h.html">Monitor.h</a></div></div> +<div class="ttc" id="aStructs_8h_html"><div class="ttname"><a href="Structs_8h.html">Structs.h</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html"><div class="ttname"><a href="YamlHelper_8h.html">YamlHelper.h</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassmanager_html"><div class="ttname"><a href="classmanager.html">manager</a></div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00024">manager.h:24</a></div></div> +<div class="ttc" id="aclassmanager_html_a0990af01a220479a19ead5d0231aaf94"><div class="ttname"><a href="classmanager.html#a0990af01a220479a19ead5d0231aaf94">manager::SaveSettings</a></div><div class="ttdeci">void SaveSettings(TFile *const OutputFile)</div><div class="ttdoc">Add manager useful information's to TFile, in most cases to Fitter.</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00056">manager.cpp:56</a></div></div> +<div class="ttc" id="aclassmanager_html_a1004958d1431ff607c08fa795b5953b7"><div class="ttname"><a href="classmanager.html#a1004958d1431ff607c08fa795b5953b7">manager::FileName</a></div><div class="ttdeci">std::string FileName</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00047">manager.h:47</a></div></div> +<div class="ttc" id="aclassmanager_html_a10ff16396efbc1dedcbd931c50ff7eff"><div class="ttname"><a href="classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff">manager::Print</a></div><div class="ttdeci">void Print()</div><div class="ttdoc">Print currently used config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00100">manager.cpp:100</a></div></div> +<div class="ttc" id="aclassmanager_html_a149d43d444a7492187d0051c531923bd"><div class="ttname"><a href="classmanager.html#a149d43d444a7492187d0051c531923bd">manager::GetMCStatLLH</a></div><div class="ttdeci">int GetMCStatLLH()</div><div class="ttdoc">Get likelihood type defined in the config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00031">manager.h:31</a></div></div> +<div class="ttc" id="aclassmanager_html_a7519c9ab5670ae939d18485d31057b46"><div class="ttname"><a href="classmanager.html#a7519c9ab5670ae939d18485d31057b46">manager::config</a></div><div class="ttdeci">YAML::Node config</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00046">manager.h:46</a></div></div> +<div class="ttc" id="aclassmanager_html_aa7619b235f224c34e77f8d09f42a5911"><div class="ttname"><a href="classmanager.html#aa7619b235f224c34e77f8d09f42a5911">manager::mc_stat_llh</a></div><div class="ttdeci">int mc_stat_llh</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00048">manager.h:48</a></div></div> +<div class="ttc" id="aclassmanager_html_ab3999cc856ede72b37f68bdb28bd5520"><div class="ttname"><a href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">manager::raw</a></div><div class="ttdeci">YAML::Node const &amp; raw()</div><div class="ttdoc">Return config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00037">manager.h:37</a></div></div> +<div class="ttc" id="aclassmanager_html_ab81f0be941a168843b372d38999877f2"><div class="ttname"><a href="classmanager.html#ab81f0be941a168843b372d38999877f2">manager::GetFileName</a></div><div class="ttdeci">std::string GetFileName()</div><div class="ttdoc">Return name of config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00034">manager.h:34</a></div></div> +<div class="ttc" id="aclassmanager_html_ad5f9fad9ba7b6e4ff0d65834a478bfc2"><div class="ttname"><a href="classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2">manager::~manager</a></div><div class="ttdeci">virtual ~manager()</div><div class="ttdef"><b>Definition</b> <a href="manager_8cpp_source.html#l00046">manager.cpp:46</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/mcmc_8cpp.html b/mcmc_8cpp.html new file mode 100644 index 00000000..df69e9a7 --- /dev/null +++ b/mcmc_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/mcmc.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">mcmc.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="mcmc_8h_source.html">mcmc.h</a>&quot;</code><br /> +</div> +<p><a href="mcmc_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/mcmc_8cpp_source.html b/mcmc_8cpp_source.html new file mode 100644 index 00000000..e6632d2b --- /dev/null +++ b/mcmc_8cpp_source.html @@ -0,0 +1,479 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/mcmc.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">mcmc.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="mcmc_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="mcmc_8h.html">mcmc.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// Initialise the manager and make it an object of mcmc class</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// Now we can dump manager settings to the output file</span></div> +<div class="foldopen" id="foldopen00006" data-start="{" data-end="}"> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"><a class="line" href="classmcmc.html#a56195958aee22996158d3ba341dcf31e"> 6</a></span><a class="code hl_function" href="classmcmc.html#a56195958aee22996158d3ba341dcf31e">mcmc::mcmc</a>(<a class="code hl_class" href="classmanager.html">manager</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">man</a>) : <a class="code hl_class" href="classFitterBase.html">FitterBase</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">man</a>) {</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// Beginning step number</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a> = 0;</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// Starting parameters should be thrown</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a> = <a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a>-&gt;<a class="code hl_function" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">raw</a>()[<span class="stringliteral">&quot;General&quot;</span>][<span class="stringliteral">&quot;MCMC&quot;</span>][<span class="stringliteral">&quot;NSteps&quot;</span>].as&lt;<span class="keywordtype">double</span>&gt;();</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_variable" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">AnnealTemp</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager&lt;double&gt;</a>(<a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a>-&gt;<a class="code hl_function" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">raw</a>()[<span class="stringliteral">&quot;General&quot;</span>][<span class="stringliteral">&quot;MCMC&quot;</span>][<span class="stringliteral">&quot;AnnealTemp&quot;</span>], -999);</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">AnnealTemp</a> &lt; 0) <a class="code hl_variable" href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">anneal</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> {</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Enabling simulated annealing with T = {}&quot;</span>, <a class="code hl_variable" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">AnnealTemp</a>);</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_variable" href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">anneal</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> }</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>}</div> +</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// Destructor: close the logger and output file</span></div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="}"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92"> 27</a></span><a class="code hl_function" href="classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92">mcmc::~mcmc</a>() {</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>}</div> +</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment">// Load starting positions from the end of a previous chain</span></div> +<div class="foldopen" id="foldopen00034" data-start="{" data-end="}"> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3"> 34</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3">mcmc::ReadParsFromFile</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>) {</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;MCMC getting starting position from {}&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">infile</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>.c_str(), <span class="stringliteral">&quot;READ&quot;</span>);</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">posts</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">infile</a>-&gt;Get(<span class="stringliteral">&quot;posteriors&quot;</span>);</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObjArray</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">brlis</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObjArray</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">posts</a>-&gt;GetListOfBranches();</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbr</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">brlis</a>-&gt;GetEntries();</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_names</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbr</a>];</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_vals</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbr</a>];</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbr</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TBranch</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">br</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TBranch</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">brlis</a>-&gt;At(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>);</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bname</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">br</a>-&gt;GetName();</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_names</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bname</a>;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> std::cout &lt;&lt; <span class="stringliteral">&quot; * Loading &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bname</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">posts</a>-&gt;SetBranchAddress(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_names</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>], &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_vals</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]);</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">posts</a>-&gt;GetEntry(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">posts</a>-&gt;GetEntries()-1);</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_names</a>;</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">branch_vals</a>;</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">infile</a>-&gt;Close();</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">infile</a>;</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>}</div> +</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// **********************</span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// Do we accept the proposed step for all the parameters?</span></div> +<div class="foldopen" id="foldopen00063" data-start="{" data-end="}"> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651"> 63</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651">mcmc::CheckStep</a>() {</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">// **********************</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">accept</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// Set the acceptance probability to zero</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_variable" href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">accProb</a> = 0.0;</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// Calculate acceptance probability</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">anneal</a>) <a class="code hl_variable" href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">accProb</a> = TMath::Min(1.,TMath::Exp( -(<a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a>-<a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a>) / (TMath::Exp(-<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a>/<a class="code hl_variable" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">AnnealTemp</a>)))); </div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">else</span> <a class="code hl_variable" href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">accProb</a> = TMath::Min(1., TMath::Exp(<a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a>-<a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a>));</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// Get the random number</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fRandom</a> = <a class="code hl_variable" href="classFitterBase.html#a2d3be9c591eaf8454e2eb5b4e12c6e67">random</a>-&gt;Rndm();</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// Do the accept/reject</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fRandom</a> &lt;= <a class="code hl_variable" href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">accProb</a>) {</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">accept</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> ++<a class="code hl_variable" href="classFitterBase.html#a2774f3a0047c4347ee0db05406425f79">accCount</a>;</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">accept</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot; logLProp: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a> &lt;&lt; <span class="stringliteral">&quot; logLCurr: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a> &lt;&lt; <span class="stringliteral">&quot; accProb: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">accProb</a> &lt;&lt; <span class="stringliteral">&quot; fRandom: &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fRandom</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// Update all the handlers to accept the step</span></div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">accept</a> &amp;&amp; !<a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a>) {</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a> = <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a>;</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>) {</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>-&gt;<a class="code hl_function" href="classcovarianceBase.html#aa2344b1482362eed11d817acdb6befe4">acceptStep</a>();</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// Loop over systematics and accept</span></div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">s</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">s</a> &lt; <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">s</a>) {</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">s</a>]-&gt;acceptStep();</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> }</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> }</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <a class="code hl_variable" href="classFitterBase.html#a1e47b6114574f59c10ad01567ae92198">stepClock</a>-&gt;Stop();</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_variable" href="classFitterBase.html#a8354e9a7a9cc534277ff76ab37c9a763">stepTime</a> = <a class="code hl_variable" href="classFitterBase.html#a1e47b6114574f59c10ad01567ae92198">stepClock</a>-&gt;RealTime();</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// Write step to output tree</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_variable" href="classFitterBase.html#aed2032b9c4a4f2248abe548f54f8dcc8">outTree</a>-&gt;Fill();</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>}</div> +</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment">// Run the Markov chain with all the systematic objects added</span></div> +<div class="foldopen" id="foldopen00113" data-start="{" data-end="}"> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31"> 113</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31">mcmc::runMCMC</a>() {</div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// *******************</span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// Save the settings into the output file</span></div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_function" href="classFitterBase.html#a48f38bfa8996fe00d51f35b05dd16b46">SaveSettings</a>();</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// Prepare the output branches</span></div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_function" href="classFitterBase.html#a53715760edd8c7640432f31793fd28f9">PrepareOutput</a>();</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// Reconfigure the samples, systematics and oscillation for first weight</span></div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// ProposeStep sets logLProp</span></div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_function" href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">ProposeStep</a>();</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// Set the current logL to the proposed logL for the 0th step</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// Accept the first step to set logLCurr: this shouldn&#39;t affect the MCMC because we ignore the first N steps in burn-in</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a> = <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a>;</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// Begin MCMC</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">for</span> (<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> = <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>; <a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> &lt; <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>+<a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a>; ++<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a>)</div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> {</div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_variable" href="classFitterBase.html#a1e47b6114574f59c10ad01567ae92198">stepClock</a>-&gt;Start();</div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// Set the initial rejection to false</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// Print 10 steps in total</span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> ( (<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a>-<a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>) % (<a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a>/10) == 0) {</div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_function" href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4">PrintProgress</a>();</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// Propose current step variation and save the systematic likelihood that results in this step being taken</span></div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// Updates logLProp</span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_function" href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">ProposeStep</a>();</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// Does the MCMC accept this step?</span></div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_function" href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651">CheckStep</a>();</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// Auto save the output</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> % <a class="code hl_variable" href="classFitterBase.html#ad955982e63066918cba9c53381608d09">auto_save</a> == 0) <a class="code hl_variable" href="classFitterBase.html#aed2032b9c4a4f2248abe548f54f8dcc8">outTree</a>-&gt;AutoSave();</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Save all the MCMC output</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_function" href="classFitterBase.html#a418f581b688f035211107ddd83168c08">SaveOutput</a>();</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// Process MCMC</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_function" href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1">ProcessMCMC</a>();</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span>}</div> +</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">// Process the MCMC output to get postfit etc</span></div> +<div class="foldopen" id="foldopen00161" data-start="{" data-end="}"> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1"> 161</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1">mcmc::ProcessMCMC</a>() {</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// Process the MCMC</span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a>-&gt;<a class="code hl_function" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">raw</a>()[<span class="stringliteral">&quot;General&quot;</span>][<span class="stringliteral">&quot;ProcessMCMC&quot;</span>].as&lt;<span class="keywordtype">bool</span>&gt;()) {</div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// Make the processor</span></div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <a class="code hl_class" href="classMCMCProcessor.html">MCMCProcessor</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>(std::string(<a class="code hl_variable" href="classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990">outputFile</a>-&gt;GetName()), <span class="keyword">false</span>);</div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.Initialise();</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// Make the TVectorD pointers which hold the processed output</span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorD</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorD</a> *Errors = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorD</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central_Gauss</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorD</a> *Errors_Gauss = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorD</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Peaks</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// Make the postfit</span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.GetPostfit(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central</a>, Errors, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central_Gauss</a>, Errors_Gauss, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Peaks</a>);</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.DrawPostfit();</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// Make the TMatrix pointers which hold the processed output</span></div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixDSym</a> *Covariance = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixDSym</a> *Correlation = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="comment">// Make the covariance matrix</span></div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.GetCovariance(Covariance, Correlation);</div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.DrawCovariance();</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> std::vector&lt;TString&gt; <a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a871d6466cea2597401bdb203293f4033">BranchNames</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Processor</a>.GetBranchNames();</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// Re-open the TFile</span></div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990">outputFile</a>-&gt;IsOpen()) {</div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Opening output again to update with means..&quot;</span>);</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <a class="code hl_variable" href="classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990">outputFile</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>(<a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a>-&gt;<a class="code hl_function" href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">raw</a>()[<span class="stringliteral">&quot;General&quot;</span>][<span class="stringliteral">&quot;Output&quot;</span>][<span class="stringliteral">&quot;Filename&quot;</span>].as&lt;std::string&gt;().c_str(), <span class="stringliteral">&quot;UPDATE&quot;</span>);</div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central</a>-&gt;Write(<span class="stringliteral">&quot;PDF_Means&quot;</span>);</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> Errors-&gt;Write(<span class="stringliteral">&quot;PDF_Errors&quot;</span>);</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Central_Gauss</a>-&gt;Write(<span class="stringliteral">&quot;Gauss_Means&quot;</span>);</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> Errors_Gauss-&gt;Write(<span class="stringliteral">&quot;Errors_Gauss&quot;</span>);</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> Covariance-&gt;Write(<span class="stringliteral">&quot;Covariance&quot;</span>);</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> Correlation-&gt;Write(<span class="stringliteral">&quot;Correlation&quot;</span>);</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> }</div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>}</div> +</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">// Do the initial reconfigure of the MCMC</span></div> +<div class="foldopen" id="foldopen00211" data-start="{" data-end="}"> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c"> 211</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">mcmc::ProposeStep</a>() {</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// Initial likelihood</span></div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> = 0.0;</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// Initiate to false</span></div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// Propose steps for the oscillation handlers</span></div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>) {</div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>-&gt;<a class="code hl_function" href="classcovarianceOsc.html#abb8df24417b380af9b96763b8abc6b2e">proposeStep</a>();</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// Now get the likelihoods for the oscillation</span></div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_variable" href="classFitterBase.html#ac7a4c5b2a90aba0e4bf6600b7af05168">osc_llh</a> = <a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>-&gt;<a class="code hl_function" href="classcovarianceOsc.html#ac274d65036b6d534f8ea82023d6e3ad3">GetLikelihood</a>();</div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// Add the oscillation likelihoods to the reconfigure likelihoods</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> += <a class="code hl_variable" href="classFitterBase.html#ac7a4c5b2a90aba0e4bf6600b7af05168">osc_llh</a>;</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot;LLH for oscillation handler: &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stdIt</a> = 0;</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// Loop over the systematics and propose the initial step</span></div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">for</span> (std::vector&lt;covarianceBase*&gt;::iterator <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> = <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>.begin(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> != <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>.end(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a>, ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stdIt</a>) {</div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// Could throw the initial value here to do MCMC stability studies</span></div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// Propose the steps for the systematics</span></div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> (*it)-&gt;proposeStep();</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// Get the likelihood from the systematics</span></div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <a class="code hl_variable" href="classFitterBase.html#ac948767a356e169c719a88315f8d1f47">syst_llh</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stdIt</a>] = (*it)-&gt;GetLikelihood();</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> += <a class="code hl_variable" href="classFitterBase.html#ac948767a356e169c719a88315f8d1f47">syst_llh</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stdIt</a>];</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot;LLH after &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stdIt</a>]-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> }</div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="comment">// Check if we&#39;ve hit a boundary in the systematics</span></div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// In this case we can save time by not having to reconfigure the simulation</span></div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> &gt;= <a class="code hl_define" href="covarianceBase_8h.html#a949fbeb0e56580fc737cc2ccda06ccfa">__LARGE_LOGL__</a>) {</div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot;Rejecting based on boundary&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> }</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// Only reweight when we have a good parameter configuration</span></div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// This speeds things up considerably because for every bad parameter configuration we don&#39;t have to reweight the MC</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a>)</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> {</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="comment">// Could multi-thread this</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// But since sample reweight is multi-threaded it&#39;s probably better to do that</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> {</div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// If we&#39;re running with different oscillation parameters for neutrino and anti-neutrino</span></div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a> ){ </div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(<a class="code hl_variable" href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">osc</a>-&gt;<a class="code hl_function" href="classcovarianceOsc.html#a5732a5abf9aa3d73f9dec5ba9d33217f">getPropPars</a>());</div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// If we aren&#39;t using any oscillation</span></div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a>);</div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> }</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="comment">//DB for atmospheric event by event sample migration, need to fully reweight all samples to allow event passing prior to likelihood evaluation</span></div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// Get the sample likelihoods and add them</span></div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_variable" href="classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091">sample_llh</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetLikelihood();</div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> += <a class="code hl_variable" href="classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091">sample_llh</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>];</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot;LLH after sample &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> }</div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// For when we don&#39;t have to reweight, set sample to madness</span></div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">samples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// Set the sample_llh[i] to be madly high also to signify a step out of bounds</span></div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <a class="code hl_variable" href="classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091">sample_llh</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_define" href="covarianceBase_8h.html#a949fbeb0e56580fc737cc2ccda06ccfa">__LARGE_LOGL__</a>;</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (debug) debugFile &lt;&lt; <span class="stringliteral">&quot;LLH after REJECT sample &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> }</div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="comment">// Save the proposed likelihood (class member)</span></div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh</a>;</div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span>}</div> +</div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">// Print the fit output progress</span></div> +<div class="foldopen" id="foldopen00306" data-start="{" data-end="}"> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"><a class="line" href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4"> 306</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4">mcmc::PrintProgress</a>() {</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="comment">// *******************</span></div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Step:\t{}/{}, current: {:.2f}, proposed: {:.2f}&quot;</span>, <a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> - <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>, <a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a>, <a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a>, <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a>);</div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Accepted/Total steps: {}/{} = {:.2f}&quot;</span>, <a class="code hl_variable" href="classFitterBase.html#a2774f3a0047c4347ee0db05406425f79">accCount</a>, <a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> - <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(<a class="code hl_variable" href="classFitterBase.html#a2774f3a0047c4347ee0db05406425f79">accCount</a>) / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(<a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> - <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>));</div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">for</span> (std::vector&lt;covarianceBase*&gt;::iterator <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> = <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>.begin(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> != <a class="code hl_variable" href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">systematics</a>.end(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a>) {</div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span> (std::string((*it)-&gt;getName()) == <span class="stringliteral">&quot;xsec_cov&quot;</span>) {</div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Cross-section parameters: &quot;</span>);</div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> (*it)-&gt;printNominalCurrProp();</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> }</div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="preprocessor"> #ifdef DEBUF</span></div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span> (debug) {</div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> debugFile &lt;&lt; <span class="stringliteral">&quot;\n-------------------------------------------------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> debugFile &lt;&lt; <span class="stringliteral">&quot;Step:\t&quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">step</a> + 1 &lt;&lt; <span class="stringliteral">&quot;/&quot;</span> &lt;&lt; <a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a> &lt;&lt; <span class="stringliteral">&quot; | current: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">logLCurr</a> &lt;&lt; <span class="stringliteral">&quot; proposed: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">logLProp</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span>}</div> +</div> +<div class="ttc" id="aGetPenaltyTerm_8cpp_html_a871d6466cea2597401bdb203293f4033"><div class="ttname"><a href="GetPenaltyTerm_8cpp.html#a871d6466cea2597401bdb203293f4033">BranchNames</a></div><div class="ttdeci">std::vector&lt; TString &gt; BranchNames</div><div class="ttdef"><b>Definition</b> <a href="GetPenaltyTerm_8cpp_source.html#l00039">GetPenaltyTerm.cpp:39</a></div></div> +<div class="ttc" id="aMaCh3Logger_8h_html_a95fa4dffc648e4c5536c9292c2bdcac3"><div class="ttname"><a href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a></div><div class="ttdeci">#define MACH3LOG_INFO</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00009">MaCh3Logger.h:9</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassFitterBase_html"><div class="ttname"><a href="classFitterBase.html">FitterBase</a></div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00019">FitterBase.h:19</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a0c3179f05d6846f5b796ba4c04899634"><div class="ttname"><a href="classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634">FitterBase::osc</a></div><div class="ttdeci">covarianceOsc * osc</div><div class="ttdoc">handles oscillation parameters</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00096">FitterBase.h:96</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a187dd22c17f9e96e5a7e2fb2371abace"><div class="ttname"><a href="classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace">FitterBase::logLProp</a></div><div class="ttdeci">double logLProp</div><div class="ttdoc">proposed likelihood</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00075">FitterBase.h:75</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a1e47b6114574f59c10ad01567ae92198"><div class="ttname"><a href="classFitterBase.html#a1e47b6114574f59c10ad01567ae92198">FitterBase::stepClock</a></div><div class="ttdeci">TStopwatch * stepClock</div><div class="ttdoc">tells how long single step/fit iteration took</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00103">FitterBase.h:103</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a2774f3a0047c4347ee0db05406425f79"><div class="ttname"><a href="classFitterBase.html#a2774f3a0047c4347ee0db05406425f79">FitterBase::accCount</a></div><div class="ttdeci">int accCount</div><div class="ttdoc">counts accepted steps</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00079">FitterBase.h:79</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a2d3be9c591eaf8454e2eb5b4e12c6e67"><div class="ttname"><a href="classFitterBase.html#a2d3be9c591eaf8454e2eb5b4e12c6e67">FitterBase::random</a></div><div class="ttdeci">TRandom3 * random</div><div class="ttdoc">Random number.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00108">FitterBase.h:108</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a3a15d2348b7bf0a639aaab52b9294bbf"><div class="ttname"><a href="classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf">FitterBase::systematics</a></div><div class="ttdeci">std::vector&lt; covarianceBase * &gt; systematics</div><div class="ttdoc">Systematic holder.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00093">FitterBase.h:93</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a418f581b688f035211107ddd83168c08"><div class="ttname"><a href="classFitterBase.html#a418f581b688f035211107ddd83168c08">FitterBase::SaveOutput</a></div><div class="ttdeci">void SaveOutput()</div><div class="ttdoc">Save output and close files.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8cpp_source.html#l00230">FitterBase.cpp:230</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a4260b312e3f35cf01fc73b02239f8990"><div class="ttname"><a href="classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990">FitterBase::outputFile</a></div><div class="ttdeci">TFile * outputFile</div><div class="ttdoc">Output.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00111">FitterBase.h:111</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a48f38bfa8996fe00d51f35b05dd16b46"><div class="ttname"><a href="classFitterBase.html#a48f38bfa8996fe00d51f35b05dd16b46">FitterBase::SaveSettings</a></div><div class="ttdeci">void SaveSettings()</div><div class="ttdoc">Save the settings that the MCMC was run with.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8cpp_source.html#l00091">FitterBase.cpp:91</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a4fceb68f242feeb04a0ddf42a5a37095"><div class="ttname"><a href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">FitterBase::fitMan</a></div><div class="ttdeci">manager * fitMan</div><div class="ttdoc">The manager.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00068">FitterBase.h:68</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a50df1bd75b20a953f81ab9c2bab6b42c"><div class="ttname"><a href="classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c">FitterBase::step</a></div><div class="ttdeci">unsigned int step</div><div class="ttdoc">current state</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00071">FitterBase.h:71</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a53715760edd8c7640432f31793fd28f9"><div class="ttname"><a href="classFitterBase.html#a53715760edd8c7640432f31793fd28f9">FitterBase::PrepareOutput</a></div><div class="ttdeci">void PrepareOutput()</div><div class="ttdoc">Prepare the output file.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8cpp_source.html#l00157">FitterBase.cpp:157</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a6319d2ea50984860475bbc6c708b0d90"><div class="ttname"><a href="classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90">FitterBase::accProb</a></div><div class="ttdeci">double accProb</div><div class="ttdoc">current acceptance prob</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00077">FitterBase.h:77</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a7ca9ba6e8948f247fbff90f77b2f3091"><div class="ttname"><a href="classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091">FitterBase::sample_llh</a></div><div class="ttdeci">double * sample_llh</div><div class="ttdoc">store the llh breakdowns</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00085">FitterBase.h:85</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a8354e9a7a9cc534277ff76ab37c9a763"><div class="ttname"><a href="classFitterBase.html#a8354e9a7a9cc534277ff76ab37c9a763">FitterBase::stepTime</a></div><div class="ttdeci">double stepTime</div><div class="ttdoc">Time of single step.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00105">FitterBase.h:105</a></div></div> +<div class="ttc" id="aclassFitterBase_html_abfb6f10720764d8bbbe43754fd5cd976"><div class="ttname"><a href="classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976">FitterBase::logLCurr</a></div><div class="ttdeci">double logLCurr</div><div class="ttdoc">current likelihood</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00073">FitterBase.h:73</a></div></div> +<div class="ttc" id="aclassFitterBase_html_ac7a4c5b2a90aba0e4bf6600b7af05168"><div class="ttname"><a href="classFitterBase.html#ac7a4c5b2a90aba0e4bf6600b7af05168">FitterBase::osc_llh</a></div><div class="ttdeci">double osc_llh</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00083">FitterBase.h:83</a></div></div> +<div class="ttc" id="aclassFitterBase_html_ac948767a356e169c719a88315f8d1f47"><div class="ttname"><a href="classFitterBase.html#ac948767a356e169c719a88315f8d1f47">FitterBase::syst_llh</a></div><div class="ttdeci">double * syst_llh</div><div class="ttdoc">systematic llh breakdowns</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00087">FitterBase.h:87</a></div></div> +<div class="ttc" id="aclassFitterBase_html_ad955982e63066918cba9c53381608d09"><div class="ttname"><a href="classFitterBase.html#ad955982e63066918cba9c53381608d09">FitterBase::auto_save</a></div><div class="ttdeci">int auto_save</div><div class="ttdoc">auto save every N steps</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00117">FitterBase.h:117</a></div></div> +<div class="ttc" id="aclassFitterBase_html_aed2032b9c4a4f2248abe548f54f8dcc8"><div class="ttname"><a href="classFitterBase.html#aed2032b9c4a4f2248abe548f54f8dcc8">FitterBase::outTree</a></div><div class="ttdeci">TTree * outTree</div><div class="ttdoc">Output tree with posteriors.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00115">FitterBase.h:115</a></div></div> +<div class="ttc" id="aclassFitterBase_html_afac0dcceb1df194159c07945e8dc0069"><div class="ttname"><a href="classFitterBase.html#afac0dcceb1df194159c07945e8dc0069">FitterBase::samples</a></div><div class="ttdeci">std::vector&lt; samplePDFBase * &gt; samples</div><div class="ttdoc">Sample holder.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00090">FitterBase.h:90</a></div></div> +<div class="ttc" id="aclassMCMCProcessor_html"><div class="ttname"><a href="classMCMCProcessor.html">MCMCProcessor</a></div><div class="ttdef"><b>Definition</b> <a href="MCMCProcessor_8h_source.html#l00066">MCMCProcessor.h:66</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html_aa2344b1482362eed11d817acdb6befe4"><div class="ttname"><a href="classcovarianceBase.html#aa2344b1482362eed11d817acdb6befe4">covarianceBase::acceptStep</a></div><div class="ttdeci">void acceptStep()</div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8cpp_source.html#l00892">covarianceBase.cpp:892</a></div></div> +<div class="ttc" id="aclasscovarianceOsc_html_a5732a5abf9aa3d73f9dec5ba9d33217f"><div class="ttname"><a href="classcovarianceOsc.html#a5732a5abf9aa3d73f9dec5ba9d33217f">covarianceOsc::getPropPars</a></div><div class="ttdeci">double * getPropPars()</div><div class="ttdef"><b>Definition</b> <a href="covarianceOsc_8cpp_source.html#l00146">covarianceOsc.cpp:146</a></div></div> +<div class="ttc" id="aclasscovarianceOsc_html_abb8df24417b380af9b96763b8abc6b2e"><div class="ttname"><a href="classcovarianceOsc.html#abb8df24417b380af9b96763b8abc6b2e">covarianceOsc::proposeStep</a></div><div class="ttdeci">void proposeStep() override</div><div class="ttdef"><b>Definition</b> <a href="covarianceOsc_8cpp_source.html#l00164">covarianceOsc.cpp:164</a></div></div> +<div class="ttc" id="aclasscovarianceOsc_html_ac274d65036b6d534f8ea82023d6e3ad3"><div class="ttname"><a href="classcovarianceOsc.html#ac274d65036b6d534f8ea82023d6e3ad3">covarianceOsc::GetLikelihood</a></div><div class="ttdeci">double GetLikelihood()</div><div class="ttdef"><b>Definition</b> <a href="covarianceOsc_8cpp_source.html#l00108">covarianceOsc.cpp:108</a></div></div> +<div class="ttc" id="aclassmanager_html"><div class="ttname"><a href="classmanager.html">manager</a></div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00024">manager.h:24</a></div></div> +<div class="ttc" id="aclassmanager_html_ab3999cc856ede72b37f68bdb28bd5520"><div class="ttname"><a href="classmanager.html#ab3999cc856ede72b37f68bdb28bd5520">manager::raw</a></div><div class="ttdeci">YAML::Node const &amp; raw()</div><div class="ttdoc">Return config.</div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00037">manager.h:37</a></div></div> +<div class="ttc" id="aclassmcmc_html_a2b9a5344ea8074fcecdc1ae2f3cfc62a"><div class="ttname"><a href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">mcmc::chainLength</a></div><div class="ttdeci">unsigned int chainLength</div><div class="ttdoc">number of steps in chain</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00043">mcmc.h:43</a></div></div> +<div class="ttc" id="aclassmcmc_html_a3052c9e38107c0070c885a5a3bbbc302"><div class="ttname"><a href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">mcmc::AnnealTemp</a></div><div class="ttdeci">double AnnealTemp</div><div class="ttdoc">simulated annealing temperature</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00048">mcmc.h:48</a></div></div> +<div class="ttc" id="aclassmcmc_html_a41ce4f96a562ea3f8e750feaae4d24c4"><div class="ttname"><a href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">mcmc::stepStart</a></div><div class="ttdeci">int stepStart</div><div class="ttdoc">starting value of a chain, usually 0, unless starting from previous chain</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00051">mcmc.h:51</a></div></div> +<div class="ttc" id="aclassmcmc_html_a4da3776296d4f06268f240df5eb0bbcc"><div class="ttname"><a href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">mcmc::anneal</a></div><div class="ttdeci">bool anneal</div><div class="ttdoc">simulated annealing</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00046">mcmc.h:46</a></div></div> +<div class="ttc" id="aclassmcmc_html_a537f7c2411a6a8e65fdf57b81ce6fe4a"><div class="ttname"><a href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">mcmc::reject</a></div><div class="ttdeci">bool reject</div><div class="ttdoc">Do we reject based on hitting boundaries in systs.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00041">mcmc.h:41</a></div></div> +<div class="ttc" id="aclassmcmc_html_a56195958aee22996158d3ba341dcf31e"><div class="ttname"><a href="classmcmc.html#a56195958aee22996158d3ba341dcf31e">mcmc::mcmc</a></div><div class="ttdeci">mcmc(manager *const fitMan)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00006">mcmc.cpp:6</a></div></div> +<div class="ttc" id="aclassmcmc_html_a6685a5d7fdac30e3676d5076ea26ec92"><div class="ttname"><a href="classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92">mcmc::~mcmc</a></div><div class="ttdeci">virtual ~mcmc()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00027">mcmc.cpp:27</a></div></div> +<div class="ttc" id="aclassmcmc_html_a8a9cc0e0aa65c8573fca703a42b2ee31"><div class="ttname"><a href="classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31">mcmc::runMCMC</a></div><div class="ttdeci">void runMCMC() override</div><div class="ttdoc">Actual implementation of MCMC fitting algorithm.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00113">mcmc.cpp:113</a></div></div> +<div class="ttc" id="aclassmcmc_html_aa2f1c8aa3d951b935bbb3ec637b6b651"><div class="ttname"><a href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651">mcmc::CheckStep</a></div><div class="ttdeci">void CheckStep()</div><div class="ttdoc">Do we accept the step.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00063">mcmc.cpp:63</a></div></div> +<div class="ttc" id="aclassmcmc_html_aaf921343861cec8bb96beb2503b3fe2c"><div class="ttname"><a href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">mcmc::ProposeStep</a></div><div class="ttdeci">void ProposeStep()</div><div class="ttdoc">Propose a step.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00211">mcmc.cpp:211</a></div></div> +<div class="ttc" id="aclassmcmc_html_abdc25b836c2067136ada66e6a8b7ddc3"><div class="ttname"><a href="classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3">mcmc::ReadParsFromFile</a></div><div class="ttdeci">void ReadParsFromFile(std::string file)</div><div class="ttdoc">Load starting positions from the end of a previous chain.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00034">mcmc.cpp:34</a></div></div> +<div class="ttc" id="aclassmcmc_html_ae0eabbfc70f9bae615332caa48b3f4f4"><div class="ttname"><a href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4">mcmc::PrintProgress</a></div><div class="ttdeci">void PrintProgress()</div><div class="ttdoc">Print the progress.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00306">mcmc.cpp:306</a></div></div> +<div class="ttc" id="aclassmcmc_html_ae7e8bc73e53214c6d04dcd8531fd21f1"><div class="ttname"><a href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1">mcmc::ProcessMCMC</a></div><div class="ttdeci">void ProcessMCMC()</div><div class="ttdoc">Process MCMC output.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00161">mcmc.cpp:161</a></div></div> +<div class="ttc" id="acovarianceBase_8h_html_a949fbeb0e56580fc737cc2ccda06ccfa"><div class="ttname"><a href="covarianceBase_8h.html#a949fbeb0e56580fc737cc2ccda06ccfa">__LARGE_LOGL__</a></div><div class="ttdeci">#define __LARGE_LOGL__</div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00013">covarianceBase.h:13</a></div></div> +<div class="ttc" id="amcmc_8h_html"><div class="ttname"><a href="mcmc_8h.html">mcmc.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/mcmc_8h.html b/mcmc_8h.html new file mode 100644 index 00000000..4f4c9d19 --- /dev/null +++ b/mcmc_8h.html @@ -0,0 +1,98 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/mcmc.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">mcmc.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="FitterBase_8h_source.html">FitterBase.h</a>&quot;</code><br /> +</div> +<p><a href="mcmc_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmcmc.html">mcmc</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/mcmc_8h_source.html b/mcmc_8h_source.html new file mode 100644 index 00000000..a0264e0d --- /dev/null +++ b/mcmc_8h_source.html @@ -0,0 +1,152 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/mcmc.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">mcmc.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="mcmc_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;<a class="code" href="FitterBase_8h.html">FitterBase.h</a>&quot;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="foldopen" id="foldopen00005" data-start="{" data-end="};"> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"><a class="line" href="classmcmc.html"> 5</a></span><span class="keyword">class </span><a class="code hl_class" href="classmcmc.html">mcmc</a> : <span class="keyword">public</span> <a class="code hl_class" href="classFitterBase.html">FitterBase</a> {</div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <a class="code hl_class" href="classmcmc.html">mcmc</a>(<a class="code hl_class" href="classmanager.html">manager</a> * <span class="keyword">const</span> <a class="code hl_variable" href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">fitMan</a>);</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92">~mcmc</a>();</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31">runMCMC</a>() <span class="keyword">override</span>;</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="classmcmc.html#af549f9b0ab4276710bc0d2987ad825a9"> 16</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#af549f9b0ab4276710bc0d2987ad825a9">setChainLength</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> L) { <a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a> = L; };</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="classmcmc.html#a7129ef21a4b2abab4bf142653d558535"> 19</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#a7129ef21a4b2abab4bf142653d558535">setInitialStepNumber</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stepNum</a> = 0){<a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stepNum</a>;};</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classmcmc.html#a0446e3c1f2af2173ffd6f017fdf6f1ba"> 22</a></span> <span class="keyword">inline</span> std::string <a class="code hl_function" href="classmcmc.html#a0446e3c1f2af2173ffd6f017fdf6f1ba">GetName</a>()<span class="keyword">const </span>{<span class="keywordflow">return</span> <span class="stringliteral">&quot;MCMC&quot;</span>;};</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">private</span>:</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1">ProcessMCMC</a>();</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">ProposeStep</a>();</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651">CheckStep</a>();</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4">PrintProgress</a>();</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3">ReadParsFromFile</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a"> 41</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">reject</a>;</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a"> 43</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">chainLength</a>;</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc"> 46</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">anneal</a>;</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302"> 48</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">AnnealTemp</a>;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4"> 51</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">stepStart</a>;</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>};</div> +</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div> +<div class="ttc" id="aFitterBase_8h_html"><div class="ttname"><a href="FitterBase_8h.html">FitterBase.h</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassFitterBase_html"><div class="ttname"><a href="classFitterBase.html">FitterBase</a></div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00019">FitterBase.h:19</a></div></div> +<div class="ttc" id="aclassFitterBase_html_a4fceb68f242feeb04a0ddf42a5a37095"><div class="ttname"><a href="classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095">FitterBase::fitMan</a></div><div class="ttdeci">manager * fitMan</div><div class="ttdoc">The manager.</div><div class="ttdef"><b>Definition</b> <a href="FitterBase_8h_source.html#l00068">FitterBase.h:68</a></div></div> +<div class="ttc" id="aclassmanager_html"><div class="ttname"><a href="classmanager.html">manager</a></div><div class="ttdef"><b>Definition</b> <a href="manager_8h_source.html#l00024">manager.h:24</a></div></div> +<div class="ttc" id="aclassmcmc_html"><div class="ttname"><a href="classmcmc.html">mcmc</a></div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00005">mcmc.h:5</a></div></div> +<div class="ttc" id="aclassmcmc_html_a0446e3c1f2af2173ffd6f017fdf6f1ba"><div class="ttname"><a href="classmcmc.html#a0446e3c1f2af2173ffd6f017fdf6f1ba">mcmc::GetName</a></div><div class="ttdeci">std::string GetName() const</div><div class="ttdoc">Get name of class.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00022">mcmc.h:22</a></div></div> +<div class="ttc" id="aclassmcmc_html_a2b9a5344ea8074fcecdc1ae2f3cfc62a"><div class="ttname"><a href="classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a">mcmc::chainLength</a></div><div class="ttdeci">unsigned int chainLength</div><div class="ttdoc">number of steps in chain</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00043">mcmc.h:43</a></div></div> +<div class="ttc" id="aclassmcmc_html_a3052c9e38107c0070c885a5a3bbbc302"><div class="ttname"><a href="classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302">mcmc::AnnealTemp</a></div><div class="ttdeci">double AnnealTemp</div><div class="ttdoc">simulated annealing temperature</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00048">mcmc.h:48</a></div></div> +<div class="ttc" id="aclassmcmc_html_a41ce4f96a562ea3f8e750feaae4d24c4"><div class="ttname"><a href="classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4">mcmc::stepStart</a></div><div class="ttdeci">int stepStart</div><div class="ttdoc">starting value of a chain, usually 0, unless starting from previous chain</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00051">mcmc.h:51</a></div></div> +<div class="ttc" id="aclassmcmc_html_a4da3776296d4f06268f240df5eb0bbcc"><div class="ttname"><a href="classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc">mcmc::anneal</a></div><div class="ttdeci">bool anneal</div><div class="ttdoc">simulated annealing</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00046">mcmc.h:46</a></div></div> +<div class="ttc" id="aclassmcmc_html_a537f7c2411a6a8e65fdf57b81ce6fe4a"><div class="ttname"><a href="classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a">mcmc::reject</a></div><div class="ttdeci">bool reject</div><div class="ttdoc">Do we reject based on hitting boundaries in systs.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00041">mcmc.h:41</a></div></div> +<div class="ttc" id="aclassmcmc_html_a6685a5d7fdac30e3676d5076ea26ec92"><div class="ttname"><a href="classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92">mcmc::~mcmc</a></div><div class="ttdeci">virtual ~mcmc()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00027">mcmc.cpp:27</a></div></div> +<div class="ttc" id="aclassmcmc_html_a7129ef21a4b2abab4bf142653d558535"><div class="ttname"><a href="classmcmc.html#a7129ef21a4b2abab4bf142653d558535">mcmc::setInitialStepNumber</a></div><div class="ttdeci">void setInitialStepNumber(const unsigned int stepNum=0)</div><div class="ttdoc">Set initial step number, used when starting from another chain.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00019">mcmc.h:19</a></div></div> +<div class="ttc" id="aclassmcmc_html_a8a9cc0e0aa65c8573fca703a42b2ee31"><div class="ttname"><a href="classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31">mcmc::runMCMC</a></div><div class="ttdeci">void runMCMC() override</div><div class="ttdoc">Actual implementation of MCMC fitting algorithm.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00113">mcmc.cpp:113</a></div></div> +<div class="ttc" id="aclassmcmc_html_aa2f1c8aa3d951b935bbb3ec637b6b651"><div class="ttname"><a href="classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651">mcmc::CheckStep</a></div><div class="ttdeci">void CheckStep()</div><div class="ttdoc">Do we accept the step.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00063">mcmc.cpp:63</a></div></div> +<div class="ttc" id="aclassmcmc_html_aaf921343861cec8bb96beb2503b3fe2c"><div class="ttname"><a href="classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c">mcmc::ProposeStep</a></div><div class="ttdeci">void ProposeStep()</div><div class="ttdoc">Propose a step.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00211">mcmc.cpp:211</a></div></div> +<div class="ttc" id="aclassmcmc_html_abdc25b836c2067136ada66e6a8b7ddc3"><div class="ttname"><a href="classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3">mcmc::ReadParsFromFile</a></div><div class="ttdeci">void ReadParsFromFile(std::string file)</div><div class="ttdoc">Load starting positions from the end of a previous chain.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00034">mcmc.cpp:34</a></div></div> +<div class="ttc" id="aclassmcmc_html_ae0eabbfc70f9bae615332caa48b3f4f4"><div class="ttname"><a href="classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4">mcmc::PrintProgress</a></div><div class="ttdeci">void PrintProgress()</div><div class="ttdoc">Print the progress.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00306">mcmc.cpp:306</a></div></div> +<div class="ttc" id="aclassmcmc_html_ae7e8bc73e53214c6d04dcd8531fd21f1"><div class="ttname"><a href="classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1">mcmc::ProcessMCMC</a></div><div class="ttdeci">void ProcessMCMC()</div><div class="ttdoc">Process MCMC output.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8cpp_source.html#l00161">mcmc.cpp:161</a></div></div> +<div class="ttc" id="aclassmcmc_html_af549f9b0ab4276710bc0d2987ad825a9"><div class="ttname"><a href="classmcmc.html#af549f9b0ab4276710bc0d2987ad825a9">mcmc::setChainLength</a></div><div class="ttdeci">void setChainLength(unsigned int L)</div><div class="ttdoc">Set how long chain should be.</div><div class="ttdef"><b>Definition</b> <a href="mcmc_8h_source.html#l00016">mcmc.h:16</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/md__2github_2workspace_2CONTRIBUTING.html b/md__2github_2workspace_2CONTRIBUTING.html new file mode 100644 index 00000000..0d725627 --- /dev/null +++ b/md__2github_2workspace_2CONTRIBUTING.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: How to Contribute Code to MaCh3</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div><div class="header"> + <div class="headertitle"><div class="title">How to Contribute Code to MaCh3</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><p><a class="anchor" id="autotoc_md1"></a>The gitflow development policy should be followed, with the master and develop branches only being committed to via pull request.</p> +<p>New features should be developed on branches in this repository with the branch naming: <code>feature_FEATURENAME</code></p> +<p>Please see <a href="https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow">here</a> for more details</p> +<h1><a class="anchor" id="autotoc_md2"></a> +Doxygen</h1> +<p>When making comments try following Doxygen type of comments</p> +<div class="fragment"><div class="line">// I like comments</div> +<div class="line">void Foo(){}</div> +</div><!-- fragment --><p> try </p><div class="fragment"><div class="line">/// @brief I like comments</div> +<div class="line">void Foo(){}</div> +</div><!-- fragment --><p> After making release or tag please </p><div class="fragment"><div class="line">cd Doc</div> +<div class="line">doxygen Doxyfile</div> +</div><!-- fragment --><p> to produce both html and latex file. To produce book like pdf file: </p><div class="fragment"><div class="line">cd latex</div> +<div class="line">pdflatex refman.tex</div> +</div><!-- fragment --><h1><a class="anchor" id="autotoc_md3"></a> +Formatting</h1> +<p>To ensure a unified style in MaCh3 software you can use a clang-format file which has instructions about formatting code. </p><div class="fragment"><div class="line">clang-format --assume-filename=/path/to/your/.clang-format=${MaCh3_ROOT}/../.clang-format blarb.cpp</div> +</div><!-- fragment --><p> Please see <a href="https://clang.llvm.org/docs/ClangFormat.html">here</a> and <a href="https://root.cern/contribute/coding_conventions/">here</a> for more details.</p> +<h1><a class="anchor" id="autotoc_md4"></a> +Logger</h1> +<p>MaCh3 is using spdlog logger see <a href="https://github.com/gabime/spdlog/tree/master">here</a>. And wraps it around MaCh3 names <a href="https://github.com/mach3-software/MaCh3/blob/develop/manager/MaCh3Logger.h">here</a> It is advised to use it. For example rather than </p><div class="fragment"><div class="line">std::cout&lt;&lt; &quot; Error: Something is wrong&quot; &lt;&lt;std::endl;</div> +</div><!-- fragment --><p> it is advised to used logger </p><div class="fragment"><div class="line">MACH3LOG_ERROR(&quot;Something is wrong&quot;);</div> +</div><!-- fragment --><p> To pass argument to logger use following syntax: </p><div class="fragment"><div class="line">MACH3LOG_INFO(&quot;I like {}, do you like {}&quot;, FirsString, SecondString);</div> +</div><!-- fragment --><p> Logger by default will print whole float. Normally to show only several significant figures you would use <code>std::precision(2)</code>. To obtain same thing with logger please use <code>{:.2f}</code> like this: </p><div class="fragment"><div class="line">MACH3LOG_INFO(&quot;Here is full LLH but I only show 2 significant figures {:.2f}&quot;, LLH);</div> +</div><!-- fragment --> </div></div><!-- contents --> +</div><!-- PageDoc --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/md__2github_2workspace_2README.html b/md__2github_2workspace_2README.html new file mode 100644 index 00000000..ca0d75d1 --- /dev/null +++ b/md__2github_2workspace_2README.html @@ -0,0 +1,227 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div><div class="header"> + <div class="headertitle"><div class="title">MaCh3 &lt;img src="Doc/mach3logo.png" alt="MaCh3" align="center" width="100"/&gt;</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><p><a class="anchor" id="autotoc_md5"></a>The Markov Chain 3 flavour is a framework born in 2013 as a Bayesian MCMC fitter for <a href="https://t2k-experiment.org/pl/">T2K</a> oscillation analysis. It has now been used for multiple T2K Oscillation analyses both at the Near and Far detectors throughout the years and is also used by the DUNE and HK oscillation analysis groups as well as for joint fits between T2K and NOvA and T2K and SK's atmospheric data.</p> +<p>The framework has also evolved to allow non MCMC modules to interrogate the likelihoods implemented.</p> +<p><a href="https://github.com/mach3-software/MaCh3/blob/develop/LICENSE.txt"><img src="https://img.shields.io/badge/License-BSD_3--Clause-blue.svg" alt="License" style="pointer-events: none;" class="inline"/></a> <a href="https://github.com/mach3-software/MaCh3/releases"><img src="https://img.shields.io/badge/Relase-v1.0.0-2ea44f" alt="Relase - v1.0.0" class="inline"/></a> <a href="https://github.com/mach3-software/MaCh3/wiki"><img src="https://img.shields.io/badge/Code-Documented-2ea44f" alt="Code - Documented" class="inline"/></a> </p> +<h1><a class="anchor" id="autotoc_md6"></a> +Famous Plots</h1> +<p>TODO this should be expanded</p> +<p><img src="Doc/Plots/delta.png" alt="MaCh3" align="left" width="200" class="inline"/> <img src="Doc/Plots/Jarlskog.png" alt="MaCh3" align="center" width="200" class="inline"/></p> +<h1><a class="anchor" id="autotoc_md7"></a> +Cite</h1> +<p>When citing MaCh3, please use <a href="https://zenodo.org/records/10949376">on Zenodo</a> <a href="https://doi.org/10.5281/zenodo.10949376"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.10949376.svg" alt="DOI" style="pointer-events: none;" class="inline"/></a>.</p> +<h1><a class="anchor" id="autotoc_md8"></a> +How to Compile</h1> +<p>MaCh3 follows standard cmake pattern. By default you should get most optimal build setting although below we list many configurable options: </p><div class="fragment"><div class="line">mkdir build;</div> +<div class="line">cd build;</div> +<div class="line">cmake ../</div> +<div class="line">make -jN [set number of threads]</div> +<div class="line">make install</div> +</div><!-- fragment --><p>Don't forget to: </p><div class="fragment"><div class="line">source bin/setup.MaCh3.sh</div> +</div><!-- fragment --> <h2><a class="anchor" id="autotoc_md9"></a> +Building against MaCh3</h2> +<p>If you compiled MaCh3 and sourced it you can simply call </p><div class="fragment"><div class="line">find_package(MaCh3)</div> +</div><!-- fragment --><p> and cmake will find it. Alternatively, you can use CPM, for example: </p><div class="fragment"><div class="line">CPMFindPackage(</div> +<div class="line"> NAME MaCh3</div> +<div class="line"> GIT_TAG &quot;blarb&quot;</div> +<div class="line"> GITHUB_REPOSITORY mach3-software/MaCh3</div> +<div class="line">)</div> +</div><!-- fragment --><p> Once you found MaCh3 you might want to link your library against MaCh3. You can do this as follows: </p><div class="fragment"><div class="line">target_link_libraries(blarb MaCh3::All)</div> +</div><!-- fragment --><p>Some functionalities rely on setting <code>Env{MACH3}</code> which should point to path experiment specific MaCh3. This way MaCh3 can easily find <code>Env{MACH3}/inputs/SomeInput.root</code> for example.</p> +<h2><a class="anchor" id="autotoc_md10"></a> +Multithreading</h2> +<p>MaCh3 quite heavily relies on Multithreading, it is turned on by default. If for debugging purposes you would like to turn it off please use</p> +<div class="fragment"><div class="line">cmake ../ [-DMaCh3_MULTITHREAD_ENABLED=&lt;OFF&gt;]</div> +</div><!-- fragment --><h2><a class="anchor" id="autotoc_md11"></a> +CUDA</h2> +<p>If the system has access to GPU, MaCh3 will enable GPU functionality automatically. If you would like to CPU only despite having access to CUDA </p><div class="fragment"><div class="line">mkdir build; cd build;</div> +<div class="line">cmake ../ [-USE_CPU=ON]</div> +</div><!-- fragment --><p> MaCh3 supports quite a high range of CUDA architectures if something doesn't work on your GPU let us know. MaCh3 supports only NVIDIA GPUs.</p> +<h2><a class="anchor" id="autotoc_md12"></a> +Oscillator</h2> +<p>MaCh3 uses several neutrino oscillation calculators. By default, CUDAProb3 is used. If you would like to use Prob3++</p> +<div class="fragment"><div class="line">cmake ../ [-DUSE_PROB3=&lt;ON,OFF&gt;]</div> +</div><!-- fragment --><p> Following neutrino oscillation calculators are available:</p> +<table class="markdownTable"> +<tr class="markdownTableHead"> +<th class="markdownTableHeadNone"><a class="el" href="classOscillator.html">Oscillator</a> </th><th class="markdownTableHeadNone">Hardware </th><th class="markdownTableHeadNone">Source </th></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyNone">CUDAProb3 </td><td class="markdownTableBodyNone">CPU/GPU </td><td class="markdownTableBodyNone">Beam/Atm </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyNone">Prob3++ </td><td class="markdownTableBodyNone">CPU </td><td class="markdownTableBodyNone">Beam </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyNone">probGPU </td><td class="markdownTableBodyNone">GPU </td><td class="markdownTableBodyNone">Beam </td></tr> +</table> +<h2><a class="anchor" id="autotoc_md13"></a> +Fitting algorithms</h2> +<p>The following fitting algorithms are available:</p> +<table class="markdownTable"> +<tr class="markdownTableHead"> +<th class="markdownTableHeadNone">Algorithm </th><th class="markdownTableHeadNone">Need Ext Library </th></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyNone">MR2T2 </td><td class="markdownTableBodyNone">No </td></tr> +<tr class="markdownTableRowEven"> +<td class="markdownTableBodyNone">MINUIT2 </td><td class="markdownTableBodyNone">Yes </td></tr> +<tr class="markdownTableRowOdd"> +<td class="markdownTableBodyNone"><a class="el" href="classPSO.html">PSO</a> </td><td class="markdownTableBodyNone">No </td></tr> +</table> +<h2><a class="anchor" id="autotoc_md14"></a> +Debug</h2> +<p>Several debugging options are available which are heavy for RAM and performance and, therefore not used by default. To enable it: </p><div class="fragment"><div class="line">cmake ../ [-DMaCh3_DEBUG_ENABLED=&lt;ON,OFF&gt;]</div> +</div><!-- fragment --><p> There are several debug modes, to enable more detailed but very heavy specific debug levels. Level 1 is the default debug activated by the above.</p> +<div class="fragment"><div class="line">cmake ../ [-DMaCh3_DEBUG_ENABLED=&lt;ON,OFF&gt;] [-DDEBUG_LEVEL=&lt;1,2,3&gt;]</div> +</div><!-- fragment --> <h2><a class="anchor" id="autotoc_md15"></a> +System Requirements</h2> +<p>Most of external libraries are being handled through CPM. The only external library that is not being handled through CPM and is required is <a href="https://root.cern/">ROOT</a>. Currently used external dependencies include:</p> +<ol type="1"> +<li><a href="https://github.com/jbeder/yaml-cpp">yaml-cpp</a></li> +<li><a href="https://github.com/gabime/spdlog">spdlog</a></li> +</ol> +<p>Based on several test here are recommended version: </p><div class="fragment"><div class="line">GCC: ...</div> +<div class="line">CMake: &gt;= 3.14</div> +<div class="line">ROOT: ...</div> +</div><!-- fragment --><h1><a class="anchor" id="autotoc_md16"></a> +How To Use</h1> +<p>This is an example how your executable can look like using MaCh3: </p><div class="fragment"><div class="line">manager *fitMan = nullptr; //Manager is responsible for reading from config</div> +<div class="line"> </div> +<div class="line">std::vector&lt;samplePDFBase*&gt; sample; //vector storing information about sample for different detector</div> +<div class="line">std::vector&lt;covarianceBase*&gt; Cov; // vector with systematic implementation</div> +<div class="line">mcmc *markovChain = nullptr; // MCMC class, can be replaced with other fitting method</div> +<div class="line">MakeMaCh3Instance(fitMan, sample, Cov, markovChain); //Factory like function which initialises everything</div> +<div class="line"> </div> +<div class="line">//Adding samples and covariances to the Fitter class could be in the factory</div> +<div class="line">for(unsigned int i = 0; sample.size(); i++)</div> +<div class="line"> markovChain-&gt;addSamplePDF(sample[i]);</div> +<div class="line">for(unsigned int i = 0; Cov.size(); i++)</div> +<div class="line"> markovChain-&gt;addSystObj(Cov[i]);</div> +<div class="line"> </div> +<div class="line">markovChain-&gt;RunLLHScan(); // can run LLH scan</div> +<div class="line">markovChain-&gt;runMCMC(); //or run actual fit</div> +</div><!-- fragment --><h2><a class="anchor" id="autotoc_md17"></a> +Help and Guidelines</h2> +<ul> +<li><a href="https://github.com/mach3-software/MaCh3/blob/develop/CONTRIBUTING.md">How to contribute</a></li> +<li><a href="https://github.com/mach3-software/MaCh3/wiki">Wiki</a></li> +<li><a href="https://www.jiscmail.ac.uk/cgi-bin/webadmin?A0=MACH3">Mailing lists</a></li> +<li><a href="https://t2k-experiment.slack.com/archives/C06EM0C6D7W/p1705599931356889">Slack</a></li> +</ul> +<h3><a class="anchor" id="autotoc_md18"></a> +Plotting and Diagnostic</h3> +<p>Example of chain diagnostic utils can be found <a href="https://github.com/mach3-software/MaCh3/tree/develop/Diagnostics">here</a> with example of config. Currently available utils include:</p> +<p><b>ProcessMCMC</b> - The main app you want to use for analysing the ND280 chain. It prints posterior distribution after burn-in the cut. Moreover, you can compare two/three different chains. There are a few options you can modify easily inside the app like selection, burn-in cut, and whether to plot xse+flux or only flux. Other functionality </p><ol> +<li> +Produce a covariance matrix with multithreading (which requires lots of RAM due to caching) </li> +<li> +Violin plots </li> +<li> +Credible intervals and regions </li> +<li> +Calculate Bayes factor and give significance based on Jeffreys scale </li> +<li> +Produce triangle plots </li> +<li> +Study covariance matrix stability </li> +</ol> +<p><b>GetPostfitParamPlots</b> - This will plot output from ProcessMCMC for nice plots which can go to TN. Bits are hardcoded to make plots nicer users should be careful when using the non-conventional xsec model. If you used <code>ProcessMCMC</code> with <code>PlotDet</code> you will also get an overlay of detector parameters (ND or ND+FD depending on chain type). If Violin plot was produced in <code>ProcessMCMC</code> you will get fancy plots here as well.</p> +<p><b>GetPenaltyTerm</b> - Since xsec and flux and ND spline systeamatic are treated as the same systematic object we cannot just take log_xsec, hence we need this script, use <code>GetFluxPenaltyTerm MCMCChain.root config</code>. Parameters of relevance are loaded via config, thus you can study any combination you want. Time needed increases with number of sets :(</p> +<p><b>DiagMCMC</b> - Perform MCMC diagnostic like autocorrelation or trace plots.</p> +<p><b>RHat</b> - Performs RHat diagnostic to study if all used chains converged to the same stationary distribution. </p><div class="fragment"><div class="line">./RHat Ntoys MCMCchain_1.root MCMCchain_2.root MCMCchain_3.root ... [how many you like]</div> +</div><!-- fragment --><p><b>PlotLLH</b> - Plot LLH scans, flexible and configurable in command line. can take any number of LLH scans as input, will use the first one as a baseline when making e.g. ratio plots. The first file must be a MaCh3 scan. options: </p><pre class="fragment">-r overlay ratio plots + +-s also make plots split by sample contribution, to use this option, the LLH scan must have been run with the option `LLH_SCAN_BY_SAMPLE = true` in the config file + +-g draw a grid on the plots + +-l a string specifying the labels for each scan to plot in the legent. this should be a string of labels separated by semi colons, e.g.: -`l "label1;label2;label3"` + +-o the name of the output pdf + +-d a string specifying additional drawing options to pass to the histogram draw calls, e.g. `-d "C"` will plot smooth curves through the histogram bins. See https://root.cern/doc/master/classTHistPainter.html#HP01a for possible options. +</pre><p><b>CombineMaCh3Chains</b> - will combine chains files produced by <b>MCMC</b>, enforcing the condition that all the files to combine were made using the exact same software versions and config files </p><div class="fragment"><div class="line">CombineMaCh3Chains [-h] [-c [0-9]] [-f] [-o &lt;output file&gt;] file1.root [file2.root, file3.root ...]</div> +</div><!-- fragment --><p> <em>fileX.root</em> are the individual spline files to combine, can specify any number, need at least one</p> +<p>-c target compression level for the combined file, default is 1, in line with hadd</p> +<p>-f force overwrite of the combined file if it exists already</p> +<p>-h print usage message and exit</p> +<p><em>Output file</em> (optional) name of the combined file. If not specified, will just use <em>file1.root</em>, the first in the list of files, same as <em>hadd</em>. </p> +</div></div><!-- contents --> +</div><!-- PageDoc --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..b0b26936 --- /dev/null +++ b/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='<ul>'; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='<li><a href="'+url+'">'+ + data.children[i].text+'</a>'+ + makeTree(data.children[i],relPath)+'</li>'; + } + result+='</ul>'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+ + '<div class="left">'+ + '<form id="FSearchBox" action="'+relPath+searchPage+ + '" method="get"><span id="MSearchSelectExt">&#160;</span>'+ + '<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+ + '" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+ + ' onblur="searchBox.OnSearchFieldFocus(false)"/>'+ + '</form>'+ + '</div>'+ + '<div class="right"></div>'+ + '</div>'; + } else { + searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+ + '<span class="left">'+ + '<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+ + ' onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>'+ + '<input type="text" id="MSearchField" value="" placeholder="'+search+ + '" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+ + 'onblur="searchBox.OnSearchFieldFocus(false)" '+ + 'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+ + '</span>'+ + '<span class="right"><a id="MSearchClose" '+ + 'href="javascript:searchBox.CloseResultsWindow()">'+ + '<img id="MSearchCloseImg" border="0" src="'+relPath+ + 'search/close.svg" alt=""/></a>'+ + '</span>'+ + '</div>'; + } + } + + $('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+ + '<label class="main-menu-btn" for="main-menu-state">'+ + '<span class="main-menu-btn-icon"></span> '+ + 'Toggle main menu visibility</label>'+ + '<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+ + '</div>'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>'); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..a9cab88f --- /dev/null +++ b/menudata.js @@ -0,0 +1,180 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions_a.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"x",url:"functions_x.html#index_x"}, +{text:"y",url:"functions_y.html#index_y"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"x",url:"functions_func_x.html#index_x"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"_",url:"functions_vars.html#index__5F"}, +{text:"a",url:"functions_vars_a.html#index_a"}, +{text:"b",url:"functions_vars_b.html#index_b"}, +{text:"c",url:"functions_vars_c.html#index_c"}, +{text:"d",url:"functions_vars_d.html#index_d"}, +{text:"e",url:"functions_vars_e.html#index_e"}, +{text:"f",url:"functions_vars_f.html#index_f"}, +{text:"g",url:"functions_vars_g.html#index_g"}, +{text:"h",url:"functions_vars_h.html#index_h"}, +{text:"i",url:"functions_vars_i.html#index_i"}, +{text:"k",url:"functions_vars_k.html#index_k"}, +{text:"l",url:"functions_vars_l.html#index_l"}, +{text:"m",url:"functions_vars_m.html#index_m"}, +{text:"n",url:"functions_vars_n.html#index_n"}, +{text:"o",url:"functions_vars_o.html#index_o"}, +{text:"p",url:"functions_vars_p.html#index_p"}, +{text:"r",url:"functions_vars_r.html#index_r"}, +{text:"s",url:"functions_vars_s.html#index_s"}, +{text:"t",url:"functions_vars_t.html#index_t"}, +{text:"u",url:"functions_vars_u.html#index_u"}, +{text:"v",url:"functions_vars_v.html#index_v"}, +{text:"w",url:"functions_vars_w.html#index_w"}, +{text:"x",url:"functions_vars_x.html#index_x"}, +{text:"y",url:"functions_vars_y.html#index_y"}]}, +{text:"Enumerations",url:"functions_enum.html"}, +{text:"Enumerator",url:"functions_eval.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"b",url:"globals_b.html#index_b"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"d",url:"globals_d.html#index_d"}, +{text:"e",url:"globals_e.html#index_e"}, +{text:"f",url:"globals_f.html#index_f"}, +{text:"g",url:"globals_g.html#index_g"}, +{text:"i",url:"globals_i.html#index_i"}, +{text:"k",url:"globals_k.html#index_k"}, +{text:"l",url:"globals_l.html#index_l"}, +{text:"m",url:"globals_m.html#index_m"}, +{text:"n",url:"globals_n.html#index_n"}, +{text:"o",url:"globals_o.html#index_o"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"t",url:"globals_t.html#index_t"}, +{text:"u",url:"globals_u.html#index_u"}, +{text:"v",url:"globals_v.html#index_v"}, +{text:"x",url:"globals_x.html#index_x"}, +{text:"y",url:"globals_y.html#index_y"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"c",url:"globals_func.html#index_c"}, +{text:"d",url:"globals_func.html#index_d"}, +{text:"f",url:"globals_func.html#index_f"}, +{text:"g",url:"globals_func.html#index_g"}, +{text:"i",url:"globals_func.html#index_i"}, +{text:"k",url:"globals_func.html#index_k"}, +{text:"m",url:"globals_func.html#index_m"}, +{text:"n",url:"globals_func.html#index_n"}, +{text:"o",url:"globals_func.html#index_o"}, +{text:"p",url:"globals_func.html#index_p"}, +{text:"r",url:"globals_func.html#index_r"}, +{text:"s",url:"globals_func.html#index_s"}, +{text:"t",url:"globals_func.html#index_t"}, +{text:"u",url:"globals_func.html#index_u"}, +{text:"y",url:"globals_func.html#index_y"}]}, +{text:"Variables",url:"globals_vars.html",children:[ +{text:"b",url:"globals_vars.html#index_b"}, +{text:"c",url:"globals_vars.html#index_c"}, +{text:"d",url:"globals_vars.html#index_d"}, +{text:"e",url:"globals_vars.html#index_e"}, +{text:"f",url:"globals_vars.html#index_f"}, +{text:"i",url:"globals_vars.html#index_i"}, +{text:"l",url:"globals_vars.html#index_l"}, +{text:"m",url:"globals_vars.html#index_m"}, +{text:"n",url:"globals_vars.html#index_n"}, +{text:"o",url:"globals_vars.html#index_o"}, +{text:"p",url:"globals_vars.html#index_p"}, +{text:"r",url:"globals_vars.html#index_r"}, +{text:"s",url:"globals_vars.html#index_s"}, +{text:"t",url:"globals_vars.html#index_t"}, +{text:"v",url:"globals_vars.html#index_v"}, +{text:"x",url:"globals_vars.html#index_x"}, +{text:"y",url:"globals_vars.html#index_y"}]}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"e",url:"globals_eval.html#index_e"}, +{text:"k",url:"globals_eval.html#index_k"}, +{text:"m",url:"globals_eval.html#index_m"}, +{text:"t",url:"globals_eval.html#index_t"}]}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + </g> +</svg> diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + </g> +</svg> diff --git a/namespaceMaCh3Utils.html b/namespaceMaCh3Utils.html new file mode 100644 index 00000000..e857bbea --- /dev/null +++ b/namespaceMaCh3Utils.html @@ -0,0 +1,883 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: MaCh3Utils Namespace Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#func-members">Functions</a> &#124; +<a href="#var-members">Variables</a> </div> + <div class="headertitle"><div class="title">MaCh3Utils Namespace Reference</div></div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> +Functions</h2></td></tr> +<tr class="memitem:ac6f4a3b6a7749967ff9a011469352f6c" id="r_ac6f4a3b6a7749967ff9a011469352f6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c">MaCh3Welcome</a> ()</td></tr> +<tr class="memdesc:ac6f4a3b6a7749967ff9a011469352f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">KS: Prints welcome message with MaCh3 logo. <br /></td></tr> +<tr class="separator:ac6f4a3b6a7749967ff9a011469352f6c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8a55fb4e064bedc9b679c5da048ce2bf" id="r_a8a55fb4e064bedc9b679c5da048ce2bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf">GetCPUInfo</a> ()</td></tr> +<tr class="separator:a8a55fb4e064bedc9b679c5da048ce2bf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b97c309891603fece844f2579f30928" id="r_a9b97c309891603fece844f2579f30928"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928">GetGPUInfo</a> ()</td></tr> +<tr class="separator:a9b97c309891603fece844f2579f30928"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeed4ea9cad38e64fc3bae7590373d42c" id="r_aeed4ea9cad38e64fc3bae7590373d42c"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">char</a> *<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cmd</a>)</td></tr> +<tr class="separator:aeed4ea9cad38e64fc3bae7590373d42c"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4203d9c1f43730103d429f1d6497b843" id="r_a4203d9c1f43730103d429f1d6497b843"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a4203d9c1f43730103d429f1d6497b843">EstimateDataTransferRate</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TChain</a> *<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">chain</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">entry</a>)</td></tr> +<tr class="separator:a4203d9c1f43730103d429f1d6497b843"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5b63b3185a04cff2ea94e18e1831ce9e" id="r_a5b63b3185a04cff2ea94e18e1831ce9e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a5b63b3185a04cff2ea94e18e1831ce9e">PrintProgressBar</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Done</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">All</a>)</td></tr> +<tr class="separator:a5b63b3185a04cff2ea94e18e1831ce9e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a417b0bad440b7f273ca404ff25dd86a2" id="r_a417b0bad440b7f273ca404ff25dd86a2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a417b0bad440b7f273ca404ff25dd86a2">getValue</a> (std::string <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Type</a>)</td></tr> +<tr class="separator:a417b0bad440b7f273ca404ff25dd86a2"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af06aa84306b4d4692f30e63d08180c83" id="r_af06aa84306b4d4692f30e63d08180c83"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">parseLine</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> std::string &amp;<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>)</td></tr> +<tr class="separator:af06aa84306b4d4692f30e63d08180c83"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a86d34372bb55524024fbdadd65834967" id="r_a86d34372bb55524024fbdadd65834967"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a86d34372bb55524024fbdadd65834967">GetMassFromPDG</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PDG</a>)</td></tr> +<tr class="separator:a86d34372bb55524024fbdadd65834967"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad70f340fe7d2128586d54797f6501514" id="r_ad70f340fe7d2128586d54797f6501514"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#ad70f340fe7d2128586d54797f6501514">KnownDetIDsMap</a> ({ {0, 1}, {1, 8}, {2, 16}, {3, 32}, {4, 64}, {5, 128}, {6, 256}, {7, 512}, })</td></tr> +<tr class="separator:ad70f340fe7d2128586d54797f6501514"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a5aff908b9241c673e8d05403996e2229" id="r_a5aff908b9241c673e8d05403996e2229"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a5aff908b9241c673e8d05403996e2229">GetNThreads</a> ()</td></tr> +<tr class="separator:a5aff908b9241c673e8d05403996e2229"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9b4fef8344d315068805fab0875ee486" id="r_a9b4fef8344d315068805fab0875ee486"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a9b4fef8344d315068805fab0875ee486">TMatrixIntoTH2D</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrix</a> &amp;<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>, std::string <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">title</a>)</td></tr> +<tr class="separator:a9b4fef8344d315068805fab0875ee486"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac4d63087b4dc0c0a0e49d375ece4cb00" id="r_ac4d63087b4dc0c0a0e49d375ece4cb00"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MatrixMult</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>)</td></tr> +<tr class="separator:ac4d63087b4dc0c0a0e49d375ece4cb00"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af03aca63ae363cb51c7033e8e91ade6d" id="r_af03aca63ae363cb51c7033e8e91ade6d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#af03aca63ae363cb51c7033e8e91ade6d">MatrixMult</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>)</td></tr> +<tr class="separator:af03aca63ae363cb51c7033e8e91ade6d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0cd7bf76aca73a1e36519b04e19dd6c0" id="r_a0cd7bf76aca73a1e36519b04e19dd6c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a0cd7bf76aca73a1e36519b04e19dd6c0">MatrixMult</a> (<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>)</td></tr> +<tr class="separator:a0cd7bf76aca73a1e36519b04e19dd6c0"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a> +Variables</h2></td></tr> +<tr class="memitem:a24bdf4d0354265aecdd2b7e357a3c64b" id="r_a24bdf4d0354265aecdd2b7e357a3c64b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#a24bdf4d0354265aecdd2b7e357a3c64b">nKnownDetIDs</a> = KnownDetIDsMap.size()</td></tr> +<tr class="separator:a24bdf4d0354265aecdd2b7e357a3c64b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab58c07d7176a31b58fe4c1fb0c81fd10" id="r_ab58c07d7176a31b58fe4c1fb0c81fd10"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceMaCh3Utils.html#ab58c07d7176a31b58fe4c1fb0c81fd10">KnownDetIDsMap</a></td></tr> +<tr class="separator:ab58c07d7176a31b58fe4c1fb0c81fd10"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Function Documentation</h2> +<a id="a4203d9c1f43730103d429f1d6497b843" name="a4203d9c1f43730103d429f1d6497b843"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4203d9c1f43730103d429f1d6497b843">&#9670;&#160;</a></span>EstimateDataTransferRate()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a> MaCh3Utils::EstimateDataTransferRate </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TChain</a> *&#160;</td> + <td class="paramname"><em>chain</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>entry</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00114">114</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 114</span> {</div> +<div class="line"><span class="lineno"> 115</span><span class="comment">// ************************</span></div> +<div class="line"><span class="lineno"> 116</span> </div> +<div class="line"><span class="lineno"> 117</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TStopwatch</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timer</a>;</div> +<div class="line"><span class="lineno"> 118</span> </div> +<div class="line"><span class="lineno"> 119</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timer</a>.Start();</div> +<div class="line"><span class="lineno"> 120</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Int_t</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bytesProcessed</a>{ <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">chain</a>-&gt;GetEntry(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">entry</a>) };</div> +<div class="line"><span class="lineno"> 121</span> </div> +<div class="line"><span class="lineno"> 122</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timer</a>.Stop();</div> +<div class="line"><span class="lineno"> 123</span> </div> +<div class="line"><span class="lineno"> 124</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Double_t</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timeInSeconds</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timer</a>.RealTime();</div> +<div class="line"><span class="lineno"> 125</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Double_t</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dataRateMBps</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bytesProcessed</a>) / (1024.0 * 1024.0)) / <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">timeInSeconds</a>;</div> +<div class="line"><span class="lineno"> 126</span> </div> +<div class="line"><span class="lineno"> 127</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Data transfer: {} B, rate: {:.2f} MB/s&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bytesProcessed</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dataRateMBps</a>);</div> +<div class="line"><span class="lineno"> 128</span>}</div> +<div class="ttc" id="aMaCh3Logger_8h_html_a95fa4dffc648e4c5536c9292c2bdcac3"><div class="ttname"><a href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a></div><div class="ttdeci">#define MACH3LOG_INFO</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00009">MaCh3Logger.h:9</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a8a55fb4e064bedc9b679c5da048ce2bf" name="a8a55fb4e064bedc9b679c5da048ce2bf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8a55fb4e064bedc9b679c5da048ce2bf">&#9670;&#160;</a></span>GetCPUInfo()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a> MaCh3Utils::GetCPUInfo </td> + <td>(</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00053">53</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 53</span> {</div> +<div class="line"><span class="lineno"> 54</span><span class="comment">// ************************</span></div> +<div class="line"><span class="lineno"> 55</span> </div> +<div class="line"><span class="lineno"> 56</span> <span class="comment">//KS: Use -m 1 to limit to only one grep because in one computing node there is a lot of CPU which are the same</span></div> +<div class="line"><span class="lineno"> 57</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Using following CPU:&quot;</span>);</div> +<div class="line"><span class="lineno"> 58</span> </div> +<div class="line"><span class="lineno"> 59</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;cat /proc/cpuinfo | grep -m 1 name&quot;</span>));</div> +<div class="line"><span class="lineno"> 60</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;cat /proc/cpuinfo | grep -m 1 MHz&quot;</span>));</div> +<div class="line"><span class="lineno"> 61</span> <span class="comment">//KS: Below code is convoluted because I mostly work on English based Linux but sometimes on Polish based Linux, this ensures it works on both. We can add support for other languages if needed</span></div> +<div class="line"><span class="lineno"> 62</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -i Archit&quot;</span>));</div> +<div class="line"><span class="lineno"> 63</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -i &#39;Cache L1d&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 64</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -i &#39;Cache L1i&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 65</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -i &#39;Cache L2&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 66</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -i &#39;Cache L3&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 67</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -m 1 -E &#39;Thread.* per core:|Wątków na rdzeń:&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 68</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;lscpu | grep -m 1 -E &#39;^CPU(:|\\(s\\)):?\\s+[0-9]+&#39;&quot;</span>));</div> +<div class="line"><span class="lineno"> 69</span> </div> +<div class="line"><span class="lineno"> 70</span> <span class="comment">//KS: /proc/cpuinfo and lscpu holds much more info I have limited it but one can expand it if needed</span></div> +<div class="line"><span class="lineno"> 71</span>}</div> +<div class="ttc" id="anamespaceMaCh3Utils_html_aeed4ea9cad38e64fc3bae7590373d42c"><div class="ttname"><a href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">MaCh3Utils::TerminalToString</a></div><div class="ttdeci">std::string TerminalToString(const char *cmd)</div><div class="ttdef"><b>Definition</b> <a href="Monitor_8cpp_source.html#l00095">Monitor.cpp:95</a></div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a9b97c309891603fece844f2579f30928" name="a9b97c309891603fece844f2579f30928"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b97c309891603fece844f2579f30928">&#9670;&#160;</a></span>GetGPUInfo()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a> MaCh3Utils::GetGPUInfo </td> + <td>(</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00076">76</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 76</span> {</div> +<div class="line"><span class="lineno"> 77</span><span class="comment">// ************************</span></div> +<div class="line"><span class="lineno"> 78</span> </div> +<div class="line"><span class="lineno"> 79</span><span class="preprocessor">#ifdef CUDA</span></div> +<div class="line"><span class="lineno"> 80</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Using following GPU:&quot;</span>);</div> +<div class="line"><span class="lineno"> 81</span> <span class="comment">// Print GPU name</span></div> +<div class="line"><span class="lineno"> 82</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;GPU Name: {}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;nvidia-smi --query-gpu=name --format=csv,noheader&quot;</span>));</div> +<div class="line"><span class="lineno"> 83</span> <span class="comment">// Print number of GPUs</span></div> +<div class="line"><span class="lineno"> 84</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Number of GPUs: {}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;nvidia-smi --query-gpu=count --format=csv,noheader&quot;</span>));</div> +<div class="line"><span class="lineno"> 85</span> <span class="comment">// Print total VRAM</span></div> +<div class="line"><span class="lineno"> 86</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Total VRAM: {} MB&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits&quot;</span>));</div> +<div class="line"><span class="lineno"> 87</span> <span class="comment">// Print Driver Version</span></div> +<div class="line"><span class="lineno"> 88</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Driver Version: {}&quot;</span>, <a class="code hl_function" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">TerminalToString</a>(<span class="stringliteral">&quot;nvidia-smi --query-gpu=driver_version --format=csv,noheader&quot;</span>));</div> +<div class="line"><span class="lineno"> 89</span><span class="preprocessor">#endif</span></div> +<div class="line"><span class="lineno"> 90</span> <span class="keywordflow">return</span>;</div> +<div class="line"><span class="lineno"> 91</span>}</div> +</div><!-- fragment --> +</div> +</div> +<a id="a86d34372bb55524024fbdadd65834967" name="a86d34372bb55524024fbdadd65834967"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a86d34372bb55524024fbdadd65834967">&#9670;&#160;</a></span>GetMassFromPDG()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> MaCh3Utils::GetMassFromPDG </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>PDG</em></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8cpp_source.html#l00011">11</a> of file <a class="el" href="Structs_8cpp_source.html">Structs.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 11</span> {</div> +<div class="line"><span class="lineno"> 12</span> <span class="comment">// *****************************</span></div> +<div class="line"><span class="lineno"> 13</span> </div> +<div class="line"><span class="lineno"> 14</span> <span class="keywordflow">switch</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">abs</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PDG</a>)) { </div> +<div class="line"><span class="lineno"> 15</span> <span class="keywordflow">case</span> 11:</div> +<div class="line"><span class="lineno"> 16</span> <span class="keywordflow">return</span> 0.511E-3;</div> +<div class="line"><span class="lineno"> 17</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 18</span> <span class="keywordflow">case</span> 13:</div> +<div class="line"><span class="lineno"> 19</span> <span class="keywordflow">return</span> 105.658E-3;</div> +<div class="line"><span class="lineno"> 20</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 21</span> <span class="keywordflow">case</span> 15:</div> +<div class="line"><span class="lineno"> 22</span> <span class="keywordflow">return</span> 1.77682;</div> +<div class="line"><span class="lineno"> 23</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 24</span> <span class="keywordflow">case</span> 22:</div> +<div class="line"><span class="lineno"> 25</span> <span class="keywordflow">return</span> 0.;</div> +<div class="line"><span class="lineno"> 26</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 27</span> <span class="keywordflow">case</span> 211:</div> +<div class="line"><span class="lineno"> 28</span> <span class="keywordflow">return</span> 139.57E-3;</div> +<div class="line"><span class="lineno"> 29</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 30</span> <span class="keywordflow">case</span> 111:</div> +<div class="line"><span class="lineno"> 31</span> <span class="keywordflow">return</span> 134.98E-3;</div> +<div class="line"><span class="lineno"> 32</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 33</span> <span class="keywordflow">case</span> 2112:</div> +<div class="line"><span class="lineno"> 34</span> <span class="keywordflow">return</span> 939.565E-3;</div> +<div class="line"><span class="lineno"> 35</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 36</span> <span class="keywordflow">case</span> 2212:</div> +<div class="line"><span class="lineno"> 37</span> <span class="keywordflow">return</span> 938.27E-3;</div> +<div class="line"><span class="lineno"> 38</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 39</span> <span class="comment">//Oxygen nucleus</span></div> +<div class="line"><span class="lineno"> 40</span> <span class="keywordflow">case</span> 1000080160:</div> +<div class="line"><span class="lineno"> 41</span> <span class="keywordflow">return</span> 14.89926;</div> +<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 43</span> <span class="comment">//eta</span></div> +<div class="line"><span class="lineno"> 44</span> <span class="keywordflow">case</span> 221:</div> +<div class="line"><span class="lineno"> 45</span> <span class="keywordflow">return</span> 547.862E-3;</div> +<div class="line"><span class="lineno"> 46</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 47</span> <span class="comment">//K^0 (s or l)</span></div> +<div class="line"><span class="lineno"> 48</span> <span class="keywordflow">case</span> 311:</div> +<div class="line"><span class="lineno"> 49</span> <span class="keywordflow">case</span> 130:</div> +<div class="line"><span class="lineno"> 50</span> <span class="keywordflow">case</span> 310:</div> +<div class="line"><span class="lineno"> 51</span> <span class="keywordflow">return</span> 497.611E-3;</div> +<div class="line"><span class="lineno"> 52</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 53</span> <span class="keywordflow">case</span> 321:</div> +<div class="line"><span class="lineno"> 54</span> <span class="keywordflow">return</span> 493.677E-3;</div> +<div class="line"><span class="lineno"> 55</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 56</span> <span class="comment">// Lamda baryon</span></div> +<div class="line"><span class="lineno"> 57</span> <span class="keywordflow">case</span> 3122:</div> +<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">return</span> 1115.683E-3;</div> +<div class="line"><span class="lineno"> 59</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">case</span> 12:</div> +<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">case</span> 14:</div> +<div class="line"><span class="lineno"> 62</span> <span class="keywordflow">case</span> 16:</div> +<div class="line"><span class="lineno"> 63</span> <span class="keywordflow">return</span> 0.0;</div> +<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">default</span>:</div> +<div class="line"><span class="lineno"> 66</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Haven&#39;t got a saved mass for PDG &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PDG</a> &lt;&lt; std::endl;</div> +<div class="line"><span class="lineno"> 67</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Please implement me! &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><span class="lineno"> 69</span> } <span class="comment">// End switch</span></div> +<div class="line"><span class="lineno"> 70</span> </div> +<div class="line"><span class="lineno"> 71</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Warning, didn&#39;t catch a saved mass&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><span class="lineno"> 72</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><span class="lineno"> 73</span> }</div> +</div><!-- fragment --> +</div> +</div> +<a id="a5aff908b9241c673e8d05403996e2229" name="a5aff908b9241c673e8d05403996e2229"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5aff908b9241c673e8d05403996e2229">&#9670;&#160;</a></span>GetNThreads()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> MaCh3Utils::GetNThreads </td> + <td>(</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="CovarianceUtils_8cpp_source.html#l00005">5</a> of file <a class="el" href="CovarianceUtils_8cpp_source.html">CovarianceUtils.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 6</span> {</div> +<div class="line"><span class="lineno"> 7</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><span class="lineno"> 8</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nThreads</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">omp_get_max_threads</a>();</div> +<div class="line"><span class="lineno"> 9</span><span class="preprocessor"> #else</span></div> +<div class="line"><span class="lineno"> 10</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nThreads</a> = 1;</div> +<div class="line"><span class="lineno"> 11</span><span class="preprocessor"> #endif</span></div> +<div class="line"><span class="lineno"> 12</span> </div> +<div class="line"><span class="lineno"> 13</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nThreads</a>;</div> +<div class="line"><span class="lineno"> 14</span> }</div> +</div><!-- fragment --> +</div> +</div> +<a id="a417b0bad440b7f273ca404ff25dd86a2" name="a417b0bad440b7f273ca404ff25dd86a2"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a417b0bad440b7f273ca404ff25dd86a2">&#9670;&#160;</a></span>getValue()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> MaCh3Utils::getValue </td> + <td>(</td> + <td class="paramtype">std::string&#160;</td> + <td class="paramname"><em>Type</em></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00158">158</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 158</span> { <span class="comment">//Note: this value is in KB!</span></div> +<div class="line"><span class="lineno"> 159</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><span class="lineno"> 160</span> std::ifstream <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>(<span class="stringliteral">&quot;/proc/self/status&quot;</span>);</div> +<div class="line"><span class="lineno"> 161</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a> = -1;</div> +<div class="line"><span class="lineno"> 162</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>;</div> +<div class="line"><span class="lineno"> 163</span> </div> +<div class="line"><span class="lineno"> 164</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Type</a> == <span class="stringliteral">&quot;VmSize&quot;</span>)</div> +<div class="line"><span class="lineno"> 165</span> {</div> +<div class="line"><span class="lineno"> 166</span> <span class="keywordflow">while</span> (std::getline(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>))</div> +<div class="line"><span class="lineno"> 167</span> {</div> +<div class="line"><span class="lineno"> 168</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.compare(0, 7, <span class="stringliteral">&quot;VmSize:&quot;</span>) == 0)</div> +<div class="line"><span class="lineno"> 169</span> {</div> +<div class="line"><span class="lineno"> 170</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a> = <a class="code hl_function" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">parseLine</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.substr(7));</div> +<div class="line"><span class="lineno"> 171</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 172</span> }</div> +<div class="line"><span class="lineno"> 173</span> }</div> +<div class="line"><span class="lineno"> 174</span> }</div> +<div class="line"><span class="lineno"> 175</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Type</a> == <span class="stringliteral">&quot;VmRSS&quot;</span>)</div> +<div class="line"><span class="lineno"> 176</span> {</div> +<div class="line"><span class="lineno"> 177</span> <span class="keywordflow">while</span> (std::getline(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>))</div> +<div class="line"><span class="lineno"> 178</span> {</div> +<div class="line"><span class="lineno"> 179</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.compare(0, 6, <span class="stringliteral">&quot;VmRSS:&quot;</span>) == 0)</div> +<div class="line"><span class="lineno"> 180</span> {</div> +<div class="line"><span class="lineno"> 181</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a> = <a class="code hl_function" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">parseLine</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.substr(6));</div> +<div class="line"><span class="lineno"> 182</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 183</span> }</div> +<div class="line"><span class="lineno"> 184</span> }</div> +<div class="line"><span class="lineno"> 185</span> }</div> +<div class="line"><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Type</a> == <span class="stringliteral">&quot;MemTotal&quot;</span>)</div> +<div class="line"><span class="lineno"> 187</span> {</div> +<div class="line"><span class="lineno"> 188</span> std::ifstream <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">meminfo</a>(<span class="stringliteral">&quot;/proc/meminfo&quot;</span>);</div> +<div class="line"><span class="lineno"> 189</span> <span class="keywordflow">while</span> (std::getline(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">meminfo</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>))</div> +<div class="line"><span class="lineno"> 190</span> {</div> +<div class="line"><span class="lineno"> 191</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.find(<span class="stringliteral">&quot;MemTotal:&quot;</span>) != std::string::npos) {</div> +<div class="line"><span class="lineno"> 192</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a> = <a class="code hl_function" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">parseLine</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.substr(9));</div> +<div class="line"><span class="lineno"> 193</span> <span class="keywordflow">break</span>;</div> +<div class="line"><span class="lineno"> 194</span> }</div> +<div class="line"><span class="lineno"> 195</span> }</div> +<div class="line"><span class="lineno"> 196</span> }</div> +<div class="line"><span class="lineno"> 197</span> <span class="keywordflow">else</span></div> +<div class="line"><span class="lineno"> 198</span> {</div> +<div class="line"><span class="lineno"> 199</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Not supported getValue: &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Type</a> &lt;&lt; std::endl;</div> +<div class="line"><span class="lineno"> 200</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><span class="lineno"> 201</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><span class="lineno"> 202</span> }</div> +<div class="line"><span class="lineno"> 203</span> </div> +<div class="line"><span class="lineno"> 204</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>;</div> +<div class="line"><span class="lineno"> 205</span>}</div> +<div class="ttc" id="anamespaceMaCh3Utils_html_af06aa84306b4d4692f30e63d08180c83"><div class="ttname"><a href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">MaCh3Utils::parseLine</a></div><div class="ttdeci">int parseLine(const std::string &amp;line)</div><div class="ttdef"><b>Definition</b> <a href="Monitor_8cpp_source.html#l00209">Monitor.cpp:209</a></div></div> +</div><!-- fragment --> +</div> +</div> +<a id="ad70f340fe7d2128586d54797f6501514" name="ad70f340fe7d2128586d54797f6501514"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad70f340fe7d2128586d54797f6501514">&#9670;&#160;</a></span>KnownDetIDsMap()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">std::unordered_map&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>, <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> &gt; MaCh3Utils::KnownDetIDsMap </td> + <td>(</td> + <td class="paramtype">{ {0, 1}, {1, 8}, {2, 16}, {3, 32}, {4, 64}, {5, 128}, {6, 256}, {7, 512}, }&#160;</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +</div> +</div> +<a id="ac6f4a3b6a7749967ff9a011469352f6c" name="ac6f4a3b6a7749967ff9a011469352f6c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac6f4a3b6a7749967ff9a011469352f6c">&#9670;&#160;</a></span>MaCh3Welcome()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a> MaCh3Utils::MaCh3Welcome </td> + <td>(</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p>KS: Prints welcome message with MaCh3 logo. </p> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00006">6</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 6</span> {</div> +<div class="line"><span class="lineno"> 7</span><span class="comment">// *************************</span></div> +<div class="line"><span class="lineno"> 8</span> </div> +<div class="line"><span class="lineno"> 9</span> <span class="comment">//KS: Find MaCh3 version based on header file. There could be better way to just include version.h but as long as we don&#39;t have to hardcode version I am content</span></div> +<div class="line"><span class="lineno"> 10</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a> = <span class="stringliteral">&quot;&quot;</span>;</div> +<div class="line"><span class="lineno"> 11</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a> = std::string(std::getenv(<span class="stringliteral">&quot;MaCh3_ROOT&quot;</span>)) + <span class="stringliteral">&quot;/version.h&quot;</span>;</div> +<div class="line"><span class="lineno"> 12</span> <span class="comment">// Open the version.h file</span></div> +<div class="line"><span class="lineno"> 13</span> std::ifstream <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">versionFile</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><span class="lineno"> 14</span> </div> +<div class="line"><span class="lineno"> 15</span> <span class="comment">// Check if the file is opened successfully</span></div> +<div class="line"><span class="lineno"> 16</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">versionFile</a>.is_open()) {</div> +<div class="line"><span class="lineno"> 17</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a>(<span class="stringliteral">&quot;Error: Couldn&#39;t open version.h {}&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><span class="lineno"> 18</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><span class="lineno"> 19</span> }</div> +<div class="line"><span class="lineno"> 20</span> </div> +<div class="line"><span class="lineno"> 21</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>;</div> +<div class="line"><span class="lineno"> 22</span> <span class="keyword">const</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">searchKey</a> = <span class="stringliteral">&quot;MaCh3_VERSION=&quot;</span>;</div> +<div class="line"><span class="lineno"> 23</span> </div> +<div class="line"><span class="lineno"> 24</span> <span class="comment">// Read each line from the file</span></div> +<div class="line"><span class="lineno"> 25</span> <span class="keywordflow">while</span> (std::getline(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">versionFile</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>)) {</div> +<div class="line"><span class="lineno"> 26</span> <span class="comment">// Search for the line containing MaCh3_VERSION</span></div> +<div class="line"><span class="lineno"> 27</span> <span class="keyword">auto</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.find(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">searchKey</a>);</div> +<div class="line"><span class="lineno"> 28</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a> != std::string::npos) {</div> +<div class="line"><span class="lineno"> 29</span> <span class="comment">// Extract the version string</span></div> +<div class="line"><span class="lineno"> 30</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>.substr(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a> + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">searchKey</a>.length());</div> +<div class="line"><span class="lineno"> 31</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a>.erase(0, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a>.find_first_not_of(<span class="stringliteral">&quot;\&quot;&quot;</span>)); <span class="comment">// Remove leading quote</span></div> +<div class="line"><span class="lineno"> 32</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a>.erase(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a>.find_last_not_of(<span class="stringliteral">&quot;\&quot;;&quot;</span>) + 1); <span class="comment">// Remove trailing quote and semicolon</span></div> +<div class="line"><span class="lineno"> 33</span> <span class="keywordflow">break</span>; <span class="comment">// Stop searching once found</span></div> +<div class="line"><span class="lineno"> 34</span> }</div> +<div class="line"><span class="lineno"> 35</span> }</div> +<div class="line"><span class="lineno"> 36</span> <span class="comment">// Close the file</span></div> +<div class="line"><span class="lineno"> 37</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">versionFile</a>.close();</div> +<div class="line"><span class="lineno"> 38</span> </div> +<div class="line"><span class="lineno"> 39</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;##################################&quot;</span>);</div> +<div class="line"><span class="lineno"> 40</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Welcome to: &quot;</span>);</div> +<div class="line"><span class="lineno"> 41</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; __ __ _____ _ ____ &quot;</span>);</div> +<div class="line"><span class="lineno"> 42</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; | \\/ | / ____| | |___ \\ &quot;</span>);</div> +<div class="line"><span class="lineno"> 43</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; | \\ / | __ _| | | |__ __) |&quot;</span>);</div> +<div class="line"><span class="lineno"> 44</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; | |\\/| |/ _` | | | &#39;_ \\ |__ &lt; &quot;</span>);</div> +<div class="line"><span class="lineno"> 45</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; | | | | (_| | |____| | | |___) |&quot;</span>);</div> +<div class="line"><span class="lineno"> 46</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot; |_| |_|\\__,_|\\_____|_| |_|____/ &quot;</span>);</div> +<div class="line"><span class="lineno"> 47</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;Version: {}&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MaCh3_VERSION</a>);</div> +<div class="line"><span class="lineno"> 48</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;##################################&quot;</span>);</div> +<div class="line"><span class="lineno"> 49</span>}</div> +<div class="ttc" id="aMaCh3Logger_8h_html_a61052119a625282d0ec6d4a97adf3ee2"><div class="ttname"><a href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a></div><div class="ttdeci">#define MACH3LOG_ERROR</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00011">MaCh3Logger.h:11</a></div></div> +</div><!-- fragment --> +</div> +</div> +<a id="af03aca63ae363cb51c7033e8e91ade6d" name="af03aca63ae363cb51c7033e8e91ade6d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af03aca63ae363cb51c7033e8e91ade6d">&#9670;&#160;</a></span>MatrixMult() <span class="overload">[1/3]</span></h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> ** MaCh3Utils::MatrixMult </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td> + <td class="paramname"><em>A</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td> + <td class="paramname"><em>B</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>n</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="CovarianceUtils_8cpp_source.html#l00042">42</a> of file <a class="el" href="CovarianceUtils_8cpp_source.html">CovarianceUtils.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 42</span> {</div> +<div class="line"><span class="lineno"> 43</span> <span class="comment">// First make into monolithic array</span></div> +<div class="line"><span class="lineno"> 44</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A_mon</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 45</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B_mon</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 46</span> </div> +<div class="line"><span class="lineno"> 47</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><span class="lineno"> 48</span><span class="preprocessor"> #pragma omp parallel for</span></div> +<div class="line"><span class="lineno"> 49</span><span class="preprocessor"> #endif</span></div> +<div class="line"><span class="lineno"> 50</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><span class="lineno"> 51</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>) {</div> +<div class="line"><span class="lineno"> 52</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A_mon</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>];</div> +<div class="line"><span class="lineno"> 53</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B_mon</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>];</div> +<div class="line"><span class="lineno"> 54</span> }</div> +<div class="line"><span class="lineno"> 55</span> }</div> +<div class="line"><span class="lineno"> 56</span> <span class="comment">//CW: Now call the monolithic calculator</span></div> +<div class="line"><span class="lineno"> 57</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C_mon</a> = <a class="code hl_function" href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MatrixMult</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A_mon</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B_mon</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>);</div> +<div class="line"><span class="lineno"> 58</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A_mon</a>;</div> +<div class="line"><span class="lineno"> 59</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B_mon</a>;</div> +<div class="line"><span class="lineno"> 60</span> </div> +<div class="line"><span class="lineno"> 61</span> <span class="comment">// Return the double pointer</span></div> +<div class="line"><span class="lineno"> 62</span> <span class="keywordtype">double</span> **<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 63</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><span class="lineno"> 64</span><span class="preprocessor"> #pragma omp parallel for</span></div> +<div class="line"><span class="lineno"> 65</span><span class="preprocessor"> #endif</span></div> +<div class="line"><span class="lineno"> 66</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><span class="lineno"> 67</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>) {</div> +<div class="line"><span class="lineno"> 69</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C_mon</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>];</div> +<div class="line"><span class="lineno"> 70</span> }</div> +<div class="line"><span class="lineno"> 71</span> }</div> +<div class="line"><span class="lineno"> 72</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C_mon</a>;</div> +<div class="line"><span class="lineno"> 73</span> </div> +<div class="line"><span class="lineno"> 74</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>;</div> +<div class="line"><span class="lineno"> 75</span> }</div> +<div class="ttc" id="anamespaceMaCh3Utils_html_ac4d63087b4dc0c0a0e49d375ece4cb00"><div class="ttname"><a href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MaCh3Utils::MatrixMult</a></div><div class="ttdeci">TMatrixD MatrixMult(TMatrixD A, TMatrixD B)</div><div class="ttdef"><b>Definition</b> <a href="CovarianceUtils_8cpp_source.html#l00035">CovarianceUtils.cpp:35</a></div></div> +</div><!-- fragment --> +</div> +</div> +<a id="a0cd7bf76aca73a1e36519b04e19dd6c0" name="a0cd7bf76aca73a1e36519b04e19dd6c0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0cd7bf76aca73a1e36519b04e19dd6c0">&#9670;&#160;</a></span>MatrixMult() <span class="overload">[2/3]</span></h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> * MaCh3Utils::MatrixMult </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td> + <td class="paramname"><em>A</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td> + <td class="paramname"><em>B</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>n</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="CovarianceUtils_8cpp_source.html#l00077">77</a> of file <a class="el" href="CovarianceUtils_8cpp_source.html">CovarianceUtils.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 77</span> {</div> +<div class="line"><span class="lineno"> 78</span> <span class="comment">//CW: First transpose to increse cache hits</span></div> +<div class="line"><span class="lineno"> 79</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BT</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 80</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><span class="lineno"> 81</span><span class="preprocessor"> #pragma omp parallel for</span></div> +<div class="line"><span class="lineno"> 82</span><span class="preprocessor"> #endif</span></div> +<div class="line"><span class="lineno"> 83</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><span class="lineno"> 84</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++) {</div> +<div class="line"><span class="lineno"> 85</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BT</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>];</div> +<div class="line"><span class="lineno"> 86</span> }</div> +<div class="line"><span class="lineno"> 87</span> }</div> +<div class="line"><span class="lineno"> 88</span> </div> +<div class="line"><span class="lineno"> 89</span> <span class="comment">// Now multiply</span></div> +<div class="line"><span class="lineno"> 90</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><span class="lineno"> 91</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><span class="lineno"> 92</span><span class="preprocessor"> #pragma omp parallel for</span></div> +<div class="line"><span class="lineno"> 93</span><span class="preprocessor"> #endif</span></div> +<div class="line"><span class="lineno"> 94</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><span class="lineno"> 95</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++) {</div> +<div class="line"><span class="lineno"> 96</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sum</a> = 0;</div> +<div class="line"><span class="lineno"> 97</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>++) {</div> +<div class="line"><span class="lineno"> 98</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sum</a> += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>]*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BT</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>];</div> +<div class="line"><span class="lineno"> 99</span> }</div> +<div class="line"><span class="lineno"> 100</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sum</a>;</div> +<div class="line"><span class="lineno"> 101</span> }</div> +<div class="line"><span class="lineno"> 102</span> }</div> +<div class="line"><span class="lineno"> 103</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BT</a>;</div> +<div class="line"><span class="lineno"> 104</span> </div> +<div class="line"><span class="lineno"> 105</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>;</div> +<div class="line"><span class="lineno"> 106</span> }</div> +</div><!-- fragment --> +</div> +</div> +<a id="ac4d63087b4dc0c0a0e49d375ece4cb00" name="ac4d63087b4dc0c0a0e49d375ece4cb00"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac4d63087b4dc0c0a0e49d375ece4cb00">&#9670;&#160;</a></span>MatrixMult() <span class="overload">[3/3]</span></h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a> MaCh3Utils::MatrixMult </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a>&#160;</td> + <td class="paramname"><em>A</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a>&#160;</td> + <td class="paramname"><em>B</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="CovarianceUtils_8cpp_source.html#l00035">35</a> of file <a class="el" href="CovarianceUtils_8cpp_source.html">CovarianceUtils.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 35</span> {</div> +<div class="line"><span class="lineno"> 36</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C_mon</a> = <a class="code hl_function" href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MatrixMult</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>.GetMatrixArray(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">B</a>.GetMatrixArray(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>.GetNcols());</div> +<div class="line"><span class="lineno"> 37</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrixD</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>;</div> +<div class="line"><span class="lineno"> 38</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>.Use(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>.GetNcols(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>.GetNrows(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C_mon</a>);</div> +<div class="line"><span class="lineno"> 39</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">C</a>;</div> +<div class="line"><span class="lineno"> 40</span> }</div> +</div><!-- fragment --> +</div> +</div> +<a id="af06aa84306b4d4692f30e63d08180c83" name="af06aa84306b4d4692f30e63d08180c83"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af06aa84306b4d4692f30e63d08180c83">&#9670;&#160;</a></span>parseLine()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> MaCh3Utils::parseLine </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> std::string &amp;&#160;</td> + <td class="paramname"><em>line</em></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00209">209</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 209</span> {</div> +<div class="line"><span class="lineno"> 210</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><span class="lineno"> 211</span> std::istringstream <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iss</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">line</a>);</div> +<div class="line"><span class="lineno"> 212</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">value</a>;</div> +<div class="line"><span class="lineno"> 213</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iss</a> &gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">value</a>;</div> +<div class="line"><span class="lineno"> 214</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">value</a>;</div> +<div class="line"><span class="lineno"> 215</span>}</div> +</div><!-- fragment --> +</div> +</div> +<a id="a5b63b3185a04cff2ea94e18e1831ce9e" name="a5b63b3185a04cff2ea94e18e1831ce9e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5b63b3185a04cff2ea94e18e1831ce9e">&#9670;&#160;</a></span>PrintProgressBar()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a> MaCh3Utils::PrintProgressBar </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>Done</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td> + <td class="paramname"><em>All</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00134">134</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 134</span> {</div> +<div class="line"><span class="lineno"> 135</span><span class="comment">// ************************</span></div> +<div class="line"><span class="lineno"> 136</span> </div> +<div class="line"><span class="lineno"> 137</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progress</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>((<span class="keywordtype">double</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Done</a>)/<span class="keywordtype">double</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">All</a>)));</div> +<div class="line"><span class="lineno"> 138</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">barWidth</a> = 20;</div> +<div class="line"><span class="lineno"> 139</span> std::ostringstream <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a>;</div> +<div class="line"><span class="lineno"> 140</span> </div> +<div class="line"><span class="lineno"> 141</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a> &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div> +<div class="line"><span class="lineno"> 142</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">barWidth</a> * <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progress</a>;</div> +<div class="line"><span class="lineno"> 143</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">barWidth</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><span class="lineno"> 144</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a>)</div> +<div class="line"><span class="lineno"> 145</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a> &lt;&lt; <span class="stringliteral">&quot;=&quot;</span>;</div> +<div class="line"><span class="lineno"> 146</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pos</a>)</div> +<div class="line"><span class="lineno"> 147</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a> &lt;&lt; <span class="stringliteral">&quot;&gt;&quot;</span>;</div> +<div class="line"><span class="lineno"> 148</span> <span class="keywordflow">else</span></div> +<div class="line"><span class="lineno"> 149</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div> +<div class="line"><span class="lineno"> 150</span> }</div> +<div class="line"><span class="lineno"> 151</span> </div> +<div class="line"><span class="lineno"> 152</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a> &lt;&lt; <span class="stringliteral">&quot;] &quot;</span> &lt;&lt; std::setw(3) &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Done</a> &lt;&lt;<span class="stringliteral">&quot;/&quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">All</a>&lt;&lt;<span class="stringliteral">&quot; (&quot;</span>&lt;&lt;<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progress</a> * 100.0)&lt;&lt;<span class="stringliteral">&quot;%)\r&quot;</span>;</div> +<div class="line"><span class="lineno"> 153</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3">MACH3LOG_INFO</a>(<span class="stringliteral">&quot;{}&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">progressBar</a>.str());</div> +<div class="line"><span class="lineno"> 154</span>}</div> +</div><!-- fragment --> +</div> +</div> +<a id="aeed4ea9cad38e64fc3bae7590373d42c" name="aeed4ea9cad38e64fc3bae7590373d42c"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeed4ea9cad38e64fc3bae7590373d42c">&#9670;&#160;</a></span>TerminalToString()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">std::string MaCh3Utils::TerminalToString </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">char</a> *&#160;</td> + <td class="paramname"><em>cmd</em></td><td>)</td> + <td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Monitor_8cpp_source.html#l00095">95</a> of file <a class="el" href="Monitor_8cpp_source.html">Monitor.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 95</span> {</div> +<div class="line"><span class="lineno"> 96</span><span class="comment">// ************************</span></div> +<div class="line"><span class="lineno"> 97</span> </div> +<div class="line"><span class="lineno"> 98</span> std::array&lt;char, 128&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">buffer</a>;</div> +<div class="line"><span class="lineno"> 99</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>;</div> +<div class="line"><span class="lineno"> 100</span> std::unique_ptr&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FILE</a>, <span class="keyword">decltype</span>(&amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pclose</a>)&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pipe</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">popen</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cmd</a>, <span class="stringliteral">&quot;r&quot;</span>), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pclose</a>);</div> +<div class="line"><span class="lineno"> 101</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pipe</a>) {</div> +<div class="line"><span class="lineno"> 102</span> <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;popen() failed!&quot;</span>);</div> +<div class="line"><span class="lineno"> 103</span> }</div> +<div class="line"><span class="lineno"> 104</span> <span class="keywordflow">while</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fgets</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">buffer</a>.data(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">buffer</a>.size(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pipe</a>.get()) != <span class="keyword">nullptr</span>) {</div> +<div class="line"><span class="lineno"> 105</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a> += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">buffer</a>.data();</div> +<div class="line"><span class="lineno"> 106</span> }</div> +<div class="line"><span class="lineno"> 107</span> <span class="comment">// Remove trailing newline characters</span></div> +<div class="line"><span class="lineno"> 108</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>.erase(std::remove(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>.begin(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>.end(), <span class="charliteral">&#39;\n&#39;</span>), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>.end());</div> +<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">result</a>;</div> +<div class="line"><span class="lineno"> 110</span>}</div> +</div><!-- fragment --> +</div> +</div> +<a id="a9b4fef8344d315068805fab0875ee486" name="a9b4fef8344d315068805fab0875ee486"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9b4fef8344d315068805fab0875ee486">&#9670;&#160;</a></span>TMatrixIntoTH2D()</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a> * MaCh3Utils::TMatrixIntoTH2D </td> + <td>(</td> + <td class="paramtype"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TMatrix</a> &amp;&#160;</td> + <td class="paramname"><em>Matrix</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">std::string&#160;</td> + <td class="paramname"><em>title</em>&#160;</td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="CovarianceUtils_8cpp_source.html#l00019">19</a> of file <a class="el" href="CovarianceUtils_8cpp_source.html">CovarianceUtils.cpp</a>.</p> +<div class="fragment"><div class="line"><span class="lineno"> 20</span> {</div> +<div class="line"><span class="lineno"> 21</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">hMatrix</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">title</a>.c_str(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">title</a>.c_str(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNrows(), 0.0, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNrows(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNcols(), 0.0, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNcols());</div> +<div class="line"><span class="lineno"> 22</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNrows(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><span class="lineno"> 23</span> {</div> +<div class="line"><span class="lineno"> 24</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>.GetNcols(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><span class="lineno"> 25</span> {</div> +<div class="line"><span class="lineno"> 26</span> <span class="comment">//KS: +1 becasue there is offset in histogram relative to TMatrix</span></div> +<div class="line"><span class="lineno"> 27</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">hMatrix</a>-&gt;SetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>+1, (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Matrix</a>)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>));</div> +<div class="line"><span class="lineno"> 28</span> }</div> +<div class="line"><span class="lineno"> 29</span> }</div> +<div class="line"><span class="lineno"> 30</span> </div> +<div class="line"><span class="lineno"> 31</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">hMatrix</a>;</div> +<div class="line"><span class="lineno"> 32</span> }</div> +</div><!-- fragment --> +</div> +</div> +<h2 class="groupheader">Variable Documentation</h2> +<a id="ab58c07d7176a31b58fe4c1fb0c81fd10" name="ab58c07d7176a31b58fe4c1fb0c81fd10"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab58c07d7176a31b58fe4c1fb0c81fd10">&#9670;&#160;</a></span>KnownDetIDsMap</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">std::unordered_map&lt;<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>,<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&gt; MaCh3Utils::KnownDetIDsMap</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">extern</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +</div> +</div> +<a id="a24bdf4d0354265aecdd2b7e357a3c64b" name="a24bdf4d0354265aecdd2b7e357a3c64b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a24bdf4d0354265aecdd2b7e357a3c64b">&#9670;&#160;</a></span>nKnownDetIDs</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> MaCh3Utils::nKnownDetIDs = KnownDetIDsMap.size()</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8cpp_source.html#l00090">90</a> of file <a class="el" href="Structs_8cpp_source.html">Structs.cpp</a>.</p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 00000000..572956da --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,96 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Namespace Members</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all namespace members with links to the namespace documentation for each member:</div><ul> +<li>EstimateDataTransferRate()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a4203d9c1f43730103d429f1d6497b843">MaCh3Utils</a></li> +<li>GetCPUInfo()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf">MaCh3Utils</a></li> +<li>GetGPUInfo()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928">MaCh3Utils</a></li> +<li>GetMassFromPDG()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a86d34372bb55524024fbdadd65834967">MaCh3Utils</a></li> +<li>GetNThreads()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a5aff908b9241c673e8d05403996e2229">MaCh3Utils</a></li> +<li>getValue()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a417b0bad440b7f273ca404ff25dd86a2">MaCh3Utils</a></li> +<li>KnownDetIDsMap&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ab58c07d7176a31b58fe4c1fb0c81fd10">MaCh3Utils</a></li> +<li>MaCh3Welcome()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c">MaCh3Utils</a></li> +<li>MatrixMult()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MaCh3Utils</a></li> +<li>nKnownDetIDs&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a24bdf4d0354265aecdd2b7e357a3c64b">MaCh3Utils</a></li> +<li>parseLine()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">MaCh3Utils</a></li> +<li>PrintProgressBar()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a5b63b3185a04cff2ea94e18e1831ce9e">MaCh3Utils</a></li> +<li>TerminalToString()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">MaCh3Utils</a></li> +<li>TMatrixIntoTH2D()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a9b4fef8344d315068805fab0875ee486">MaCh3Utils</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 00000000..63113797 --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,95 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Namespace Members</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all namespace functions with links to the namespace documentation for each function:</div><ul> +<li>EstimateDataTransferRate()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a4203d9c1f43730103d429f1d6497b843">MaCh3Utils</a></li> +<li>GetCPUInfo()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf">MaCh3Utils</a></li> +<li>GetGPUInfo()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928">MaCh3Utils</a></li> +<li>GetMassFromPDG()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a86d34372bb55524024fbdadd65834967">MaCh3Utils</a></li> +<li>GetNThreads()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a5aff908b9241c673e8d05403996e2229">MaCh3Utils</a></li> +<li>getValue()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a417b0bad440b7f273ca404ff25dd86a2">MaCh3Utils</a></li> +<li>KnownDetIDsMap()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ad70f340fe7d2128586d54797f6501514">MaCh3Utils</a></li> +<li>MaCh3Welcome()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c">MaCh3Utils</a></li> +<li>MatrixMult()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00">MaCh3Utils</a></li> +<li>parseLine()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83">MaCh3Utils</a></li> +<li>PrintProgressBar()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a5b63b3185a04cff2ea94e18e1831ce9e">MaCh3Utils</a></li> +<li>TerminalToString()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c">MaCh3Utils</a></li> +<li>TMatrixIntoTH2D()&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a9b4fef8344d315068805fab0875ee486">MaCh3Utils</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html new file mode 100644 index 00000000..0c7b3af9 --- /dev/null +++ b/namespacemembers_vars.html @@ -0,0 +1,84 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Namespace Members</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="contents"> +<div class="textblock">Here is a list of all namespace variables with links to the namespace documentation for each variable:</div><ul> +<li>KnownDetIDsMap&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#ab58c07d7176a31b58fe4c1fb0c81fd10">MaCh3Utils</a></li> +<li>nKnownDetIDs&#160;:&#160;<a class="el" href="namespaceMaCh3Utils.html#a24bdf4d0354265aecdd2b7e357a3c64b">MaCh3Utils</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 00000000..dfa7a8ed --- /dev/null +++ b/namespaces.html @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Namespace List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">Namespace List</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock">Here is a list of all namespaces with brief descriptions:</div><div class="directory"> +<table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespaceMaCh3Utils.html" target="_self">MaCh3Utils</a></td><td class="desc"></td></tr> +</table> +</div><!-- directory --> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_<lqdB{jiFDSaaN3W^xbJMH7CDK7=Q3_$6tQ&<~Cp4L6ZEndC`8;cO zrss?`_g+2sGU&M|cu~La_w1Rnf~7w`e!jQgteDwDLg6kW!`DinT@0SCelF{r5}E+Y CM>z8U literal 0 HcmV?d00001 diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt<j{B<-5i=y8aRCp6>7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!K<?EJwDd;c`qumW{3c)I$ztaD0e0syCC7$E=v literal 0 HcmV?d00001 diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000000000000000000000000000000000000..33389b101d9cd9b4c98ad286b5d9c46a6671f650 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t22D>F$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&v<Kx}xDV3h>FVdQ&MBb@0HFXL<NyEw literal 0 HcmV?d00001 diff --git a/nav_hd.png b/nav_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..de80f18ad6488b9990303f267a76fdc83f0ffd80 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t21`#D$B+ufw|9379#G(63FK{W z5s<eodL#E@zbS9{Dekh>6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/open.png b/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM<Rdl=8h W@EqZ{ytxBt8iS{+pUXO@geCxcDJg#d literal 0 HcmV?d00001 diff --git a/pages.html b/pages.html new file mode 100644 index 00000000..c4ba0e15 --- /dev/null +++ b/pages.html @@ -0,0 +1,89 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Related Pages</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +</div><!-- top --> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div class="header"> + <div class="headertitle"><div class="title">Related Pages</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory"> +<table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__2github_2workspace_2CONTRIBUTING.html" target="_self">How to Contribute Code to MaCh3</a></td><td class="desc"></td></tr> +<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__2github_2workspace_2README.html" target="_self">MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;</a></td><td class="desc"></td></tr> +</table> +</div><!-- directory --> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/plus.svg b/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + <rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" /> + </g> +</svg> diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + <g> + <rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" /> + <rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" /> + <rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" /> + <rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" /> + </g> +</svg> diff --git a/probGpu_8cu.html b/probGpu_8cu.html new file mode 100644 index 00000000..5910a344 --- /dev/null +++ b/probGpu_8cu.html @@ -0,0 +1,89 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/probGpu.cu File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">probGpu.cu File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><a href="probGpu_8cu_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/probGpu_8cu_source.html b/probGpu_8cu_source.html new file mode 100644 index 00000000..b5a762e2 --- /dev/null +++ b/probGpu_8cu_source.html @@ -0,0 +1,1653 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/probGpu.cu Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">probGpu.cu</div></div> +</div><!--header--> +<div class="contents"> +<a href="probGpu_8cu.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span>// -*- c++ -*-</div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span>//</div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span>// GPU versions of mosc functions</div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>//</div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span>#include &quot;stdio.h&quot;</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span>typedef double dmArray[3];</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span>typedef double mixArray[3][2];</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span>__constant__ dmArray dm_device[9];</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span>__constant__ mixArray mix_device[18];</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span>#define mix_im_sign_t -1</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>#define mix_im_sign_f 1</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span>// ERROR CHECKING ///////////////////////////////////////////</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span>//#define CUDA_ERROR_CHECK // turn this on and off to disable error checking</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span>#define CudaSafeCall( err ) __cudaSafeCall( err, __FILE__, __LINE__ )</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>#define CudaCheckError() __cudaCheckError( __FILE__, __LINE__ )</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>inline void __cudaSafeCall( cudaError err, const char *file, const int line )</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span>{</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span>#ifdef CUDA_ERROR_CHECK</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> if ( cudaSuccess != err )</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> fprintf( stderr, &quot;cudaSafeCall() failed at %s:%i : %s\n&quot;,</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> file, line, cudaGetErrorString( err ) );</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> exit( -1 );</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> }</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>#endif</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> return;</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>}</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>inline void __cudaCheckError( const char *file, const int line )</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>{</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>#ifdef CUDA_ERROR_CHECK</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> cudaError err = cudaGetLastError();</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> if ( cudaSuccess != err )</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> {</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> fprintf( stderr, &quot;cudaCheckError() failed at %s:%i : %s\n&quot;,</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> file, line, cudaGetErrorString( err ) );</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> exit( -1 );</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> }</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> // More careful checking. However, this will affect performance.</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> // Comment away if needed.</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> err = cudaDeviceSynchronize();</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> if( cudaSuccess != err )</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> {</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> fprintf( stderr, &quot;cudaCheckError() with sync failed at %s:%i : %s\n&quot;,</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> file, line, cudaGetErrorString( err ) );</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> exit( -1 );</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>#endif</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> return;</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>}</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>/////////////////////////////////////////////////////////////</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>#define elec (0)</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>#define muon (1)</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>#define tau (2)</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>#define re (0)</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>#define im (1)</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>typedef enum nu_type {</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> data_type,</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> nue_type,</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> numu_type,</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> nutau_type,</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> sterile_type,</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> unknown_type} NuType;</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span>typedef enum matrix_type {</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> standard_type,</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> barger_type} MatrixType;</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>//#define ZERO_CP</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>static int matrixtype = standard_type;</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span>/* Flag to tell us if we&#39;re doing nu_e or nu_sterile matter effects */</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>// CWRET: comment out to rid compiler warning (never used)</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span>//static NuType matterFlavor = nue_type;</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>//static double putMix[3][3][2]; ****************************</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>/* 2*sqrt(2)*Gfermi in (eV^2-cm^3)/(mole-GeV) - for e&lt;-&gt;[mu,tau] */</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>//static const double tworttwoGf = 1.52588e-4;</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span>// CWRET: comment out to rid compiler warning (never used)</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>/*</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>__host__ void setMatterFlavor(int flavor)</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>{</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> if (flavor == nue_type) matterFlavor = nue_type;</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> else if (flavor == sterile_type) matterFlavor = sterile_type;</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> else {</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> //fprintf(stderr, &quot;setMatterFlavor: flavor=%d&quot;, flavor);</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> //moscerr(&quot;setMatterFlavor: Illegal flavor.&quot;);</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>}</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>*/</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>__host__ void setmix_sin(double s12,double s23,double s13,double dcp, double Mix[3][3][2])</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>{</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> double c12,c23,c13,sd,cd = 1.0;</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> if ( s12&gt;1.0 ) s12=1.0;</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> if ( s23&gt;1.0 ) s23=1.0;</div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> if ( s13&gt;1.0 ) s13=1.0;</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> //if ( cd &gt;1.0 ) cd =1.0; this is not needed</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> sd = sin( dcp );</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> cd = cos( dcp );</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> c12 = sqrt(1.0-s12*s12);</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> c23 = sqrt(1.0-s23*s23);</div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> c13 = sqrt(1.0-s13*s13);</div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> if ( matrixtype == standard_type )</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> {</div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> Mix[0][0][re] = c12*c13;</div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> Mix[0][0][im] = 0.0;</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> Mix[0][1][re] = s12*c13;</div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> Mix[0][1][im] = 0.0;</div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> Mix[0][2][re] = s13*cd;</div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> Mix[0][2][im] = -s13*sd;</div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> Mix[1][0][re] = -s12*c23-c12*s23*s13*cd;</div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> Mix[1][0][im] = -c12*s23*s13*sd;</div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> Mix[1][1][re] = c12*c23-s12*s23*s13*cd;</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> Mix[1][1][im] = -s12*s23*s13*sd;</div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> Mix[1][2][re] = s23*c13;</div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> Mix[1][2][im] = 0.0;</div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> Mix[2][0][re] = s12*s23-c12*c23*s13*cd;</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> Mix[2][0][im] = -c12*c23*s13*sd;</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> Mix[2][1][re] = -c12*s23-s12*c23*s13*cd;</div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> Mix[2][1][im] = -s12*c23*s13*sd;</div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> Mix[2][2][re] = c23*c13;</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> Mix[2][2][im] = 0.0;</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> else</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> {</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> Mix[0][0][re] = c12;</div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> Mix[0][0][im] = 0.0;</div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> Mix[0][1][re] = s12*c23;</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> Mix[0][1][im] = 0.0;</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> Mix[0][2][re] = s12*s23;</div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> Mix[0][2][im] = 0.0;</div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> Mix[1][0][re] = -s12*c13;</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> Mix[1][0][im] = 0.0;</div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> Mix[1][1][re] = c12*c13*c23+s13*s23*cd;</div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> Mix[1][1][im] = s13*s23*sd;</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> Mix[1][2][re] = c12*c13*s23-s13*c23*cd;</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> Mix[1][2][im] = -s13*c23*sd;</div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> Mix[2][0][re] = -s12*s13;</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> Mix[2][0][im] = 0.0;</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> Mix[2][1][re] = c12*s13*c23-c13*s23*cd;</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> Mix[2][1][im] = -c13*s23*sd;</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> Mix[2][2][re] = c12*s13*s23+c13*c23*cd;</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> Mix[2][2][im] = c13*c23*sd;</div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>}</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span>__host__ void setmass(double dms21, double dms23, double dmVacVac[][3])</div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span>{</div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> double delta=5.0e-9;</div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> double mVac[3];</div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> mVac[0] = 0.0;</div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> mVac[1] = dms21;</div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> mVac[2] = dms21+dms23;</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> /* Break any degeneracies */</div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> if (dms21==0.0) mVac[0] -= delta;</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> if (dms23==0.0) mVac[2] += delta;</div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> dmVacVac[0][0] = dmVacVac[1][1] = dmVacVac[2][2] = 0.0;</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> dmVacVac[0][1] = mVac[0]-mVac[1]; dmVacVac[1][0] = -dmVacVac[0][1];</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> dmVacVac[0][2] = mVac[0]-mVac[2]; dmVacVac[2][0] = -dmVacVac[0][2];</div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> dmVacVac[1][2] = mVac[1]-mVac[2]; dmVacVac[2][1] = -dmVacVac[1][2];</div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>}</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>/// onwards are for matter effects calcs</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span>__device__ void get_product(double L, double E, double rho,</div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> double Mix[][3][2], double dmMatVac[][3], double dmMatMat[][3],</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> int antitype, double product[][3][3][2])</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>{</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> double fac=0.0;</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> double twoEHmM[3][3][3][2];</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> double tworttwoGf = 1.52588e-4;</div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> /* (1/2)*(1/(h_bar*c)) in units of GeV/(eV^2-km) */</div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> /* Reverse the sign of the potential depending on neutrino type */</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> //if (matterFlavor == nue_type) {</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> /* If we&#39;re doing matter effects for electron neutrinos */</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> if (antitype&lt;0) fac = tworttwoGf*E*rho; /* Anti-neutrinos */</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> else fac = -tworttwoGf*E*rho; /* Real-neutrinos */</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span>// }</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> //printf(&quot;gpu product fac = %f\n&quot;, fac);</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span>/*</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> else if (matterFlavor == sterile_type) {</div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> // If we&#39;re doing matter effects for sterile neutrinos</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> if (antitype&lt;0) fac = -0.5*tworttwoGf*E*rho; // Anti-neutrinos</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> else fac = 0.5*tworttwoGf*E*rho; // Real-neutrinos</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> } */</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> /*printf(&quot;gpu realpart&quot;);</div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> printf(&quot;%f %f %f \n&quot;, Mix[0][0][re], Mix[1][0][re], Mix[2][0][re]);</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> printf(&quot;%f %f %f \n&quot;, Mix[0][1][re], Mix[1][1][re], Mix[2][1][re]);</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> printf(&quot;%f %f %f \n&quot;, Mix[0][2][re], Mix[1][2][re], Mix[2][2][re]);</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> printf(&quot;gpu imgpart&quot;);</div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> printf(&quot;%f %f %f \n&quot;, Mix[0][0][im], Mix[1][0][im], Mix[2][0][im]);</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> printf(&quot;%f %f %f \n&quot;, Mix[0][1][im], Mix[1][1][im], Mix[2][1][im]);</div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> printf(&quot;%f %f %f \n&quot;, Mix[0][2][im], Mix[1][2][im], Mix[2][2][im]);*/</div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> int anti_ = (antitype &lt; 0 ? mix_im_sign_t : mix_im_sign_f);</div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> /* Calculate the matrix 2EH-M_j */</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> for (int n=0; n&lt;3; n++)</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> {</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> for (int m=0; m&lt;3; m++)</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> {</div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> twoEHmM[n][m][0][re] =</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> -fac*(Mix[0][n][re]*Mix[0][m][re]+(anti_*Mix[0][n][im])*(anti_*Mix[0][m][im]));</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> twoEHmM[n][m][0][im] =</div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> -fac*(Mix[0][n][re]*(anti_*Mix[0][m][im])-(anti_*Mix[0][n][im])*Mix[0][m][re]);</div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> twoEHmM[n][m][1][re] = twoEHmM[n][m][2][re] = twoEHmM[n][m][0][re];</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> twoEHmM[n][m][1][im] = twoEHmM[n][m][2][im] = twoEHmM[n][m][0][im];</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> /*#else</div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> twoEHmM[n][m][0][re] =</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> -fac*(Mix[0][n][re]*Mix[0][m][re]);</div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> printf(&quot;g%i %i %f %f %f\n&quot;, n, m, fac, Mix[0][n][re], Mix[0][m][re]);</div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> twoEHmM[n][m][0][im] = 0 ;</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> twoEHmM[n][m][1][re] = twoEHmM[n][m][2][re] = twoEHmM[n][m][0][re];</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> twoEHmM[n][m][1][im] = twoEHmM[n][m][2][im] = twoEHmM[n][m][0][im];</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> //#endif*/</div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> //printf(&quot;gpuMix[][][re] = %f , gpuMix[][][im] = %f\n&quot;, Mix[n][m][re], Mix[n][m][im]);</div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> if (n==m) for (int j=0; j&lt;3; j++)</div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> {</div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> twoEHmM[n][m][j][re] -= dmMatVac[j][n];</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> //printf(&quot;gpu -vac %f \n&quot;, dmMatVac[j][n]);</div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> //if (n== 2 &amp;&amp; m ==2) printf(&quot;twoEHmMgpu %f \n&quot;, twoEHmM[n][m][0][re]);</div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> }</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> }</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span>/* Calculate the product in eq.(10) of twoEHmM for j!=k */</div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span>//cudaMemset(product, 0, 3*3*3*2*sizeof(double));</div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> for (int i=0; i&lt;3; i++)</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> for (int j=0; j&lt;3; j++)</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> for (int k=0; k&lt;3; k++)</div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> {</div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> product[i][j][k][re] = 0;</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> product[i][j][k][im] = 0;</div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span>for (int i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> for (int j=0; j&lt;3; j++) {</div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> for (int k=0; k&lt;3; k++) {</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> product[i][j][0][re] +=</div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> twoEHmM[i][k][1][re]*twoEHmM[k][j][2][re] -</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> twoEHmM[i][k][1][im]*twoEHmM[k][j][2][im];</div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> product[i][j][0][im] +=</div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> twoEHmM[i][k][1][re]*twoEHmM[k][j][2][im] +</div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> twoEHmM[i][k][1][im]*twoEHmM[k][j][2][re];</div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> product[i][j][1][re] +=</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> twoEHmM[i][k][2][re]*twoEHmM[k][j][0][re] -</div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> twoEHmM[i][k][2][im]*twoEHmM[k][j][0][im];</div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> product[i][j][1][im] +=</div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> twoEHmM[i][k][2][re]*twoEHmM[k][j][0][im] +</div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> twoEHmM[i][k][2][im]*twoEHmM[k][j][0][re];</div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> product[i][j][2][re] +=</div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> twoEHmM[i][k][0][re]*twoEHmM[k][j][1][re] -</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> twoEHmM[i][k][0][im]*twoEHmM[k][j][1][im];</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> product[i][j][2][im] +=</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> twoEHmM[i][k][0][re]*twoEHmM[k][j][1][im] +</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> twoEHmM[i][k][0][im]*twoEHmM[k][j][1][re];</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> /*#else</div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> product[i][j][0][re] +=</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> twoEHmM[i][k][1][re]*twoEHmM[k][j][2][re];</div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> product[i][j][1][re] +=</div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> twoEHmM[i][k][2][re]*twoEHmM[k][j][0][re];</div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> product[i][j][2][re] +=</div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> twoEHmM[i][k][0][re]*twoEHmM[k][j][1][re];</div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> //#endif */</div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> product[i][j][0][re] /= (dmMatMat[0][1]*dmMatMat[0][2]);</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> product[i][j][0][im] /= (dmMatMat[0][1]*dmMatMat[0][2]);</div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> product[i][j][1][re] /= (dmMatMat[1][2]*dmMatMat[1][0]);</div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> product[i][j][1][im] /= (dmMatMat[1][2]*dmMatMat[1][0]);</div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> product[i][j][2][re] /= (dmMatMat[2][0]*dmMatMat[2][1]);</div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> product[i][j][2][im] /= (dmMatMat[2][0]*dmMatMat[2][1]);</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> </div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> /*#else</div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> product[i][j][0][re] /= (dmMatMat[0][1]*dmMatMat[0][2]);</div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> product[i][j][1][re] /= (dmMatMat[1][2]*dmMatMat[1][0]);</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> product[i][j][2][re] /= (dmMatMat[2][0]*dmMatMat[2][1]);</div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> //#endif*/</div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> }</div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> }</div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span>}</div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span>/***********************************************************************</div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> getM</div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> Compute the matter-mass vector M, dM = M_i-M_j and</div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> and dMimj. type&lt;0 means anti-neutrinos type&gt;0 means &quot;real&quot; neutrinos</div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span>***********************************************************************/</div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> __device__ void getM(double Enu, double rho,</div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> double Mix[][3][2], double dmVacVac[][3], int antitype,</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> double dmMatMat[][3], double dmMatVac[][3])</div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span>{</div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> int i, j, k;</div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> double alpha, beta, gamma, fac=0.0, arg, tmp;</div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> double alphaV, betaV, gammaV, argV, tmpV;</div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> double theta0, theta1, theta2;</div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> double theta0V, theta1V, theta2V;</div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> double mMatU[3], mMatV[3], mMat[3];</div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> double tworttwoGf = 1.52588e-4;</div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> /* Equations (22) fro Barger et.al.*/</div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> /* Reverse the sign of the potential depending on neutrino type */</div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> //if (matterFlavor == nue_type) {</div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> /* If we&#39;re doing matter effects for electron neutrinos */</div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> if (antitype&lt;0) fac = tworttwoGf*Enu*rho; /* Anti-neutrinos */</div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> else fac = -tworttwoGf*Enu*rho; /* Real-neutrinos */</div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> //}</div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> //printf(&quot;GPU fac = %f = %f %f %f\n&quot;, fac, tworttwoGf, Enu, rho);</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> //else if (matterFlavor == sterile_type) {</div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> /* If we&#39;re doing matter effects for sterile neutrinos */</div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> //if (antitype&lt;0) fac = -0.5*tworttwoGf*Enu*rho; /* Anti-neutrinos */</div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> </div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> // else fac = 0.5*tworttwoGf*Enu*rho; /* Real-neutrinos */</div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> // }</div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> /* The strategy to sort out the three roots is to compute the vacuum</div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> * mass the same way as the &quot;matter&quot; masses are computed then to sort</div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> * the results according to the input vacuum masses</div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> */</div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> // if we are doing anti-nu, the imaginary part is multiplied by -1</div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> int anti_ = (antitype &lt; 0 ? mix_im_sign_t : mix_im_sign_f);</div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> alpha = fac + dmVacVac[0][1] + dmVacVac[0][2];</div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> alphaV = dmVacVac[0][1] + dmVacVac[0][2];</div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> beta = dmVacVac[0][1]*dmVacVac[0][2] +</div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> fac*(dmVacVac[0][1]*(1.0 -</div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> Mix[elec][1][re]*Mix[elec][1][re] -</div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> (Mix[elec][1][im])*(Mix[elec][1][im])) +</div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> dmVacVac[0][2]*(1.0-</div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> Mix[elec][2][re]*Mix[elec][2][re] -</div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> (anti_*Mix[elec][2][im])*(anti_*Mix[elec][2][im])));</div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> betaV = dmVacVac[0][1]*dmVacVac[0][2];</div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> /*#else</div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> beta = dmVacVac[0][1]*dmVacVac[0][2] +</div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> fac*(dmVacVac[0][1]*(1.0 -</div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> Mix[elec][1][re]*Mix[elec][1][re]) +</div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> dmVacVac[0][2]*(1.0-</div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> Mix[elec][2][re]*Mix[elec][2][re]));</div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> betaV = dmVacVac[0][1]*dmVacVac[0][2];</div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> #endif*/</div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> gamma = fac*dmVacVac[0][1]*dmVacVac[0][2]*</div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> (Mix[elec][0][re]*Mix[elec][0][re]+(Mix[elec][0][im])*(Mix[elec][0][im]));</div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> gammaV = 0.0;</div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> /* #else</div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> gamma = fac*dmVacVac[0][1]*dmVacVac[0][2]*</div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> (Mix[elec][0][re]*Mix[elec][0][re]);</div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> gammaV = 0.0;</div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> //#endif */</div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> /* Compute the argument of the arc-cosine */</div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> tmp = alpha*alpha-3.0*beta;</div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> tmpV = alphaV*alphaV-3.0*betaV;</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> if (tmp&lt;0.0) {</div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> // fprintf(stderr, &quot;getM: alpha^2-3*beta &lt; 0 !\n&quot;);</div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> tmp = 0.0;</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> }</div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> //printf(&quot;GPU - fac %f alpha %f beta %f gamma %f\n&quot;, fac, alpha, beta, gamma);</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> /* Equation (21) */</div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> arg = (2.0*alpha*alpha*alpha-9.0*alpha*beta+27.0*gamma)/</div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> (2.0*sqrt(tmp*tmp*tmp));</div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> if (fabs(arg)&gt;1.0) arg = arg/fabs(arg);</div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> argV = (2.0*alphaV*alphaV*alphaV-9.0*alphaV*betaV+27.0*gammaV)/</div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> (2.0*sqrt(tmpV*tmpV*tmpV));</div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> if (fabs(argV)&gt;1.0) argV = argV/fabs(argV);</div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> </div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> /* These are the three roots the paper refers to */</div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> theta0 = acos(arg)/3.0;</div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> theta1 = theta0-(2.0*M_PI/3.0);</div> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> theta2 = theta0+(2.0*M_PI/3.0);</div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> theta0V = acos(argV)/3.0;</div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> theta1V = theta0V-(2.0*M_PI/3.0);</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> theta2V = theta0V+(2.0*M_PI/3.0);</div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> mMatU[0] = mMatU[1] = mMatU[2] = -(2.0/3.0)*sqrt(tmp);</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> mMatU[0] *= cos(theta0); mMatU[1] *= cos(theta1); mMatU[2] *= cos(theta2);</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> tmp = dmVacVac[0][0] - alpha/3.0;</div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> mMatU[0] += tmp; mMatU[1] += tmp; mMatU[2] += tmp;</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> mMatV[0] = mMatV[1] = mMatV[2] = -(2.0/3.0)*sqrt(tmpV);</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> mMatV[0] *= cos(theta0V); mMatV[1] *= cos(theta1V); mMatV[2] *= cos(theta2V);</div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> tmpV = dmVacVac[0][0] - alphaV/3.0;</div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> </div> +<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> mMatV[0] += tmpV; mMatV[1] += tmpV; mMatV[2] += tmpV;</div> +<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div> +<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> /* Sort according to which reproduce the vaccum eigenstates */</div> +<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> for (i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> tmpV = fabs(dmVacVac[i][0]-mMatV[0]);</div> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> k = 0;</div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> for (j=1; j&lt;3; j++) {</div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> tmp = fabs(dmVacVac[i][0]-mMatV[j]);</div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> if (tmp&lt;tmpV) {</div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> k = j;</div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> tmpV = tmp;</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> }</div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> }</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> mMat[i] = mMatU[k];</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> }</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> for (i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> for (j=0; j&lt;3; j++) {</div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> dmMatMat[i][j] = mMat[i] - mMat[j];</div> +<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> dmMatVac[i][j] = mMat[i] - dmVacVac[j][0];</div> +<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> //printf(&quot;gpu mmat %f\n&quot;, mMat[i]);</div> +<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> //printf(&quot;%i %i %f %f\n&quot;,i,j,dmMatVac[i][j], dmMatMat[i][j]);</div> +<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> //if (i == 2 &amp;&amp; j == 2) printf(&quot;hellogpu %f %f\n&quot;, dmMatMat[i][j], dmMatVac[i][j]);</div> +<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> }</div> +<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> }</div> +<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span>}</div> +<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div> +<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span>/***********************************************************************</div> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> getA</div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> Calculate the transition amplitude matrix A (equation 10)</div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span>***********************************************************************/</div> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> </div> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span>__device__ void getA(double L, double E, double rho,</div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> double Mix[][3][2], double dmMatVac[][3], double dmMatMat[][3],</div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> int antitype, double A[3][3][2], double phase_offset)</div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span>{</div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> //int n, m, i, j, k;</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> double /*fac=0.0,*/ arg, c, s;</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> double X[3][3][2];</div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> double product[3][3][3][2];</div> +<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> /* (1/2)*(1/(h_bar*c)) in units of GeV/(eV^2-km) */</div> +<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> const double LoEfac = 2.534;</div> +<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> </div> +<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> if ( phase_offset==0.0 )</div> +<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> {</div> +<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> //printf(&quot;%f %f\n&quot;, L, E);</div> +<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> get_product(L, E, rho, Mix, dmMatVac, dmMatMat, antitype, product);</div> +<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> }</div> +<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> /* Make the sum with the exponential factor */</div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> //cudaMemset(X, 0, 3*3*2*sizeof(double));</div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> for (int i = 0; i &lt; 3; ++i)</div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> for (int j = 0; j &lt; 3; ++j)</div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> for (int k = 0; k &lt; 2; ++k)</div> +<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> X[i][j][k] = 0;</div> +<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> </div> +<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> for (int k=0; k&lt;3; k++)</div> +<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> {</div> +<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> arg = -LoEfac*dmMatVac[k][0]*L/E;</div> +<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> if ( k==2 ) arg += phase_offset ;</div> +<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> c = cos(arg);</div> +<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> s = sin(arg);</div> +<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> for (int i=0; i&lt;3; i++)</div> +<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> {</div> +<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> for (int j=0; j&lt;3; j++)</div> +<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> {</div> +<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> ///#ifndef ZERO_CP</div> +<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> X[i][j][re] += c*product[i][j][k][re] - s*product[i][j][k][im];</div> +<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> X[i][j][im] += c*product[i][j][k][im] + s*product[i][j][k][re];</div> +<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> /*#else</div> +<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> X[i][j][re] += c*product[i][j][k][re];</div> +<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> X[i][j][im] += s*product[i][j][k][re];</div> +<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> #endif */</div> +<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> }</div> +<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div> +<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> }</div> +<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> // printf(&quot;\n testy %f %f &quot;,X[0][0][im], Mix[0][0][im]);</div> +<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> /* Compute the product with the mixing matrices */</div> +<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> //cudaMemset(A, 0, 3*3*2*sizeof(double));</div> +<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div> +<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span>int anti_ = (antitype &lt; 0 ? mix_im_sign_t : mix_im_sign_f);</div> +<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div> +<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> for(int i=0; i &lt; 3; ++i)</div> +<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> for(int j = 0; j &lt; 3; ++j)</div> +<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> for(int k = 0; k &lt; 2; ++k)</div> +<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> {</div> +<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> //printf(&quot;gpu X = %f\n&quot;, X[i][j][k]);</div> +<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> A[i][j][k] = 0;</div> +<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> }</div> +<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div> +<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> for (int n=0; n&lt;3; n++) {</div> +<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> for (int m=0; m&lt;3; m++) {</div> +<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> for (int i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> for (int j=0; j&lt;3; j++) { </div> +<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> //#ifndef ZERO_CP</div> +<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> A[n][m][re] +=</div> +<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> Mix[n][i][re]*X[i][j][re]*Mix[m][j][re] +</div> +<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> (Mix[n][i][re])*X[i][j][im]*(anti_*Mix[m][j][im]) +</div> +<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> (anti_*Mix[n][i][im])*X[i][j][re]*(anti_*Mix[m][j][im]) -</div> +<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> (anti_*Mix[n][i][im])*X[i][j][im]*Mix[m][j][re];</div> +<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> //printf(&quot;gpu regret %f %f %f \n&quot;,Mix[n][i][re], X[i][j][im], Mix[m][j][im]);</div> +<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> A[n][m][im] +=</div> +<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> (anti_*Mix[n][i][im])*X[i][j][im]*(anti_*Mix[m][j][im]) +</div> +<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> (anti_*Mix[n][i][im])*X[i][j][re]*Mix[m][j][re] +</div> +<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> Mix[n][i][re]*X[i][j][im]*Mix[m][j][re] -</div> +<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> Mix[n][i][re]*X[i][j][re]*(anti_*Mix[m][j][im]);</div> +<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> /*#else</div> +<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> A[n][m][re] +=</div> +<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> Mix[n][i][re]*X[i][j][re]*Mix[m][j][re];</div> +<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> A[n][m][im] +=</div> +<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> Mix[n][i][re]*X[i][j][im]*Mix[m][j][re];</div> +<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> #endif */</div> +<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> //printf(&quot;gpu mix %f\n&quot;, Mix[m][j][re]);</div> +<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> //printf(&quot;\n gpu %i %i %i A %f&quot;, n, m, re, A[n][m][re]);</div> +<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> }</div> +<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> }</div> +<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> }</div> +<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> }</div> +<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span>}</div> +<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> </div> +<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span>////#include &quot;mosc.cu&quot;</div> +<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div> +<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div> +<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span>static double dm[3][3];</div> +<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span>static double mix[3][3][2];</div> +<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span>//static double Ain[3][3][2];</div> +<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span>static double dm21,dm32,s12,s23,s31,cd;</div> +<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div> +<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span>extern &quot;C&quot; __host__ double getMixVal(int x, int y, int z)</div> +<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span>{</div> +<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> return mix[x][y][z];</div> +<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span>}</div> +<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div> +<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span>extern &quot;C&quot; __host__ double getT13()</div> +<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span>{</div> +<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> return dm[1][1];</div> +<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span>}</div> +<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> </div> +<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span>__host__ void init_mixing_matrix(double dm21f,double dm32f,double s12f,double s23f,double s31f,double cdf)</div> +<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span>{</div> +<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> dm21=dm21f ; dm32=dm32f ;</div> +<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> s12=s12f ; s23=s23f ; s31=s31f ;</div> +<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> cd=cdf; </div> +<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span>// CWRET: comment out to rid compiler warning (never used)</div> +<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> //setMatterFlavor(nue_type);</div> +<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> setmix_sin(s12,s23,s31,cd,mix);</div> +<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> setmass(dm21,dm32,dm); </div> +<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> // cudaMalloc((void **) &amp;device_array, size);</div> +<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> //cudaMalloc((void **) &amp;Ain,3*3*2*sizeof(double));</div> +<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> //Ain[0][0][re] = Ain[1][1][re] = Ain[2][2][re] = 1.0;</div> +<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> </div> +<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> //**********</div> +<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> /* printf(&quot;dm21,dm32 : %f %f \n&quot;,dm21,dm32);</div> +<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> printf(&quot;s12,s23,s31 : %f %f %f \n&quot;,s12,s23,s31);</div> +<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> printf(&quot;dm : %f %f %f \n&quot;,dm[0][0],dm[0][1],dm[0][2]);</div> +<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> printf(&quot;dm : %f %f %f \n&quot;,dm[1][0],dm[1][1],dm[1][2]);</div> +<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> printf(&quot;dm : %f %f %f \n&quot;,dm[2][0],dm[2][1],dm[2][2]);</div> +<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> ***********</div> +<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> **********</div> +<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> printf(&quot;mix : %f %f %f \n&quot;,mix[0][0][0],mix[0][1][0],mix[0][2][0]);</div> +<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> printf(&quot;mix : %f %f %f \n&quot;,mix[1][0][0],mix[1][1][0],mix[1][2][0]);</div> +<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> printf(&quot;mix : %f %f %f \n&quot;,mix[2][0][0],mix[2][1][0],mix[2][2][0]);</div> +<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> printf(&quot;mix : %f %f %f \n&quot;,mix[0][0][1],mix[0][1][1],mix[0][2][1]);</div> +<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> printf(&quot;mix : %f %f %f \n&quot;,mix[1][0][1],mix[1][1][1],mix[1][2][1]);</div> +<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> printf(&quot;mix : %f %f %f \n&quot;,mix[2][0][1],mix[2][1][1],mix[2][2][1]);*/</div> +<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> //***********</div> +<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span>} </div> +<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div> +<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span>// main kernel</div> +<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span>__global__ void get_vacuum_probability(double mix_device[][3][2], int nutype, int beta, double *energy, int n, double path, double *osc_weight, double tdm21, double tdm32)</div> +<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span>{</div> +<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> double lovere ;</div> +<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> double s21, s32, s31, ss21, ss32, ss31 ;</div> +<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> int ista, iend ;</div> +<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> double prob[3][3];</div> +<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> //double prob2[3][3][2] *****************</div> +<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> </div> +<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> // index</div> +<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> int idx = (blockIdx.x * blockDim.x + threadIdx.x);</div> +<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> // if (idx &gt; n) return;</div> +<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div> +<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> // make more precise 20081003 rvw</div> +<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> lovere= 1.26693281*(path)/(energy[idx]);</div> +<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> s21 = sin(tdm21*lovere);</div> +<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> s32 = sin(tdm32*lovere);</div> +<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> s31 = sin((tdm21+tdm32)*lovere) ;</div> +<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> ss21 = s21*s21 ;</div> +<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> ss32 = s32*s32 ;</div> +<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> ss31 = s31*s31 ;</div> +<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> </div> +<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> /* ista = abs(*nutype) - 1 ; */</div> +<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> for ( ista=0 ; ista&lt;3 ; ista++ )</div> +<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> {</div> +<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> for ( iend=0 ; iend&lt;2 ; iend++ )</div> +<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> {</div> +<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> prob[ista][iend] = mix_device[ista][0][re]*mix_device[iend][0][re]*</div> +<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> mix_device[ista][1][re]*mix_device[iend][1][re]*ss21;</div> +<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> prob[ista][iend] += mix_device[ista][1][re]*mix_device[iend][1][re]*</div> +<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> mix_device[ista][2][re]*mix_device[iend][2][re]*ss32;</div> +<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> prob[ista][iend] += mix_device[ista][2][re]*mix_device[iend][2][re]*</div> +<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> mix_device[ista][0][re]*mix_device[iend][0][re]*ss31;</div> +<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> if ( iend == ista )</div> +<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> {</div> +<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> prob[ista][iend] = 1.0-4.0*prob[ista][iend];</div> +<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div> +<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> else</div> +<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> {</div> +<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> prob[ista][iend] = -4.0*prob[ista][iend];</div> +<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div> +<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> }</div> +<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> prob[ista][2]=1.0-prob[ista][0]-prob[ista][1];</div> +<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> }</div> +<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div> +<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> nutype = abs(nutype);</div> +<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> beta = abs(beta);</div> +<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> </div> +<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> //if ( nutype &gt; 0 )</div> +<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> double ans = prob[nutype-1][beta-1];</div> +<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> osc_weight[idx] = ans;</div> +<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> </div> +<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span>/* if ( nutype &lt; 0 ) // assuming CPT!!!</div> +<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> osc_weight[idx] = prob[beta-1][nutype-1];</div> +<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> </div> +<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> osc_weight[idx]= 1.2;*/</div> +<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span>}</div> +<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> </div> +<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> </div> +<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span>extern &quot;C&quot; __host__ double* GetVacuumProb( int Alpha, int Beta , double *energy_host, int n, double Path )</div> +<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span>{</div> +<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> // alpha -&gt; 1:e 2:mu 3:tau</div> +<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> // Energy[GeV]</div> +<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> // Path[km]</div> +<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> /// simple referes to the fact that in the 3 flavor analysis</div> +<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> // the solar mass term is zero</div> +<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> </div> +<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> // create a pointer to device memory</div> +<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> double *energy_device;</div> +<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> </div> +<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> // specify size of array</div> +<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> size_t size = n * sizeof(double);</div> +<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> </div> +<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> // CUDA function to allocate memory of size bytes to the address pointed to by device_array</div> +<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> cudaMalloc((void **) &amp;energy_device, size);</div> +<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> </div> +<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> // copy the array to be squared to the device</div> +<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> cudaMemcpy(energy_device, energy_host, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> </div> +<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> double *osc_weights;</div> +<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> cudaMalloc((void **) &amp;osc_weights, size);</div> +<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div> +<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> // copy the mixing matrix to the device</div> +<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> </div> +<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> </div> +<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> //double mix_device[3][3][2];</div> +<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> mixArray *mix_device;</div> +<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> //mix[0][0][0] = 1;</div> +<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> cudaMalloc((void **) &amp;mix_device,mixsize);</div> +<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> cudaMemcpy(mix_device, mix, mixsize, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> </div> +<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> dim3 block_size;</div> +<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> block_size.x = 1024;</div> +<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> </div> +<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> dim3 grid_size;</div> +<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> grid_size.x = (n / block_size.x) + 1;</div> +<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> </div> +<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> //int block_size = 256;</div> +<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> //int num_blocks = 1;//n/block_size;</div> +<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div> +<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> get_vacuum_probability&lt;&lt;&lt;grid_size, block_size&gt;&gt;&gt;( mix_device, Alpha, Beta, energy_device, n, Path, osc_weights, dm21, dm32);</div> +<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> </div> +<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> //cudaThreadSynchronize();</div> +<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> </div> +<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> // copy the results back</div> +<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> double *osc_weights_host = (double*)malloc(size);</div> +<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> cudaMemcpy(osc_weights_host, osc_weights, size, cudaMemcpyDeviceToHost);</div> +<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div> +<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> cudaFree(energy_device);</div> +<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> cudaFree(osc_weights);</div> +<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> cudaFree(mix_device);</div> +<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> </div> +<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> return osc_weights_host; </div> +<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span>}</div> +<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> </div> +<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span>extern &quot;C&quot; __host__ void setMNS(double x12, double x13, double x23, double m21, double m23, double Delta,/* double Energy_ ,*/ bool kSquared)</div> +<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span>{</div> +<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> </div> +<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> double sin12;</div> +<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> double sin13;</div> +<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> double sin23;</div> +<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> </div> +<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> if (kSquared)</div> +<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> {</div> +<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> sin12 = sqrt(x12);</div> +<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> sin13 = sqrt(x13);</div> +<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> sin23 = sqrt(x23);</div> +<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> }</div> +<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> else</div> +<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> {</div> +<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> sin12 = sqrt(0.5*(1 - sqrt(1 - x12)));</div> +<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> sin13 = sqrt(0.5*(1 - sqrt(1 - x13)));</div> +<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> sin23 = sqrt(0.5*(1 - sqrt(1 - x23)));</div> +<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> }</div> +<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> // 1,2,0.5,0.1,0.1,0.1</div> +<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> init_mixing_matrix(m21, m23, sin12, sin23, sin13, Delta);</div> +<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> </div> +<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span>}</div> +<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> </div> +<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span>//////////////////////////////////////////////////////////////////////////////////</div> +<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span>// the following functions are DEVICE functions for the matter effects calculation</div> +<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span>//////////////////////////////////////////////////////////////////////////////////</div> +<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> </div> +<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span>__device__ void clear_complex_matrix(double A[][3][2])</div> +<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span>{</div> +<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> //memset(A,0,sizeof(double)*18); // turn into a cuda fucniton</div> +<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> // cudaMemset((void **) A,0,sizeof(double)*18);</div> +<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> for (int i = 0; i &lt; 3; ++i)</div> +<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> for (int j = 0; j &lt; 3; ++j)</div> +<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> for (int k = 0; k &lt; 2; ++k)</div> +<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> A[i][j][k] = 0;</div> +<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span>}</div> +<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> </div> +<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span>// ************************************</div> +<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span>__device__ void copy_complex_matrix(double A[][3][2], double B[][3][2])</div> +<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span>{</div> +<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> //memcpy(B,A,sizeof(double)*18);</div> +<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> for (int i = 0; i &lt; 3; ++i)</div> +<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> for (int j = 0; j &lt; 3; ++j)</div> +<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> for (int k = 0; k &lt; 2; ++k)</div> +<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> B[i][j][k] = A[i][j][k];</div> +<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span>}</div> +<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> </div> +<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span>/*</div> +<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> multiply complex 3x3 matrix and 3 vector</div> +<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> W = A X V</div> +<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> */</div> +<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> </div> +<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> __device__ void multiply_complex_matvec(double A[][3][2], double V[][2],double W[][2])</div> +<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span>{ </div> +<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> for(int i=0;i&lt;3;i++)</div> +<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span>{</div> +<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> W[i][re] = A[i][0][re]*V[0][re]-A[i][0][im]*V[0][im]+</div> +<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> A[i][1][re]*V[1][re]-A[i][1][im]*V[1][im]+</div> +<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> A[i][2][re]*V[2][re]-A[i][2][im]*V[2][im] ;</div> +<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> W[i][im] = A[i][0][re]*V[0][im]+A[i][0][im]*V[0][re]+</div> +<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> A[i][1][re]*V[1][im]+A[i][1][im]*V[1][re]+</div> +<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> A[i][2][re]*V[2][im]+A[i][2][im]*V[2][re] ;</div> +<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> }</div> +<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span>}</div> +<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> </div> +<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span>__device__ void multiply_complex_matrix(double A[][3][2], double B[][3][2], double C[][3][2])</div> +<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span>{</div> +<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> int i,j,k;</div> +<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> </div> +<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> for (i=0; i&lt;3; i++)</div> +<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> {</div> +<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> for (j=0; j&lt;3; j++)</div> +<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> {</div> +<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> for (k=0; k&lt;3; k++)</div> +<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> {</div> +<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> C[i][j][re] += A[i][k][re] * B[k][j][re] - A[i][k][im] * B[k][j][im];</div> +<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> C[i][j][im] += A[i][k][im] * B[k][j][re] + A[i][k][re] * B[k][j][im];</div> +<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> }</div> +<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> }</div> +<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> }</div> +<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span>}</div> +<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> </div> +<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> </div> +<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span>// want to output flavor composition of</div> +<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span>// pure mass eigenstate, state</div> +<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span>__device__ void convert_from_mass_eigenstate( int state, int flavor, double pure[][2], double mix[3][3][2] )</div> +<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span>{</div> +<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> int i,j; //,k; *********************************</div> +<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> double mass [3][2];</div> +<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> double conj [3][3][2];</div> +<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> int lstate = state - 1;</div> +<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> int factor = ( flavor &gt; 0 ? -1. : 1. );</div> +<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> </div> +<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> // need the conjugate for neutrinos but not for</div> +<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> // anti-neutrinos</div> +<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> for (i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> mass[i][0] = ( lstate == i ? 1.0 : 0. );</div> +<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> mass[i][1] = ( 0. );</div> +<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> }</div> +<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> </div> +<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> for (i=0; i&lt;3; i++) {</div> +<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> for (j=0; j&lt;3; j++) {</div> +<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> conj[i][j][re] = mix[i][j][re];</div> +<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> conj[i][j][im] = factor*mix[i][j][im];</div> +<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> }</div> +<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> }</div> +<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> multiply_complex_matvec(conj, mass, pure);</div> +<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span>}</div> +<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> </div> +<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> </div> +<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> </div> +<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span>__device__ void get_transition_matrix(int nutypei,double Enuf,double rhof,double Lenf,double Aout[][3][2],double phase_offsetf, double mix[3][3][2], double dm[3][3])</div> +<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span>{</div> +<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> int nutype; //, make_average ;**************</div> +<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> double Enu, rho, Len ;</div> +<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> double dmMatVac[3][3], dmMatMat[3][3];</div> +<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> double phase_offset;</div> +<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> nutype=nutypei;</div> +<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> Enu=Enuf ;</div> +<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> rho=rhof ;</div> +<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> Len=Lenf ;</div> +<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> phase_offset = phase_offsetf ;</div> +<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> /* propagate_mat(Ain,rho,Len,Enu,mix,dm,nutype,Aout); */</div> +<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> //printf(&quot;GPU - %f %f %i \n&quot;, Enu, rho, nutype);</div> +<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> getM(Enu, rho, mix, dm, nutype, dmMatMat, dmMatVac);</div> +<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> getA(Len, Enu, rho, mix, dmMatVac, dmMatMat, nutype, Aout,phase_offset);</div> +<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> </div> +<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> //for (int i = 0; i &lt; 3; ++i)</div> +<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> //printf(&quot;mix %f %f %f\n&quot;, mix[0][i][0], mix[1][i][0], mix[2][i][0]);</div> +<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> //printf(&quot;gpu dm %f %f %f\n&quot;, dm[0][0], dm[1][0], dm[2][0]);</div> +<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> //printf(&quot;Aout gpu %f %f %f\n&quot;, Aout[0][0][0], Aout[1][0][0], Aout[2][0][0]);</div> +<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> </div> +<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> // Aout[0][0][0] = dm[0][0];</div> +<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span>}</div> +<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> </div> +<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> </div> +<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span>// the colonel! (kernel...)</div> +<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span>__global__ void propagateLinear(int Alpha, int Beta, double Path, double Density, /*double Mix[3][3][2], double dm[3][3],*/ double *Energy, double *osc_w, int n)</div> +<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span>{</div> +<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> // here we go</div> +<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> bool kUseMassEigenstates = false; // quick hack for now</div> +<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> int idx = (blockIdx.x * blockDim.x + threadIdx.x);</div> +<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> if (idx &lt; n)</div> +<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> {</div> +<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> double Probability[3][3];</div> +<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> </div> +<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> int i,j;</div> +<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> </div> +<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> double TransitionMatrix[3][3][2];</div> +<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> // double TransitionProduct[3][3][2];</div> +<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> // double TransitionTemp[3][3][2];</div> +<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> double RawInputPsi[3][2];</div> +<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> double OutputPsi[3][2];</div> +<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> </div> +<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> get_transition_matrix( Alpha,</div> +<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> Energy[idx], // in GeV</div> +<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> Density * 0.5,</div> +<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> Path, // in km</div> +<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> TransitionMatrix, // Output transition matrix</div> +<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> 0.0,</div> +<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> mix_device,</div> +<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> dm_device);</div> +<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> </div> +<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> //copy_complex_matrix( TransitionMatrix , TransitionProduct );</div> +<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> </div> +<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> for ( i = 0 ; i &lt; 3 ; i++ ){</div> +<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> for ( j = 0 ; j &lt; 3 ; j++ ){</div> +<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> Probability[i][j]=0;</div> +<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div> +<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> }</div> +<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> </div> +<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> for ( i = 0 ; i &lt; 3 ; i++ )</div> +<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> {</div> +<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> for ( j = 0 ; j &lt; 3 ; j++ )</div> +<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> { RawInputPsi[j][0] = 0.0; RawInputPsi[j][1] = 0.0; }</div> +<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> </div> +<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> if( kUseMassEigenstates )</div> +<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> convert_from_mass_eigenstate( i+1, Alpha, RawInputPsi, mix_device );</div> +<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> else</div> +<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> RawInputPsi[i][0] = 1.0;</div> +<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> </div> +<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> multiply_complex_matvec( TransitionMatrix /*Product*/, RawInputPsi, OutputPsi );</div> +<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> </div> +<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> </div> +<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div> +<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> Probability[i][0] += OutputPsi[0][0] * OutputPsi[0][0] + OutputPsi[0][1]*OutputPsi[0][1];</div> +<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> Probability[i][1] += OutputPsi[1][0] * OutputPsi[1][0] + OutputPsi[1][1]*OutputPsi[1][1];</div> +<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> Probability[i][2] += OutputPsi[2][0] * OutputPsi[2][0] + OutputPsi[2][1]*OutputPsi[2][1];</div> +<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> </div> +<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> }</div> +<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> </div> +<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> // now do the part that getprob usually does</div> +<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> int In = abs( Alpha );</div> +<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> int Out = abs( Beta );</div> +<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> osc_w[idx] = Probability[In-1][Out-1];</div> +<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> </div> +<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> }</div> +<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span>}</div> +<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> </div> +<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span>// this kernel calculates the weights for different combinations of P(alpha -&gt; beta)</div> +<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span>__global__ void propagateLinearAll(int *Alpha, int *Beta, double Path, double Density, /*double Mix[3][3][2], double dm[3][3],*/ double *Energy, double *osc_w, int n)</div> +<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span>{</div> +<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> bool kUseMassEigenstates = false; // quick hack for now</div> +<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> int idx = (blockIdx.x * blockDim.x + threadIdx.x);</div> +<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> if (idx &lt; n)</div> +<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> {</div> +<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> double Probability[3][3];</div> +<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> int i,j;</div> +<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> double TransitionMatrix[3][3][2];</div> +<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> double RawInputPsi[3][2];</div> +<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> double OutputPsi[3][2];</div> +<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> get_transition_matrix( Alpha[idx],</div> +<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> Energy[idx], // in GeV</div> +<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> Density * 0.5,</div> +<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> Path, // in km</div> +<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> TransitionMatrix, // Output transition matrix</div> +<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> 0.0,</div> +<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> mix_device,</div> +<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> dm_device);</div> +<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> </div> +<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> for ( i = 0 ; i &lt; 3 ; i++ )</div> +<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> {</div> +<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> for ( j = 0 ; j &lt; 3 ; j++ )</div> +<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> { RawInputPsi[j][0] = 0.0; RawInputPsi[j][1] = 0.0; }</div> +<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> </div> +<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> if( kUseMassEigenstates )</div> +<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> convert_from_mass_eigenstate( i+1, Alpha[idx], RawInputPsi, mix_device );</div> +<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> else</div> +<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> RawInputPsi[i][0] = 1.0;</div> +<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> multiply_complex_matvec( TransitionMatrix /*Product*/, RawInputPsi, OutputPsi );</div> +<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> </div> +<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> Probability[i][0] += OutputPsi[0][0] * OutputPsi[0][0] + OutputPsi[0][1]*OutputPsi[0][1];</div> +<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> Probability[i][1] += OutputPsi[1][0] * OutputPsi[1][0] + OutputPsi[1][1]*OutputPsi[1][1];</div> +<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> Probability[i][2] += OutputPsi[2][0] * OutputPsi[2][0] + OutputPsi[2][1]*OutputPsi[2][1];</div> +<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> }</div> +<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> int In = abs( Alpha[idx] );</div> +<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> int Out = abs( Beta[idx] );</div> +<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> osc_w[idx] = Probability[In-1][Out-1];</div> +<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> }</div> +<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span>}</div> +<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> </div> +<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span>extern &quot;C&quot; __host__ void GetProb(int Alpha, int Beta, double Path, double Density, double *Energy, int n, double *oscw)</div> +<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span>{</div> +<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> // copy DM matrix</div> +<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> size_t dmsize = 3*3*sizeof(double);</div> +<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> typedef double dmArray[3];</div> +<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> dmArray *d = (dmArray*)malloc(dmsize);</div> +<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> memcpy(d, &amp;dm, dmsize);</div> +<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> </div> +<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> cudaMemcpyToSymbol(dm_device, dm, dmsize);</div> +<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> //dmArray *dm_device;</div> +<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> //cudaMalloc((void **) &amp;dm_device, dmsize);</div> +<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> // cudaMemcpy(dm_device, dm, dmsize, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> </div> +<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> // copy mns matrix to device</div> +<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> </div> +<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> cudaMemcpyToSymbol(mix_device, mix, mixsize);</div> +<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> //mixArray *mix_device;</div> +<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> // cudaMalloc((void **) &amp;mix_device,mixsize);</div> +<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> //cudaMemcpy(mix_device, mix, mixsize, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> </div> +<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> // copy energy array to device</div> +<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> size_t size = n * sizeof(double);</div> +<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> double *energy_device = NULL;</div> +<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> </div> +<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> cudaMalloc((void **) &amp;energy_device, size);</div> +<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> cudaMemcpy(energy_device, Energy, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> </div> +<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> // allocate output memory space on the device</div> +<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> double *osc_weights;</div> +<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> cudaMalloc((void **) &amp;osc_weights, size);</div> +<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> </div> +<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> dim3 block_size;</div> +<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> block_size.x = 128;</div> +<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> </div> +<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> dim3 grid_size;</div> +<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> grid_size.x = (n / block_size.x) + 1;</div> +<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> </div> +<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> propagateLinear&lt;&lt;&lt;grid_size, block_size&gt;&gt;&gt;(Alpha, Beta, Path, Density, /*mix_device, dm_device,*/ energy_device, osc_weights, n);</div> +<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> //CudaCheckError();</div> +<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> </div> +<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> // copy the results back</div> +<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> cudaMemcpy(oscw, osc_weights, size, cudaMemcpyDeviceToHost);</div> +<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> </div> +<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> cudaFree(energy_device);</div> +<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> cudaFree(osc_weights);</div> +<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> // cudaFree(mix_device);</div> +<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> //cudaFree(dm_device);</div> +<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> free(m);</div> +<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> free(d);</div> +<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span>}</div> +<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> </div> +<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span>/*extern &quot;C&quot;*/ __host__ void GetProbAll(int *d_alpha, int *d_beta, double Path, double Density, double *energy_device, int n, double *osc_weights, double *oscw)</div> +<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span>{</div> +<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> // copy the dm matrix</div> +<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> /* size_t dmsize = 3*3*sizeof(double);</div> +<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> typedef double dmArray[3];</div> +<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> dmArray *d = (dmArray*)malloc(dmsize);</div> +<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> memcpy(d, &amp;dm, dmsize);</div> +<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> dmArray *dm_device;</div> +<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> cudaMalloc((void **) &amp;dm_device, dmsize);</div> +<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> cudaMemcpy(dm_device, dm, dmsize, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> </div> +<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> // copy mns matrix to device</div> +<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> mixArray *mix_device;</div> +<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> cudaMalloc((void **) &amp;mix_device,mixsize);</div> +<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> cudaMemcpy(mix_device, mix, mixsize, cudaMemcpyHostToDevice);*/</div> +<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> //CudaCheckError();</div> +<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> </div> +<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> // copy DM matrix</div> +<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> size_t dmsize = 3*3*sizeof(double);</div> +<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> typedef double dmArray[3];</div> +<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> dmArray *d = (dmArray*)malloc(dmsize);</div> +<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> memcpy(d, &amp;dm, dmsize);</div> +<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> cudaMemcpyToSymbol(dm_device, dm, dmsize);</div> +<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> </div> +<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> // copy mns matrix to device</div> +<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> </div> +<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> cudaMemcpyToSymbol(mix_device, mix, mixsize);</div> +<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> </div> +<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> </div> +<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> // from here //</div> +<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> // copy energy array to device</div> +<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> //size_t size = n * sizeof(double);</div> +<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> // double *energy_device = NULL;</div> +<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> </div> +<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> // cudaMalloc((void **) &amp;energy_device, size);</div> +<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> // cudaMemcpy(energy_device, Energy, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> </div> +<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> // allocate output memory space on the device</div> +<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> /*double *osc_weights = NULL;</div> +<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> cudaMalloc((void **) &amp;osc_weights, size);*/</div> +<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> </div> +<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> // copy alpha and beta</div> +<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> /*int *d_alpha = NULL;</div> +<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> int *d_beta = NULL;</div> +<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> cudaMalloc((void **) &amp;d_alpha, size);</div> +<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> cudaMalloc((void **) &amp;d_beta, size);</div> +<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> cudaMemcpy(d_alpha, Alpha, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> cudaMemcpy(d_beta, Beta, size, cudaMemcpyHostToDevice);*/</div> +<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> // to here //</div> +<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> </div> +<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> //dim3 block_size;</div> +<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> //block_size.x</div> +<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> int blocksize = 128;//512;</div> +<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> </div> +<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> //dim3 grid_size;</div> +<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> int gridsize = (n / blocksize) + 1;</div> +<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> //grid_size.x = (n / block_size.x) + 1;</div> +<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> </div> +<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> //printf(&quot;gridsize %i total things %i&quot;, gridsize, n);</div> +<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> //printf(&quot;A WEIGHT : %f : mix %f %i %i&quot;, oscw[100], mix[0][0][0], gridsize, blocksize);</div> +<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> </div> +<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> propagateLinearAll&lt;&lt;&lt;gridsize, blocksize&gt;&gt;&gt;(d_alpha, d_beta, Path, Density, /*mix_device, dm_device,*/ energy_device, osc_weights,n);</div> +<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> //CudaCheckError();</div> +<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> </div> +<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> // copy the results back</div> +<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> cudaMemcpy(oscw, osc_weights, n * sizeof(double), cudaMemcpyDeviceToHost);</div> +<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> //CudaCheckError();</div> +<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> </div> +<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> </div> +<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> //cudaFree(mix_device);</div> +<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> //cudaFree(dm_device);</div> +<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> </div> +<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> // from here //</div> +<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> </div> +<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> // to here //</div> +<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> </div> +<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> free(m);</div> +<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> free(d);</div> +<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span>}</div> +<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> </div> +<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span>/*extern &quot;C&quot;*/ __host__ void probInitGPU(double **energy_device, double **osc_weights, int **d_alpha, int **d_beta, int n)</div> +<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span>{</div> +<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> cudaMalloc((void **) energy_device, n * sizeof(double));</div> +<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> CudaCheckError();</div> +<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> </div> +<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> cudaMalloc((void **) osc_weights, n * sizeof(double));</div> +<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> CudaCheckError();</div> +<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> </div> +<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> cudaMalloc((void **) d_alpha, n * sizeof(int));</div> +<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> CudaCheckError();</div> +<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> </div> +<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> cudaMalloc((void **) d_beta, n * sizeof(int));</div> +<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> CudaCheckError();</div> +<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span>}</div> +<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> </div> +<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span>/*extern &quot;C&quot;*/ __host__ void probCopyToGPU(double *gpu_energy, double *energy, int*gpu_alpha, int *alpha, int *gpu_beta, int *beta, int n)</div> +<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span>{</div> +<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> //cudaThreadSynchronize();</div> +<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> printf(&quot;- copying %i events&quot;, n);</div> +<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> cudaMemcpy(gpu_energy, energy, n*sizeof(double), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> CudaCheckError();</div> +<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> </div> +<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> cudaMemcpy(gpu_alpha, alpha, n*sizeof(int), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> CudaCheckError();</div> +<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> </div> +<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> cudaMemcpy(gpu_beta, beta, n*sizeof(int), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> CudaCheckError();</div> +<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> </div> +<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> cudaDeviceSynchronize();</div> +<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span>}</div> +<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> </div> +<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span>/*extern &quot;C&quot;*/ __host__ void probCleanupGPU(double *gpu_energy, double *gpu_osc_weights, int *gpu_alpha, int *gpu_beta)</div> +<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span>{</div> +<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> cudaFree(gpu_energy);</div> +<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> cudaFree(gpu_osc_weights);</div> +<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> cudaFree(gpu_alpha);</div> +<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> cudaFree(gpu_beta);</div> +<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span>}</div> +<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> </div> +<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span>////////////////////////////////</div> +<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span>// the functions below are for earth matter fx</div> +<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span>////////////////////////////////</div> +<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> </div> +<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span>// CONSTANT MEMORY FOR EARTH PROFILE ///////////////////////</div> +<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span>#define maxLayers 5 // this is a temporary measure</div> +<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span>static bool earth_profile_set = false; // do we need to set the profile?</div> +<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span>__constant__ double device_Rhos[maxLayers];</div> +<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span>__constant__ double device_Radii[maxLayers];</div> +<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span>__constant__ double device_CosLimit[maxLayers];</div> +<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span>__constant__ double device_YpMap[maxLayers];</div> +<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span>//__constant__ double device_REarth;</div> +<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span>////////////////////////////////////////////////////////////</div> +<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> </div> +<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span>// this function must be called once at the beginning to load the earth profile into constant memory</div> +<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span>__host__ void LoadEarthProfile()</div> +<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span>{</div> +<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> // hard coded density</div> +<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> // this is from official SK atm result</div> +<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> int MaxDepth = maxLayers;</div> +<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> </div> +<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> double _Rhos[MaxDepth];</div> +<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> double _YpMap[MaxDepth];</div> +<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> double _Radii[MaxDepth];</div> +<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> double _CosLimit[MaxDepth];</div> +<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> </div> +<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> // they are reversed</div> +<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> _Radii[0] = 6371.0; _Rhos[0] = 3.3; _YpMap[0] = 0.497;</div> +<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> _Radii[1] = 5701.0; _Rhos[1] = 5.0; _YpMap[1] = 0.497;</div> +<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> _Radii[2] = 3480.0; _Rhos[2] = 11.3; _YpMap[2] = 0.497;</div> +<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> _Radii[3] = 1220.0; _Rhos[3] = 13.0; _YpMap[3] = 0.468;</div> +<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> _Radii[4] = 0.0; _Rhos[4] = 13.0; _YpMap[4] = 0.468;</div> +<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> </div> +<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> double REarth = _Radii[0];</div> +<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> </div> +<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> /*_density[ 0 ] = 13.0 ;</div> +<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> _density[ 1220.0 ] = 13.0 ;</div> +<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> _density[ 3480.0 ] = 11.3 ;</div> +<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> _density[ 5701.0 ] = 5.0 ;</div> +<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> _density[ 6371.0 ] = 3.3 ;*/</div> +<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> </div> +<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> ///</div> +<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> double x;</div> +<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> //_CosLimit.clear();</div> +<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> </div> +<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> // first element of _Radii is largest radius!</div> +<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> for (int i = 0; i &lt; /*(int) _Radii.size()*/ MaxDepth; i++)</div> +<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> {</div> +<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> // Using a cosine threshold instead! //</div> +<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> x = -1 * sqrt( 1 - (_Radii[i] * _Radii[i] / ( REarth*REarth)) );</div> +<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> if ( i == 0 ) x = 0;</div> +<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> _CosLimit[i /*_Radii[i]*/] = x;</div> +<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> }</div> +<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> ///</div> +<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> </div> +<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> // copy to constant memory</div> +<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> CudaSafeCall( cudaMemcpyToSymbol(device_Rhos, _Rhos, maxLayers * sizeof(double)) );</div> +<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> CudaSafeCall( cudaMemcpyToSymbol(device_YpMap, _YpMap, maxLayers * sizeof(double)) );</div> +<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> CudaSafeCall( cudaMemcpyToSymbol(device_Radii, _Radii, maxLayers * sizeof(double)) );</div> +<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> CudaSafeCall( cudaMemcpyToSymbol(device_CosLimit, _CosLimit, maxLayers * sizeof(double)) );</div> +<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> //CudaSafeCall( cudaMemcpyToSymbol(device_REarth, REarth, sizeof(double)) );</div> +<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span>}</div> +<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> </div> +<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span>__host__ void SetChemicalComposition(int nChemCompVals, double* ChemCompVals) {</div> +<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> cudaFree(device_YpMap);</div> +<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> </div> +<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> if (nChemCompVals != maxLayers) {</div> +<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> printf(&quot;Incompatible number of layers!\n&quot;);</div> +<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> printf(&quot;Given:%i \n&quot;,nChemCompVals);</div> +<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> printf(&quot;Expecting:%i \n&quot;,maxLayers);</div> +<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> exit(-1);</div> +<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> }</div> +<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> </div> +<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> int MaxDepth = maxLayers;</div> +<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> double _YpMap[MaxDepth];</div> +<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> _YpMap[0] = ChemCompVals[0];</div> +<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> _YpMap[1] = ChemCompVals[1];</div> +<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> _YpMap[2] = ChemCompVals[2];</div> +<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> _YpMap[3] = ChemCompVals[3];</div> +<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> _YpMap[4] = ChemCompVals[4];</div> +<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> </div> +<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> CudaSafeCall( cudaMemcpyToSymbol(device_YpMap, _YpMap, maxLayers * sizeof(double)));</div> +<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span>}</div> +<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> </div> +<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span>__host__ void ResetChemicalComposition() {</div> +<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> int nChemCompVals = 5;</div> +<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> double ChemCompVals[nChemCompVals];</div> +<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> </div> +<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> ChemCompVals[0] = 0.497;</div> +<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> ChemCompVals[1] = 0.497;</div> +<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> ChemCompVals[2] = 0.497;</div> +<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> ChemCompVals[3] = 0.468;</div> +<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> ChemCompVals[4] = 0.468;</div> +<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> </div> +<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> SetChemicalComposition(nChemCompVals,ChemCompVals);</div> +<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span>}</div> +<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> </div> +<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span>__host__ void SetChemicalComposition_PremModel(double Yp_Val) {</div> +<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> int nChemCompVals = 5;</div> +<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> double ChemCompVals[nChemCompVals];</div> +<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> </div> +<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> ChemCompVals[0] = 0.497;</div> +<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> ChemCompVals[1] = 0.497;</div> +<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> ChemCompVals[2] = 0.497;</div> +<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> ChemCompVals[3] = Yp_Val;</div> +<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> ChemCompVals[4] = Yp_Val;</div> +<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> </div> +<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> SetChemicalComposition(nChemCompVals,ChemCompVals);</div> +<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span>}</div> +<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> </div> +<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span>__device__ void SetDensityProfile(double CosineZ, double PathLength , double ProductionHeight, int &amp;Layers, double *_TraverseRhos, double *_TraverseDistance, double *_TraverseYpMap)</div> +<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span>{</div> +<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> double REarth = device_Radii[0];// * 1.0e5;</div> +<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> int i;</div> +<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> int MaxLayer;</div> +<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> double km2cm = 1.0E5;</div> +<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> double TotalEarthLength = -2.0 * CosineZ * REarth * km2cm; // in [cm]</div> +<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> double CrossThis, CrossNext;</div> +<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> </div> +<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> //printf(&quot;gpu total earth length in cm %f \n&quot;, TotalEarthLength);</div> +<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> </div> +<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> </div> +<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> // path through air</div> +<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> _TraverseRhos[0] = 0.0;</div> +<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> _TraverseYpMap[0] = 0.0;</div> +<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> _TraverseDistance[0] = (PathLength) - TotalEarthLength ;</div> +<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> //printf(&quot;setting first element %f - %f = %f \n&quot;, PathLength, TotalEarthLength, _TraverseDistance[0] );</div> +<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> </div> +<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> if ( CosineZ &gt;= 0 )</div> +<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> {</div> +<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> _TraverseDistance[0] = PathLength;</div> +<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> Layers = 1;</div> +<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> return;</div> +<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> }</div> +<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> </div> +<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> Layers = 0;</div> +<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div> +<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> for (int i = 0; i &lt; maxLayers; ++i)</div> +<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> {</div> +<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> </div> +<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> if (CosineZ &lt; device_CosLimit[i])</div> +<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> {</div> +<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> Layers++;</div> +<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> }</div> +<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> }</div> +<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> </div> +<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> MaxLayer = Layers;</div> +<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> </div> +<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> // the zeroth layer is the air!</div> +<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> //#pragma unroll</div> +<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> for ( i = 0 ; i&lt; MaxLayer ; i++ )</div> +<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> {</div> +<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> _TraverseRhos[i+1] = device_Rhos[i];</div> +<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> _TraverseYpMap[i+1] = device_YpMap[i];</div> +<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> </div> +<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> CrossThis = 2.0 * sqrt( device_Radii[i] * device_Radii[i] - REarth*REarth*( 1 -CosineZ*CosineZ ) );</div> +<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> CrossNext = 2.0 * sqrt( device_Radii[i+1] * device_Radii[i+1] - REarth*REarth*( 1 -CosineZ*CosineZ ) );</div> +<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> </div> +<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> if( i &lt; MaxLayer-1 )</div> +<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> _TraverseDistance[i+1] = 0.5*( CrossThis-CrossNext ) * km2cm;</div> +<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> else</div> +<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> _TraverseDistance[i+1] = CrossThis * km2cm;</div> +<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div> +<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> // if (i == 0)</div> +<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> // printf(&quot;gpu crossthis %f crossnext %f \n&quot;, CrossThis, CrossNext);</div> +<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> </div> +<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> // assumes azimuthal symmetry</div> +<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> if( i &lt; MaxLayer )</div> +<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> {</div> +<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> _TraverseRhos [ 2*MaxLayer - i ] = _TraverseRhos[i];</div> +<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> _TraverseYpMap [ 2*MaxLayer - i ] = _TraverseYpMap[i];</div> +<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> _TraverseDistance[ 2*MaxLayer - i ] = _TraverseDistance[i];</div> +<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> // printf(&quot;honkbeep gpu %i %f\n&quot;, 2*MaxLayer - i, _TraverseDistance[i]);</div> +<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> }</div> +<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> </div> +<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> //printf(&quot;GPU:: %i rhos %f dists %f\n&quot;, i, _TraverseRhos[i], _TraverseDistance[i]);</div> +<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> }</div> +<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> Layers = 2*MaxLayer;</div> +<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span>}</div> +<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> </div> +<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> </div> +<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span>__global__ void propagate(int in_flav, int out_flav, double *enu_device, double *cosz_device, double prod_h, const int n, double *out_device)</div> +<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span>{</div> +<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> bool kUseMassEigenstates = false; // quick hack for now</div> +<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> int idx = (blockIdx.x * blockDim.x + threadIdx.x);</div> +<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> </div> +<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> if (idx &lt; n)</div> +<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> {</div> +<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> int alpha = in_flav;//[idx];</div> +<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> </div> +<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> double _TraverseDistance[2*maxLayers+1];</div> +<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> double _TraverseRhos[2*maxLayers+1];</div> +<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> double _TraverseYpMap[2*maxLayers+1];</div> +<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> </div> +<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> for (int i = 0; i &lt; 2*maxLayers+1; ++i)</div> +<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> {</div> +<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> _TraverseDistance[i] = 0;</div> +<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> _TraverseRhos[i] = 0;</div> +<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> _TraverseYpMap[i] = 0.;</div> +<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> }</div> +<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> </div> +<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> int Layers;</div> +<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> </div> +<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> // first we need to fill the above 3 variables</div> +<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> // using the earth profile</div> +<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> </div> +<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> prod_h *= 1e5;</div> +<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> double rearth = device_Radii[0] * 1.0e5;</div> +<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> double costh = cosz_device[idx];</div> +<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> double PathLength = sqrt( (rearth + prod_h ) * (rearth + prod_h)</div> +<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> - (rearth*rearth)*( 1 - costh * costh)) - rearth * costh;</div> +<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> //printf(&quot;GPU pathlength: %f : ph %f rearth %f cz %f \n&quot;, PathLength, prod_h, rearth, costh);</div> +<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> </div> +<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> SetDensityProfile( costh, PathLength, prod_h, Layers, _TraverseRhos, _TraverseDistance, _TraverseYpMap);</div> +<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> </div> +<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> // now we can proceed as usual</div> +<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> // with the addition of multiplying the transition matrices for each layer</div> +<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> double Probability[3][3];</div> +<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> int i,j;</div> +<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> </div> +<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> double TransitionMatrix[3][3][2];</div> +<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> double TransitionProduct[3][3][2];</div> +<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> double TransitionTemp[3][3][2];</div> +<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> double RawInputPsi[3][2];</div> +<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> double OutputPsi[3][2];</div> +<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> </div> +<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> // loop over the layers traversed</div> +<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> //#pragma unroll</div> +<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> for ( i = 0; i &lt; Layers ; i++ )</div> +<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> {</div> +<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> //printf(&quot;Layer %i, dist: %f, density: %f\n&quot;, i, _TraverseDistance[i], _TraverseRhos[i]);</div> +<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> get_transition_matrix( alpha,</div> +<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> enu_device[idx], // in GeV</div> +<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> _TraverseRhos[i] * _TraverseYpMap[i], //density_convert,</div> +<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> _TraverseDistance[i] / 1.0e5, // in km</div> +<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> //Density * 0.5,</div> +<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> //Path, // in km</div> +<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> TransitionMatrix, // Output transition matrix</div> +<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> 0.0,</div> +<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> mix_device,</div> +<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> dm_device);</div> +<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> </div> +<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> // MAKE SURE THESE FUNCTIONS EXIST AND WORK</div> +<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> if ( i == 0 )</div> +<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> copy_complex_matrix( TransitionMatrix , TransitionProduct );</div> +<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> </div> +<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> if ( i &gt;0 )</div> +<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> {</div> +<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> clear_complex_matrix( TransitionTemp );</div> +<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> multiply_complex_matrix( TransitionMatrix, TransitionProduct, TransitionTemp );</div> +<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> copy_complex_matrix( TransitionTemp, TransitionProduct );</div> +<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> }</div> +<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> //printf(&quot;%f %f\n&quot;, TransitionMatrix[0][0][0], TransitionTemp[0][0][0]);</div> +<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> }</div> +<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> </div> +<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> //copy_complex_matrix( TransitionMatrix , TransitionProduct );</div> +<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> </div> +<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> for ( i = 0 ; i &lt; 3 ; i++ )</div> +<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> {</div> +<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> for ( j = 0 ; j &lt; 3 ; j++ )</div> +<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> { RawInputPsi[j][0] = 0.0; RawInputPsi[j][1] = 0.0; }</div> +<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> </div> +<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> if( kUseMassEigenstates )</div> +<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> convert_from_mass_eigenstate( i+1, in_flav, RawInputPsi, mix_device );</div> +<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> else</div> +<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> RawInputPsi[i][0] = 1.0;</div> +<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> </div> +<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> multiply_complex_matvec( TransitionProduct, RawInputPsi, OutputPsi );</div> +<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> </div> +<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> Probability[i][0] += OutputPsi[0][0] * OutputPsi[0][0] + OutputPsi[0][1]*OutputPsi[0][1];</div> +<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> Probability[i][1] += OutputPsi[1][0] * OutputPsi[1][0] + OutputPsi[1][1]*OutputPsi[1][1];</div> +<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> Probability[i][2] += OutputPsi[2][0] * OutputPsi[2][0] + OutputPsi[2][1]*OutputPsi[2][1];</div> +<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> }</div> +<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> </div> +<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> // now do the part that getprob usually does</div> +<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> int In = abs( alpha );</div> +<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> int Out = abs( out_flav );</div> +<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> </div> +<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> //printf(&quot;%i %i %f\n&quot;, In-1, Out-1, Probability[In-1][Out-1]);</div> +<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> out_device[idx] = Probability[In-1][Out-1];</div> +<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> //printf(&quot;%i %i %f: layers %i\n&quot;, In, Out, Probability[In-1][Out-1], Layers);</div> +<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> }</div> +<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span>}</div> +<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> </div> +<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span>// DB Function changed to take single out_flav instead of array</div> +<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span>extern &quot;C&quot; __host__ void GetProbAtm(int in_flav, int out_flav, double *enu, double *cosz, double prod_h, double Yp_Val, const int n, double *out)</div> +<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span>{</div> +<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> if (!earth_profile_set)</div> +<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> {</div> +<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> LoadEarthProfile();</div> +<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> earth_profile_set = true;</div> +<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> }</div> +<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> SetChemicalComposition_PremModel(Yp_Val);</div> +<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> </div> +<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> size_t dmsize = 3*3*sizeof(double);</div> +<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> typedef double dmArray[3];</div> +<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> dmArray *d = (dmArray*)malloc(dmsize);</div> +<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> memcpy(d, &amp;dm, dmsize);</div> +<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> </div> +<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> cudaMemcpyToSymbol(dm_device, dm, dmsize);</div> +<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> </div> +<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> // copy mns matrix to device</div> +<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> cudaMemcpyToSymbol(mix_device, mix, mixsize);</div> +<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> // copy energy array to device</div> +<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> size_t size = n * sizeof(double);</div> +<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> double *energy_device = NULL;</div> +<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> </div> +<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> cudaMalloc((void **) &amp;energy_device, size);</div> +<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> cudaMemcpy(energy_device, enu, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> </div> +<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> // copy the cosz to device</div> +<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> double *cosz_device = NULL;</div> +<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> </div> +<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> cudaMalloc((void **) &amp;cosz_device, size);</div> +<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> cudaMemcpy(cosz_device, cosz, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> </div> +<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> // DB this function was previously expecting an array of final flavours where I only give it a single flavour. Hence don&#39;t need to copy array</div> +<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> /*</div> +<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> // copy the output flavours</div> +<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> int *out_flav_device;</div> +<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> cudaMalloc((void **) &amp;out_flav_device, size);</div> +<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> printf(&quot;%i %i %i %i&quot;,out_flav_device, out_flav, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> cudaMemcpy(out_flav_device, out_flav, size, cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> */</div> +<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> </div> +<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> // make an output array</div> +<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> double *out_device;</div> +<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> cudaMalloc((void **) &amp;out_device, size);</div> +<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> CudaCheckError();</div> +<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> </div> +<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> // now we have copied the mixing and mass matrices, we need to</div> +<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> // launch the kernel</div> +<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> int blocksize = 128;//512;</div> +<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> </div> +<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span> int gridsize = (n / blocksize) + 1;</div> +<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> //propagate&lt;&lt;&lt;gridsize, blocksize&gt;&gt;&gt;(in_flav, out_flav_device, energy_device, cosz_device, prod_h, n, out_device);</div> +<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> propagate&lt;&lt;&lt;gridsize, blocksize&gt;&gt;&gt;(in_flav, out_flav, energy_device, cosz_device, prod_h, n, out_device);</div> +<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> CudaCheckError();</div> +<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> </div> +<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> // copy the results back</div> +<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span> cudaMemcpy(out, out_device, n * sizeof(double), cudaMemcpyDeviceToHost);</div> +<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> CudaCheckError();</div> +<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> </div> +<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> cudaFree(energy_device);</div> +<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> cudaFree(cosz_device);</div> +<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> cudaFree(out_device);</div> +<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> </div> +<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> free(m);</div> +<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> free(d);</div> +<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span>}</div> +<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> </div> +<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span>__host__ void probInitGPU_atm(double *energy_host, double *cosz_host, int *out_flav_host, const int N, double **energy_device, double **cosz_device, int **out_flav_device, double **out_device)</div> +<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span>{</div> +<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> // allocate memory on gpu</div> +<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> cudaMalloc((void **) energy_device, N * sizeof(double));</div> +<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> cudaMalloc((void **) cosz_device, N * sizeof(double));</div> +<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> cudaMalloc((void **) out_flav_device, N * sizeof(int));</div> +<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> CudaCheckError();</div> +<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> </div> +<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> cudaMemcpy(*energy_device, energy_host, N * sizeof(double), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> cudaMemcpy(*cosz_device, cosz_host, N * sizeof(double), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> cudaMemcpy(*out_flav_device, out_flav_host, N * sizeof(int), cudaMemcpyHostToDevice);</div> +<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> CudaCheckError();</div> +<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> </div> +<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> // make an output array</div> +<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> </div> +<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> cudaMalloc((void **) out_device, N * sizeof(double));</div> +<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span>}</div> +<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> </div> +<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span>__host__ void probCleanupGPU_atm( double *energy_device, double *cosz_device, int *out_flav_device, double *out_device)</div> +<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span>{</div> +<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> cudaFree(energy_device);</div> +<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> cudaFree(cosz_device);</div> +<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> cudaFree(out_flav_device);</div> +<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> cudaFree(out_device);</div> +<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span>}</div> +<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> </div> +<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span>__host__ void GetProb(int in_flav, int out_flav_device, double *energy_device, double *cosz_device, double prod_h, double Yp_Val, const int n, double *out, double *out_device)</div> +<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span>{</div> +<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> if (!earth_profile_set)</div> +<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> {</div> +<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> LoadEarthProfile();</div> +<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> earth_profile_set = true;</div> +<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> }</div> +<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> SetChemicalComposition_PremModel(Yp_Val);</div> +<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> </div> +<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> size_t dmsize = 3*3*sizeof(double);</div> +<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> typedef double dmArray[3];</div> +<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> dmArray *d = (dmArray*)malloc(dmsize);</div> +<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> memcpy(d, &amp;dm, dmsize);</div> +<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> </div> +<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> cudaMemcpyToSymbolAsync(dm_device, dm, dmsize);</div> +<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> </div> +<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> // copy mns matrix to device</div> +<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> </div> +<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> size_t mixsize = 3*3*2*sizeof(double);</div> +<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> typedef double mixArray[3][2];</div> +<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> mixArray *m = (mixArray*)malloc(mixsize);</div> +<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> memcpy(m, &amp;mix, mixsize);</div> +<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> cudaMemcpyToSymbolAsync(mix_device, mix, mixsize);</div> +<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> </div> +<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> // launch the kernel</div> +<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> </div> +<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> int blocksize = 64;//64;//256;//256;//512;</div> +<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> </div> +<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> int gridsize = (n / blocksize) + 1;</div> +<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> </div> +<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> propagate&lt;&lt;&lt;gridsize, blocksize&gt;&gt;&gt;(in_flav, out_flav_device, energy_device, cosz_device, prod_h, n, out_device);</div> +<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> </div> +<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> </div> +<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> cudaMemcpyAsync(out, out_device, n * sizeof(double), cudaMemcpyDeviceToHost);</div> +<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> CudaCheckError();</div> +<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> </div> +<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> free(m);</div> +<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> free(d);</div> +<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span>}</div> +<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> </div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFBase_8cpp.html b/samplePDFBase_8cpp.html new file mode 100644 index 00000000..e7ede3b1 --- /dev/null +++ b/samplePDFBase_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFBase.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFBase.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="samplePDFBase_8h_source.html">samplePDFBase.h</a>&quot;</code><br /> +</div> +<p><a href="samplePDFBase_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFBase_8cpp_source.html b/samplePDFBase_8cpp_source.html new file mode 100644 index 00000000..54b0ba4b --- /dev/null +++ b/samplePDFBase_8cpp_source.html @@ -0,0 +1,667 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFBase.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFBase.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="samplePDFBase_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="samplePDFBase_8h.html">samplePDFBase.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="foldopen" id="foldopen00003" data-start="{" data-end="}"> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a8220847bbd2a30347e25f7a79101c3df"> 3</a></span><a class="code hl_function" href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92">samplePDFBase::samplePDFBase</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>) </div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> = 0;</div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> <a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TRandom3</a>(0);</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> <a class="code hl_variable" href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">MCthrow</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>}</div> +</div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div> +<div class="foldopen" id="foldopen00014" data-start="{" data-end="}"> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1"> 14</a></span><a class="code hl_function" href="classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1">samplePDFBase::~samplePDFBase</a>()</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span>{</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>;</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>;</div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>;</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>; </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a>;</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>}</div> +</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="foldopen" id="foldopen00023" data-start="{" data-end="}"> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8"> 23</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">samplePDFBase::init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>)</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span>{</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>}</div> +</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="}"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#af82aa921ee6e6c204d97e6b6a7cf27ae"> 27</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">samplePDFBase::init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>, std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_version</a>)</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>{</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="comment">//TODO KS: Need to set test stat from config file</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Set the test-statistic</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="comment">//SetTestStatistic(static_cast&lt;TestStatistic&gt;(FitManager-&gt;GetMCStatLLH()));</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>}</div> +</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="foldopen" id="foldopen00036" data-start="{" data-end="}"> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331"> 36</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>)</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>{</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 0 &amp;&amp; <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 1)</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> {</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;You have initialised this sample with &quot;</span>&lt;&lt;<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a>&lt;&lt;<span class="stringliteral">&quot; dimensions already and now trying to set dimentison to 1&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;This will not work, you can find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> }</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> = 1;</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <span class="keyword">new</span> std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>)</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> {</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;dathist not initialised&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;Find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Reset(); </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>(<a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>-&gt;size()); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Fill(<a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>-&gt;at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>));</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>}</div> +</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="foldopen" id="foldopen00057" data-start="{" data-end="}"> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a78681e36e1748bdd978c29d78a67c698"> 57</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a>(std::vector&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector &lt;double&gt;</a> &gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>)</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>{</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 0 &amp;&amp; <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 2)</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> {</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;You have initialised this sample with &quot;</span>&lt;&lt;<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a>&lt;&lt;<span class="stringliteral">&quot; dimensions already and now trying to set dimentison to 2&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;This will not work, you can find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> = 2; </div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <span class="keyword">new</span> std::vector&lt; vector &lt;double&gt; &gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>)</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> {</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;dathist2d not initialised&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> std::cerr &lt;&lt;<span class="stringliteral">&quot;Find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> }</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Reset(); </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>(<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;size()); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Fill(<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;at(0)[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>],<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;at(1)[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]); </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>}</div> +</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="foldopen" id="foldopen00078" data-start="{" data-end="}"> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#acbdd3f87ad66eace243aa49361762e6c"> 78</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>)</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>{</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 0 &amp;&amp; <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 1)</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> {</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;You have initialised this sample with &quot;</span>&lt;&lt;<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a>&lt;&lt;<span class="stringliteral">&quot; dimensions already and now trying to set dimentison to 1&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;This will not work, you can find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> }</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> = 1;</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> std::cout &lt;&lt; <span class="stringliteral">&quot;adding 1D data histogram : &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a> -&gt; <a class="code hl_function" href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de">GetName</a>() &lt;&lt; <span class="stringliteral">&quot; with &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>-&gt;Integral() &lt;&lt; <span class="stringliteral">&quot; events.&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">//KS: If exist delete to avoid memory leak</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>;</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>;</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>}</div> +</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="foldopen" id="foldopen00093" data-start="{" data-end="}"> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#ab20be5d14e8d8946df1e2c98c4808104"> 93</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>)</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>{</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 0 &amp;&amp; <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> != 2)</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> {</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;You have initialised this sample with &quot;</span>&lt;&lt;<a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a>&lt;&lt;<span class="stringliteral">&quot; dimensions already and now trying to set dimentison to 2&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;This will not work, you can find me here &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> }</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a> = 2;</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> std::cout &lt;&lt; <span class="stringliteral">&quot;adding 2D data histogram : &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a> -&gt; <a class="code hl_function" href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de">GetName</a>() &lt;&lt; <span class="stringliteral">&quot; with &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>-&gt;Integral() &lt;&lt; <span class="stringliteral">&quot; events.&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//KS: If exist delete to avoid memory leak</span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) <span class="keyword">delete</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>;</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>;</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div> +</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="foldopen" id="foldopen00108" data-start="{" data-end="}"> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c"> 108</a></span>std::vector&lt;double&gt; <a class="code hl_function" href="classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c">samplePDFBase::generate</a>()</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>{</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>;</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>*)<a class="code hl_function" href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc">get1DHist</a>();</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a> = <a class="code hl_function" href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b">getEventRate</a>();</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a>-&gt;Poisson(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a>);</div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> std::cout &lt;&lt; std::endl &lt;&lt; <span class="stringliteral">&quot;sampling &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a> &lt;&lt; <span class="stringliteral">&quot; events from &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// rejection sampling</span></div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">//double M = 6; // *** DO NOT HARDCODE THIS, WILL ALTER RESULTS WHEN POT IS CHANGED ***</span></div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">count</a> = 0;</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Reset();</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">while</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">count</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a>)</div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/*double candidate = gRandom-&gt;Uniform(upp);</span></div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> double accProb = pdf-&gt;GetBinContent(pdf-&gt;FindBin(candidate)) / M;</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> double rand = gRandom-&gt;Uniform(1);</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment"> if (accProb &gt;= rand)</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment"> {</span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="comment"> std::cout &lt;&lt; candidate &lt;&lt; &quot; &quot; &lt;&lt; std::flush;</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span><span class="comment"> data.push_back(candidate);</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="comment"> dathist-&gt;Fill(candidate);</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment"> count++;</span></div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment"> }*/</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">candidate</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetRandom();</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> std::cout &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">candidate</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; std::flush; </div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">candidate</a>); </div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Fill(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">candidate</a>); </div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">count</a>++;</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> std::cout &lt;&lt; <span class="stringliteral">&quot;sampling complete&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>;</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div> +</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div> +<div class="foldopen" id="foldopen00145" data-start="{" data-end="}"> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b"> 145</a></span>std::vector&lt; vector &lt;double&gt; &gt; <a class="code hl_function" href="classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b">samplePDFBase::generate2D</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>)</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span>{</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> std::vector&lt; vector &lt;double&gt; &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>;</div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>*)<a class="code hl_function" href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b">get2DHist</a>();</div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">MCthrow</a>)</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> {</div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=1; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetNbinsX(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> {</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=1; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetNbinsY(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> {</div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;SetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>,<a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a>-&gt;Gaus(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>),<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetBinError(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>)));</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> }</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;Integral();</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a>-&gt;Poisson(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a>);</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> std::cout &lt;&lt; <span class="stringliteral">&quot;sampling &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a> &lt;&lt; <span class="stringliteral">&quot; events from &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">evrate</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var1</a>;</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var2</a>;</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">double</span> x,y;</div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Reset();</div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> {</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>-&gt;GetRandom2(x,y);</div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var1</a>.push_back(x);</div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var2</a>.push_back(y);</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Fill(x, y);</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var1</a>);</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var2</a>);</div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> std::cout &lt;&lt; <span class="stringliteral">&quot;sampling complete &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>[0].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>;</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div> +</div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="foldopen" id="foldopen00185" data-start="{" data-end="}"> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc"> 185</a></span><a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc">samplePDFBase::get1DHist</a>()</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span>{</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_function" href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad">fill1DHist</a>();</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>;</div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span>}</div> +</div> +<div class="foldopen" id="foldopen00190" data-start="{" data-end="}"> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b"> 190</a></span><a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b">samplePDFBase::get2DHist</a>()</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>{</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <a class="code hl_function" href="classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63">fill2DHist</a>();</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>;</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>}</div> +</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div> +<div class="foldopen" id="foldopen00196" data-start="{" data-end="}"> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b"> 196</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b">samplePDFBase::getEventRate</a>()</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>{</div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">//if (_hErec == NULL) </span></div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <a class="code hl_function" href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad">fill1DHist</a>();</div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Integral();</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span>}</div> +</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="comment">//KS: So far only Poisson LLH, in future Barlow-Beeston and IceCube</span></div> +<div class="foldopen" id="foldopen00205" data-start="{" data-end="}"> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453"> 205</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">samplePDFBase::getTestStatLLH</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>) {</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a> = 0;</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> = 1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">E</a>-8;</div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> &gt; 0 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> &gt; 0)</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> {</div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="comment">//http://hyperphysics.phy-astr.gsu.edu/hbase/math/stirling.html</span></div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a> += (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> - <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> * TMath::Log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>));</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> }</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> &gt; 0 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a> += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>;</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a>; </div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span>}</div> +</div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> </div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span><span class="comment">// this function will compute the likelihood against a nominal dataset (histogram)</span></div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">/*double samplePDFBase::GetLikelihoodNominal()</span></div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="comment"> {</span></div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span><span class="comment"> TH1D* pdf = get1DHist();</span></div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="comment"> double mc = pdf-&gt;GetBinContent(i,j);</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="comment"> double dat = //dathist-&gt;GetBinContent(i,j);</span></div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="comment"> if(mc &gt; 0 &amp;&amp; dat &gt; 0)</span></div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="comment"> {</span></div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span><span class="comment"> negLogL += (mc - dat + dat * TMath::Log(dat/mc));// + 1 / (12 * dat) + 0.5 * TMath::Log(2*TMath::Pi() * dat));</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="comment"> }</span></div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><span class="comment"> else if(mc &gt; 0 &amp;&amp; dat == 0)</span></div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="comment"> negLogL += mc;</span></div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="comment"></span> </div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="comment"> }*/</span></div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div> +<div class="foldopen" id="foldopen00234" data-start="{" data-end="}"> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6"> 234</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6">samplePDFBase::GetLikelihood_kernel</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dataSet</a>)</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span>{</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// this doesnt work</span></div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">/* std::cout &lt;&lt; &quot;kernel estimation likelihood&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment"> double sig = 0.5;</span></div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment"> double sum = 0;</span></div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment"> double norm = 1 / (sig * TMath::Sqrt(2*TMath::Pi()));</span></div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment"></span> </div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment"> for(int d = 0; d &lt; dataSet.size(); d++)</span></div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment"> {</span></div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="comment"> for(int i = 0; i &lt; skmcSamples.size(); i ++)</span></div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="comment"> for(int j = 0; j &lt; skmcSamples[i].nEvents; j++)</span></div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="comment"> {</span></div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="comment"> //sum += TMath::Power(dataSet[d] - skmcSamples[i].rw_erec[j]);</span></div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment"> sum += skmcSamples[i].pot_s * skmcSamples[i].norm_s * skmcSamples[i].osc_w[j] * skmcSamples[i].flux_w[j] * skmcSamples[i].skdet_w[j] * skmcSamples[i].energyscale_w[j] * norm * TMath::Exp(-0.5 * TMath::Power((dataSet[d] - skmcSamples[i].rw_erec[j])/sig, 2));</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment"> }</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment"> }</span></div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment"> //sum /= dataSet[d];</span></div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><span class="comment"> // sum /= sig * sig;</span></div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="comment"> // sum *= -1 * dataSet[d] * skmcSamples[i].pot_s * skmcSamples[i].norm_s * skmcSamples[i].osc_w[j] * skmcSamples[i].flux_w[j] * skmcSamples[i].skdet_w[j] * skmcSamples[i].energyscale_w[j];</span></div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment"> // sum += -1 * dataSet[d] * TMath::Log(sig);</span></div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="comment"></span> </div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="comment"> std::cout &lt;&lt; &quot;finished.&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment"> return -1 * TMath::Log(sum); */</span></div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span>}</div> +</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="comment">// data is data, mc is mc, w2 is Sum(w_{i}^2) (sum of weights squared), which is sigma^2_{MC stats}</span></div> +<div class="foldopen" id="foldopen00264" data-start="{" data-end="}"> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#aae43146f1732e7095839c3e6d9e3832a"> 264</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">samplePDFBase::getTestStatLLH</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>, <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>, <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a>) {</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="comment">// *************************</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// Need some MC</span></div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> == 0) <span class="keywordflow">return</span> 0.0;</div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// The MC used in the likeliihood calculation</span></div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="comment">// Is allowed to be changed by Barlow Beeston beta parameters</span></div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>;</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">switch</span> (<a class="code hl_variable" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">fTestStatistic</a>)</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> {</div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">//CW: Not full Barlow-Beeston or what is referred to as &quot;light&quot;: we&#39;re not introducing any more parameters</span></div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// Assume the MC has a Gaussian distribution around generated</span></div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// As in https://arxiv.org/abs/1103.0354 eq 10, 11</span></div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="comment">//CW: Calculate the Barlow-Beeston likelhood contribution from MC statistics</span></div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// Assumes the beta scaling parameters are Gaussian distributed</span></div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="comment">// Follows arXiv:1103.0354 section 5 and equation 8, 9, 10, 11 on page 4/5</span></div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// Essentially solves equation 11</span></div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4">kBarlowBeeston</a>):</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> {</div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// The penalty from MC statistics using Conways approach (https://cds.cern.ch/record/1333496?)</span></div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a> = 0;</div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// Barlow-Beeston uses fractional uncertainty on MC, so sqrt(sum[w^2])/mc</span></div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a> = std::sqrt(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a>)/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>;</div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="comment">// b in quadratic equation</span></div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>-1;</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// b^2 - 4ac in quadratic equation</span></div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp2</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp</a> + 4*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>;</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp2</a> &lt; 0) {</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Negative square root in Barlow Beeston coefficient calculation!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="comment">// Solve for the positive beta</span></div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a> = (-1*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sqrt</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">temp2</a>))/2.;</div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>;</div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// And penalise the movement in beta relative the mc uncertainty</span></div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a> &gt; 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>-1)*(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>-1)/(2*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fractional</a>);</div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">else</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a> = 0;</div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="comment">// Calculate the new Poisson likelihood</span></div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="comment">// For Barlow-Beeston newmc is modified, so can only calculate Poisson likelihood after Barlow-Beeston</span></div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="comment">// For the Poisson likelihood, this is just the usual calculation</span></div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="comment">// For IceCube likelihood, we calculate it later</span></div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = 0;</div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// All likelihood calculations may use the bare Poisson likelihood, so calculate here</span></div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>;</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> &gt; 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>*std::log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>);</div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// Return the statistical contribution and penalty</span></div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a>;</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="comment">//KS: Alterantive calcaution of Barlow-Beeston following Hans Dembinski and Ahmed Abdelmottele arXiv:2206.12346v2</span></div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb">kDembinskiAbdelmottele</a>):</div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> {</div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> </div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="comment">//KS: code follows authors implementation from:</span></div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="comment">//https://github.com/scikit-hep/iminuit/blob/059d06b00cae097ebf340b218b4eb57357111df8/src/iminuit/cost.py#L274-L300</span></div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="comment">//the so-called effective count</span></div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> / <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a>;</div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="comment">//Calculate beta which is scaling factor between true and generated MC</span></div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>) / (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a> + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>);</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>;</div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="comment">// And penalise the movement in beta relative the mc uncertainty</span></div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>*std::log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>/(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">beta</a>));</div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="comment">// Calculate the new Poisson likelihood</span></div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="comment">// For Barlow-Beeston newmc is modified, so can only calculate Poisson likelihood after Barlow-Beeston</span></div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="comment">// For the Poisson likelihood, this is just the usual calculation</span></div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// For IceCube likelihood, we calculate it later</span></div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = 0;</div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="comment">// All likelihood calculations may use the bare Poisson likelihood, so calculate here</span></div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>;</div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> &gt; 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>*std::log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>);</div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="comment">// Return the statistical contribution and penalty</span></div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">penalty</a>;</div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> }</div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="comment">//CW: Also try the IceCube likelihood</span></div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="comment">// It does not modify the MC content</span></div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="comment">// https://arxiv.org/abs/1901.04645</span></div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="comment">// Argüelles, C.A., Schneider, A. &amp; Yuan, T. J. High Energ. Phys. (2019) 2019: 30. https://doi.org/10.1007/JHEP06(2019)030</span></div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// We essentially construct eq 3.16 and take the logarithm</span></div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="comment">// in eq 3.16, mu is MC, sigma2 is w2, k is data</span></div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472">kIceCube</a>):</div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> {</div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = 0.0;</div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// If there for some reason is 0 mc uncertainty, return the Poisson LLH</span></div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a> == 0)</div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> {</div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="comment">// Calculate the new Poisson likelihood</span></div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>;</div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> &gt; 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>*std::log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>);</div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>;</div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> }</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// Auxillary variables</span></div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a>;</div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> a = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>+1;</div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>;</div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="comment">// Use C99&#39;s implementation of log of gamma function to not be C++11 dependent</span></div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = -1*(a * <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">logl</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>) + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lgammal</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>+a) - <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lgammal</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>+(<span class="keywordtype">long</span> <span class="keywordtype">double</span>)1) - ((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>+a)*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">log1pl</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>)) - <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lgammal</a>(a));</div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> </div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="comment">// Return the statistical contribution and penalty</span></div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>;</div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="comment">//KS: Pearson works on assumption that event distribution in each bin is described by a Gaussian which in our case is not fulfilled for all bins, hence use it at your own risk</span></div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7">kPearson</a>):</div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> {</div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="comment">//KS: 2 is beacuese this function returns -LLH not -2LLH</span></div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>)*(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>)/(2*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>);</div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="comment">// Return the statistical</span></div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>;</div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> }</div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">case</span> (<a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a>):</div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> {</div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = 0.0;</div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="comment">// All likelihood calculations may use the bare Poisson likelihood, so calculate here</span></div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a> == 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>;</div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a> &gt; 0) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>*std::log(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>/<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">newmc</a>);</div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// Return the statistical contribution and penalty</span></div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">stat</a>;</div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> }</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Couldn&#39;t find TestStatistic &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">fTestStatistic</a> &lt;&lt; <span class="stringliteral">&quot; exiting!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> } <span class="comment">// end switch</span></div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span>}</div> +</div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> </div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span><span class="comment">// **************************************************</span></div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span><span class="comment">// Helper function to set LLH type used in the fit</span></div> +<div class="foldopen" id="foldopen00408" data-start="{" data-end="}"> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97"> 408</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97">samplePDFBase::SetTestStatistic</a>(<a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">test_stat</a>) {</div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="comment">// **************************************************</span></div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <a class="code hl_variable" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">fTestStatistic</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">test_stat</a>;</div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> </div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> std::string name = <a class="code hl_function" href="Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726">TestStatistic_ToString</a>((<a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a>)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">test_stat</a>);</div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Using &quot;</span>&lt;&lt; name &lt;&lt;<span class="stringliteral">&quot; likelihood in ND280&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="comment">//if(UpdateW2) std::cout &lt;&lt; &quot;With updating W2&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="comment">//else std::cout &lt;&lt; &quot;Without updating W2&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span>}</div> +</div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div> +<div class="foldopen" id="foldopen00418" data-start="{" data-end="}"> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7"> 418</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">samplePDFBase::set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>)</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span>{</div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span>}</div> +</div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div> +<div class="foldopen" id="foldopen00425" data-start="{" data-end="}"> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a04e53e3aec02d69a7e59b1d9d2d1414c"> 425</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">samplePDFBase::set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>)</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span>{</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span>}</div> +</div> +<div class="foldopen" id="foldopen00431" data-start="{" data-end="}"> +<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85"> 431</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">samplePDFBase::set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>)</div> +<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span>{</div> +<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span>}</div> +</div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> </div> +<div class="foldopen" id="foldopen00438" data-start="{" data-end="}"> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a5ba2bf80cd619bc219e9817fa429bdc2"> 438</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">samplePDFBase::set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>)</div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span>{</div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span>}</div> +</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> </div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><span class="comment">//KS: Sample getter</span></div> +<div class="foldopen" id="foldopen00448" data-start="{" data-end="}"> +<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2"> 448</a></span>std::string <a class="code hl_function" href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2">samplePDFBase::GetSampleName</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Sample</a>) {</div> +<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div> +<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Sample</a> &gt; <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a>)</div> +<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> {</div> +<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> std::cerr&lt;&lt;<span class="stringliteral">&quot; You are asking for sample &quot;</span>&lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Sample</a> &lt;&lt;<span class="stringliteral">&quot; I only have &quot;</span>&lt;&lt; <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> }</div> +<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">SampleName</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Sample</a>];</div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span>}</div> +</div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span><span class="comment">// ***************************************************************************</span></div> +<div class="foldopen" id="foldopen00460" data-start="{" data-end="}"> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2"> 460</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2">samplePDFBase::GetSampleNames</a>(std::vector&lt;std::string&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sampleNameVect</a>) {</div> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sampleNameVect</a>.size() !=0)</div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sampleNameVect</a>.clear() ;</div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> {</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sampleNameVect</a>.push_back(<a class="code hl_function" href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2">GetSampleName</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>));</div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> }</div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span>}</div> +</div> +<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div> +<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span><span class="comment">// ***************************************************************************</span></div> +<div class="foldopen" id="foldopen00472" data-start="{" data-end="}"> +<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7"> 472</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7">samplePDFBase::GetModeName</a>(std::vector&lt;std::string&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">modeNameVect</a>) {</div> +<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> </div> +<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">modeNameVect</a>.size() !=0)</div> +<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">modeNameVect</a>.clear() ;</div> +<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> </div> +<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_variable" href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">ModeStruct</a>-&gt;<a class="code hl_function" href="classMaCh3__Modes.html#a86fd4bf65b9b90a724e79551b4478da8">GetNModes</a>()+1; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> {</div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">modeNameVect</a>.push_back(<a class="code hl_variable" href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">ModeStruct</a>-&gt;<a class="code hl_function" href="classMaCh3__Modes.html#a24414f21a8178b5dbf146fbb33f94729">Mode_ToString</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>));</div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> }</div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span>}</div> +</div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a></div><div class="ttdeci">TestStatistic</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01000">Structs.h:1000</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7">kPearson</a></div><div class="ttdeci">@ kPearson</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01004">Structs.h:1004</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4">kBarlowBeeston</a></div><div class="ttdeci">@ kBarlowBeeston</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01002">Structs.h:1002</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472">kIceCube</a></div><div class="ttdeci">@ kIceCube</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01003">Structs.h:1003</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb">kDembinskiAbdelmottele</a></div><div class="ttdeci">@ kDembinskiAbdelmottele</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01005">Structs.h:1005</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a></div><div class="ttdeci">@ kPoisson</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01001">Structs.h:1001</a></div></div> +<div class="ttc" id="aStructs_8h_html_afe33f23691e6b5e3e0f5ab97aaeb7726"><div class="ttname"><a href="Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726">TestStatistic_ToString</a></div><div class="ttdeci">std::string TestStatistic_ToString(TestStatistic i)</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01011">Structs.h:1011</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassMaCh3__Modes_html_a24414f21a8178b5dbf146fbb33f94729"><div class="ttname"><a href="classMaCh3__Modes.html#a24414f21a8178b5dbf146fbb33f94729">MaCh3_Modes::Mode_ToString</a></div><div class="ttdeci">virtual std::string Mode_ToString(int i)</div></div> +<div class="ttc" id="aclassMaCh3__Modes_html_a86fd4bf65b9b90a724e79551b4478da8"><div class="ttname"><a href="classMaCh3__Modes.html#a86fd4bf65b9b90a724e79551b4478da8">MaCh3_Modes::GetNModes</a></div><div class="ttdeci">virtual int GetNModes()</div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a031399b6277a9f4da527d5169fc8c0c7"><div class="ttname"><a href="classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7">samplePDFBase::GetModeName</a></div><div class="ttdeci">void GetModeName(std::vector&lt; std::string &gt; &amp;modeNameVect)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00472">samplePDFBase.cpp:472</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a06fd2c9575c0b9e56aaaf78b5be59b44"><div class="ttname"><a href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">samplePDFBase::rnd</a></div><div class="ttdeci">TRandom3 * rnd</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00117">samplePDFBase.h:117</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a1d89044c7ad25a5782673075842565de"><div class="ttname"><a href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de">samplePDFBase::GetName</a></div><div class="ttdeci">virtual std::string GetName() const</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00040">samplePDFBase.h:40</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a22cd9b0e8664b6e0859e34a51731fadc"><div class="ttname"><a href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">samplePDFBase::dathist2d</a></div><div class="ttdeci">TH2D * dathist2d</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00108">samplePDFBase.h:108</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a29be51dc086edd7e068a5dff082b7ac3"><div class="ttname"><a href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">samplePDFBase::nSamples</a></div><div class="ttdeci">__int__ nSamples</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00098">samplePDFBase.h:98</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a2f0509b7bb3452433cfa9b4b0a35e331"><div class="ttname"><a href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a></div><div class="ttdeci">void addData(std::vector&lt; double &gt; &amp;dat)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00036">samplePDFBase.cpp:36</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a35ced08988cee48ac111024c70a2c7c2"><div class="ttname"><a href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2">samplePDFBase::GetSampleName</a></div><div class="ttdeci">virtual std::string GetSampleName(int Sample)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00448">samplePDFBase.cpp:448</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a364f1bb62fbe78e5dc0cfe635ca10838"><div class="ttname"><a href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">samplePDFBase::MCthrow</a></div><div class="ttdeci">bool MCthrow</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00118">samplePDFBase.h:118</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a3db37aff026190ff162591361dc5ddd8"><div class="ttname"><a href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">samplePDFBase::nDims</a></div><div class="ttdeci">int nDims</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00100">samplePDFBase.h:100</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a4e599b555eb2c622743ff58a20b660d6"><div class="ttname"><a href="classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6">samplePDFBase::GetLikelihood_kernel</a></div><div class="ttdeci">double GetLikelihood_kernel(std::vector&lt; double &gt; &amp;data)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00234">samplePDFBase.cpp:234</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a4f42dca382c09d8827b8d136a77d1b29"><div class="ttname"><a href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">samplePDFBase::SampleName</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SampleName</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00102">samplePDFBase.h:102</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a5d07bd30725439bad3c15039aeca5ea8"><div class="ttname"><a href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">samplePDFBase::init</a></div><div class="ttdeci">void init(double pot)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00023">samplePDFBase.cpp:23</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a5e83626a43fa564c2691947dd2045133"><div class="ttname"><a href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">samplePDFBase::ModeStruct</a></div><div class="ttdeci">MaCh3_Modes * ModeStruct</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00105">samplePDFBase.h:105</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a603fb2d4f93751de60475ed65fc08245"><div class="ttname"><a href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">samplePDFBase::_hPDF2D</a></div><div class="ttdeci">TH2D * _hPDF2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00112">samplePDFBase.h:112</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a695ac7419652443240feb046f14ba1bb"><div class="ttname"><a href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">samplePDFBase::dathist</a></div><div class="ttdeci">TH1D * dathist</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00107">samplePDFBase.h:107</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a6c5158b37d8c5cf7aa48d3c85006bd85"><div class="ttname"><a href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">samplePDFBase::set2DBinning</a></div><div class="ttdeci">void set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00431">samplePDFBase.cpp:431</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a71bbe44b4ed168c91db0db7abedc96a6"><div class="ttname"><a href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">samplePDFBase::dataSample</a></div><div class="ttdeci">std::vector&lt; double &gt; * dataSample</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00094">samplePDFBase.h:94</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a772ebf22fbffd9336b2d8c2f46988453"><div class="ttname"><a href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">samplePDFBase::getTestStatLLH</a></div><div class="ttdeci">double getTestStatLLH(double data, double mc)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00205">samplePDFBase.cpp:205</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a7d673377a3d5a9a4d7c7c59b09896354"><div class="ttname"><a href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">samplePDFBase::dataSample2D</a></div><div class="ttdeci">std::vector&lt; vector&lt; double &gt; &gt; * dataSample2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00095">samplePDFBase.h:95</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a839bdbfebdafc9866e634a4ef4753f97"><div class="ttname"><a href="classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97">samplePDFBase::SetTestStatistic</a></div><div class="ttdeci">void SetTestStatistic(TestStatistic test_stat)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00408">samplePDFBase.cpp:408</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a9c8b6274b443814f9f5da6efd829f41b"><div class="ttname"><a href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b">samplePDFBase::getEventRate</a></div><div class="ttdeci">double getEventRate()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00196">samplePDFBase.cpp:196</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a9e2d79691204668e5995162be0a6812b"><div class="ttname"><a href="classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b">samplePDFBase::generate2D</a></div><div class="ttdeci">vector&lt; vector&lt; double &gt; &gt; generate2D(TH2D *pdf=0)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00145">samplePDFBase.cpp:145</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aa445adc37e57b0d6271aca4f67e60e4c"><div class="ttname"><a href="classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c">samplePDFBase::generate</a></div><div class="ttdeci">vector&lt; double &gt; generate()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00108">samplePDFBase.cpp:108</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ac45173ad344137f09c84a850f171cb92"><div class="ttname"><a href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92">samplePDFBase::samplePDFBase</a></div><div class="ttdeci">samplePDFBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00034">samplePDFBase.h:34</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ada33c26ccd5aa684f3295dcd5f4a6cc7"><div class="ttname"><a href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">samplePDFBase::set1DBinning</a></div><div class="ttdeci">void set1DBinning(int nbins, double *boundaries)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00418">samplePDFBase.cpp:418</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_adc5cd0002708ad049ba4fb5e3c62075d"><div class="ttname"><a href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">samplePDFBase::fTestStatistic</a></div><div class="ttdeci">TestStatistic fTestStatistic</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00120">samplePDFBase.h:120</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ade4338d5ad1bc53ebfdba18c71af12b1"><div class="ttname"><a href="classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1">samplePDFBase::~samplePDFBase</a></div><div class="ttdeci">virtual ~samplePDFBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00014">samplePDFBase.cpp:14</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ae324bd76a337efa43fedfd2052029e47"><div class="ttname"><a href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">samplePDFBase::_hPDF1D</a></div><div class="ttdeci">TH1D * _hPDF1D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00111">samplePDFBase.h:111</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aeb459a4295ed4d692e31bfd76d34e8c2"><div class="ttname"><a href="classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2">samplePDFBase::GetSampleNames</a></div><div class="ttdeci">void GetSampleNames(std::vector&lt; std::string &gt; &amp;sampleNameVect)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00460">samplePDFBase.cpp:460</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aed001ca4ec86198875f385b6034a375b"><div class="ttname"><a href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b">samplePDFBase::get2DHist</a></div><div class="ttdeci">TH2D * get2DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00190">samplePDFBase.cpp:190</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_af0efa07b157d452fb4057a3ff4b67fcc"><div class="ttname"><a href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc">samplePDFBase::get1DHist</a></div><div class="ttdeci">TH1D * get1DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00185">samplePDFBase.cpp:185</a></div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a659170f132acede9c9cc481ed0727a63"><div class="ttname"><a href="classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63">samplePDFInterface::fill2DHist</a></div><div class="ttdeci">virtual void fill2DHist()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_adb062546513e3f050898c0939bd178ad"><div class="ttname"><a href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad">samplePDFInterface::fill1DHist</a></div><div class="ttdeci">virtual void fill1DHist()=0</div></div> +<div class="ttc" id="asamplePDFBase_8h_html"><div class="ttname"><a href="samplePDFBase_8h.html">samplePDFBase.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFBase_8h.html b/samplePDFBase_8h.html new file mode 100644 index 00000000..e2bab2bb --- /dev/null +++ b/samplePDFBase_8h.html @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFBase.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">samplePDFBase.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &lt;vector&gt;</code><br /> +<code>#include &lt;assert.h&gt;</code><br /> +<code>#include &lt;stdexcept&gt;</code><br /> +<code>#include &quot;TTree.h&quot;</code><br /> +<code>#include &quot;TH1D.h&quot;</code><br /> +<code>#include &quot;TH2D.h&quot;</code><br /> +<code>#include &quot;TMath.h&quot;</code><br /> +<code>#include &quot;TFile.h&quot;</code><br /> +<code>#include &quot;TROOT.h&quot;</code><br /> +<code>#include &quot;TRandom.h&quot;</code><br /> +<code>#include &quot;TSpline.h&quot;</code><br /> +<code>#include &quot;TRandom3.h&quot;</code><br /> +<code>#include &quot;TString.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="manager_8h_source.html">manager/manager.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="samplePDFInterface_8h_source.html">samplePDF/samplePDFInterface.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="splineBase_8h_source.html">splines/splineBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="Structs_8h_source.html">samplePDF/Structs.h</a>&quot;</code><br /> +</div> +<p><a href="samplePDFBase_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsamplePDFBase.html">samplePDFBase</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFBase_8h_source.html b/samplePDFBase_8h_source.html new file mode 100644 index 00000000..6bbfbd07 --- /dev/null +++ b/samplePDFBase_8h_source.html @@ -0,0 +1,269 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFBase.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFBase.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="samplePDFBase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">//C++ includes</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;vector&gt;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;assert.h&gt;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">//ROOT includes</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;TTree.h&quot;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;TH1D.h&quot;</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;TH2D.h&quot;</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;TMath.h&quot;</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;TFile.h&quot;</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;TROOT.h&quot;</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;TRandom.h&quot;</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;TSpline.h&quot;</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;TRandom3.h&quot;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &quot;TString.h&quot;</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &quot;TMath.h&quot;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &quot;<a class="code" href="manager_8h.html">manager/manager.h</a>&quot;</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">//MaCh3 includes</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &quot;<a class="code" href="samplePDFInterface_8h.html">samplePDF/samplePDFInterface.h</a>&quot;</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include &quot;<a class="code" href="splineBase_8h.html">splines/splineBase.h</a>&quot;</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include &quot;<a class="code" href="Structs_8h.html">samplePDF/Structs.h</a>&quot;</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="foldopen" id="foldopen00031" data-start="{" data-end="};"> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html"> 31</a></span><span class="keyword">class </span><a class="code hl_class" href="classsamplePDFBase.html">samplePDFBase</a> : <span class="keyword">public</span> <a class="code hl_class" href="classsamplePDFInterface.html">samplePDFInterface</a> </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>{</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92"> 34</a></span> <a class="code hl_function" href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92">samplePDFBase</a>(){};</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <a class="code hl_function" href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92">samplePDFBase</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>);</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1">~samplePDFBase</a>();</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a0000b101bead86f5581baacb8d33383f"> 39</a></span> <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code hl_define" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a> <a class="code hl_function" href="classsamplePDFBase.html#a0000b101bead86f5581baacb8d33383f">GetNsamples</a>(){ <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a>; };</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de"> 40</a></span> <span class="keyword">virtual</span> <span class="keyword">inline</span> std::string <a class="code hl_function" href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de">GetName</a>()<span class="keyword">const </span>{<span class="keywordflow">return</span> <span class="stringliteral">&quot;samplePDF&quot;</span>;};</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">virtual</span> std::string <a class="code hl_function" href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2">GetSampleName</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Sample</a>);</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a850aef19dec9a2ac0047c416e3fa3b1d"> 42</a></span> <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a850aef19dec9a2ac0047c416e3fa3b1d">getSampleLikelihood</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isample</a>){(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isample</a>; <span class="keywordflow">return</span> <a class="code hl_function" href="classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8">GetLikelihood</a>();};</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2">GetSampleNames</a>(std::vector&lt;std::string&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sampleNameVect</a>) ;</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7">GetModeName</a>(std::vector&lt;std::string&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">modeNameVect</a>);</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a0680888d26ecd0efc40379ba7ea42d6d"> 45</a></span> <a class="code hl_class" href="classMaCh3__Modes.html">MaCh3_Modes</a>* <a class="code hl_function" href="classsamplePDFBase.html#a0680888d26ecd0efc40379ba7ea42d6d">GetModeStruct</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">ModeStruct</a>; }</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc">get1DHist</a>(); </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b">get2DHist</a>();</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a2354d4238fcf3311daf151741f2601ad"> 49</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="classsamplePDFBase.html#a2354d4238fcf3311daf151741f2601ad">get1DDataHist</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>;}</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#af42053e1d1c5521110f38d41195f1b64"> 50</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="classsamplePDFBase.html#af42053e1d1c5521110f38d41195f1b64">get2DDataHist</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>;}</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b">getEventRate</a>();</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#aa4e659c358b432ef07b4ddd7d599593d"> 56</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#aa4e659c358b432ef07b4ddd7d599593d">setMCthrow</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>){<a class="code hl_variable" href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">MCthrow</a>= <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>;}</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// generate fake dataset based on rejection sampling </span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector&lt; vector &lt;double&gt;</a> &gt; <a class="code hl_function" href="classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b">generate2D</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a> = 0);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector&lt;double&gt;</a> <a class="code hl_function" href="classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c">generate</a>();</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8"> 61</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8">GetLikelihood</a>() = 0;</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#af509da2b8d4b68569c9ee8061bdeee05"> 62</a></span> <span class="keyword">virtual</span> std::vector&lt;double&gt;* <a class="code hl_function" href="classsamplePDFBase.html#af509da2b8d4b68569c9ee8061bdeee05">getDataSample</a>() {<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>;};</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// nominal spectrum things</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// double GetLikelihoodNominal(); // computes the likelihood against a nominal spectra</span></div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* TH1D *generateNominal1D();</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> TH2D *generateNominal2D();</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> TH1D *nominalSpectrum1D; </span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> TH2D *nominalSpectrum2D;*/</span></div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">addData</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dat</a>);</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">addData</a>(std::vector&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector &lt;double&gt;</a> &gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dat</a>);</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a5db95a83c4c494c02fb5df8ec65f13ee"> 75</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a5db95a83c4c494c02fb5df8ec65f13ee">addXsecSplines</a>(<a class="code hl_class" href="classsplineBase.html">splineBase</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splines</a>){<a class="code hl_variable" href="classsamplePDFBase.html#a333405326522241288286a1d0907dc2e">xsecsplines</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splines</a>;}</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="comment">//virtual void whatAmI(){std::cout &lt;&lt; &quot;__FILE__&quot; &lt;&lt; std::endl;};</span></div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// For adding sample dependent branches to the posteriors tree</span></div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a552c3759ff50549d3ba813d94e58b636"> 79</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a552c3759ff50549d3ba813d94e58b636">setMCMCBranches</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outtree</a>) {(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">void</a>)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outtree</a>;};</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>);</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>, std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_version</a>);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="comment">//bool gpu_rw; </span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6">GetLikelihood_kernel</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">getTestStatLLH</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>);</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">getTestStatLLH</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>, <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc</a>, <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// Provide a setter for the test-statistic</span></div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97">SetTestStatistic</a>(<a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">test_stat</a>);</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6"> 94</a></span> std::vector&lt;double&gt;* <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>;</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354"> 95</a></span> std::vector&lt; vector &lt;double&gt; &gt;* <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>;</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// Contains how many samples we&#39;ve got</span></div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3"> 98</a></span> <a class="code hl_define" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a> <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a>;</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="comment">//KS: number of dimension for this sample</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8"> 100</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">nDims</a>;</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="comment">//Name of Sample</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29"> 102</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">SampleName</a>;</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">//GetterForModes</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133"> 105</a></span> <a class="code hl_class" href="classMaCh3__Modes.html">MaCh3_Modes</a>* <a class="code hl_variable" href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">ModeStruct</a>;</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb"> 107</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a> *<a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>; <span class="comment">// tempstore for likelihood calc</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc"> 108</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a> *<a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>; </div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// binned PDFs</span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47"> 111</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>*<a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>;</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245"> 112</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>*<a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>;</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">//splines</span></div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a333405326522241288286a1d0907dc2e"> 115</a></span> <a class="code hl_class" href="classsplineBase.html">splineBase</a>* <a class="code hl_variable" href="classsamplePDFBase.html#a333405326522241288286a1d0907dc2e">xsecsplines</a>;</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44"> 117</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TRandom3</a>* <a class="code hl_variable" href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">rnd</a>;</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838"> 118</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">MCthrow</a>;</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d"> 120</a></span> <a class="code hl_enumeration" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a> <a class="code hl_variable" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">fTestStatistic</a>;</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>};</div> +</div> +<div class="ttc" id="aStructs_8h_html"><div class="ttname"><a href="Structs_8h.html">Structs.h</a></div></div> +<div class="ttc" id="aStructs_8h_html_a749fe24f7987a931553ada4bccfc5fb3"><div class="ttname"><a href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a></div><div class="ttdeci">#define __int__</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l00014">Structs.h:14</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67">TestStatistic</a></div><div class="ttdeci">TestStatistic</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01000">Structs.h:1000</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassMaCh3__Modes_html"><div class="ttname"><a href="classMaCh3__Modes.html">MaCh3_Modes</a></div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01042">Structs.h:1042</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html"><div class="ttname"><a href="classsamplePDFBase.html">samplePDFBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00031">samplePDFBase.h:32</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a0000b101bead86f5581baacb8d33383f"><div class="ttname"><a href="classsamplePDFBase.html#a0000b101bead86f5581baacb8d33383f">samplePDFBase::GetNsamples</a></div><div class="ttdeci">virtual __int__ GetNsamples()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00039">samplePDFBase.h:39</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a031399b6277a9f4da527d5169fc8c0c7"><div class="ttname"><a href="classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7">samplePDFBase::GetModeName</a></div><div class="ttdeci">void GetModeName(std::vector&lt; std::string &gt; &amp;modeNameVect)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00472">samplePDFBase.cpp:472</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a0680888d26ecd0efc40379ba7ea42d6d"><div class="ttname"><a href="classsamplePDFBase.html#a0680888d26ecd0efc40379ba7ea42d6d">samplePDFBase::GetModeStruct</a></div><div class="ttdeci">MaCh3_Modes * GetModeStruct() const</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00045">samplePDFBase.h:45</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a06fd2c9575c0b9e56aaaf78b5be59b44"><div class="ttname"><a href="classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44">samplePDFBase::rnd</a></div><div class="ttdeci">TRandom3 * rnd</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00117">samplePDFBase.h:117</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a1d89044c7ad25a5782673075842565de"><div class="ttname"><a href="classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de">samplePDFBase::GetName</a></div><div class="ttdeci">virtual std::string GetName() const</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00040">samplePDFBase.h:40</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a22cd9b0e8664b6e0859e34a51731fadc"><div class="ttname"><a href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">samplePDFBase::dathist2d</a></div><div class="ttdeci">TH2D * dathist2d</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00108">samplePDFBase.h:108</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a2354d4238fcf3311daf151741f2601ad"><div class="ttname"><a href="classsamplePDFBase.html#a2354d4238fcf3311daf151741f2601ad">samplePDFBase::get1DDataHist</a></div><div class="ttdeci">TH1D * get1DDataHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00049">samplePDFBase.h:49</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a29be51dc086edd7e068a5dff082b7ac3"><div class="ttname"><a href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">samplePDFBase::nSamples</a></div><div class="ttdeci">__int__ nSamples</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00098">samplePDFBase.h:98</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a2f0509b7bb3452433cfa9b4b0a35e331"><div class="ttname"><a href="classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331">samplePDFBase::addData</a></div><div class="ttdeci">void addData(std::vector&lt; double &gt; &amp;dat)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00036">samplePDFBase.cpp:36</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a333405326522241288286a1d0907dc2e"><div class="ttname"><a href="classsamplePDFBase.html#a333405326522241288286a1d0907dc2e">samplePDFBase::xsecsplines</a></div><div class="ttdeci">splineBase * xsecsplines</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00115">samplePDFBase.h:115</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a35ced08988cee48ac111024c70a2c7c2"><div class="ttname"><a href="classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2">samplePDFBase::GetSampleName</a></div><div class="ttdeci">virtual std::string GetSampleName(int Sample)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00448">samplePDFBase.cpp:448</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a364f1bb62fbe78e5dc0cfe635ca10838"><div class="ttname"><a href="classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838">samplePDFBase::MCthrow</a></div><div class="ttdeci">bool MCthrow</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00118">samplePDFBase.h:118</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a3c7db8ea36666a915ef072991da5c3c8"><div class="ttname"><a href="classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8">samplePDFBase::GetLikelihood</a></div><div class="ttdeci">virtual double GetLikelihood()=0</div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a3db37aff026190ff162591361dc5ddd8"><div class="ttname"><a href="classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8">samplePDFBase::nDims</a></div><div class="ttdeci">int nDims</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00100">samplePDFBase.h:100</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a4e599b555eb2c622743ff58a20b660d6"><div class="ttname"><a href="classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6">samplePDFBase::GetLikelihood_kernel</a></div><div class="ttdeci">double GetLikelihood_kernel(std::vector&lt; double &gt; &amp;data)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00234">samplePDFBase.cpp:234</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a4f42dca382c09d8827b8d136a77d1b29"><div class="ttname"><a href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">samplePDFBase::SampleName</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SampleName</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00102">samplePDFBase.h:102</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a552c3759ff50549d3ba813d94e58b636"><div class="ttname"><a href="classsamplePDFBase.html#a552c3759ff50549d3ba813d94e58b636">samplePDFBase::setMCMCBranches</a></div><div class="ttdeci">virtual void setMCMCBranches(TTree *outtree)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00079">samplePDFBase.h:79</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a5d07bd30725439bad3c15039aeca5ea8"><div class="ttname"><a href="classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8">samplePDFBase::init</a></div><div class="ttdeci">void init(double pot)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00023">samplePDFBase.cpp:23</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a5db95a83c4c494c02fb5df8ec65f13ee"><div class="ttname"><a href="classsamplePDFBase.html#a5db95a83c4c494c02fb5df8ec65f13ee">samplePDFBase::addXsecSplines</a></div><div class="ttdeci">void addXsecSplines(splineBase *splines)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00075">samplePDFBase.h:75</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a5e83626a43fa564c2691947dd2045133"><div class="ttname"><a href="classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133">samplePDFBase::ModeStruct</a></div><div class="ttdeci">MaCh3_Modes * ModeStruct</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00105">samplePDFBase.h:105</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a603fb2d4f93751de60475ed65fc08245"><div class="ttname"><a href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">samplePDFBase::_hPDF2D</a></div><div class="ttdeci">TH2D * _hPDF2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00112">samplePDFBase.h:112</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a695ac7419652443240feb046f14ba1bb"><div class="ttname"><a href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">samplePDFBase::dathist</a></div><div class="ttdeci">TH1D * dathist</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00107">samplePDFBase.h:107</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a6c5158b37d8c5cf7aa48d3c85006bd85"><div class="ttname"><a href="classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85">samplePDFBase::set2DBinning</a></div><div class="ttdeci">void set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00431">samplePDFBase.cpp:431</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a71bbe44b4ed168c91db0db7abedc96a6"><div class="ttname"><a href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">samplePDFBase::dataSample</a></div><div class="ttdeci">std::vector&lt; double &gt; * dataSample</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00094">samplePDFBase.h:94</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a772ebf22fbffd9336b2d8c2f46988453"><div class="ttname"><a href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">samplePDFBase::getTestStatLLH</a></div><div class="ttdeci">double getTestStatLLH(double data, double mc)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00205">samplePDFBase.cpp:205</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a7d673377a3d5a9a4d7c7c59b09896354"><div class="ttname"><a href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">samplePDFBase::dataSample2D</a></div><div class="ttdeci">std::vector&lt; vector&lt; double &gt; &gt; * dataSample2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00095">samplePDFBase.h:95</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a839bdbfebdafc9866e634a4ef4753f97"><div class="ttname"><a href="classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97">samplePDFBase::SetTestStatistic</a></div><div class="ttdeci">void SetTestStatistic(TestStatistic test_stat)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00408">samplePDFBase.cpp:408</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a850aef19dec9a2ac0047c416e3fa3b1d"><div class="ttname"><a href="classsamplePDFBase.html#a850aef19dec9a2ac0047c416e3fa3b1d">samplePDFBase::getSampleLikelihood</a></div><div class="ttdeci">virtual double getSampleLikelihood(const int isample)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00042">samplePDFBase.h:42</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a9c8b6274b443814f9f5da6efd829f41b"><div class="ttname"><a href="classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b">samplePDFBase::getEventRate</a></div><div class="ttdeci">double getEventRate()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00196">samplePDFBase.cpp:196</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a9e2d79691204668e5995162be0a6812b"><div class="ttname"><a href="classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b">samplePDFBase::generate2D</a></div><div class="ttdeci">vector&lt; vector&lt; double &gt; &gt; generate2D(TH2D *pdf=0)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00145">samplePDFBase.cpp:145</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aa445adc37e57b0d6271aca4f67e60e4c"><div class="ttname"><a href="classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c">samplePDFBase::generate</a></div><div class="ttdeci">vector&lt; double &gt; generate()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00108">samplePDFBase.cpp:108</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aa4e659c358b432ef07b4ddd7d599593d"><div class="ttname"><a href="classsamplePDFBase.html#aa4e659c358b432ef07b4ddd7d599593d">samplePDFBase::setMCthrow</a></div><div class="ttdeci">void setMCthrow(bool mc)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00056">samplePDFBase.h:56</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ac45173ad344137f09c84a850f171cb92"><div class="ttname"><a href="classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92">samplePDFBase::samplePDFBase</a></div><div class="ttdeci">samplePDFBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00034">samplePDFBase.h:34</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ada33c26ccd5aa684f3295dcd5f4a6cc7"><div class="ttname"><a href="classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7">samplePDFBase::set1DBinning</a></div><div class="ttdeci">void set1DBinning(int nbins, double *boundaries)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00418">samplePDFBase.cpp:418</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_adc5cd0002708ad049ba4fb5e3c62075d"><div class="ttname"><a href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">samplePDFBase::fTestStatistic</a></div><div class="ttdeci">TestStatistic fTestStatistic</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00120">samplePDFBase.h:120</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ade4338d5ad1bc53ebfdba18c71af12b1"><div class="ttname"><a href="classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1">samplePDFBase::~samplePDFBase</a></div><div class="ttdeci">virtual ~samplePDFBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00014">samplePDFBase.cpp:14</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ae324bd76a337efa43fedfd2052029e47"><div class="ttname"><a href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">samplePDFBase::_hPDF1D</a></div><div class="ttdeci">TH1D * _hPDF1D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00111">samplePDFBase.h:111</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aeb459a4295ed4d692e31bfd76d34e8c2"><div class="ttname"><a href="classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2">samplePDFBase::GetSampleNames</a></div><div class="ttdeci">void GetSampleNames(std::vector&lt; std::string &gt; &amp;sampleNameVect)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00460">samplePDFBase.cpp:460</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_aed001ca4ec86198875f385b6034a375b"><div class="ttname"><a href="classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b">samplePDFBase::get2DHist</a></div><div class="ttdeci">TH2D * get2DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00190">samplePDFBase.cpp:190</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_af0efa07b157d452fb4057a3ff4b67fcc"><div class="ttname"><a href="classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc">samplePDFBase::get1DHist</a></div><div class="ttdeci">TH1D * get1DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00185">samplePDFBase.cpp:185</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_af42053e1d1c5521110f38d41195f1b64"><div class="ttname"><a href="classsamplePDFBase.html#af42053e1d1c5521110f38d41195f1b64">samplePDFBase::get2DDataHist</a></div><div class="ttdeci">TH2D * get2DDataHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00050">samplePDFBase.h:50</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_af509da2b8d4b68569c9ee8061bdeee05"><div class="ttname"><a href="classsamplePDFBase.html#af509da2b8d4b68569c9ee8061bdeee05">samplePDFBase::getDataSample</a></div><div class="ttdeci">virtual std::vector&lt; double &gt; * getDataSample()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00062">samplePDFBase.h:62</a></div></div> +<div class="ttc" id="aclasssamplePDFInterface_html"><div class="ttname"><a href="classsamplePDFInterface.html">samplePDFInterface</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFInterface_8h_source.html#l00017">samplePDFInterface.h:18</a></div></div> +<div class="ttc" id="aclasssplineBase_html"><div class="ttname"><a href="classsplineBase.html">splineBase</a></div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00007">splineBase.h:8</a></div></div> +<div class="ttc" id="amanager_8h_html"><div class="ttname"><a href="manager_8h.html">manager.h</a></div></div> +<div class="ttc" id="asamplePDFInterface_8h_html"><div class="ttname"><a href="samplePDFInterface_8h.html">samplePDFInterface.h</a></div></div> +<div class="ttc" id="asplineBase_8h_html"><div class="ttname"><a href="splineBase_8h.html">splineBase.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFFDBase_8cpp.html b/samplePDFFDBase_8cpp.html new file mode 100644 index 00000000..00f4bf02 --- /dev/null +++ b/samplePDFFDBase_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFFDBase.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFFDBase.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="samplePDFFDBase_8h_source.html">samplePDFFDBase.h</a>&quot;</code><br /> +</div> +<p><a href="samplePDFFDBase_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFFDBase_8cpp_source.html b/samplePDFFDBase_8cpp_source.html new file mode 100644 index 00000000..5d36dbc5 --- /dev/null +++ b/samplePDFFDBase_8cpp_source.html @@ -0,0 +1,1703 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFFDBase.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFFDBase.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="samplePDFFDBase_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="samplePDFFDBase_8h.html">samplePDFFDBase.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// Constructors for erec-binned errors</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="foldopen" id="foldopen00005" data-start="{" data-end="}"> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a5d92ac355b68fdf36e9b478b674eeaf4"> 5</a></span><a class="code hl_function" href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303">samplePDFFDBase::samplePDFFDBase</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>, std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_version</a>, <a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_cov</a>)</div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> : <a class="code hl_class" href="classsamplePDFBase.html">samplePDFBase</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>)</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">//DB Throughout constructor and init, pot is livetime for atmospheric samples</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span>{</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> std::cout &lt;&lt; <span class="stringliteral">&quot;-------------------------------------------------------------------&quot;</span> &lt;&lt;std::endl;</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Creating samplePDFFDBase object..&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="comment">//ETA - safety feature so you can&#39;t pass a NULL xsec_cov</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_cov</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){std::cerr &lt;&lt; <span class="stringliteral">&quot;[ERROR:] You&#39;ve passed me a NULL xsec covariance matrix... I need this to setup splines!&quot;</span> &lt;&lt; std::endl; <span class="keywordflow">throw</span>;}</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="comment">//KS: For now FD support only one sample</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_variable" href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">nSamples</a> = 1;</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_variable" href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">SampleName</a>.push_back(<span class="stringliteral">&quot;FDsample&quot;</span>);</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="comment">//Default TestStatistic is kPoisson</span></div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_variable" href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">fTestStatistic</a> = <a class="code hl_enumvalue" href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a>;</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span>}</div> +</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div> +<div class="foldopen" id="foldopen00027" data-start="{" data-end="}"> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a"> 27</a></span><a class="code hl_function" href="classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a">samplePDFFDBase::~samplePDFFDBase</a>()</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>{</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> std::cout &lt;&lt; <span class="stringliteral">&quot;I&#39;m deleting samplePDFFDBase&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){<span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>];}</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>];</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//ETA - there is a chance that you haven&#39;t added any data...</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){<span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>];}</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> }</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){<span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>;}</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>;</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="comment">//ETA - there is a chance that you haven&#39;t added any data...</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){<span class="keyword">delete</span>[] <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>;}</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div> +</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="foldopen" id="foldopen00044" data-start="{" data-end="}"> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc"> 44</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc">samplePDFFDBase::fill1DHist</a>()</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>{</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// DB Commented out by default - Code heading towards GetLikelihood using arrays instead of root objects </span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// Wouldn&#39;t actually need this for GetLikelihood as TH objects wouldn&#39;t be filled </span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;AddBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1,<a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>]);</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>}</div> +</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="foldopen" id="foldopen00057" data-start="{" data-end="}"> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984"> 57</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984">samplePDFFDBase::fill2DHist</a>()</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>{</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// DB Commented out by default - Code heading towards GetLikelihood using arrays instead of root objects </span></div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// Wouldn&#39;t actually need this for GetLikelihood as TH objects wouldn&#39;t be filled </span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>+1,<a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>]);</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> }</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span>}</div> +</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="foldopen" id="foldopen00070" data-start="{" data-end="}"> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9"> 70</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">samplePDFFDBase::UseBinnedOscReweighting</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>) </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>{</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836">osc_binned</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>;</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a> == <span class="keyword">true</span>) {</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> std::cout &lt;&lt; <span class="stringliteral">&quot;WARNING: you are using binned oscillation weight without specifying the binning. It will use E_reco binning to set the energy (recommended to use set1Dbinning first !). If you want another binning use : \n useBinnedOscReweighting(true, int, double*) \nwhere int is the number of bins and double* is an array with the bins boundaries.&quot;</span> &lt;&lt; std::endl ;</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nb_bins</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a> -&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetXaxis</a>() -&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetNbins</a>() ; </div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">osc_bins</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a> -&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetXaxis</a>() -&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetXbins</a>() -&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetArray</a>();</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828">osc_binned_axis</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nb_bins</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">osc_bins</a>) ;</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span>}</div> +</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div> +<div class="foldopen" id="foldopen00085" data-start="{" data-end="}"> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a0fee963934f4918d36c55626c0fb793a"> 85</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">samplePDFFDBase::UseBinnedOscReweighting</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">osc_bins</a>) </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span>{</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836">osc_binned</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>;</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a> == <span class="keyword">true</span>) {</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828">osc_binned_axis</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">osc_bins</a>) ;</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> }</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>}</div> +</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="foldopen" id="foldopen00095" data-start="{" data-end="}"> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781"> 95</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">samplePDFFDBase::IsEventSelected</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>;</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>.size() ;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>++) {</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][0], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//std::cout &lt;&lt; &quot;Val returned for selection &quot; &lt;&lt; iSelection &lt;&lt; &quot; is &quot; &lt;&lt; Val &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//DB If multiple return values, it will consider each value seperately</span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">//DB Already checked that Selection vector is correctly sized</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">//DB In the case where Selection[0].size()==3, Only Events with Val &gt;= Selection[iSelection][1] and Val &lt; Selection[iSelection][2] are considered Passed</span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][1])||(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>&gt;=<a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][2])) {</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="comment">//DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check</span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>}</div> +</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="foldopen" id="foldopen00119" data-start="{" data-end="}"> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a36052ef8bdd85b1e390996aad361d953"> 119</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">samplePDFFDBase::IsEventSelected</a>(std::vector&lt; std::string &gt; SelectionStr, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>;</div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952">SelectionStr</a>.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>++) {</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952">SelectionStr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//ETA - still need to support other method of you specifying the cut you want in ReturnKinematicParameter</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">//like in Dan&#39;s version below from T2K</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="comment">//Val = ReturnKinematicParameter(static_cast&lt;KinematicTypes&gt;(Selection[iSelection][0]),iSample,iEvent);</span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">//DB If multiple return values, it will consider each value seperately</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">//DB Already checked that Selection vector is correctly sized</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">//DB In the case where Selection[0].size()==3, Only Events with Val &gt;= Selection[iSelection][1] and Val &lt; Selection[iSelection][2] are considered Passed</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203">SelectionBounds</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][0])||(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>&gt;=<a class="code hl_variable" href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203">SelectionBounds</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][1])) {</div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="comment">//DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check</span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>}</div> +</div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment">//Same as the function above but just acts on the vector and the event</span></div> +<div class="foldopen" id="foldopen00143" data-start="{" data-end="}"> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aed71380c5f2f25a5c28896ca3ac27f7f"> 143</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">samplePDFFDBase::IsEventSelected</a>(std::vector&lt; std::string &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ParameterStr</a>, std::vector&lt; std::vector&lt;double&gt; &gt; &amp;Selection, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a>;</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ParameterStr</a>.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>++) {</div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ParameterStr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">//DB If multiple return values, it will consider each value seperately</span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="comment">//DB Already checked that Selection vector is correctly sized</span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">//DB In the case where Selection[0].size()==3, Only Events with Val &gt;= Selection[iSelection][1] and Val &lt; Selection[iSelection][2] are considered Passed</span></div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">//ETA - also check whether we&#39;re actually applying a lower or upper cut by checking they aren&#39;t -999</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][1] &amp;&amp; <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][0] != -999){</div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">//std::cout &lt;&lt; &quot;Cutting event as &quot; &lt;&lt; Val &lt;&lt; &quot; is greater than &quot; &lt;&lt; Selection[iSelection][1]</span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Val</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][0] &amp;&amp; <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSelection</a>][1] != -999){</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">//DB To avoid unneccessary checks, now return false rather than setting bool to true and continuing to check</span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span>}</div> +</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">//CalcOsc for Prob3++ CPU</span></div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">samplePDFFDBase::calcOscWeights</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>, <span class="keywordtype">int</span> nutype, <span class="keywordtype">int</span> oscnutype, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>)</div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>{</div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;SetMNS(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[0], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[2], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[1], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[3], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[4], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[5], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <a class="code hl_variable" href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">doubled_angle</a>, nutype);</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;propagateLinear(nutype , <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[7], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[8]); </div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;GetProb(nutype, oscnutype);</div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span>}</div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment">//CalcOsc for Prob3++ GPU (ProbGpu)</span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; not defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keywordtype">void</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">setMNS</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">x12</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">x13</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">x23</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">m21</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">m23</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Delta</a>, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kSquared</a>);</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keywordtype">void</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetProb</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Alpha</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Beta</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Path</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Energy</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscw</a>); </div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">samplePDFFDBase::calcOscWeights</a>(<span class="keywordtype">int</span> nutype, <span class="keywordtype">int</span> oscnutype, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>)</div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>{</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">setMNS</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[0], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[2], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[1], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[3], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[4], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[5], <a class="code hl_variable" href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">doubled_angle</a>);</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetProb</a>(nutype, oscnutype, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[7], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[8], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>);</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (std::isnan(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>[10]))</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> {</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;WARNING: ProbGPU oscillation weight returned NaN! &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>[10] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> }</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>}</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">//CalcOsc for CUDAProb3 CPU/GPU</span></div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="preprocessor">#if not defined (USE_PROB3)</span></div> +<div class="foldopen" id="foldopen00199" data-start="{" data-end="}"> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865"> 199</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">samplePDFFDBase::calcOscWeights</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>, <span class="keywordtype">int</span> nutype, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>)</div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>{</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;setMNSMatrix(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">asin</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sqrt</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[0])),<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">asin</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sqrt</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[2])), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">asin</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sqrt</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[1])), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[5], nutype);</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;setNeutrinoMasses(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[3], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>[4]);</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;calculateProbabilities(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].NeutrinoType);</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].Oscillator-&gt;getProbabilityArr(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>].ProbType);</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span>}</div> +</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><span class="preprocessor">#endif </span></div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div> +<div class="foldopen" id="foldopen00208" data-start="{" data-end="}"> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce"> 208</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce">samplePDFFDBase::reweight</a>(<span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>) <span class="comment">// Reweight function - Depending on Osc Calculator this function uses different CalcOsc functions</span></div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span>{</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">Osc</a>!=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) {</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Osc is not NULL!! i.e. doing atm oscillations &quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//DB Currently hardcoded to assume rho_electrons = rho_matter/2, 25km production height</span></div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">Osc</a>-&gt;<a class="code hl_function" href="classOscillator.html#a338f483a27048a37c274bf6c16c317ab">FillOscillogram</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>,25.0,0.5);</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++) {</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>++) {</div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w_pointer[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]);</div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> }</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="comment">//Prob3 CPU needs to loop through events too</span></div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nEvents; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>) {</div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nutype, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].oscnutype, *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_etru[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> } <span class="comment">//event loop</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; not defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nutype, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].oscnutype, *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_etru), <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].osc_w, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nEvents, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="preprocessor">#if not defined (USE_PROB3)</span></div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nutype, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].osc_w, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }<span class="comment">// Sample loop</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//KS: Reset the histograms before reweight </span></div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252">ResetHistograms</a>();</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9">fillArray</a>();</div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span>}</div> +</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">//DB Function which does the core reweighting. This assumes that oscillation weights have already been calculated and stored in samplePDFFDBase[iSample].osc_w[iEvent]</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span><span class="comment">//This function takes advantage of most of the things called in setupSKMC to reduce reweighting time</span></div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span><span class="comment">//It also follows the ND code reweighting pretty closely</span></div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="comment">//This function fills the samplePDFFD_array array which is binned to match the sample binning, such that bin[1][1] is the equivalent of _hPDF2D-&gt;GetBinContent(2,2) {Noticing the offset}</span></div> +<div class="foldopen" id="foldopen00252" data-start="{" data-end="}"> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9"> 252</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9">samplePDFFDBase::fillArray</a>() {</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">//DB Reset which cuts to apply</span></div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3">StoredSelection</a>;</div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// Call entirely different routine if we&#39;re running with openMP</span></div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="preprocessor">#ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fillArray_MP</a>();</div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">//ETA we should probably store this in samplePDFFDBase</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">//DB Reset values stored in PDF array to 0.</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> }</div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> }</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd">PrepFunctionalParameters</a>();</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">FindSplineSegment</a>();</div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">calcWeights</a>();</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++) {</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>++) {</div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b">applyShifts</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">IsEventSelected</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>)) { </div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> } </div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> = 1.0;</div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> = 1.0;</div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> = 1.0;</div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> = 1.0;</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> *= <a class="code hl_function" href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">CalcXsecWeightSpline</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="comment">//DB Catch negative spline weights and skip any event with a negative event. Previously we would set weight to zero and continue but that is inefficient. Do this on a spline-by-spline basis</span></div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="comment">//Loop over stored normalisation and function pointers </span></div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> *= <a class="code hl_function" href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">CalcXsecWeightNorm</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="comment">//DB Catch negative norm weights and skip any event with a negative event. Previously we would set weight to zere and continue but that is inefficient</span></div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> }</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548">CalcXsecWeightFunc</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="comment">//DB Catch negative func weights and skip any event with a negative event. Previously we would set weight to zere and continue but that is inefficient</span></div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> &lt;= 0.){ </div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> }</div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a>;</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> </div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="comment">//DB Set oscillation weights for NC events to 1.0</span></div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="comment">//DB Another speedup - Why bother storing NC signal events and calculating the oscillation weights when we just throw them out anyway? Therefore they are skipped in setupMC</span></div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="comment">//</span></div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="comment">//LW Checking if NC event is signal (oscillated or not), if yes: osc_w = 0 || if no: osc_w = 1.0</span></div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].signal) { <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.0;</div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> </div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="comment">//ETA - I need to check that this doesn&#39;t cause a problem for atmospherics and or tau samples</span></div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; !<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].signal) { <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 1.0;</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> }</div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="comment">//DB Set oscillation weights for NC events to 1.0</span></div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="comment">//DB Another speedup - Why bother storing NC signal events and calculating the oscillation weights when we just throw them out anyway? Therefore they are skipped in setupSKMC</span></div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) { <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 1.0; </div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> }</div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="comment">//DB Total weight</span></div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">GetEventWeight</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="comment">//DB Catch negative weights and skip any event with a negative event</span></div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> }</div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="comment">//DB Switch on BinningOpt to allow different binning options to be implemented</span></div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="comment">//The alternative would be to have inheritance based on BinningOpt</span></div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> = *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]);</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="comment">//DB Find the relevant bin in the PDF for each event</span></div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = -1;</div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomYBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>];</div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> </div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="comment">//DB - First, check to see if the event is still in the nominal bin</span></div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>];</div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> }</div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">//DB - Second, check to see if the event is outside of the binning range and skip event if it is</span></div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="comment">//ETA- note that nXBins is XBinEdges.size() - 1</span></div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[0] || <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>]) {</div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> }</div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="comment">//DB - Thirdly, check the adjacent bins first as Eb+CC+EScale shifts aren&#39;t likely to move an Erec more than 1bin width</span></div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="comment">//Shifted down one bin from the event bin at nominal</span></div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]-1;</div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> }</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">//Shifted up one bin from the event bin at nominal</span></div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]+1;</div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> }</div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="comment">//DB - If we end up in this loop, the event has been shifted outside of its nominal bin, but is still within the allowed binning range</span></div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>++) {</div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>+1]) {</div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>;</div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> }</div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> }</div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="comment">//DB Fill relevant part of thread array</span></div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> != -1 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a> != -1) {</div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="comment">//std::cout &lt;&lt; &quot;Filling samplePDFFD_array at YBin: &quot; &lt;&lt; YBinToFill &lt;&lt; &quot; and XBin: &quot; &lt;&lt; XBinToFill &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>;</div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>;</div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> }</div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> }</div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> }</div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="preprocessor">#endif </span><span class="comment">// end the else in openMP</span></div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span>}</div> +</div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="preprocessor">#ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="keywordtype">void</span> samplePDFFDBase::fillArray_MP() </div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span>{</div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="comment">//DB Reset values stored in PDF array to 0.</span></div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> }</div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> }</div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> </div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="comment">//reconfigureFuncPars();</span></div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="comment">//This is stored as [y][x] due to shifts only occuring in the x variable (Erec/Lep mom) - I believe this will help reduce cache misses </span></div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">double</span>** <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">double</span>** <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="comment">// Declare the omp parallel region</span></div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="comment">// The parallel region needs to stretch beyond the for loop!</span></div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="preprocessor">#pragma omp parallel private(samplePDFFD_array_private, samplePDFFD_array_private_w2)</span></div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> {</div> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="comment">// private to each thread</span></div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="comment">// ETA - maybe we can use parallel firstprivate to initialise these?</span></div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> }</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> }</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="comment">//DB - Brain dump of speedup ideas</span></div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="comment">//</span></div> +<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="comment">//Those relevant to reweighting</span></div> +<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="comment">// 1. Don&#39;t bother storing and calculating NC signal events - Implemented and saves marginal s/step</span></div> +<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="comment">// 2. Loop over spline event weight calculation in the following event loop - Currently done in splineSKBase-&gt;calcWeight() where multi-threading won&#39;t be optmised - Implemented and saves 0.3s/step</span></div> +<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="comment">// 3. Inline getDiscVar or somehow include that calculation inside the multi-threading - Implemented and saves about 0.01s/step</span></div> +<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// 4. Include isCC inside SKMCStruct so don&#39;t have to have several &#39;if&#39; statements determine if oscillation weight needs to be set to 1.0 for NC events - Implemented and saves marginal s/step</span></div> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// 5. Do explict check on adjacent bins when finding event XBin instead of looping over all BinEdge indicies - Implemented but doesn&#39;t significantly affect s/step</span></div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">//</span></div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//Other aspects</span></div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <span class="comment">// 1. Order minituples in Y-axis variable as this will *hopefully* reduce cache misses inside samplePDFFD_array_class[yBin][xBin]</span></div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="comment">//</span></div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <span class="comment">// We will hit &lt;0.1 s/step eventually! :D</span></div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="comment">//ETA - does these three calls need to be inside the omp parrallel region? </span></div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="comment">//I don&#39;t think this will affect anything but maybe should check.</span></div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd">PrepFunctionalParameters</a>();</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">//==================================================</span></div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">//Calc Weights and fill Array</span></div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">FindSplineSegment</a>();</div> +<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">calcWeights</a>();</div> +<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div> +<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++) {</div> +<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="preprocessor">#pragma omp for</span></div> +<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>++) {</div> +<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> </div> +<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="comment">//ETA - generic functions to apply shifts to kinematic variables</span></div> +<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="comment">// Apply this before IsEventSelected is called.</span></div> +<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b">applyShifts</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="comment">//ETA - generic functions to apply shifts to kinematic variable</span></div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">//this is going to be slow right now due to string comps under the hood.</span></div> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="comment">//Need to implement a more efficient version of event-by-event cut checks</span></div> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">if</span>(!<a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">IsEventSelected</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>)){</div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> }</div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> = 1.0;</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> = 1.0;</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> = 1.0;</div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> = 1.0;</div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> </div> +<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="comment">//DB SKDet Syst</span></div> +<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="comment">//As weights were skdet::fParProp, and we use the non-shifted erec, we might as well cache the corresponding fParProp index for each event and the pointer to it</span></div> +<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> </div> +<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> *= <a class="code hl_function" href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">CalcXsecWeightSpline</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="comment">//std::cout &lt;&lt; &quot;Spline weight is &quot; &lt;&lt; splineweight &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <span class="comment">//DB Catch negative spline weights and skip any event with a negative event. Previously we would set weight to zero and continue but that is inefficient</span></div> +<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> }</div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> *= <a class="code hl_function" href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">CalcXsecWeightNorm</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="comment">//DB Catch negative norm weights and skip any event with a negative event. Previously we would set weight to zero and continue but that is inefficient</span></div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="comment">//std::cout &lt;&lt; &quot;norm weight is &quot; &lt;&lt; normweight &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> }</div> +<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> </div> +<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548">CalcXsecWeightFunc</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="comment">//DB Catch negative func weights and skip any event with a negative event. Previously we would set weight to zero and continue but that is inefficient</span></div> +<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="comment">//std::cout &lt;&lt; &quot;Func weight is &quot; &lt;&lt; funcweight &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> }</div> +<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> </div> +<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">normweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">funcweight</a>;</div> +<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div> +<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="comment">//DB Set oscillation weights for NC events to 1.0</span></div> +<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="comment">//DB Another speedup - Why bother storing NC signal events and calculating the oscillation weights when we just throw them out anyway? Therefore they are skipped in setupSKMC</span></div> +<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="comment">//LW Checking if NC event is signal (oscillated or not), if yes: osc_w = 0 || if no: osc_w = 1.0</span></div> +<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].signal) { <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.0;</div> +<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> }</div> +<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; !<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].signal) { <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].osc_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 1.0;</div> +<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> }</div> +<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div> +<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> = <a class="code hl_function" href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">GetEventWeight</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div> +<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="comment">//DB Catch negative weights and skip any event with a negative event</span></div> +<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> &lt;= 0.){</div> +<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_w[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = 0.;</div> +<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> }</div> +<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> </div> +<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="comment">//DB Switch on BinningOpt to allow different binning options to be implemented</span></div> +<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="comment">//The alternative would be to have inheritance based on BinningOpt</span></div> +<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> = (*(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]));</div> +<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> </div> +<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="comment">//DB Commented out by default but if we ever want to consider shifts in theta this will be needed</span></div> +<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="comment">//double YVar = MCSamples[iSample].rw_theta[iEvent];</span></div> +<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> </div> +<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="comment">//DB Find the relevant bin in the PDF for each event</span></div> +<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = -1;</div> +<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomYBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>];</div> +<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> </div> +<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="comment">//std::cout &lt;&lt; &quot;Filling samplePDFFD_array at YBin: &quot; &lt;&lt; YBinToFill &lt;&lt; &quot; and XBin: &quot; &lt;&lt; XBinToFill &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="comment">//std::cout &lt;&lt; &quot;XVar is &quot; &lt;&lt; XVar &lt;&lt; &quot; and rw_upper_bin_edge is &quot; &lt;&lt; MCSamples[iSample].rw_upper_xbinedge[iEvent] &lt;&lt; &quot; and rw_lower_xbinedge is &quot; &lt;&lt; MCSamples[iSample].rw_lower_xbinedge[iEvent] &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="comment">//DB Check to see if momentum shift has moved bins</span></div> +<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="comment">//DB - First, check to see if the event is still in the nominal bin </span></div> +<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>];</div> +<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="comment">//std::cout &lt;&lt; &quot;Filling samplePDFFD_array at YBin: &quot; &lt;&lt; YBinToFill &lt;&lt; &quot; and XBin: &quot; &lt;&lt; XBinToFill &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> }</div> +<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="comment">//DB - Second, check to see if the event is outside of the binning range and skip event if it is</span></div> +<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[0] || <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>]) {</div> +<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> }</div> +<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="comment">//DB - Thirdly, check the adjacent bins first as Eb+CC+EScale shifts aren&#39;t likely to move an Erec more than 1bin width</span></div> +<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="comment">//Shifted down one bin from the event bin at nominal</span></div> +<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_lower_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]-1;</div> +<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> }</div> +<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="comment">//Shifted up one bin from the event bin at nominal</span></div> +<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]) {</div> +<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]+1;</div> +<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> }</div> +<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="comment">//DB - If we end up in this loop, the event has been shifted outside of its nominal bin, but is still within the allowed binning range</span></div> +<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>&lt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1);<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>++) {</div> +<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &gt;= <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVar</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>+1]) {</div> +<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>;</div> +<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> }</div> +<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> }</div> +<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> }</div> +<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> </div> +<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="comment">//DB Fill relevant part of thread array</span></div> +<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a> != -1 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a> != -1) {</div> +<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="comment">//std::cout &lt;&lt; &quot;Filling samplePDFFD_array at YBin: &quot; &lt;&lt; YBinToFill &lt;&lt; &quot; and XBin: &quot; &lt;&lt; XBinToFill &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>;</div> +<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinToFill</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XBinToFill</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>;</div> +<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> }</div> +<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">else</span>{</div> +<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="comment">//std::cout &lt;&lt; &quot;Not filled samplePDFFD_array at YBin: &quot; &lt;&lt; YBinToFill &lt;&lt; &quot; and XBin: &quot; &lt;&lt; XBinToFill &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> }</div> +<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> </div> +<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> }</div> +<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> } </div> +<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div> +<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="comment">//End of Calc Weights and fill Array</span></div> +<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="comment">//==================================================</span></div> +<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// DB Copy contents of &#39;samplePDFFD_array_private&#39; into &#39;samplePDFFD_array&#39; which can then be used in GetLikelihood</span></div> +<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span><span class="preprocessor">#pragma omp atomic</span></div> +<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>];</div> +<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span><span class="preprocessor">#pragma omp atomic </span></div> +<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>];</div> +<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> }</div> +<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> }</div> +<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> </div> +<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>];</div> +<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>];</div> +<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> }</div> +<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private</a>;</div> +<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keyword">delete</span>[] <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">samplePDFFD_array_private_w2</a>;</div> +<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> } <span class="comment">//end of parallel region</span></div> +<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span>}</div> +<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div> +<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> </div> +<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span><span class="comment">// **************************************************</span></div> +<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span><span class="comment">// Helper function to reset the data and MC histograms</span></div> +<div class="foldopen" id="foldopen00597" data-start="{" data-end="}"> +<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252"> 597</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252">samplePDFFDBase::ResetHistograms</a>() {</div> +<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span><span class="comment">// **************************************************</span></div> +<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div> +<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> </div> +<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="comment">//DB Reset values stored in PDF array to 0.</span></div> +<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> }</div> +<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> }</div> +<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span>} <span class="comment">// end function</span></div> +</div> +<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div> +<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="comment">// Calculate the spline weight for one event</span></div> +<div class="foldopen" id="foldopen00613" data-start="{" data-end="}"> +<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f"> 613</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">samplePDFFDBase::CalcXsecWeightSpline</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> </div> +<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a> = 1.0;</div> +<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="comment">//DB Xsec syst</span></div> +<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="comment">//Loop over stored spline pointers</span></div> +<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nxsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>];<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>++) {</div> +<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a> *= *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]);</div> +<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> }</div> +<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a>;</div> +<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span>}</div> +</div> +<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> </div> +<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="comment">// Calculate the normalisation weight for one event</span></div> +<div class="foldopen" id="foldopen00627" data-start="{" data-end="}"> +<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d"> 627</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">samplePDFFDBase::CalcXsecWeightNorm</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span><span class="comment">// ***************************************************************************</span></div> +<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> </div> +<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a> = 1.0;</div> +<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="comment">//Loop over stored normalisation and function pointers</span></div> +<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a> = 0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nxsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>++)</div> +<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> {</div> +<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a> *= *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>]);</div> +<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><span class="preprocessor"> #ifdef DEBUG</span></div> +<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span> (TMath::IsNaN(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a>)) std::cout &lt;&lt; <span class="stringliteral">&quot;iParam=&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a> &lt;&lt; <span class="stringliteral">&quot;xsecweight=nan from norms&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div> +<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsecw</a>;</div> +<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span>}</div> +</div> +<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> </div> +<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span><span class="comment">//DB Adding in Oscillator class support for smeared oscillation probabilities</span></div> +<div class="foldopen" id="foldopen00643" data-start="{" data-end="}"> +<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10"> 643</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10">samplePDFFDBase::SetOscillator</a>(<a class="code hl_class" href="classOscillator.html">Oscillator</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Osc_</a>) {</div> +<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span><span class="preprocessor">#if defined (USE_PROB3)</span></div> +<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Atmospheric Oscillator only defined using CUDAProb3 - USE_PROB3 is defined and indicates that Prob3++/probGPU is being used&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> </div> +<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">Osc</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Osc_</a>;</div> +<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Set Oscillator&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> </div> +<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5">FindEventOscBin</a>();</div> +<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span>}</div> +</div> +<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> </div> +<div class="foldopen" id="foldopen00655" data-start="{" data-end="}"> +<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5"> 655</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5">samplePDFFDBase::FindEventOscBin</a>() {</div> +<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="classinterfacePDFEbE.html#a5e48b903f6805472d7f7e6d7d33be215">getNMCSamples</a>(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_function" href="classinterfacePDFEbE.html#aae045e6d54c3f4e86002aac58fd6d8a6">getNEventsInSample</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++) {</div> +<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].osc_w_pointer[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_variable" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">Osc</a>-&gt;<a class="code hl_function" href="classOscillator.html#acab40ba6575f37546d0951510404b3c2">retPointer</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nutype,<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].oscnutype,*(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_etru[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]),<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_truecz[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]);</div> +<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> }</div> +<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> }</div> +<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Set all oscillation pointers to Oscillator&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span>}</div> +</div> +<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> </div> +<div class="foldopen" id="foldopen00664" data-start="{" data-end="}"> +<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160"> 664</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160">samplePDFFDBase::SetXsecCov</a>(<a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a> *xsec){</div> +<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> </div> +<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> std::cout &lt;&lt; <span class="stringliteral">&quot;SETTING UP XSEC COV!!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a> = xsec;</div> +<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> </div> +<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="comment">// Get the map between the normalisation parameters index, their name, what mode they should apply to, and what target</span></div> +<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="comment">//This information is used later in CalcXsecNormsBins to decide if a parameter applies to an event</span></div> +<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> </div> +<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> <span class="comment">//DB Now get this information using the DetID from the config</span></div> +<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">xsec_norms</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#aea3542e88e6947b5da383a12c7d4e54c">GetNormParsFromDetID</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>);</div> +<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3">nFuncParams</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a90e2aa373a8ffb9b838f90fbc7a67641">GetNumFuncParamsFromDetID</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>);</div> +<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900">funcParsNames</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#ac3c73b55a96de2413224e7bd50a98f82">GetFuncParsNamesFromDetID</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>);</div> +<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78">funcParsIndex</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a25bad5be0ce0a0778dcdf596b7930f2e">GetFuncParsIndexFromDetID</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>);</div> +<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> </div> +<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Found &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">xsec_norms</a>.size() &lt;&lt; <span class="stringliteral">&quot; normalisation parameters&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Found &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900">funcParsNames</a>.size() &lt;&lt; <span class="stringliteral">&quot; functional parameters&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div> +<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span>}</div> +</div> +<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> </div> +<div class="foldopen" id="foldopen00684" data-start="{" data-end="}"> +<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa"> 684</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa">samplePDFFDBase::SetupNormParameters</a>(){</div> +<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> </div> +<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">if</span>(!<a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>){</div> +<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> std::cout &lt;&lt; <span class="stringliteral">&quot;XsecCov is not setup!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> }</div> +<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> </div> +<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="comment">// Assign xsec norm bins in MCSamples tree</span></div> +<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>) {</div> +<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b">CalcXsecNormsBins</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>);</div> +<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> }</div> +<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> </div> +<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="comment">//DB</span></div> +<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="comment">//Attempt at reducing impact of covarianceXsec::calcReweight()</span></div> +<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">counter</a>;</div> +<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> </div> +<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>) {</div> +<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) {</div> +<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">counter</a> = 0;</div> +<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> </div> +<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nxsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norms_bins[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>].size();</div> +<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] = <span class="keyword">new</span> <span class="keyword">const</span> <span class="keywordtype">double</span>*[<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nxsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]];</div> +<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> </div> +<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">for</span>(std::list&lt; int &gt;::iterator <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lit</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norms_bins[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>].<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">begin</a>();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lit</a>!=<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norms_bins[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>].end();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lit</a>++) {</div> +<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].xsec_norm_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">counter</a>] = <a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceBase.html#abf476818e624c68494372684658081a8">retPointer</a>(*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">lit</a>);</div> +<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">counter</a> += 1;</div> +<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> }</div> +<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> </div> +<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> }</div> +<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> }</div> +<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div> +<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span>}</div> +</div> +<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> </div> +<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span><span class="comment">//A way to check whether a normalisation parameter applies to an event or not</span></div> +<div class="foldopen" id="foldopen00719" data-start="{" data-end="}"> +<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b"> 719</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b">samplePDFFDBase::CalcXsecNormsBins</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>){</div> +<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> </div> +<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <a class="code hl_struct" href="structfdmc__base.html">fdmc_base</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a> = &amp;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>];</div> +<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> </div> +<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> std::cout &lt;&lt; <span class="stringliteral">&quot;FD Object has &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;<a class="code hl_variable" href="structfdmc__base.html#abc7c499f714510adc13362187ec541e0">nEvents</a> &lt;&lt; <span class="stringliteral">&quot; events&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> </div> +<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;nEvents; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>){</div> +<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> std::list&lt; int &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XsecBins</a> = {};</div> +<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>) {</div> +<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <span class="comment">//std::cout &lt;&lt; &quot;Xsec norms is of size &quot; &lt;&lt; xsec_norms.size() &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">for</span> (std::vector&lt;XsecNorms4&gt;::iterator <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">xsec_norms</a>.begin(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a> != <a class="code hl_variable" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">xsec_norms</a>.end(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">it</a>) {</div> +<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="comment">//std::cout &lt;&lt; &quot;Looping over systematic &quot; &lt;&lt; (*it).name &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="comment">// Skip oscillated NC events</span></div> +<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="comment">// Not strictly needed, but these events don&#39;t get included in oscillated predictions, so</span></div> +<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="comment">// no need to waste our time calculating and storing information about xsec parameters</span></div> +<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// that will never be used.</span></div> +<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;isNC[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;signal) {<span class="keywordflow">continue</span>;} <span class="comment">//DB Abstract check on MaCh3Modes to determine which apply to neutral current</span></div> +<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div> +<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="comment">//Now check that the target of an interaction matches with the normalisation parameters</span></div> +<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TargetMatch</a>=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <span class="comment">//If no target specified then apply to all modes</span></div> +<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">if</span> ((*it).targets.size()==0) {</div> +<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TargetMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iTarget</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iTarget</a>&lt;(*it).targets.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iTarget</a>++) {</div> +<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">if</span> ((*it).targets.at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iTarget</a>)== *(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;Target[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>])) {</div> +<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TargetMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> }</div> +<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> }</div> +<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> }</div> +<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TargetMatch</a>) {<span class="keywordflow">continue</span>;}</div> +<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> </div> +<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="comment">//Now check that the neutrino flavour in an interaction matches with the normalisation parameters</span></div> +<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourMatch</a>=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="comment">//If no mode specified then apply to all modes</span></div> +<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordflow">if</span> ((*it).pdgs.size()==0) {</div> +<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>&lt;(*it).pdgs.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>++) {</div> +<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">if</span> ((*it).pdgs.at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>)== <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;nupdg) {</div> +<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> }</div> +<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> }</div> +<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> }</div> +<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourMatch</a>){<span class="keywordflow">continue</span>;}</div> +<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> </div> +<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="comment">//Now check that the unoscillated neutrino flavour in an interaction matches with the normalisation parameters</span></div> +<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourUnoscMatch</a>=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="comment">//If no mode specified then apply to all modes</span></div> +<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="keywordflow">if</span> ((*it).preoscpdgs.size()==0) {</div> +<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourUnoscMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>&lt;(*it).preoscpdgs.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>++) {</div> +<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">if</span> ((*it).preoscpdgs.at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iPDG</a>) == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;nupdgUnosc) {</div> +<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourUnoscMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="comment">//std::cout &lt;&lt; &quot;DID MATCH &quot; &lt;&lt; fdobj-&gt;nupdgUnosc &lt;&lt; &quot; with &quot; &lt;&lt; (*it).preoscpdgs.at(iPDG) &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> }</div> +<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="comment">//else{std::cout &lt;&lt; &quot;Didn&#39;t match &quot; &lt;&lt; fdobj-&gt;nupdgUnosc &lt;&lt; &quot; with &quot; &lt;&lt; (*it).preoscpdgs.at(iPDG) &lt;&lt; std::endl;}</span></div> +<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> }</div> +<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> }</div> +<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FlavourUnoscMatch</a>){<span class="keywordflow">continue</span>;}</div> +<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> </div> +<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="comment">//Now check that the mode of an interaction matches with the normalisation parameters</span></div> +<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ModeMatch</a>=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="comment">//If no mode specified then apply to all modes</span></div> +<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">if</span> ((*it).modes.size()==0) {</div> +<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ModeMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">imode</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">imode</a>&lt;(*it).modes.size();<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">imode</a>++) {</div> +<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">if</span> ((*it).modes.at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">imode</a>)== *(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;mode[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>])) {</div> +<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ModeMatch</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> }</div> +<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> }</div> +<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> }</div> +<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ModeMatch</a>) {<span class="keywordflow">continue</span>;}</div> +<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> </div> +<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="comment">//Now check whether the norm has kinematic bounds</span></div> +<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="comment">//i.e. does it only apply to events in a particular kinematic region?</span></div> +<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">IsSelected</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">if</span> ((*it).hasKinBounds) {</div> +<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a> = 0 ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a> &lt; (*it).KinematicVarStr.size() ; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a> ) {</div> +<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>((*it).KinematicVarStr[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a>], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) &lt;= (*it).Selection[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a>][0]) { </div> +<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="comment">//if((*it).name.find(&quot;b_&quot;) != std::string::npos){</span></div> +<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="comment">// std::cout &lt;&lt; &quot;Failed because &quot; &lt;&lt; ReturnKinematicParameter((*it).KinematicVarStr[iKinematicParameter], iSample, iEvent) &lt;&lt; &quot; is less than &quot; &lt;&lt; (*it).Selection[iKinematicParameter][0] &lt;&lt; std::endl; </span></div> +<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="comment">//}</span></div> +<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">IsSelected</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> }</div> +<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>((*it).KinematicVarStr[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a>], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) &gt; (*it).Selection[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKinematicParameter</a>][1]) {</div> +<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">IsSelected</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> }</div> +<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> } </div> +<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div> +<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <span class="comment">//Need to then break the event loop </span></div> +<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">if</span>(!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">IsSelected</a>){</div> +<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> }</div> +<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> </div> +<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="comment">// Now set &#39;index bin&#39; for each normalisation parameter</span></div> +<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="comment">// All normalisations are just 1 bin for 2015, so bin = index (where index is just the bin for that normalisation)</span></div> +<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a> = (*it).index;</div> +<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> </div> +<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <span class="comment">//If syst on applies to a particular detector</span></div> +<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">if</span> ((<a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#aad522479b06581729efd6c1cd12d11df">GetParDetID</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>) &amp; <a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>)==<a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>) {</div> +<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XsecBins</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>);</div> +<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> }</div> +<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> } <span class="comment">// end iteration over xsec_norms</span></div> +<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> } <span class="comment">// end if (xsecCov)</span></div> +<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fdobj</a>-&gt;xsec_norms_bins[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>]=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XsecBins</a>;</div> +<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> }<span class="comment">//end loop over events</span></div> +<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span>}</div> +</div> +<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> </div> +<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span><span class="comment">//LW </span></div> +<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span><span class="comment">//Setup chosen oscillation calculator for each subsample</span></div> +<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span><span class="comment">//Default Baseline Implementation</span></div> +<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span><span class="comment">//Add your own implementation in experiment specific SamplePDF Class if necessary!!</span></div> +<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span><span class="comment">// ETA - pass the yaml config used in the executable. This will include the cov osc</span></div> +<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span><span class="comment">// and other information. Need to double check that this is sensible</span></div> +<div class="foldopen" id="foldopen00839" data-start="{" data-end="}"> +<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad"> 839</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad">samplePDFFDBase::SetupOscCalc</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PathLength</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>)</div> +<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span>{</div> +<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div> +<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++) {</div> +<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> </div> +<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span><span class="comment">// if we&#39;re using Prob3++ CPU then initialise BargerPropagator object</span></div> +<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span><span class="comment">// if we&#39;re using Prob3++ GPU then we don&#39;t need to do this since event information gets passed straight to ProbGpu.cu in CalcOscWeights</span></div> +<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BargerPropagator</a>();</div> +<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;UseMassEigenstates(<span class="keyword">false</span>);</div> +<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;SetOneMassScaleMode(<span class="keyword">false</span>);</div> +<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;SetWarningSuppression(<span class="keyword">true</span>);</div> +<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> </div> +<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span><span class="preprocessor">#if not defined (USE_PROB3)</span></div> +<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span><span class="comment">//if we&#39;re using CUDAProb3 then make vector of energies and convert to CUDAProb3 structs</span></div> +<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">etruVector</a>(*(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_etru), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].rw_etru) + <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents);</div> +<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].ProbType = <a class="code hl_function" href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387">SwitchToCUDAProbType</a>(<a class="code hl_function" href="Structs_8h.html#a0f3bb0c23c578a9e1d3c6eebfd5eaf36">GetCUDAProbFlavour</a>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nutype, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].oscnutype));</div> +<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="comment">// CUDAProb3 takes probType and antineutrino/neutrino separately</span></div> +<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nutype &lt; 0) {<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NeutrinoType = cudaprob3::NeutrinoType::Antineutrino;}</div> +<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">else</span> {<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].NeutrinoType = cudaprob3::NeutrinoType::Neutrino;}</div> +<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span><span class="preprocessor">#if defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span><span class="comment">//if we just want to use CUDAProb3 CPU then setup BeamCpuPropagator object</span></div> +<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span><span class="preprocessor">#if defined (MULTITHREAD)</span></div> +<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span><span class="comment">//if we want to multithread then get number of threads from OMP_NUM_THREADS env variable</span></div> +<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator = <span class="keyword">new</span> cudaprob3::BeamCpuPropagator&lt;double&gt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents, std::atoi(std::getenv(<span class="stringliteral">&quot;OMP_NUM_THREADS&quot;</span>)));</div> +<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setPathLength(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PathLength</a>);</div> +<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setDensity(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>);</div> +<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span><span class="comment">//if we&#39;re not mulithreading then just set it to 1</span></div> +<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator = <span class="keyword">new</span> cudaprob3::BeamCpuPropagator&lt;double&gt;(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents, 1);</div> +<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setPathLength(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PathLength</a>);</div> +<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setDensity(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>);</div> +<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span><span class="preprocessor">#endif </span><span class="comment">//MULTITHREAD</span></div> +<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span><span class="comment">//if we want to use CUDAProb3 GPU then setup BeamCudaPropagator object</span></div> +<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator = <span class="keyword">new</span> cudaprob3::BeamCudaPropagatorSingle(0, <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].nEvents);</div> +<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setPathLength(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PathLength</a>);</div> +<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setDensity(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>);</div> +<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span><span class="preprocessor">#endif </span><span class="comment">// CPU_ONLY</span></div> +<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].Oscillator-&gt;setEnergyList(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">etruVector</a>);</div> +<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span><span class="preprocessor">#endif </span><span class="comment">// USE_PROB3</span></div> +<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> }</div> +<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span>}</div> +</div> +<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> </div> +<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span><span class="comment">//ETA - this is all a bit stupid</span></div> +<div class="foldopen" id="foldopen00886" data-start="{" data-end="}"> +<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a07ec15fdb35f1f32511d635b9796de79"> 886</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">samplePDFFDBase::set1DBinning</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>){</div> +<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div> +<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data());</div> +<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data());</div> +<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> </div> +<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>;</div> +<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <span class="comment">//for (int i=0;i&lt;nbins+1;i++) {</span></div> +<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span><span class="comment">// XBinEdges[i] = _hPDF1D-&gt;GetXaxis()-&gt;GetBinLowEdge(i+1);</span></div> +<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span><span class="comment">// }</span></div> +<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = std::vector&lt;double&gt;(2);</div> +<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0] = -1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1] = 1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> </div> +<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="comment">//double YBinEdges_Arr[2];</span></div> +<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="comment">//YBinEdges_Arr[0] = YBinEdges[0];</span></div> +<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> <span class="comment">//YBinEdges_Arr[1] = YBinEdges[1];</span></div> +<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> </div> +<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a> -&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data(), <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1, <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.data());</div> +<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data(), <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1, <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.data());</div> +<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> </div> +<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> </div> +<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> }</div> +<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> }</div> +<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> </div> +<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">FindNominalBinAndEdges1D</a>();</div> +<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span>}</div> +</div> +<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> </div> +<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span><span class="comment">//ETA - this is all a bit stupid</span></div> +<div class="foldopen" id="foldopen00926" data-start="{" data-end="}"> +<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a8b30b05e75954450b22f71ca5864f5c7"> 926</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">samplePDFFDBase::set2DBinning</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>, std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>)</div> +<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span>{</div> +<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data());</div> +<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data());</div> +<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> </div> +<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>.data());</div> +<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.data(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>.size()-1, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>.data());</div> +<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div> +<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>;</div> +<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>;</div> +<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> </div> +<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="comment">//ETA - maybe need to be careful here</span></div> +<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>.size()-1;</div> +<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>.size()-1;</div> +<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> </div> +<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> }</div> +<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> }</div> +<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> </div> +<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">FindNominalBinAndEdges2D</a>();</div> +<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span>}</div> +</div> +<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> </div> +<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span><span class="comment">//ETA</span></div> +<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span><span class="comment">//New versions of set binning funcitons is samplePDFBase</span></div> +<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span><span class="comment">//so that we can set the values of the bin and lower/upper</span></div> +<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span><span class="comment">//edges in the skmc_base. Hopefully we can use this to make </span></div> +<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span><span class="comment">//fill1Dhist and fill2Dhist quicker</span></div> +<div class="foldopen" id="foldopen00962" data-start="{" data-end="}"> +<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67"> 962</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">samplePDFFDBase::set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>)</div> +<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span>{</div> +<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> </div> +<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>+1);</div> +<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> }</div> +<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = std::vector&lt;double&gt;(2);</div> +<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0] = -1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1] = 1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> </div> +<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinEdges_Arr</a>[2];</div> +<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinEdges_Arr</a>[0] = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0];</div> +<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinEdges_Arr</a>[1] = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1];</div> +<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> </div> +<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>,1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinEdges_Arr</a>);</div> +<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>,1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YBinEdges_Arr</a>);</div> +<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> </div> +<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> </div> +<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> }</div> +<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> }</div> +<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> </div> +<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">FindNominalBinAndEdges1D</a>();</div> +<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span>}</div> +</div> +<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> </div> +<div class="foldopen" id="foldopen01001" data-start="{" data-end="}"> +<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a9e9a67249e22644076a2424ccba7b725"> 1001</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">samplePDFFDBase::set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>)</div> +<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span>{</div> +<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> </div> +<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>+1);</div> +<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> }</div> +<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = std::vector&lt;double&gt;(2);</div> +<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0] = -1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1] = 1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e8</a>;</div> +<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> </div> +<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>,1,<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0],<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1]);</div> +<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>,1,<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[0],<a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[1]);</div> +<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> </div> +<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> </div> +<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> }</div> +<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> }</div> +<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> </div> +<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">FindNominalBinAndEdges1D</a>();</div> +<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span>}</div> +</div> +<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> </div> +<div class="foldopen" id="foldopen01036" data-start="{" data-end="}"> +<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a"> 1036</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">samplePDFFDBase::FindNominalBinAndEdges1D</a>() {</div> +<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> </div> +<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">//Set rw_pdf_bin and rw_upper_xbinedge and rw_lower_xbinedge for each skmc_base</span></div> +<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a> = 0 ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size() ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>++){</div> +<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a> = 0 ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].nEvents ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>++){</div> +<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;FindBin(*(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>]));</div> +<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> </div> +<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>==0) {</div> +<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>);</div> +<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>-1);</div> +<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> }</div> +<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> </div> +<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>);</div> +<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinUpEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>);</div> +<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">//std::cout &lt;&lt; &quot;FINDING EDGES&quot; &lt;&lt; std::endl; </span></div> +<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">//std::cout &lt;&lt; &quot;Low edge is &quot; &lt;&lt; low_edge &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <span class="comment">//std::cout &lt;&lt; &quot;Upper edge is &quot; &lt;&lt; upper_edge &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> </div> +<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>&lt;(<a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetNbinsX()-2)) {</div> +<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>+2);</div> +<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>+1);</div> +<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> }</div> +<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> </div> +<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>-1) &gt;= 0 &amp;&amp; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>-1) &lt; <span class="keywordtype">int</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1)) {</div> +<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>-1;</div> +<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = -1;</div> +<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> }</div> +<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomYBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = 0;</div> +<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> </div> +<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a>;</div> +<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a>;</div> +<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_lower_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a>;</div> +<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_upper_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a>;</div> +<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> </div> +<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> }</div> +<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> }</div> +<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> </div> +<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span>}</div> +</div> +<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> </div> +<div class="foldopen" id="foldopen01084" data-start="{" data-end="}"> +<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551"> 1084</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">samplePDFFDBase::set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>)</div> +<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span>{</div> +<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>);</div> +<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>);</div> +<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> </div> +<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> </div> +<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>+1);</div> +<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> }</div> +<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>+1);</div> +<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetYaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> }</div> +<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> </div> +<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> </div> +<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> }</div> +<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> }</div> +<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> </div> +<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">FindNominalBinAndEdges2D</a>();</div> +<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span>}</div> +</div> +<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> </div> +<div class="foldopen" id="foldopen01120" data-start="{" data-end="}"> +<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#adbc16c33bf6a6e870e3c0cb4f87043ef"> 1120</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">samplePDFFDBase::set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>)</div> +<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span>{</div> +<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;Reset();</div> +<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <a class="code hl_variable" href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">_hPDF1D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>);</div> +<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>);</div> +<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> </div> +<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;Reset();</div> +<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;SetBins(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> </div> +<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>+1);</div> +<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> }</div> +<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a> = std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>+1);</div> +<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>+1;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetYaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>+1);</div> +<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> }</div> +<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> </div> +<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> </div> +<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = 0.;</div> +<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> }</div> +<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> }</div> +<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> </div> +<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">FindNominalBinAndEdges2D</a>();</div> +<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span>}</div> +</div> +<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> </div> +<div class="foldopen" id="foldopen01156" data-start="{" data-end="}"> +<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa"> 1156</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">samplePDFFDBase::FindNominalBinAndEdges2D</a>() {</div> +<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> </div> +<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> <span class="comment">//Set rw_pdf_bin and rw_upper_xbinedge and rw_lower_xbinedge for each skmc_base</span></div> +<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a> = 0 ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size() ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>++){</div> +<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a> = 0 ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].nEvents ; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>++){</div> +<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">//Global bin number</span></div> +<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> </div> +<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;FindBin(*(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>]), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].y_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>]));</div> +<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> </div> +<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a> = -999;</div> +<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_y</a> = -999;</div> +<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_z</a> = -999;</div> +<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetBinXYZ(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_y</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_z</a>);</div> +<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> <span class="comment">//erec is the x-axis so get GetXaxis then find the bin edges using the x bin number</span></div> +<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> </div> +<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>==0) {</div> +<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>);</div> +<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>-1);</div> +<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> }</div> +<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> </div> +<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>);</div> +<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinUpEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>);</div> +<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> </div> +<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin</a>&lt;(<a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetNbinsX()-2)) {</div> +<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>+2);</div> +<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_variable" href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">_hPDF2D</a>-&gt;GetXaxis()-&gt;GetBinLowEdge(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>+1);</div> +<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> }</div> +<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> </div> +<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>-1) &gt;= 0 &amp;&amp; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>-1) &lt; <span class="keywordtype">int</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1)) {</div> +<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_x</a>-1;</div> +<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomXBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = -1;</div> +<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a> = <a class="code hl_define" href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a>;</div> +<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> }</div> +<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].NomYBin[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bin_y</a>-1; </div> +<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_edge</a>;</div> +<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_edge</a>;</div> +<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_lower_lower_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low_lower_edge</a>;</div> +<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_i</a>].rw_upper_upper_xbinedge[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">event_i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">upper_upper_edge</a>;</div> +<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> }</div> +<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> }</div> +<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span>}</div> +</div> +<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> </div> +<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span><span class="comment">//ETA - this can be changed quite easily to check the number of XBins and YBins.</span></div> +<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span><span class="comment">//We can slowly but surely remove any trace of BinningOpt</span></div> +<div class="foldopen" id="foldopen01209" data-start="{" data-end="}"> +<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778"> 1209</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">samplePDFFDBase::GetNDim</a>() {</div> +<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">switch</span>(<a class="code hl_variable" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">BinningOpt</a>) {</div> +<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">case</span> 0: </div> +<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordflow">case</span> 1:</div> +<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordflow">return</span> 1;</div> +<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">case</span> 2:</div> +<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordflow">case</span> 3:</div> +<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordflow">case</span> 4: </div> +<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordflow">return</span> 2;</div> +<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Error, unrecognsied BinningOpt!!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> <span class="keywordflow">return</span> 0;</div> +<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> } </div> +<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span>}</div> +</div> +<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> </div> +<div class="foldopen" id="foldopen01225" data-start="{" data-end="}"> +<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a42ab6773e267dfd8e987c8d0dab4861b"> 1225</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>) {</div> +<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <span class="keyword">new</span> std::vector&lt;double&gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Reset(); </div> +<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> </div> +<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">GetNDim</a>()!=1) {std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to set a 1D &#39;data&#39; histogram in a 2D sample - Quitting&quot;</span> &lt;&lt; std::endl; <span class="keywordflow">throw</span>;}</div> +<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> </div> +<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>(<a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>-&gt;size()); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;Fill(<a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a>-&gt;at(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>));</div> +<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> }</div> +<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> </div> +<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> </div> +<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a>-&gt;GetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1);</div> +<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> }</div> +<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> }</div> +<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> </div> +<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span>}</div> +</div> +<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> </div> +<div class="foldopen" id="foldopen01251" data-start="{" data-end="}"> +<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aee64da350bb6618a0b438f98f392c4f8"> 1251</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a>(std::vector&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector &lt;double&gt;</a> &gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>) {</div> +<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <span class="keyword">new</span> std::vector&lt; vector &lt;double&gt; &gt;(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Reset(); </div> +<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> </div> +<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">GetNDim</a>()!=2) {std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to set a 2D &#39;data&#39; histogram in a 1D sample - Quitting&quot;</span> &lt;&lt; std::endl; <span class="keywordflow">throw</span>;}</div> +<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> </div> +<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>(<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;size()); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;Fill(<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;at(0)[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>],<a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a>-&gt;at(1)[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]);</div> +<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> }</div> +<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> </div> +<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> </div> +<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;GetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>+1);</div> +<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> }</div> +<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> }</div> +<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> </div> +<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span>}</div> +</div> +<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> </div> +<div class="foldopen" id="foldopen01277" data-start="{" data-end="}"> +<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512"> 1277</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>) {</div> +<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> std::cout &lt;&lt; <span class="stringliteral">&quot;adding 1D data histogram : &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>-&gt;GetName() &lt;&lt; <span class="stringliteral">&quot; with &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>-&gt;Integral() &lt;&lt; <span class="stringliteral">&quot; events&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>;</div> +<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> </div> +<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">GetNDim</a>()!=1) {std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to set a 1D &#39;data&#39; histogram in a 2D sample - Quitting&quot;</span> &lt;&lt; std::endl; <span class="keywordflow">throw</span>;}</div> +<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> </div> +<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> </div> +<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>-&gt;GetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1);</div> +<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> }</div> +<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> }</div> +<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> </div> +<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span>}</div> +</div> +<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> </div> +<div class="foldopen" id="foldopen01300" data-start="{" data-end="}"> +<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a6a89cc5ceb45ccd0f4da70823dc398f1"> 1300</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>) {</div> +<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> std::cout &lt;&lt; <span class="stringliteral">&quot;adding 2D data histogram : &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>-&gt;GetName() &lt;&lt; <span class="stringliteral">&quot; with &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>-&gt;Integral() &lt;&lt; <span class="stringliteral">&quot; events&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>;</div> +<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> <a class="code hl_variable" href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">dathist</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <a class="code hl_variable" href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">dataSample</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <a class="code hl_variable" href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">dataSample2D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> </div> +<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">GetNDim</a>()!=2) {std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to set a 2D &#39;data&#39; histogram in a 1D sample - Quitting&quot;</span> &lt;&lt; std::endl; <span class="keywordflow">throw</span>;}</div> +<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> </div> +<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div> +<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>*[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>];</div> +<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) {</div> +<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>] = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>];</div> +<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) {</div> +<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>] = <a class="code hl_variable" href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">dathist2d</a>-&gt;GetBinContent(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>+1,<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>+1);</div> +<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> }</div> +<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> }</div> +<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span>}</div> +</div> +<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> </div> +<div class="foldopen" id="foldopen01321" data-start="{" data-end="}"> +<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9"> 1321</a></span><span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">samplePDFFDBase::GetEventWeight</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEntry</a>) {</div> +<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">//HI : DON&#39;T EDIT THIS!!!! (Pls make a weights pointer instead ^_^)</span></div> +<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> = 1.0;</div> +<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>=0;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].ntotal_weight_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEntry</a>];<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>++) {</div> +<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">//std::cout &lt;&lt; &quot;Weight &quot; &lt;&lt; iParam &lt;&lt; &quot; is &quot; &lt;&lt; *(MCSamples[iSample].total_weight_pointers[iEntry][iParam]) &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a> *= *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].total_weight_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEntry</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iParam</a>]);</div> +<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> }</div> +<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">totalweight</a>;</div> +<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span>}</div> +</div> +<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> </div> +<div class="foldopen" id="foldopen01331" data-start="{" data-end="}"> +<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e"> 1331</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e">samplePDFFDBase::fillSplineBins</a>() {</div> +<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> </div> +<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Now in fillSplineBins&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>)<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>.size(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>) {</div> +<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> <span class="comment">//std::cout &lt;&lt; &quot;Found &quot; &lt;&lt; MCSamples[i].nEvents &lt;&lt; &quot; in sample &quot; &lt;&lt; i &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> <span class="comment">//Now loop over events and get the spline bin for each event</span></div> +<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nEvents; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>) {</div> +<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> </div> +<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>;</div> +<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> <span class="keywordflow">switch</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">BinningOpt</a>) {</div> +<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <span class="keywordflow">case</span> 0: <span class="comment">// splines binned in erec</span></div> +<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> <span class="keywordflow">case</span> 1:</div> +<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca">GetEventSplines</a>(<a class="code hl_function" href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf">GetSampleName</a>(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>, *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].mode[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_etru[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), 0.);</div> +<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> <span class="keywordflow">case</span> 2:</div> +<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> <span class="comment">//Straight out of SKBase</span></div> +<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca">GetEventSplines</a>(<a class="code hl_function" href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf">GetSampleName</a>(), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>, *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].mode[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].rw_etru[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]), *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].x_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>])*0.001, *(<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].y_var[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]));</div> +<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> </div> +<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> <span class="comment">//FD base</span></div> +<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">//EventSplines = MCSamples[i].splineFile-&gt;GetEventSplines(SampleName, j, *(MCSamples[i].mode[j]), MCSamples[i].enu_s_bin[j], MCSamples[i].xvar_s_bin[j], MCSamples[i].yvar_s_bin[j]); </span></div> +<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Error in assigning spline bins because BinningOpt = &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">BinningOpt</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> }</div> +<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> </div> +<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nxsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>.size();</div> +<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> </div> +<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].xsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <span class="keyword">new</span> <span class="keyword">const</span> <span class="keywordtype">double</span>*[<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nxsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]];</div> +<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> </div> +<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_class" href="classspline.html">spline</a>=0; <a class="code hl_class" href="classspline.html">spline</a>&lt;<a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].nxsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]; <a class="code hl_class" href="classspline.html">spline</a>++){ </div> +<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">//Event Splines indexed as: sample name, oscillation channel, syst, mode, etrue, var1, var2 (var2 is a dummy 0 for 1D splines)</span></div> +<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].xsec_spline_pointers[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_class" href="classspline.html">spline</a>] = <a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>-&gt;<a class="code hl_function" href="classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034">retPointer</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][0], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][1], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][2], </div> +<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][3], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][4], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][5], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventSplines</a>[<a class="code hl_class" href="classspline.html">spline</a>][6]);</div> +<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> }</div> +<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> </div> +<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> }</div> +<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">//I think this is now obsolete due to spline monolith</span></div> +<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">//MCSamples[i].splineFile-&gt;SetSplineInfoArrays();</span></div> +<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> }</div> +<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> </div> +<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Filled spline bins&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> </div> +<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span>}</div> +</div> +<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> </div> +<div class="foldopen" id="foldopen01377" data-start="{" data-end="}"> +<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c"> 1377</a></span><span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c">samplePDFFDBase::GetLikelihood</a>()</div> +<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span>{</div> +<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) {</div> +<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;data sample is empty!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> <span class="keywordflow">return</span> -1;</div> +<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> }</div> +<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> </div> +<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">//This can be done only once and stored</span></div> +<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>.size()-1;</div> +<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> </div> +<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>;</div> +<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>;</div> +<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> </div> +<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a> = 0.;</div> +<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span><span class="preprocessor">#ifdef MULTITHREAD</span></div> +<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span><span class="preprocessor">#pragma omp parallel for reduction(+:negLogL) private(xBin, yBin)</span></div> +<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> </div> +<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">for</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nXBins</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>++) </div> +<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> {</div> +<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">for</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nYBins</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>++) </div> +<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> {</div> +<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DataVal</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>];</div> +<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MCPred</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>];</div> +<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w2</a> = <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yBin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xBin</a>];</div> +<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <span class="comment">//KS: Calcaualte likelihood using Barlow-Beestion Poisson or even IceCube</span></div> +<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> <span class="comment">//ETA: there seems to be some bug in here which needs to be fixed. I</span></div> +<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">//see differences even when kPoisson is set?</span></div> +<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">//negLogL += getTestStatLLH(DataVal, MCPred, w2);</span></div> +<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a> += <a class="code hl_function" href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">getTestStatLLH</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DataVal</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">MCPred</a>);</div> +<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> }</div> +<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> }</div> +<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">negLogL</a>;</div> +<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span>}</div> +</div> +<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> </div> +<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span><span class="preprocessor">#ifndef USE_PROB3 </span></div> +<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span><span class="comment">// ************************************************</span></div> +<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span><span class="comment">// Switch from MaCh3 CUDAProb flavour to CUDAProb Probtype</span></div> +<div class="foldopen" id="foldopen01416" data-start="{" data-end="}"> +<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387"> 1416</a></span><span class="keyword">inline</span> cudaprob3::ProbType <a class="code hl_function" href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387">samplePDFFDBase::SwitchToCUDAProbType</a>(<a class="code hl_enumeration" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a> <a class="code hl_enumeration" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a>) {</div> +<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span><span class="comment">//************************************************* </span></div> +<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> <span class="keywordflow">switch</span>(<a class="code hl_enumeration" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a>)</div> +<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> {</div> +<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af04821f14b7efebe3d2c170571d1cd80">CUDAProb_nu::e_e</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::e_e;</div> +<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a8d0364977d2872d7b24c32538dff19d0">CUDAProb_nu::e_m</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::e_m;</div> +<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a28f9d8572b6dde9faa7378ab7bcd10ee">CUDAProb_nu::e_t</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::e_m;</div> +<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ab2771e69b128dc53bc4f8bacfcfcecb0">CUDAProb_nu::m_e</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::m_e;</div> +<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a41071dca17d04928fa0852ded8c1025b">CUDAProb_nu::m_m</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::m_m;</div> +<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af7aaf8e15fe7f438db465ff6ce791d1b">CUDAProb_nu::m_t</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::m_t;</div> +<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ae7563a0f735ed6772bd147a4b9ccd09a">CUDAProb_nu::t_e</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::t_e;</div> +<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af33cf18d3fc2d7dd38a4c6c4d98618a0">CUDAProb_nu::t_m</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::t_m;</div> +<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a6a6edd14e02d60d2f3c232609ae8e2b2">CUDAProb_nu::t_t</a> : <span class="keywordflow">return</span> cudaprob3::ProbType::t_t;</div> +<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <a class="code hl_define" href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a>(<span class="stringliteral">&quot;Unknown CUDAProbType!&quot;</span>);</div> +<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> }</div> +<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span>}</div> +</div> +<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> </div> +<div class="ttc" id="aMaCh3Logger_8h_html_a61052119a625282d0ec6d4a97adf3ee2"><div class="ttname"><a href="MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2">MACH3LOG_ERROR</a></div><div class="ttdeci">#define MACH3LOG_ERROR</div><div class="ttdef"><b>Definition</b> <a href="MaCh3Logger_8h_source.html#l00011">MaCh3Logger.h:11</a></div></div> +<div class="ttc" id="aStructs_8h_html_a0f3bb0c23c578a9e1d3c6eebfd5eaf36"><div class="ttname"><a href="Structs_8h.html#a0f3bb0c23c578a9e1d3c6eebfd5eaf36">GetCUDAProbFlavour</a></div><div class="ttdeci">CUDAProb_nu GetCUDAProbFlavour(int nu_i, int nu_f)</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01111">Structs.h:1111</a></div></div> +<div class="ttc" id="aStructs_8h_html_a228eb740378da7cf951cd547cc82f439"><div class="ttname"><a href="Structs_8h.html#a228eb740378da7cf951cd547cc82f439">__DEFAULT_RETURN_VAL__</a></div><div class="ttdeci">#define __DEFAULT_RETURN_VAL__</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l00027">Structs.h:27</a></div></div> +<div class="ttc" id="aStructs_8h_html_a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5"><div class="ttname"><a href="Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5">kPoisson</a></div><div class="ttdeci">@ kPoisson</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01001">Structs.h:1001</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a></div><div class="ttdeci">CUDAProb_nu</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01096">Structs.h:1096</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7a28f9d8572b6dde9faa7378ab7bcd10ee"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a28f9d8572b6dde9faa7378ab7bcd10ee">e_t</a></div><div class="ttdeci">@ e_t</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01099">Structs.h:1099</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7a41071dca17d04928fa0852ded8c1025b"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a41071dca17d04928fa0852ded8c1025b">m_m</a></div><div class="ttdeci">@ m_m</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01101">Structs.h:1101</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7a6a6edd14e02d60d2f3c232609ae8e2b2"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a6a6edd14e02d60d2f3c232609ae8e2b2">t_t</a></div><div class="ttdeci">@ t_t</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01106">Structs.h:1105</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7a8d0364977d2872d7b24c32538dff19d0"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a8d0364977d2872d7b24c32538dff19d0">e_m</a></div><div class="ttdeci">@ e_m</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01098">Structs.h:1098</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7ab2771e69b128dc53bc4f8bacfcfcecb0"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ab2771e69b128dc53bc4f8bacfcfcecb0">m_e</a></div><div class="ttdeci">@ m_e</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01100">Structs.h:1100</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7ae7563a0f735ed6772bd147a4b9ccd09a"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ae7563a0f735ed6772bd147a4b9ccd09a">t_e</a></div><div class="ttdeci">@ t_e</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01103">Structs.h:1103</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7af04821f14b7efebe3d2c170571d1cd80"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af04821f14b7efebe3d2c170571d1cd80">e_e</a></div><div class="ttdeci">@ e_e</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01097">Structs.h:1097</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7af33cf18d3fc2d7dd38a4c6c4d98618a0"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af33cf18d3fc2d7dd38a4c6c4d98618a0">t_m</a></div><div class="ttdeci">@ t_m</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01104">Structs.h:1104</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7af7aaf8e15fe7f438db465ff6ce791d1b"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af7aaf8e15fe7f438db465ff6ce791d1b">m_t</a></div><div class="ttdeci">@ m_t</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01102">Structs.h:1102</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassOscillator_html"><div class="ttname"><a href="classOscillator.html">Oscillator</a></div><div class="ttdef"><b>Definition</b> <a href="OscClass__CUDAProb3_8h_source.html#l00038">OscClass_CUDAProb3.h:38</a></div></div> +<div class="ttc" id="aclassOscillator_html_a338f483a27048a37c274bf6c16c317ab"><div class="ttname"><a href="classOscillator.html#a338f483a27048a37c274bf6c16c317ab">Oscillator::FillOscillogram</a></div><div class="ttdeci">void FillOscillogram(double *oscpar, double prodH, double Yp_Val=0.468)</div><div class="ttdef"><b>Definition</b> <a href="OscClass__CUDAProb3_8cpp_source.html#l00955">OscClass_CUDAProb3.cpp:955</a></div></div> +<div class="ttc" id="aclassOscillator_html_acab40ba6575f37546d0951510404b3c2"><div class="ttname"><a href="classOscillator.html#acab40ba6575f37546d0951510404b3c2">Oscillator::retPointer</a></div><div class="ttdeci">const double * retPointer(int GenNeutrinoFlavour, int DetNeutrinoFlavour, double NeutrinoEnergy, double TrueCZ)</div><div class="ttdef"><b>Definition</b> <a href="OscClass__CUDAProb3_8cpp_source.html#l01247">OscClass_CUDAProb3.cpp:1247</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html_abf476818e624c68494372684658081a8"><div class="ttname"><a href="classcovarianceBase.html#abf476818e624c68494372684658081a8">covarianceBase::retPointer</a></div><div class="ttdeci">const double * retPointer(int iParam)</div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00134">covarianceBase.h:134</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html"><div class="ttname"><a href="classcovarianceXsec.html">covarianceXsec</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8h_source.html#l00016">covarianceXsec.h:16</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a25bad5be0ce0a0778dcdf596b7930f2e"><div class="ttname"><a href="classcovarianceXsec.html#a25bad5be0ce0a0778dcdf596b7930f2e">covarianceXsec::GetFuncParsIndexFromDetID</a></div><div class="ttdeci">const std::vector&lt; int &gt; GetFuncParsIndexFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00485">covarianceXsec.cpp:485</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a90e2aa373a8ffb9b838f90fbc7a67641"><div class="ttname"><a href="classcovarianceXsec.html#a90e2aa373a8ffb9b838f90fbc7a67641">covarianceXsec::GetNumFuncParamsFromDetID</a></div><div class="ttdeci">int GetNumFuncParamsFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00451">covarianceXsec.cpp:451</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_aad522479b06581729efd6c1cd12d11df"><div class="ttname"><a href="classcovarianceXsec.html#aad522479b06581729efd6c1cd12d11df">covarianceXsec::GetParDetID</a></div><div class="ttdeci">int GetParDetID(const int i) const</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8h_source.html#l00031">covarianceXsec.h:31</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_ac3c73b55a96de2413224e7bd50a98f82"><div class="ttname"><a href="classcovarianceXsec.html#ac3c73b55a96de2413224e7bd50a98f82">covarianceXsec::GetFuncParsNamesFromDetID</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; GetFuncParsNamesFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00468">covarianceXsec.cpp:468</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_aea3542e88e6947b5da383a12c7d4e54c"><div class="ttname"><a href="classcovarianceXsec.html#aea3542e88e6947b5da383a12c7d4e54c">covarianceXsec::GetNormParsFromDetID</a></div><div class="ttdeci">const std::vector&lt; XsecNorms4 &gt; GetNormParsFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00392">covarianceXsec.cpp:392</a></div></div> +<div class="ttc" id="aclassinterfacePDFEbE_html_a5e48b903f6805472d7f7e6d7d33be215"><div class="ttname"><a href="classinterfacePDFEbE.html#a5e48b903f6805472d7f7e6d7d33be215">interfacePDFEbE::getNMCSamples</a></div><div class="ttdeci">virtual int getNMCSamples()=0</div></div> +<div class="ttc" id="aclassinterfacePDFEbE_html_aae045e6d54c3f4e86002aac58fd6d8a6"><div class="ttname"><a href="classinterfacePDFEbE.html#aae045e6d54c3f4e86002aac58fd6d8a6">interfacePDFEbE::getNEventsInSample</a></div><div class="ttdeci">virtual int getNEventsInSample(int sample)=0</div></div> +<div class="ttc" id="aclasssamplePDFBase_html"><div class="ttname"><a href="classsamplePDFBase.html">samplePDFBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00031">samplePDFBase.h:32</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a22cd9b0e8664b6e0859e34a51731fadc"><div class="ttname"><a href="classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc">samplePDFBase::dathist2d</a></div><div class="ttdeci">TH2D * dathist2d</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00108">samplePDFBase.h:108</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a29be51dc086edd7e068a5dff082b7ac3"><div class="ttname"><a href="classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3">samplePDFBase::nSamples</a></div><div class="ttdeci">__int__ nSamples</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00098">samplePDFBase.h:98</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a4f42dca382c09d8827b8d136a77d1b29"><div class="ttname"><a href="classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29">samplePDFBase::SampleName</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SampleName</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00102">samplePDFBase.h:102</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a603fb2d4f93751de60475ed65fc08245"><div class="ttname"><a href="classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245">samplePDFBase::_hPDF2D</a></div><div class="ttdeci">TH2D * _hPDF2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00112">samplePDFBase.h:112</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a695ac7419652443240feb046f14ba1bb"><div class="ttname"><a href="classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb">samplePDFBase::dathist</a></div><div class="ttdeci">TH1D * dathist</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00107">samplePDFBase.h:107</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a71bbe44b4ed168c91db0db7abedc96a6"><div class="ttname"><a href="classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6">samplePDFBase::dataSample</a></div><div class="ttdeci">std::vector&lt; double &gt; * dataSample</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00094">samplePDFBase.h:94</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a772ebf22fbffd9336b2d8c2f46988453"><div class="ttname"><a href="classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453">samplePDFBase::getTestStatLLH</a></div><div class="ttdeci">double getTestStatLLH(double data, double mc)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8cpp_source.html#l00205">samplePDFBase.cpp:205</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_a7d673377a3d5a9a4d7c7c59b09896354"><div class="ttname"><a href="classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354">samplePDFBase::dataSample2D</a></div><div class="ttdeci">std::vector&lt; vector&lt; double &gt; &gt; * dataSample2D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00095">samplePDFBase.h:95</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_adc5cd0002708ad049ba4fb5e3c62075d"><div class="ttname"><a href="classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d">samplePDFBase::fTestStatistic</a></div><div class="ttdeci">TestStatistic fTestStatistic</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00120">samplePDFBase.h:120</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html_ae324bd76a337efa43fedfd2052029e47"><div class="ttname"><a href="classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47">samplePDFBase::_hPDF1D</a></div><div class="ttdeci">TH1D * _hPDF1D</div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00111">samplePDFBase.h:111</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a01553c17343ed6db1391750d7846b203"><div class="ttname"><a href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203">samplePDFFDBase::SelectionBounds</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; SelectionBounds</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00262">samplePDFFDBase.h:262</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a057d66f6ba12cdd55ea90b6efcdb8f62"><div class="ttname"><a href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFDBase::samplePDFFD_array</a></div><div class="ttdeci">double ** samplePDFFD_array</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00209">samplePDFFDBase.h:209</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a0d6150d9e001bd6df8732bf2fd7480b9"><div class="ttname"><a href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9">samplePDFFDBase::fillArray</a></div><div class="ttdeci">void fillArray()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00252">samplePDFFDBase.cpp:252</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a0e8d317f7acc7027870987461194e8ce"><div class="ttname"><a href="classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce">samplePDFFDBase::reweight</a></div><div class="ttdeci">void reweight(double *oscpar)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00208">samplePDFFDBase.cpp:208</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a178798ab81db5ed999c53d1d0474f5bd"><div class="ttname"><a href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd">samplePDFFDBase::PrepFunctionalParameters</a></div><div class="ttdeci">virtual void PrepFunctionalParameters()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00151">samplePDFFDBase.h:151</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a185c166f11a096fc75eb1b76a4a31ac3"><div class="ttname"><a href="classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3">samplePDFFDBase::StoredSelection</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; StoredSelection</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00269">samplePDFFDBase.h:269</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a22f717d491f71858a946662cc9ca3f3a"><div class="ttname"><a href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">samplePDFFDBase::FindNominalBinAndEdges1D</a></div><div class="ttdeci">void FindNominalBinAndEdges1D()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01036">samplePDFFDBase.cpp:1036</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a2c50c633784af24832bb20a4fca42af5"><div class="ttname"><a href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">samplePDFFDBase::doubled_angle</a></div><div class="ttdeci">bool doubled_angle</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00232">samplePDFFDBase.h:232</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a2da3da30c6de171d67ad2c346c36f160"><div class="ttname"><a href="classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160">samplePDFFDBase::SetXsecCov</a></div><div class="ttdeci">void SetXsecCov(covarianceXsec *xsec_cov)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00664">samplePDFFDBase.cpp:664</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a32b0465b0b8a2f7ae6b35da5fa6ef9cc"><div class="ttname"><a href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">samplePDFFDBase::SampleDetID</a></div><div class="ttdeci">int SampleDetID</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00243">samplePDFFDBase.h:243</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a34643be1764871881d7b166874365aaa"><div class="ttname"><a href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">samplePDFFDBase::FindNominalBinAndEdges2D</a></div><div class="ttdeci">void FindNominalBinAndEdges2D()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01156">samplePDFFDBase.cpp:1156</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a37591029c5d56c09083f1f094ae11836"><div class="ttname"><a href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836">samplePDFFDBase::osc_binned</a></div><div class="ttdeci">bool osc_binned</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00233">samplePDFFDBase.h:233</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3b25870ec0ac85196ddaf09fd65c9828"><div class="ttname"><a href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828">samplePDFFDBase::osc_binned_axis</a></div><div class="ttdeci">TAxis * osc_binned_axis</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00228">samplePDFFDBase.h:228</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3edf869b1304fd3316d92ea1eaeb0045"><div class="ttname"><a href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">samplePDFFDBase::Osc</a></div><div class="ttdeci">Oscillator * Osc</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00225">samplePDFFDBase.h:225</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3f9bd31096c917426dcd00c826538548"><div class="ttname"><a href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548">samplePDFFDBase::CalcXsecWeightFunc</a></div><div class="ttdeci">virtual double CalcXsecWeightFunc(int iSample, int iEvent)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a40269d6e2aa2b6517ce1dc28b2905028"><div class="ttname"><a href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">samplePDFFDBase::ReturnKinematicParameter</a></div><div class="ttdeci">virtual double ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a409599f48f580c86ff4c774aea81986e"><div class="ttname"><a href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFDBase::samplePDFFD_data</a></div><div class="ttdeci">double ** samplePDFFD_data</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00213">samplePDFFDBase.h:213</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a43b9afb5ac13ecad23750acb24b29da6"><div class="ttname"><a href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">samplePDFFDBase::YBinEdges</a></div><div class="ttdeci">std::vector&lt; double &gt; YBinEdges</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00206">samplePDFFDBase.h:206</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a4bac245c85ce274b1e7d3072df7ece2b"><div class="ttname"><a href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b">samplePDFFDBase::CalcXsecNormsBins</a></div><div class="ttdeci">void CalcXsecNormsBins(int iSample)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00719">samplePDFFDBase.cpp:719</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a4c750f77b67c6a728d61f14a1537aa4a"><div class="ttname"><a href="classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a">samplePDFFDBase::~samplePDFFDBase</a></div><div class="ttdeci">virtual ~samplePDFFDBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00027">samplePDFFDBase.cpp:27</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a512dcf2e3a6c8a2f8ab80ee55ce23252"><div class="ttname"><a href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252">samplePDFFDBase::ResetHistograms</a></div><div class="ttdeci">void ResetHistograms()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00597">samplePDFFDBase.cpp:597</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5648add33f6787cde8f4e3d461a17ce7"><div class="ttname"><a href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">samplePDFFDBase::XsecCov</a></div><div class="ttdeci">covarianceXsec * XsecCov</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00238">samplePDFFDBase.h:238</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5bdaf812ba043022d39aed41a0e23984"><div class="ttname"><a href="classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984">samplePDFFDBase::fill2DHist</a></div><div class="ttdeci">void fill2DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00057">samplePDFFDBase.cpp:57</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5e35856e91339009cb1744a738145781"><div class="ttname"><a href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">samplePDFFDBase::IsEventSelected</a></div><div class="ttdeci">bool IsEventSelected(int iSample, int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00095">samplePDFFDBase.cpp:95</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5e7379b053537e46a8416cdf17f368fc"><div class="ttname"><a href="classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc">samplePDFFDBase::fill1DHist</a></div><div class="ttdeci">void fill1DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00044">samplePDFFDBase.cpp:44</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a673b2d4958424e158107652339518a13"><div class="ttname"><a href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">samplePDFFDBase::MCSamples</a></div><div class="ttdeci">vector&lt; struct fdmc_base &gt; MCSamples</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00218">samplePDFFDBase.h:218</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a687d1ffb99beff86a7903258ae29e53e"><div class="ttname"><a href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFDBase::samplePDFFD_array_w2</a></div><div class="ttdeci">double ** samplePDFFD_array_w2</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00211">samplePDFFDBase.h:211</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a6d37b9e3fdf282148680e3bdb3ca95cf"><div class="ttname"><a href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf">samplePDFFDBase::GetSampleName</a></div><div class="ttdeci">std::string GetSampleName()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00087">samplePDFFDBase.h:87</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a80096759ee2bc96bf5e461aca567e7a8"><div class="ttname"><a href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">samplePDFFDBase::BinningOpt</a></div><div class="ttdeci">int BinningOpt</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00242">samplePDFFDBase.h:242</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a8134d8dc28c804923563e2f701dd3c5c"><div class="ttname"><a href="classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c">samplePDFFDBase::GetLikelihood</a></div><div class="ttdeci">double GetLikelihood()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01377">samplePDFFDBase.cpp:1377</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a87aacca771e43e00c671d68552c4f8b3"><div class="ttname"><a href="classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3">samplePDFFDBase::nFuncParams</a></div><div class="ttdeci">int nFuncParams</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00250">samplePDFFDBase.h:250</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a8bc9dac849f31e1281a3af0261d1b952"><div class="ttname"><a href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952">samplePDFFDBase::SelectionStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SelectionStr</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00257">samplePDFFDBase.h:257</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a90c27639c0c84e113fbb2ba82f30f551"><div class="ttname"><a href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">samplePDFFDBase::set2DBinning</a></div><div class="ttdeci">void set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01084">samplePDFFDBase.cpp:1084</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9708eeeaddb815efbe81ede6fc773900"><div class="ttname"><a href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900">samplePDFFDBase::funcParsNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; funcParsNames</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00251">samplePDFFDBase.h:251</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9a9e5d66ac2216095af25108118bab49"><div class="ttname"><a href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">samplePDFFDBase::XBinEdges</a></div><div class="ttdeci">std::vector&lt; double &gt; XBinEdges</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00205">samplePDFFDBase.h:205</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9bda6382715dc3b7d265bd7b79d206fa"><div class="ttname"><a href="classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa">samplePDFFDBase::SetupNormParameters</a></div><div class="ttdeci">void SetupNormParameters()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00684">samplePDFFDBase.cpp:684</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aaf8912a330835d6a7879c42d54d71387"><div class="ttname"><a href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387">samplePDFFDBase::SwitchToCUDAProbType</a></div><div class="ttdeci">cudaprob3::ProbType SwitchToCUDAProbType(CUDAProb_nu CUDAProb_nu)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01416">samplePDFFDBase.cpp:1416</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aafa0e8f399c5c22d9234e55a7289f8ed"><div class="ttname"><a href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">samplePDFFDBase::Selection</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; Selection</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00258">samplePDFFDBase.h:258</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ab7c23747f7b9fc8686e42eba7b5b6ba9"><div class="ttname"><a href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">samplePDFFDBase::GetEventWeight</a></div><div class="ttdeci">double GetEventWeight(int iSample, int iEntry)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01321">samplePDFFDBase.cpp:1321</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ab83151b9062747f96a7c9629a63e05ed"><div class="ttname"><a href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">samplePDFFDBase::xsec_norms</a></div><div class="ttdeci">std::vector&lt; XsecNorms4 &gt; xsec_norms</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00249">samplePDFFDBase.h:249</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_abb3f41e66e65d7af7640ff1364817303"><div class="ttname"><a href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303">samplePDFFDBase::samplePDFFDBase</a></div><div class="ttdeci">samplePDFFDBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00048">samplePDFFDBase.h:48</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac42b097c93ac7f8fa1afab4d478a4b67"><div class="ttname"><a href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">samplePDFFDBase::set1DBinning</a></div><div class="ttdeci">void set1DBinning(int nbins, double *boundaries)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00962">samplePDFFDBase.cpp:962</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac64e16f80271fe3ab35dd6f9d28f1e10"><div class="ttname"><a href="classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10">samplePDFFDBase::SetOscillator</a></div><div class="ttdeci">void SetOscillator(Oscillator *Osc_)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00643">samplePDFFDBase.cpp:643</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac7c59494c502991294fa1be8624d47a6"><div class="ttname"><a href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">samplePDFFDBase::splineFile</a></div><div class="ttdeci">splineFDBase * splineFile</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00124">samplePDFFDBase.h:124</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_acf33f477d5ed7ed4113ef50b190ccf3e"><div class="ttname"><a href="classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e">samplePDFFDBase::fillSplineBins</a></div><div class="ttdeci">void fillSplineBins()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01331">samplePDFFDBase.cpp:1331</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ad2052c9178b220901224a29b474afaad"><div class="ttname"><a href="classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad">samplePDFFDBase::SetupOscCalc</a></div><div class="ttdeci">virtual void SetupOscCalc(double PathLength, double Density)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00839">samplePDFFDBase.cpp:839</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_adc056e89f35950eaf8719134a892a512"><div class="ttname"><a href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a></div><div class="ttdeci">void addData(TH1D *Data)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01277">samplePDFFDBase.cpp:1277</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ae1d5cafd4533fabaafe4868420dc51c5"><div class="ttname"><a href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5">samplePDFFDBase::FindEventOscBin</a></div><div class="ttdeci">void FindEventOscBin()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00655">samplePDFFDBase.cpp:655</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aecf3addcc9045e2da648b8bf1f99d84b"><div class="ttname"><a href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b">samplePDFFDBase::applyShifts</a></div><div class="ttdeci">virtual void applyShifts(int iSample, int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00153">samplePDFFDBase.h:153</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aed3fcc9a6474fdefcc0ee30cd992c778"><div class="ttname"><a href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">samplePDFFDBase::GetNDim</a></div><div class="ttdeci">int GetNDim()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01209">samplePDFFDBase.cpp:1209</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aed7d4c54abecd59d83838bbea85a777f"><div class="ttname"><a href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">samplePDFFDBase::CalcXsecWeightSpline</a></div><div class="ttdeci">double CalcXsecWeightSpline(const int iSample, const int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00613">samplePDFFDBase.cpp:613</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aefdd8a15c707ea82c7843b72a801464d"><div class="ttname"><a href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">samplePDFFDBase::CalcXsecWeightNorm</a></div><div class="ttdeci">double CalcXsecWeightNorm(const int iSample, const int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00627">samplePDFFDBase.cpp:627</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af0ab9ed944f1db59fa156837d80e8d78"><div class="ttname"><a href="classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78">samplePDFFDBase::funcParsIndex</a></div><div class="ttdeci">std::vector&lt; int &gt; funcParsIndex</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00252">samplePDFFDBase.h:252</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af3ce53658ddfbb9c9d49c83451506865"><div class="ttname"><a href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">samplePDFFDBase::calcOscWeights</a></div><div class="ttdeci">void calcOscWeights(int sample, int nutype, double *w, double *oscpar)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00199">samplePDFFDBase.cpp:199</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_afeec8a0e7066ead8c88ed0696e29d7a9"><div class="ttname"><a href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">samplePDFFDBase::UseBinnedOscReweighting</a></div><div class="ttdeci">void UseBinnedOscReweighting(bool ans)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00070">samplePDFFDBase.cpp:70</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a122a0e5ffd3519ba6b2ffa07987e7273"><div class="ttname"><a href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">splineFDBase::FindSplineSegment</a></div><div class="ttdeci">void FindSplineSegment()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00178">splineFDBase.cpp:178</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3eb62214f73ae406c77be2a1e083c034"><div class="ttname"><a href="classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034">splineFDBase::retPointer</a></div><div class="ttdeci">const double * retPointer(int sample, int oscchan, int syst, int mode, int var1bin, int var2bin, int var3bin)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00074">splineFDBase.h:74</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa6395bf5a4506f584661b36fbc32b3ca"><div class="ttname"><a href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca">splineFDBase::GetEventSplines</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; int &gt; &gt; GetEventSplines(std::string SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_af76579b8e880c4724e16888f23b418ba"><div class="ttname"><a href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">splineFDBase::calcWeights</a></div><div class="ttdeci">void calcWeights()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00258">splineFDBase.cpp:258</a></div></div> +<div class="ttc" id="aclassspline_html"><div class="ttname"><a href="classspline.html">spline</a></div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00010">spline.h:11</a></div></div> +<div class="ttc" id="asamplePDFFDBase_8h_html"><div class="ttname"><a href="samplePDFFDBase_8h.html">samplePDFFDBase.h</a></div></div> +<div class="ttc" id="astructfdmc__base_html"><div class="ttname"><a href="structfdmc__base.html">fdmc_base</a></div><div class="ttdef"><b>Definition</b> <a href="FDMCStruct_8h_source.html#l00005">FDMCStruct.h:5</a></div></div> +<div class="ttc" id="astructfdmc__base_html_abc7c499f714510adc13362187ec541e0"><div class="ttname"><a href="structfdmc__base.html#abc7c499f714510adc13362187ec541e0">fdmc_base::nEvents</a></div><div class="ttdeci">int nEvents</div><div class="ttdef"><b>Definition</b> <a href="FDMCStruct_8h_source.html#l00011">FDMCStruct.h:11</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFFDBase_8h.html b/samplePDFFDBase_8h.html new file mode 100644 index 00000000..91479302 --- /dev/null +++ b/samplePDFFDBase_8h.html @@ -0,0 +1,146 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFFDBase.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> &#124; +<a href="#define-members">Macros</a> </div> + <div class="headertitle"><div class="title">samplePDFFDBase.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &lt;assert.h&gt;</code><br /> +<code>#include &lt;stdexcept&gt;</code><br /> +<code>#include &lt;list&gt;</code><br /> +<code>#include &lt;vector&gt;</code><br /> +<code>#include &quot;TTree.h&quot;</code><br /> +<code>#include &quot;TH1D.h&quot;</code><br /> +<code>#include &quot;TH2D.h&quot;</code><br /> +<code>#include &quot;THStack.h&quot;</code><br /> +<code>#include &quot;TLegend.h&quot;</code><br /> +<code>#include &quot;TMath.h&quot;</code><br /> +<code>#include &quot;TFile.h&quot;</code><br /> +<code>#include &quot;TGraph2DErrors.h&quot;</code><br /> +<code>#include &quot;TROOT.h&quot;</code><br /> +<code>#include &quot;TRandom.h&quot;</code><br /> +<code>#include &quot;TString.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass/OscClass_CUDAProb3.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="interfacePDFEbE_8h_source.html">samplePDF/interfacePDFEbE.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="samplePDFBase_8h_source.html">samplePDF/samplePDFBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="splineBase_8h_source.html">splines/splineBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="splineFDBase_8h_source.html">splines/splineFDBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceXsec_8h_source.html">covariance/covarianceXsec.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceOsc_8h_source.html">covariance/covarianceOsc.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="FDMCStruct_8h_source.html">samplePDF/FDMCStruct.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="ShiftFunctors_8h_source.html">samplePDF/ShiftFunctors.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="manager_8h_source.html">manager/manager.h</a>&quot;</code><br /> +</div> +<p><a href="samplePDFFDBase_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsamplePDFFDBase.html">samplePDFFDBase</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:aef32089fdd2db890db53022a2e7da7e8" id="r_aef32089fdd2db890db53022a2e7da7e8"><td class="memItemLeft" align="right" valign="top">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="samplePDFFDBase_8h.html#aef32089fdd2db890db53022a2e7da7e8">USEBETA</a>&#160;&#160;&#160;0</td></tr> +<tr class="separator:aef32089fdd2db890db53022a2e7da7e8"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Macro Definition Documentation</h2> +<a id="aef32089fdd2db890db53022a2e7da7e8" name="aef32089fdd2db890db53022a2e7da7e8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aef32089fdd2db890db53022a2e7da7e8">&#9670;&#160;</a></span>USEBETA</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a> USEBETA&#160;&#160;&#160;0</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="samplePDFFDBase_8h_source.html#l00041">41</a> of file <a class="el" href="samplePDFFDBase_8h_source.html">samplePDFFDBase.h</a>.</p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFFDBase_8h_source.html b/samplePDFFDBase_8h_source.html new file mode 100644 index 00000000..0d03721f --- /dev/null +++ b/samplePDFFDBase_8h_source.html @@ -0,0 +1,459 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFFDBase.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFFDBase.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="samplePDFFDBase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">//C++ includes</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;assert.h&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;list&gt;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;vector&gt;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">//ROOT includes</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;TTree.h&quot;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;TH1D.h&quot;</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;TH2D.h&quot;</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;THStack.h&quot;</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &quot;TLegend.h&quot;</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;TMath.h&quot;</span></div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;TFile.h&quot;</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;TGraph2DErrors.h&quot;</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;TROOT.h&quot;</span></div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &quot;TRandom.h&quot;</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &quot;TString.h&quot;</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">//MaCh3 includes</span></div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &quot;<a class="code" href="OscClass__CUDAProb3_8h.html">OscClass/OscClass_CUDAProb3.h</a>&quot;</span></div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &quot;<a class="code" href="interfacePDFEbE_8h.html">samplePDF/interfacePDFEbE.h</a>&quot;</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include &quot;<a class="code" href="samplePDFBase_8h.html">samplePDF/samplePDFBase.h</a>&quot;</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include &quot;<a class="code" href="splineBase_8h.html">splines/splineBase.h</a>&quot;</span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include &quot;<a class="code" href="splineFDBase_8h.html">splines/splineFDBase.h</a>&quot;</span></div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceXsec_8h.html">covariance/covarianceXsec.h</a>&quot;</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceOsc_8h.html">covariance/covarianceOsc.h</a>&quot;</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#include &quot;<a class="code" href="FDMCStruct_8h.html">samplePDF/FDMCStruct.h</a>&quot;</span></div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#include &quot;<a class="code" href="ShiftFunctors_8h.html">samplePDF/ShiftFunctors.h</a>&quot;</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#include &quot;<a class="code" href="manager_8h.html">manager/manager.h</a>&quot;</span></div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="samplePDFFDBase_8h.html#aef32089fdd2db890db53022a2e7da7e8"> 41</a></span><span class="preprocessor">#define USEBETA 0</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div> +<div class="foldopen" id="foldopen00043" data-start="{" data-end="};"> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html"> 43</a></span><span class="keyword">class </span><a class="code hl_class" href="classsamplePDFFDBase.html">samplePDFFDBase</a> : <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code hl_class" href="classsamplePDFBase.html">samplePDFBase</a> , <span class="keyword">virtual</span> <span class="keyword">public</span> <a class="code hl_class" href="classinterfacePDFEbE.html">interfacePDFEbE</a></div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>{</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">public</span>:</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">//######################################### Functions #########################################</span></div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303"> 48</a></span> <a class="code hl_function" href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303">samplePDFFDBase</a>(){};</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <a class="code hl_function" href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303">samplePDFFDBase</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>, std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_version</a>, <a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_cov</a>);</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a">~samplePDFFDBase</a>();</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">GetNDim</a>(); <span class="comment">//DB Function to differentiate 1D or 2D binning</span></div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// DB Reweighting and Likelihood functions</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">//ETA - abstract these to samplePDFFDBase</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//DB Require these four functions to allow conversion from TH1(2)D to array for multi-threaded GetLikelihood</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Data</a>);</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">addData</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">addData</a>(std::vector&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector &lt;double&gt;</a> &gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>);</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">//DB Multi-threaded GetLikelihood</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c">GetLikelihood</a>();</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce">reweight</a>(<span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">GetEventWeight</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEntry</a>);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// Setup and config functions</span></div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a36253a401aca201ca4f1808a437db4d9"> 71</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a36253a401aca201ca4f1808a437db4d9">UseNonDoubledAngles</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>) {<a class="code hl_variable" href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">doubled_angle</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>;};</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">UseBinnedOscReweighting</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>);</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">UseBinnedOscReweighting</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ans</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">osc_bins</a>);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>, <span class="keywordtype">int</span> nutype, <span class="keywordtype">int</span> oscnutype, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor">#if defined (USE_PROB3) &amp;&amp; not defined (CPU_ONLY)</span></div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<span class="keywordtype">int</span> nutype, <span class="keywordtype">int</span> oscnutype, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">en</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">num</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor">#if not defined (USE_PROB3)</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">calcOscWeights</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>, <span class="keywordtype">int</span> nutype, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">w</a>, <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf"> 87</a></span> std::string <a class="code hl_function" href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf">GetSampleName</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd">samplename</a>;}</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160">SetXsecCov</a>(<a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_cov</a>);</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="comment">//============================= Should be deprecated =============================</span></div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// Note: the following functions aren&#39;t used any more! (From 14/1/2015) - KD. Just kept in for backwards compatibility in compiling, but they have no effect.</span></div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// DB 27/08/2020 The following functions shouldn&#39;t be used (Currently included for backwards compatibility)</span></div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//DB Incredibly hardcoded - Could probably make &#39;LetsPrintSomeWeights&#39; do the same functionality and remove this?</span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a571f6a6915c16e9bd97ac6691a8cbe1b"> 97</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a571f6a6915c16e9bd97ac6691a8cbe1b">DumpWeights</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outname</a>){<span class="keywordflow">return</span>;};</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// ETA - in the future it would be nice to have some generic getHIst functions</span></div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// although, this introduces a root dependence into the core code?</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="comment">//TH1D *getModeHist1D(int s, int m, int style = 0);</span></div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="comment">//TH2D *getModeHist2D(int s, int m, int style = 0);</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// Direct translation of getModeHist1D(s,m,style) = get1DVarHist(kPDFBinning,m,s,style)</span></div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//TH1D* get1DVarHist(ND280KinematicTypes Var1, int fModeToFill=-1, int fSampleToFill=-1, int WeightStyle=0, TAxis* Axis=0);</span></div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">//TH1D* get1DVarHist(ND280KinematicTypes Var1, std::vector&lt; std::vector&lt;double&gt; &gt; Selection, int WeightStyle=0, TAxis* Axis=0);</span></div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// Direct translation of getModeHist2D(s,m,style) = get2DVarHist(kPDFBinning,kPDFBinning,m,s,style)</span></div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">//TH2D* get2DVarHist(ND280KinematicTypes Var1, ND280KinematicTypes Var2, int fModeToFill=-1, int fSampleToFill=-1, int WeightStyle=0, TAxis* XAxis=0, TAxis* YAxis=0);</span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">//TH2D* get2DVarHist(ND280KinematicTypes Var1, ND280KinematicTypes Var2, std::vector&lt; std::vector&lt;double&gt; &gt; Selection, int WeightStyle=0, TAxis* XAxis=0, TAxis* YAxis=0);</span></div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment">//TH3D* get3DVarHist(ND280KinematicTypes Var1, ND280KinematicTypes Var2, ND280KinematicTypes Var3, int kModeToFill, int kChannelToFill, int WeightStyle, TAxis* XAxis=0, TAxis* YAxis=0, TAxis* ZAxis=0);</span></div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//================================================================================</span></div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aa145eb7b1e14c10339c288959dad3d65"> 112</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aa145eb7b1e14c10339c288959dad3d65">setupSplines</a>(<a class="code hl_struct" href="structfdmc__base.html">fdmc_base</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">skobj</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>, <span class="keywordtype">int</span> nutype, <span class="keywordtype">int</span> signal){};</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// LW - Setup Osc </span></div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad">SetupOscCalc</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">PathLength</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Density</a>);</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10">SetOscillator</a>(<a class="code hl_class" href="classOscillator.html">Oscillator</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Osc_</a>);</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5">FindEventOscBin</a>();</div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">//TODO - I think this will be tricky to abstract. fdmc_base will have to contain the pointers to the appropriate weights, can probably pass the number of these weights to constructor?</span></div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="comment">//DB Function to determine which weights apply to which types of samples</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="comment">//pure virtual!!</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#af58169bdc4b4a7e98c1f315dac96418e"> 122</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#af58169bdc4b4a7e98c1f315dac96418e">SetupWeightPointers</a>() = 0;</div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6"> 124</a></span> <a class="code hl_class" href="classsplineFDBase.html">splineFDBase</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">splineFile</a>;</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//DB Functions relating to sample and exec setup </span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">//ETA - abstracting these core functions</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="comment">//init will setup all the specific variables </span></div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">//void init(double pot, std::string mc_version, covarianceXsec *xsec_cov){return;};</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">//void setupMC(manager* sample_manager, const char *sampleInputFile, const char *splineFile, fdmc_base *fdobj, double pot, int nutype, int oscnutype, bool signal, int iSample, bool hasfloats=false){std::cout &lt;&lt; &quot;SAMPLEPDFFDBase::setupMC &quot; &lt;&lt; std::endl; return;};</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">//virtual void setupSplines(fdmc_base *skobj, const char *splineFile, int nutype, int signal);</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e">fillSplineBins</a>();</div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">//Functions which find the nominal bin and bin edges</span></div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">FindNominalBinAndEdges1D</a>();</div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">FindNominalBinAndEdges2D</a>();</div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">//DB Overrided functions of base class which calculate erec bin and boundaries for reweighting speedup in beam samples</span></div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">//ETA - this can be done using the core info stored in the new fdmc_struct</span></div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries</a>);</div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">set1DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high</a>);</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">boundaries2</a>);</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">set2DBinning</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low1</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nbins2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">low2</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">high2</a>);</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">set1DBinning</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>);</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">set2DBinning</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">XVec</a>, std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">YVec</a>);</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">//ETA - a function to setup and pass values to functional parameters where</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">//you need to pass a value to some custom reweight calc or engine</span></div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd"> 151</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd">PrepFunctionalParameters</a>(){};</div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">//ETA - generic function applying shifts</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b"> 153</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b">applyShifts</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>){};</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">//DB Function which determines if an event is selected, where Selection double looks like {{ND280KinematicTypes Var1, douuble LowBound}</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">IsEventSelected</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>); </div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">IsEventSelected</a>(std::vector&lt; std::string &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ParameterStr</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">IsEventSelected</a>(std::vector&lt; std::string &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ParameterStr</a>, std::vector&lt; std::vector&lt;double&gt; &gt; &amp;<a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b">CalcXsecNormsBins</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>);</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">//This just gets read in from a yaml file</span></div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a77b64358710d398374db3567c4ce0bf9"> 161</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a77b64358710d398374db3567c4ce0bf9">GetIsRHC</a>() {<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a">IsRHC</a>;}</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// Calculate the spline weight for a given event</span></div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">CalcXsecWeightSpline</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// Calculate the norm weight for a given event</span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">CalcXsecWeightNorm</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>);</div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548"> 166</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548">CalcXsecWeightFunc</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) = 0;</div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a4c5be0f42f94df87954a0b823786b3cc"> 168</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a4c5be0f42f94df87954a0b823786b3cc">GetBinningOpt</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">BinningOpt</a>;}</div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="comment">//virtual double ReturnKinematicParameter(KinematicTypes Var, int i) = 0; //Returns parameter Var for event j in sample i</span></div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028"> 171</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">ReturnKinematicParameter</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">KinematicParamter</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) = 0;</div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a025fead41716023aaf9f12b654df6a9f"> 172</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a025fead41716023aaf9f12b654df6a9f">ReturnKinematicParameter</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">KinematicVariable</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iEvent</a>) = 0;</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#abfbc5e1153ac47c81c0c9307ddbb18f0"> 173</a></span> <span class="keyword">virtual</span> std::vector&lt;double&gt; <a class="code hl_function" href="classsamplePDFFDBase.html#abfbc5e1153ac47c81c0c9307ddbb18f0">ReturnKinematicParameterBinning</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">KinematicParameter</a>) = 0; <span class="comment">//Returns binning for parameter Var</span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">//ETA - new function to generically convert a string from xsec cov to a kinematic type</span></div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">//virtual double StringToKinematicVar(std::string kinematic_str) = 0;</span></div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// Function to setup Functional and shift parameters. This isn&#39;t idea but</span></div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// do this in your experiment specific code for now as we don&#39;t have a </span></div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// generic treatment for func and shift pars yet</span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a9c9de54c4228dc54aa1b538ae10c558b"> 180</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a9c9de54c4228dc54aa1b538ae10c558b">SetupFuncParameters</a>(){<span class="keywordflow">return</span>;};</div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa">SetupNormParameters</a>();</div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="comment">//DB Functions required for reweighting functions </span></div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//DB Replace previous implementation with reading bin contents from samplePDF_array</span></div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc">fill1DHist</a>();</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984">fill2DHist</a>();</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//DB Nice new multi-threaded function which calculates the event weights and fills the relevant bins of an array</span></div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor">#ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">void</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fillArray_MP</a>();</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9">fillArray</a>();</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// Helper function to reset histograms</span></div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252">ResetHistograms</a>();</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="preprocessor">#ifndef USE_PROB3</span></div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">inline</span> cudaprob3::ProbType <a class="code hl_function" href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387">SwitchToCUDAProbType</a>(<a class="code hl_enumeration" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a> <a class="code hl_enumeration" href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a>); </div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">//DB Variables required for GetLikelihood</span></div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">//</span></div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">//DB Vectors to hold bin edges</span></div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49"> 205</a></span> std::vector&lt;double&gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">XBinEdges</a>;</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6"> 206</a></span> std::vector&lt;double&gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">YBinEdges</a>;</div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="comment">//DB Array to be filled after reweighting</span></div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62"> 209</a></span> <span class="keywordtype">double</span>** <a class="code hl_variable" href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFD_array</a>;</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="comment">//KS Array used for MC stat</span></div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e"> 211</a></span> <span class="keywordtype">double</span>** <a class="code hl_variable" href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFD_array_w2</a>;</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="comment">//DB Array to be filled in AddData</span></div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e"> 213</a></span> <span class="keywordtype">double</span>** <a class="code hl_variable" href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFD_data</a>;</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">//MC variables</span></div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13"> 218</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector&lt;struct fdmc_base&gt;</a> <a class="code hl_variable" href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">MCSamples</a>;</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#af8657285a97796f840dc191a16e34b16"> 219</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#af8657285a97796f840dc191a16e34b16">_sampleFile</a>;</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a83316d361e204b2a326689a11e88719b"> 220</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#a83316d361e204b2a326689a11e88719b">_data</a>;</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="comment">//DB Variables required for oscillation</span></div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045"> 225</a></span> <a class="code hl_class" href="classOscillator.html">Oscillator</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">Osc</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// An axis to set binned oscillation weights</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828"> 228</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828">osc_binned_axis</a> ;</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">//Variables controlling oscillation parameters</span></div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5"> 232</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">doubled_angle</a>;</div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836"> 233</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836">osc_binned</a>;</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="comment">//===============================================================================</span></div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="comment">//DB Covariance Objects</span></div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//ETA - All experiments will need an xsec, det and osc cov</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7"> 238</a></span> <a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a> *<a class="code hl_variable" href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">XsecCov</a>;</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="comment">//=============================================================================== </span></div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="comment">//ETA - binning opt can probably go soon...</span></div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8"> 242</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">BinningOpt</a>;</div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc"> 243</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">SampleDetID</a>;</div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a"> 244</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a">IsRHC</a>;</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd"> 246</a></span> std::string <a class="code hl_variable" href="classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd">samplename</a>;</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="comment">//Information to store for normalisation pars</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed"> 249</a></span> std::vector&lt;XsecNorms4&gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">xsec_norms</a>;</div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3"> 250</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3">nFuncParams</a>;</div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900"> 251</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900">funcParsNames</a>;</div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78"> 252</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78">funcParsIndex</a>;</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">//===========================================================================</span></div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="comment">//DB Vectors to store which kinematic cuts we apply</span></div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//like in XsecNorms but for events in sample. Read in from sample yaml file </span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952"> 257</a></span> std::vector&lt; std::string &gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952">SelectionStr</a>; </div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed"> 258</a></span> std::vector&lt; std::vector&lt;double&gt; &gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">Selection</a>; <span class="comment">//The enum, then the bounds corresponding to the string</span></div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// like in XsecNorms but for events in sample. Read in from sample yaml file</span></div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// in samplePDFExperimentBase.cpp</span></div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203"> 262</a></span> std::vector&lt; std::vector&lt;double&gt; &gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203">SelectionBounds</a>;</div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="comment">//What gets used in IsEventSelected, which gets set equal to user input plus </span></div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="comment">//all the vectors in StoreSelection</span></div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">//std::vector&lt; std::vector&lt;double&gt; &gt; Selection;</span></div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a2e76b60ca2d2369b7ac798c6d1963077"> 267</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsamplePDFFDBase.html#a2e76b60ca2d2369b7ac798c6d1963077">NSelections</a>;</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//What gets pulled from config options</span></div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3"> 269</a></span> std::vector&lt; std::vector&lt;double&gt; &gt; <a class="code hl_variable" href="classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3">StoredSelection</a>; </div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">//===========================================================================</span></div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="comment">//</span></div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="comment">//ETA - trying new way of doing shift parameters</span></div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// leave this for now but coming soon!</span></div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">//std::vector&lt; EnergyScale* &gt; ShiftFunctors;</span></div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">//std::vector&lt; BaseFuncPar* &gt; ShiftFunctors;</span></div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>};</div> +</div> +<div class="ttc" id="aFDMCStruct_8h_html"><div class="ttname"><a href="FDMCStruct_8h.html">FDMCStruct.h</a></div></div> +<div class="ttc" id="aOscClass__CUDAProb3_8h_html"><div class="ttname"><a href="OscClass__CUDAProb3_8h.html">OscClass_CUDAProb3.h</a></div></div> +<div class="ttc" id="aShiftFunctors_8h_html"><div class="ttname"><a href="ShiftFunctors_8h.html">ShiftFunctors.h</a></div></div> +<div class="ttc" id="aStructs_8h_html_ae0d15be5d1316877430ecb0ce94adec7"><div class="ttname"><a href="Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7">CUDAProb_nu</a></div><div class="ttdeci">CUDAProb_nu</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l01096">Structs.h:1096</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassOscillator_html"><div class="ttname"><a href="classOscillator.html">Oscillator</a></div><div class="ttdef"><b>Definition</b> <a href="OscClass__CUDAProb3_8h_source.html#l00038">OscClass_CUDAProb3.h:38</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html"><div class="ttname"><a href="classcovarianceXsec.html">covarianceXsec</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8h_source.html#l00016">covarianceXsec.h:16</a></div></div> +<div class="ttc" id="aclassinterfacePDFEbE_html"><div class="ttname"><a href="classinterfacePDFEbE.html">interfacePDFEbE</a></div><div class="ttdef"><b>Definition</b> <a href="interfacePDFEbE_8h_source.html#l00005">interfacePDFEbE.h:6</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html"><div class="ttname"><a href="classsamplePDFBase.html">samplePDFBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00031">samplePDFBase.h:32</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html"><div class="ttname"><a href="classsamplePDFFDBase.html">samplePDFFDBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00043">samplePDFFDBase.h:44</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a01553c17343ed6db1391750d7846b203"><div class="ttname"><a href="classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203">samplePDFFDBase::SelectionBounds</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; SelectionBounds</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00262">samplePDFFDBase.h:262</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a025fead41716023aaf9f12b654df6a9f"><div class="ttname"><a href="classsamplePDFFDBase.html#a025fead41716023aaf9f12b654df6a9f">samplePDFFDBase::ReturnKinematicParameter</a></div><div class="ttdeci">virtual double ReturnKinematicParameter(double KinematicVariable, int iSample, int iEvent)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a057d66f6ba12cdd55ea90b6efcdb8f62"><div class="ttname"><a href="classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62">samplePDFFDBase::samplePDFFD_array</a></div><div class="ttdeci">double ** samplePDFFD_array</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00209">samplePDFFDBase.h:209</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a0d6150d9e001bd6df8732bf2fd7480b9"><div class="ttname"><a href="classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9">samplePDFFDBase::fillArray</a></div><div class="ttdeci">void fillArray()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00252">samplePDFFDBase.cpp:252</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a0e8d317f7acc7027870987461194e8ce"><div class="ttname"><a href="classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce">samplePDFFDBase::reweight</a></div><div class="ttdeci">void reweight(double *oscpar)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00208">samplePDFFDBase.cpp:208</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a178798ab81db5ed999c53d1d0474f5bd"><div class="ttname"><a href="classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd">samplePDFFDBase::PrepFunctionalParameters</a></div><div class="ttdeci">virtual void PrepFunctionalParameters()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00151">samplePDFFDBase.h:151</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a185c166f11a096fc75eb1b76a4a31ac3"><div class="ttname"><a href="classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3">samplePDFFDBase::StoredSelection</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; StoredSelection</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00269">samplePDFFDBase.h:269</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a22f717d491f71858a946662cc9ca3f3a"><div class="ttname"><a href="classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a">samplePDFFDBase::FindNominalBinAndEdges1D</a></div><div class="ttdeci">void FindNominalBinAndEdges1D()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01036">samplePDFFDBase.cpp:1036</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a2c50c633784af24832bb20a4fca42af5"><div class="ttname"><a href="classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5">samplePDFFDBase::doubled_angle</a></div><div class="ttdeci">bool doubled_angle</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00232">samplePDFFDBase.h:232</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a2da3da30c6de171d67ad2c346c36f160"><div class="ttname"><a href="classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160">samplePDFFDBase::SetXsecCov</a></div><div class="ttdeci">void SetXsecCov(covarianceXsec *xsec_cov)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00664">samplePDFFDBase.cpp:664</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a2e76b60ca2d2369b7ac798c6d1963077"><div class="ttname"><a href="classsamplePDFFDBase.html#a2e76b60ca2d2369b7ac798c6d1963077">samplePDFFDBase::NSelections</a></div><div class="ttdeci">int NSelections</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00267">samplePDFFDBase.h:267</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a32b0465b0b8a2f7ae6b35da5fa6ef9cc"><div class="ttname"><a href="classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc">samplePDFFDBase::SampleDetID</a></div><div class="ttdeci">int SampleDetID</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00243">samplePDFFDBase.h:243</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a34643be1764871881d7b166874365aaa"><div class="ttname"><a href="classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa">samplePDFFDBase::FindNominalBinAndEdges2D</a></div><div class="ttdeci">void FindNominalBinAndEdges2D()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01156">samplePDFFDBase.cpp:1156</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a36253a401aca201ca4f1808a437db4d9"><div class="ttname"><a href="classsamplePDFFDBase.html#a36253a401aca201ca4f1808a437db4d9">samplePDFFDBase::UseNonDoubledAngles</a></div><div class="ttdeci">void UseNonDoubledAngles(bool ans)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00071">samplePDFFDBase.h:71</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a37591029c5d56c09083f1f094ae11836"><div class="ttname"><a href="classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836">samplePDFFDBase::osc_binned</a></div><div class="ttdeci">bool osc_binned</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00233">samplePDFFDBase.h:233</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3b25870ec0ac85196ddaf09fd65c9828"><div class="ttname"><a href="classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828">samplePDFFDBase::osc_binned_axis</a></div><div class="ttdeci">TAxis * osc_binned_axis</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00228">samplePDFFDBase.h:228</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3edf869b1304fd3316d92ea1eaeb0045"><div class="ttname"><a href="classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045">samplePDFFDBase::Osc</a></div><div class="ttdeci">Oscillator * Osc</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00225">samplePDFFDBase.h:225</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a3f9bd31096c917426dcd00c826538548"><div class="ttname"><a href="classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548">samplePDFFDBase::CalcXsecWeightFunc</a></div><div class="ttdeci">virtual double CalcXsecWeightFunc(int iSample, int iEvent)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a40269d6e2aa2b6517ce1dc28b2905028"><div class="ttname"><a href="classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028">samplePDFFDBase::ReturnKinematicParameter</a></div><div class="ttdeci">virtual double ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a409599f48f580c86ff4c774aea81986e"><div class="ttname"><a href="classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e">samplePDFFDBase::samplePDFFD_data</a></div><div class="ttdeci">double ** samplePDFFD_data</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00213">samplePDFFDBase.h:213</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a43b9afb5ac13ecad23750acb24b29da6"><div class="ttname"><a href="classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6">samplePDFFDBase::YBinEdges</a></div><div class="ttdeci">std::vector&lt; double &gt; YBinEdges</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00206">samplePDFFDBase.h:206</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a4bac245c85ce274b1e7d3072df7ece2b"><div class="ttname"><a href="classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b">samplePDFFDBase::CalcXsecNormsBins</a></div><div class="ttdeci">void CalcXsecNormsBins(int iSample)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00719">samplePDFFDBase.cpp:719</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a4c5be0f42f94df87954a0b823786b3cc"><div class="ttname"><a href="classsamplePDFFDBase.html#a4c5be0f42f94df87954a0b823786b3cc">samplePDFFDBase::GetBinningOpt</a></div><div class="ttdeci">int GetBinningOpt()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00168">samplePDFFDBase.h:168</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a4c750f77b67c6a728d61f14a1537aa4a"><div class="ttname"><a href="classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a">samplePDFFDBase::~samplePDFFDBase</a></div><div class="ttdeci">virtual ~samplePDFFDBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00027">samplePDFFDBase.cpp:27</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a512dcf2e3a6c8a2f8ab80ee55ce23252"><div class="ttname"><a href="classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252">samplePDFFDBase::ResetHistograms</a></div><div class="ttdeci">void ResetHistograms()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00597">samplePDFFDBase.cpp:597</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5648add33f6787cde8f4e3d461a17ce7"><div class="ttname"><a href="classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7">samplePDFFDBase::XsecCov</a></div><div class="ttdeci">covarianceXsec * XsecCov</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00238">samplePDFFDBase.h:238</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a571f6a6915c16e9bd97ac6691a8cbe1b"><div class="ttname"><a href="classsamplePDFFDBase.html#a571f6a6915c16e9bd97ac6691a8cbe1b">samplePDFFDBase::DumpWeights</a></div><div class="ttdeci">virtual void DumpWeights(std::string outname)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00097">samplePDFFDBase.h:97</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5bdaf812ba043022d39aed41a0e23984"><div class="ttname"><a href="classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984">samplePDFFDBase::fill2DHist</a></div><div class="ttdeci">void fill2DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00057">samplePDFFDBase.cpp:57</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5e35856e91339009cb1744a738145781"><div class="ttname"><a href="classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781">samplePDFFDBase::IsEventSelected</a></div><div class="ttdeci">bool IsEventSelected(int iSample, int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00095">samplePDFFDBase.cpp:95</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a5e7379b053537e46a8416cdf17f368fc"><div class="ttname"><a href="classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc">samplePDFFDBase::fill1DHist</a></div><div class="ttdeci">void fill1DHist()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00044">samplePDFFDBase.cpp:44</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a673b2d4958424e158107652339518a13"><div class="ttname"><a href="classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13">samplePDFFDBase::MCSamples</a></div><div class="ttdeci">vector&lt; struct fdmc_base &gt; MCSamples</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00218">samplePDFFDBase.h:218</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a687d1ffb99beff86a7903258ae29e53e"><div class="ttname"><a href="classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e">samplePDFFDBase::samplePDFFD_array_w2</a></div><div class="ttdeci">double ** samplePDFFD_array_w2</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00211">samplePDFFDBase.h:211</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a6d37b9e3fdf282148680e3bdb3ca95cf"><div class="ttname"><a href="classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf">samplePDFFDBase::GetSampleName</a></div><div class="ttdeci">std::string GetSampleName()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00087">samplePDFFDBase.h:87</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a77b64358710d398374db3567c4ce0bf9"><div class="ttname"><a href="classsamplePDFFDBase.html#a77b64358710d398374db3567c4ce0bf9">samplePDFFDBase::GetIsRHC</a></div><div class="ttdeci">bool GetIsRHC()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00161">samplePDFFDBase.h:161</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a80096759ee2bc96bf5e461aca567e7a8"><div class="ttname"><a href="classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8">samplePDFFDBase::BinningOpt</a></div><div class="ttdeci">int BinningOpt</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00242">samplePDFFDBase.h:242</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a8134d8dc28c804923563e2f701dd3c5c"><div class="ttname"><a href="classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c">samplePDFFDBase::GetLikelihood</a></div><div class="ttdeci">double GetLikelihood()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01377">samplePDFFDBase.cpp:1377</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a83316d361e204b2a326689a11e88719b"><div class="ttname"><a href="classsamplePDFFDBase.html#a83316d361e204b2a326689a11e88719b">samplePDFFDBase::_data</a></div><div class="ttdeci">TTree * _data</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00220">samplePDFFDBase.h:220</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a87aacca771e43e00c671d68552c4f8b3"><div class="ttname"><a href="classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3">samplePDFFDBase::nFuncParams</a></div><div class="ttdeci">int nFuncParams</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00250">samplePDFFDBase.h:250</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a8bc9dac849f31e1281a3af0261d1b952"><div class="ttname"><a href="classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952">samplePDFFDBase::SelectionStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SelectionStr</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00257">samplePDFFDBase.h:257</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a90c27639c0c84e113fbb2ba82f30f551"><div class="ttname"><a href="classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551">samplePDFFDBase::set2DBinning</a></div><div class="ttdeci">void set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01084">samplePDFFDBase.cpp:1084</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9708eeeaddb815efbe81ede6fc773900"><div class="ttname"><a href="classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900">samplePDFFDBase::funcParsNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; funcParsNames</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00251">samplePDFFDBase.h:251</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9a9e5d66ac2216095af25108118bab49"><div class="ttname"><a href="classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49">samplePDFFDBase::XBinEdges</a></div><div class="ttdeci">std::vector&lt; double &gt; XBinEdges</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00205">samplePDFFDBase.h:205</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9bda6382715dc3b7d265bd7b79d206fa"><div class="ttname"><a href="classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa">samplePDFFDBase::SetupNormParameters</a></div><div class="ttdeci">void SetupNormParameters()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00684">samplePDFFDBase.cpp:684</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_a9c9de54c4228dc54aa1b538ae10c558b"><div class="ttname"><a href="classsamplePDFFDBase.html#a9c9de54c4228dc54aa1b538ae10c558b">samplePDFFDBase::SetupFuncParameters</a></div><div class="ttdeci">virtual void SetupFuncParameters()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00180">samplePDFFDBase.h:180</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aa145eb7b1e14c10339c288959dad3d65"><div class="ttname"><a href="classsamplePDFFDBase.html#aa145eb7b1e14c10339c288959dad3d65">samplePDFFDBase::setupSplines</a></div><div class="ttdeci">virtual void setupSplines(fdmc_base *skobj, const char *splineFile, int nutype, int signal)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00112">samplePDFFDBase.h:112</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aaf8912a330835d6a7879c42d54d71387"><div class="ttname"><a href="classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387">samplePDFFDBase::SwitchToCUDAProbType</a></div><div class="ttdeci">cudaprob3::ProbType SwitchToCUDAProbType(CUDAProb_nu CUDAProb_nu)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01416">samplePDFFDBase.cpp:1416</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aafa0e8f399c5c22d9234e55a7289f8ed"><div class="ttname"><a href="classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed">samplePDFFDBase::Selection</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; double &gt; &gt; Selection</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00258">samplePDFFDBase.h:258</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ab7c23747f7b9fc8686e42eba7b5b6ba9"><div class="ttname"><a href="classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9">samplePDFFDBase::GetEventWeight</a></div><div class="ttdeci">double GetEventWeight(int iSample, int iEntry)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01321">samplePDFFDBase.cpp:1321</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ab83151b9062747f96a7c9629a63e05ed"><div class="ttname"><a href="classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed">samplePDFFDBase::xsec_norms</a></div><div class="ttdeci">std::vector&lt; XsecNorms4 &gt; xsec_norms</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00249">samplePDFFDBase.h:249</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aba47d043236ede872ad74c26c906998a"><div class="ttname"><a href="classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a">samplePDFFDBase::IsRHC</a></div><div class="ttdeci">bool IsRHC</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00244">samplePDFFDBase.h:244</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_abb3f41e66e65d7af7640ff1364817303"><div class="ttname"><a href="classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303">samplePDFFDBase::samplePDFFDBase</a></div><div class="ttdeci">samplePDFFDBase()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00048">samplePDFFDBase.h:48</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_abfbc5e1153ac47c81c0c9307ddbb18f0"><div class="ttname"><a href="classsamplePDFFDBase.html#abfbc5e1153ac47c81c0c9307ddbb18f0">samplePDFFDBase::ReturnKinematicParameterBinning</a></div><div class="ttdeci">virtual std::vector&lt; double &gt; ReturnKinematicParameterBinning(std::string KinematicParameter)=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac42b097c93ac7f8fa1afab4d478a4b67"><div class="ttname"><a href="classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67">samplePDFFDBase::set1DBinning</a></div><div class="ttdeci">void set1DBinning(int nbins, double *boundaries)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00962">samplePDFFDBase.cpp:962</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac64e16f80271fe3ab35dd6f9d28f1e10"><div class="ttname"><a href="classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10">samplePDFFDBase::SetOscillator</a></div><div class="ttdeci">void SetOscillator(Oscillator *Osc_)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00643">samplePDFFDBase.cpp:643</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ac7c59494c502991294fa1be8624d47a6"><div class="ttname"><a href="classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6">samplePDFFDBase::splineFile</a></div><div class="ttdeci">splineFDBase * splineFile</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00124">samplePDFFDBase.h:124</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_acf33f477d5ed7ed4113ef50b190ccf3e"><div class="ttname"><a href="classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e">samplePDFFDBase::fillSplineBins</a></div><div class="ttdeci">void fillSplineBins()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01331">samplePDFFDBase.cpp:1331</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ad2052c9178b220901224a29b474afaad"><div class="ttname"><a href="classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad">samplePDFFDBase::SetupOscCalc</a></div><div class="ttdeci">virtual void SetupOscCalc(double PathLength, double Density)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00839">samplePDFFDBase.cpp:839</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_adc056e89f35950eaf8719134a892a512"><div class="ttname"><a href="classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512">samplePDFFDBase::addData</a></div><div class="ttdeci">void addData(TH1D *Data)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01277">samplePDFFDBase.cpp:1277</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ae1c9d87b302042e4e2347aa787a947cd"><div class="ttname"><a href="classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd">samplePDFFDBase::samplename</a></div><div class="ttdeci">std::string samplename</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00246">samplePDFFDBase.h:246</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_ae1d5cafd4533fabaafe4868420dc51c5"><div class="ttname"><a href="classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5">samplePDFFDBase::FindEventOscBin</a></div><div class="ttdeci">void FindEventOscBin()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00655">samplePDFFDBase.cpp:655</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aecf3addcc9045e2da648b8bf1f99d84b"><div class="ttname"><a href="classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b">samplePDFFDBase::applyShifts</a></div><div class="ttdeci">virtual void applyShifts(int iSample, int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00153">samplePDFFDBase.h:153</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aed3fcc9a6474fdefcc0ee30cd992c778"><div class="ttname"><a href="classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778">samplePDFFDBase::GetNDim</a></div><div class="ttdeci">int GetNDim()</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l01209">samplePDFFDBase.cpp:1209</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aed7d4c54abecd59d83838bbea85a777f"><div class="ttname"><a href="classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f">samplePDFFDBase::CalcXsecWeightSpline</a></div><div class="ttdeci">double CalcXsecWeightSpline(const int iSample, const int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00613">samplePDFFDBase.cpp:613</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_aefdd8a15c707ea82c7843b72a801464d"><div class="ttname"><a href="classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d">samplePDFFDBase::CalcXsecWeightNorm</a></div><div class="ttdeci">double CalcXsecWeightNorm(const int iSample, const int iEvent)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00627">samplePDFFDBase.cpp:627</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af0ab9ed944f1db59fa156837d80e8d78"><div class="ttname"><a href="classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78">samplePDFFDBase::funcParsIndex</a></div><div class="ttdeci">std::vector&lt; int &gt; funcParsIndex</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00252">samplePDFFDBase.h:252</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af3ce53658ddfbb9c9d49c83451506865"><div class="ttname"><a href="classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865">samplePDFFDBase::calcOscWeights</a></div><div class="ttdeci">void calcOscWeights(int sample, int nutype, double *w, double *oscpar)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00199">samplePDFFDBase.cpp:199</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af58169bdc4b4a7e98c1f315dac96418e"><div class="ttname"><a href="classsamplePDFFDBase.html#af58169bdc4b4a7e98c1f315dac96418e">samplePDFFDBase::SetupWeightPointers</a></div><div class="ttdeci">virtual void SetupWeightPointers()=0</div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_af8657285a97796f840dc191a16e34b16"><div class="ttname"><a href="classsamplePDFFDBase.html#af8657285a97796f840dc191a16e34b16">samplePDFFDBase::_sampleFile</a></div><div class="ttdeci">TFile * _sampleFile</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8h_source.html#l00219">samplePDFFDBase.h:219</a></div></div> +<div class="ttc" id="aclasssamplePDFFDBase_html_afeec8a0e7066ead8c88ed0696e29d7a9"><div class="ttname"><a href="classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9">samplePDFFDBase::UseBinnedOscReweighting</a></div><div class="ttdeci">void UseBinnedOscReweighting(bool ans)</div><div class="ttdef"><b>Definition</b> <a href="samplePDFFDBase_8cpp_source.html#l00070">samplePDFFDBase.cpp:70</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html"><div class="ttname"><a href="classsplineFDBase.html">splineFDBase</a></div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00013">splineFDBase.h:14</a></div></div> +<div class="ttc" id="acovarianceOsc_8h_html"><div class="ttname"><a href="covarianceOsc_8h.html">covarianceOsc.h</a></div></div> +<div class="ttc" id="acovarianceXsec_8h_html"><div class="ttname"><a href="covarianceXsec_8h.html">covarianceXsec.h</a></div></div> +<div class="ttc" id="ainterfacePDFEbE_8h_html"><div class="ttname"><a href="interfacePDFEbE_8h.html">interfacePDFEbE.h</a></div></div> +<div class="ttc" id="amanager_8h_html"><div class="ttname"><a href="manager_8h.html">manager.h</a></div></div> +<div class="ttc" id="asamplePDFBase_8h_html"><div class="ttname"><a href="samplePDFBase_8h.html">samplePDFBase.h</a></div></div> +<div class="ttc" id="asplineBase_8h_html"><div class="ttname"><a href="splineBase_8h.html">splineBase.h</a></div></div> +<div class="ttc" id="asplineFDBase_8h_html"><div class="ttname"><a href="splineFDBase_8h.html">splineFDBase.h</a></div></div> +<div class="ttc" id="astructfdmc__base_html"><div class="ttname"><a href="structfdmc__base.html">fdmc_base</a></div><div class="ttdef"><b>Definition</b> <a href="FDMCStruct_8h_source.html#l00005">FDMCStruct.h:5</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFInterface_8h.html b/samplePDFInterface_8h.html new file mode 100644 index 00000000..bd6b3283 --- /dev/null +++ b/samplePDFInterface_8h.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFInterface.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">samplePDFInterface.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &lt;TTree.h&gt;</code><br /> +<code>#include &lt;TH1D.h&gt;</code><br /> +<code>#include &lt;TH2D.h&gt;</code><br /> +<code>#include &lt;TMath.h&gt;</code><br /> +<code>#include &lt;TFile.h&gt;</code><br /> +<code>#include &lt;TSpline.h&gt;</code><br /> +<code>#include &lt;TRandom3.h&gt;</code><br /> +<code>#include &lt;vector&gt;</code><br /> +<code>#include &quot;<a class="el" href="Structs_8h_source.html">samplePDF/Structs.h</a>&quot;</code><br /> +</div> +<p><a href="samplePDFInterface_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsamplePDFInterface.html">samplePDFInterface</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/samplePDFInterface_8h_source.html b/samplePDFInterface_8h_source.html new file mode 100644 index 00000000..93221a6b --- /dev/null +++ b/samplePDFInterface_8h_source.html @@ -0,0 +1,156 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/samplePDF/samplePDFInterface.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_8ab82b4d49d905c57b21b814a783a10f.html">samplePDF</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">samplePDFInterface.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="samplePDFInterface_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;TTree.h&gt;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;TH1D.h&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;TH2D.h&gt;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;TMath.h&gt;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;TFile.h&gt;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;TSpline.h&gt;</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;TRandom3.h&gt;</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;vector&gt;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;<a class="code" href="Structs_8h.html">samplePDF/Structs.h</a>&quot;</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">using namespace </span>std;</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div> +<div class="foldopen" id="foldopen00017" data-start="{" data-end="};"> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classsamplePDFInterface.html">samplePDFInterface</a></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span>{</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a16fa111f8562bf00bab1f29f3a09b8a1"> 20</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#a16fa111f8562bf00bab1f29f3a09b8a1">reweight</a>(<span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscpar</a>)=0;</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a659178e9c6c6a6b5ad8f17b23a26cedc"> 22</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFInterface.html#a659178e9c6c6a6b5ad8f17b23a26cedc">getEventRate</a>()=0;</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#ab8e7f95c1db8da2d96f5385b276d499b"> 24</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector&lt; vector &lt;double&gt;</a> &gt; <a class="code hl_function" href="classsamplePDFInterface.html#ab8e7f95c1db8da2d96f5385b276d499b">generate2D</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pdf</a>)=0;</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#aa15d46479142ea021af71733f95049ae"> 25</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector&lt;double&gt;</a> <a class="code hl_function" href="classsamplePDFInterface.html#aa15d46479142ea021af71733f95049ae">generate</a>()=0;</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a90531e4ef2a555b3248f126fc971b476"> 27</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFInterface.html#a90531e4ef2a555b3248f126fc971b476">GetLikelihood</a>()=0;</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#aa06edb735a994f18b2819622b0df3898"> 29</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#aa06edb735a994f18b2819622b0df3898">addData</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dat</a>)=0;</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#afba8628475f8167da36b9f0c8fc91034"> 30</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#afba8628475f8167da36b9f0c8fc91034">addData</a>(std::vector&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vector &lt;double&gt;</a> &gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dat</a>)=0;</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a6dfc76415fd85c2b20807212185d5803"> 31</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#a6dfc76415fd85c2b20807212185d5803">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH1D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>)=0;</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a430875be32a7abe8e5582f015d52d256"> 32</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#a430875be32a7abe8e5582f015d52d256">addData</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2D</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">binneddata</a>)=0;</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#adc3602610f2c93714d40771145828685"> 34</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#adc3602610f2c93714d40771145828685">printPosteriors</a>()=0; <span class="comment">// save images of posterior histos</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#aabea95f400c78b85100f548e9d8e8144"> 37</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#aabea95f400c78b85100f548e9d8e8144">init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>)=0;</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a8188c4bd0d437cdbf52298b4a4f73560"> 38</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#a8188c4bd0d437cdbf52298b4a4f73560">init</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pot</a>, std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">mc_version</a>)=0;</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a0a581fa7cb091aa5d4378b19ab19083f"> 39</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFInterface.html#a0a581fa7cb091aa5d4378b19ab19083f">getCovLikelihood</a>()=0;</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a4cdc84a7bc279b76e55ad9daaa8df7a2"> 40</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classsamplePDFInterface.html#a4cdc84a7bc279b76e55ad9daaa8df7a2">GetLikelihood_kernel</a>(std::vector&lt;double&gt; &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">data</a>)=0;</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad"> 41</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad">fill1DHist</a>()=0;</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63"> 42</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63">fill2DHist</a>()=0;</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>};</div> +</div> +<div class="ttc" id="aStructs_8h_html"><div class="ttname"><a href="Structs_8h.html">Structs.h</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasssamplePDFInterface_html"><div class="ttname"><a href="classsamplePDFInterface.html">samplePDFInterface</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFInterface_8h_source.html#l00017">samplePDFInterface.h:18</a></div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a0a581fa7cb091aa5d4378b19ab19083f"><div class="ttname"><a href="classsamplePDFInterface.html#a0a581fa7cb091aa5d4378b19ab19083f">samplePDFInterface::getCovLikelihood</a></div><div class="ttdeci">virtual double getCovLikelihood()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a16fa111f8562bf00bab1f29f3a09b8a1"><div class="ttname"><a href="classsamplePDFInterface.html#a16fa111f8562bf00bab1f29f3a09b8a1">samplePDFInterface::reweight</a></div><div class="ttdeci">virtual void reweight(double *oscpar)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a430875be32a7abe8e5582f015d52d256"><div class="ttname"><a href="classsamplePDFInterface.html#a430875be32a7abe8e5582f015d52d256">samplePDFInterface::addData</a></div><div class="ttdeci">virtual void addData(TH2D *binneddata)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a4cdc84a7bc279b76e55ad9daaa8df7a2"><div class="ttname"><a href="classsamplePDFInterface.html#a4cdc84a7bc279b76e55ad9daaa8df7a2">samplePDFInterface::GetLikelihood_kernel</a></div><div class="ttdeci">virtual double GetLikelihood_kernel(std::vector&lt; double &gt; &amp;data)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a659170f132acede9c9cc481ed0727a63"><div class="ttname"><a href="classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63">samplePDFInterface::fill2DHist</a></div><div class="ttdeci">virtual void fill2DHist()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a659178e9c6c6a6b5ad8f17b23a26cedc"><div class="ttname"><a href="classsamplePDFInterface.html#a659178e9c6c6a6b5ad8f17b23a26cedc">samplePDFInterface::getEventRate</a></div><div class="ttdeci">virtual double getEventRate()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a6dfc76415fd85c2b20807212185d5803"><div class="ttname"><a href="classsamplePDFInterface.html#a6dfc76415fd85c2b20807212185d5803">samplePDFInterface::addData</a></div><div class="ttdeci">virtual void addData(TH1D *binneddata)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a8188c4bd0d437cdbf52298b4a4f73560"><div class="ttname"><a href="classsamplePDFInterface.html#a8188c4bd0d437cdbf52298b4a4f73560">samplePDFInterface::init</a></div><div class="ttdeci">virtual void init(double pot, std::string mc_version)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_a90531e4ef2a555b3248f126fc971b476"><div class="ttname"><a href="classsamplePDFInterface.html#a90531e4ef2a555b3248f126fc971b476">samplePDFInterface::GetLikelihood</a></div><div class="ttdeci">virtual double GetLikelihood()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_aa06edb735a994f18b2819622b0df3898"><div class="ttname"><a href="classsamplePDFInterface.html#aa06edb735a994f18b2819622b0df3898">samplePDFInterface::addData</a></div><div class="ttdeci">virtual void addData(std::vector&lt; double &gt; &amp;dat)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_aa15d46479142ea021af71733f95049ae"><div class="ttname"><a href="classsamplePDFInterface.html#aa15d46479142ea021af71733f95049ae">samplePDFInterface::generate</a></div><div class="ttdeci">virtual vector&lt; double &gt; generate()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_aabea95f400c78b85100f548e9d8e8144"><div class="ttname"><a href="classsamplePDFInterface.html#aabea95f400c78b85100f548e9d8e8144">samplePDFInterface::init</a></div><div class="ttdeci">virtual void init(double pot)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_ab8e7f95c1db8da2d96f5385b276d499b"><div class="ttname"><a href="classsamplePDFInterface.html#ab8e7f95c1db8da2d96f5385b276d499b">samplePDFInterface::generate2D</a></div><div class="ttdeci">virtual vector&lt; vector&lt; double &gt; &gt; generate2D(TH2D *pdf)=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_adb062546513e3f050898c0939bd178ad"><div class="ttname"><a href="classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad">samplePDFInterface::fill1DHist</a></div><div class="ttdeci">virtual void fill1DHist()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_adc3602610f2c93714d40771145828685"><div class="ttname"><a href="classsamplePDFInterface.html#adc3602610f2c93714d40771145828685">samplePDFInterface::printPosteriors</a></div><div class="ttdeci">virtual void printPosteriors()=0</div></div> +<div class="ttc" id="aclasssamplePDFInterface_html_afba8628475f8167da36b9f0c8fc91034"><div class="ttname"><a href="classsamplePDFInterface.html#afba8628475f8167da36b9f0c8fc91034">samplePDFInterface::addData</a></div><div class="ttdeci">virtual void addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;dat)=0</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..7f77e2fb --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..89eb8bb0 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,46 @@ +var searchData= +[ + ['_5f_5fbad_5fdouble_5f_5f_0',['__BAD_DOUBLE__',['../Structs_8h.html#a077c29deadfcb19af8c0c5cdf194118f',1,'Structs.h']]], + ['_5f_5fbad_5fint_5f_5f_1',['__BAD_INT__',['../Structs_8h.html#a7f562abe9c5a00ed82cfb38c60a74c39',1,'Structs.h']]], + ['_5f_5fbad_5fspline_5f_5f_2',['__BAD_SPLINE__',['../splineFDBase_8h.html#ae03212ae713477b2462720ff4d8abc30',1,'splineFDBase.h']]], + ['_5f_5fdefault_5freturn_5fval_5f_5f_3',['__DEFAULT_RETURN_VAL__',['../Structs_8h.html#a228eb740378da7cf951cd547cc82f439',1,'Structs.h']]], + ['_5f_5ffloat_5f_5f_4',['__float__',['../Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c',1,'Structs.h']]], + ['_5f_5fint_5f_5f_5',['__int__',['../Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3',1,'Structs.h']]], + ['_5f_5flarge_5flogl_5f_5f_6',['__LARGE_LOGL__',['../covarianceBase_8h.html#a949fbeb0e56580fc737cc2ccda06ccfa',1,'covarianceBase.h']]], + ['_5f_5fth2polyoverflowbins_5f_5f_7',['__th2polyoverflowbins__',['../Structs_8h.html#a9e73f964c30e6e3eef4c49bbd3aec314',1,'__TH2PolyOverflowBins__:&#160;Structs.h'],['../Structs_8h.html#a9e73f964c30e6e3eef4c49bbd3aec314',1,'__TH2PolyOverflowBins__:&#160;Structs.h']]], + ['_5f_5fundef_5f_5f_8',['__UNDEF__',['../MCMCProcessor_8h.html#a4972df9ed3901c5a9ad1fa86489ef042',1,'MCMCProcessor.h']]], + ['_5f_5funsigned_5fint_5f_5f_9',['__unsigned_int__',['../Structs_8h.html#addbdab6c52c9f6eac69ceb389bd814f5',1,'Structs.h']]], + ['_5fdata_10',['_data',['../classsamplePDFFDBase.html#a83316d361e204b2a326689a11e88719b',1,'samplePDFFDBase']]], + ['_5ffcurrval_11',['_fCurrVal',['../classcovarianceBase.html#ae70f51df3976975b2dc78fd3bfc28b65',1,'covarianceBase']]], + ['_5ffdetid_12',['_fDetID',['../classcovarianceXsec.html#a183f01056fc0e9b42db202e944021332',1,'covarianceXsec']]], + ['_5fferror_13',['_fError',['../classcovarianceBase.html#a34f877fc160b4a93a3aab1b3a8977858',1,'covarianceBase']]], + ['_5fffancynames_14',['_fFancyNames',['../classcovarianceBase.html#a973671386a2f8ea924f25f8f5404654c',1,'covarianceBase']]], + ['_5fffdsplinemodes_15',['_fFDSplineModes',['../classcovarianceXsec.html#a14ee84d9aab2ee0d3fbf9d060fb4ac78',1,'covarianceXsec']]], + ['_5fffdsplinenames_16',['_fFDSplineNames',['../classcovarianceXsec.html#a89cadb30d92261eb691eac44c558ea09',1,'covarianceXsec']]], + ['_5ffflatprior_17',['_fFlatPrior',['../classcovarianceBase.html#ad9c47deb7009bff81210f666e80012eb',1,'covarianceBase']]], + ['_5ffgenerated_18',['_fGenerated',['../classcovarianceBase.html#a9b753f52711600a9f8d648531d95b044',1,'covarianceBase']]], + ['_5ffglobalstepscale_19',['_fGlobalStepScale',['../classcovarianceBase.html#a0088413d6a15d12cd34ec06166302f5c',1,'covarianceBase']]], + ['_5ffindivstepscale_20',['_fIndivStepScale',['../classcovarianceBase.html#a3cda39026e336a49cef482efd4062561',1,'covarianceBase']]], + ['_5ffkinematicbounds_21',['_fKinematicBounds',['../classcovarianceXsec.html#a46247d1477e2a37e9185f497b02f644e',1,'covarianceXsec']]], + ['_5ffkinematicpars_22',['_fKinematicPars',['../classcovarianceXsec.html#a4fb160b71cb97868cfc86922a431b03e',1,'covarianceXsec']]], + ['_5fflowbound_23',['_fLowBound',['../classcovarianceBase.html#a8f1d94838f188cc85c4f82557c0b0b66',1,'covarianceBase']]], + ['_5ffnames_24',['_fNames',['../classcovarianceBase.html#a3e502d80fd2c30a7da4fe75a3e05b0da',1,'covarianceBase']]], + ['_5ffndsplinenames_25',['_fNDSplineNames',['../classcovarianceXsec.html#aafdd7bae08e33f599e906d4c775efb38',1,'covarianceXsec']]], + ['_5ffneutrinoflavour_26',['_fNeutrinoFlavour',['../classcovarianceXsec.html#a60b37c1f5551cb99b22656d434d2b9a1',1,'covarianceXsec']]], + ['_5ffneutrinoflavourunosc_27',['_fNeutrinoFlavourUnosc',['../classcovarianceXsec.html#aee4d745b2268018a38631b72a97410f0',1,'covarianceXsec']]], + ['_5ffnormmodes_28',['_fNormModes',['../classcovarianceXsec.html#acf3c890f9b918168030a7372306c3227',1,'covarianceXsec']]], + ['_5ffnumpar_29',['_fNumPar',['../classcovarianceBase.html#ac5d922f1a4163b38ebc7a3ef21eec376',1,'covarianceBase']]], + ['_5ffparamtype_30',['_fParamType',['../classcovarianceXsec.html#ae74d3752f5659e2fa85c65783fbbfc85',1,'covarianceXsec']]], + ['_5ffprefitvalue_31',['_fPreFitValue',['../classcovarianceBase.html#a7578a2cc2e8e9100fad88310a824cb1c',1,'covarianceBase']]], + ['_5ffpropval_32',['_fPropVal',['../classcovarianceBase.html#a12f0eb31a5ef48b014baa11d4ab919e9',1,'covarianceBase']]], + ['_5ffsplineinterpolationtype_33',['_fSplineInterpolationType',['../classcovarianceXsec.html#a1b3ee82de052638e1fed78d480136533',1,'covarianceXsec']]], + ['_5fftargetnuclei_34',['_fTargetNuclei',['../classcovarianceXsec.html#a9616020e3255baa6076b85cd92567e23',1,'covarianceXsec']]], + ['_5ffupbound_35',['_fUpBound',['../classcovarianceBase.html#a31e636cb6de871bd0c2c8e7e299df9e7',1,'covarianceBase']]], + ['_5ffyamldoc_36',['_fYAMLDoc',['../classcovarianceBase.html#a933ff3dc0af99629ba3582a5d9d89d23',1,'covarianceBase']]], + ['_5fhpdf1d_37',['_hPDF1D',['../classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47',1,'samplePDFBase']]], + ['_5fhpdf2d_38',['_hPDF2D',['../classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245',1,'samplePDFBase']]], + ['_5fmax_5fknots_39',['_max_knots',['../classSMonolith.html#ac0d1df54649909e4cee3385f68132799',1,'SMonolith']]], + ['_5fncoeff_5f_40',['_nCoeff_',['../SplineMonolith_8h.html#a283177311bade7400c6088e8fad71a1f',1,'SplineMonolith.h']]], + ['_5fntf1coeff_5f_41',['_nTF1Coeff_',['../SplineMonolith_8h.html#a911160077ffa38727e0494f178ce380a',1,'SplineMonolith.h']]], + ['_5fsamplefile_42',['_sampleFile',['../classsamplePDFFDBase.html#af8657285a97796f840dc191a16e34b16',1,'samplePDFFDBase']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 00000000..98a400a6 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,115 @@ +var searchData= +[ + ['p1_0',['p1',['../GetPostfitParamPlots_8cpp.html#af4718de299aea80f595dd6c21509a5eb',1,'GetPostfitParamPlots.cpp']]], + ['p2_1',['p2',['../GetPostfitParamPlots_8cpp.html#afcf736152a1c6e4f65d2d41b7335136c',1,'GetPostfitParamPlots.cpp']]], + ['p3_2',['p3',['../GetPostfitParamPlots_8cpp.html#a814cbca1b36d9e3f622031e0e9634ce0',1,'GetPostfitParamPlots.cpp']]], + ['p4_3',['p4',['../GetPostfitParamPlots_8cpp.html#ac577141e2ab46a432ac74c34d18d0739',1,'GetPostfitParamPlots.cpp']]], + ['par_4',['par',['../classPSO.html#ae5eff2b0193e0d7c9c221edbc14118bd',1,'PSO::par'],['../classTF1__red.html#a223eb22d6e86b41e257d79128a01ad26',1,'TF1_red::Par'],['../classTSpline3__red.html#a396d3fc28e8c05dae4f1d410eb83c179',1,'TSpline3_red::Par']]], + ['par_5fmeans_5',['par_means',['../classcovarianceBase.html#aa8efafa871a79bd578bc687796b118a5',1,'covarianceBase']]], + ['par_5fmeans_5fprev_6',['par_means_prev',['../classcovarianceBase.html#a0faf72534a82c33db752d42d234b6322',1,'covarianceBase']]], + ['par_5fnames_7',['par_names',['../classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0',1,'tune']]], + ['param_5fpos_8',['Param_pos',['../classBaseFuncPar.html#a852005983ca8e7d16274079245471bb5',1,'BaseFuncPar']]], + ['paramcentral_9',['ParamCentral',['../classMCMCProcessor.html#a3a6614826ae320e462211e38e96d9d02',1,'MCMCProcessor']]], + ['paramerrors_10',['ParamErrors',['../classMCMCProcessor.html#a3a97e3cb4be3ceb9eb721eac51d82d60',1,'MCMCProcessor']]], + ['parameterenum_11',['ParameterEnum',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20b',1,'MCMCProcessor.h']]], + ['paramflat_12',['ParamFlat',['../classMCMCProcessor.html#a4be1eedb743e4ea410009a4fa45720f7',1,'MCMCProcessor']]], + ['paramlist_13',['paramlist',['../classPSO.html#ab8f404ef249b9c4b385e08c483e8b38f',1,'PSO']]], + ['paramnames_14',['paramnames',['../GetPenaltyTerm_8cpp.html#a7428f3d1db32b479cffb2572cba8725c',1,'ParamNames:&#160;GetPenaltyTerm.cpp'],['../classMCMCProcessor.html#adecc55689f7d37b9412f8886fe3480dc',1,'MCMCProcessor::ParamNames']]], + ['paramno_15',['paramno',['../classTF1__red.html#aee5a2c3539b21417a7fc71cd2af093c9',1,'TF1_red::ParamNo'],['../classTSpline3__red.html#a0fe6165b847cf17c45f307256a0fc336',1,'TSpline3_red::ParamNo']]], + ['paramnom_16',['ParamNom',['../classMCMCProcessor.html#a4c4c6aa4827a2fe54ce37defbb3d0475',1,'MCMCProcessor']]], + ['paramsums_17',['ParamSums',['../classMCMCProcessor.html#a7db98c7cf390b050f1acb927b4f55cab',1,'MCMCProcessor']]], + ['paramtraces_18',['ParamTraces',['../classMCMCProcessor.html#a929d6efec80bb4de05eea7011257439a',1,'MCMCProcessor']]], + ['paramtype_19',['ParamType',['../classMCMCProcessor.html#aaa903949bde8f1a69800c71fe1eb538e',1,'MCMCProcessor']]], + ['paramtypestartpos_20',['ParamTypeStartPos',['../classMCMCProcessor.html#aeab63979ff36256072c046a15d981875',1,'MCMCProcessor']]], + ['parsearg_21',['ParseArg',['../CombineMaCh3Chains_8cpp.html#a4304fea6fca59fa81f1aa40b86bb10d2',1,'CombineMaCh3Chains.cpp']]], + ['parsefilelabels_22',['parseFileLabels',['../PlotLLH_8cpp.html#a1ccbbc86b2e8fd8775451501562f204c',1,'PlotLLH.cpp']]], + ['parseline_23',['parseLine',['../namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83',1,'MaCh3Utils']]], + ['parstep_24',['ParStep',['../classMCMCProcessor.html#a087dca88a306acdc28afea7213e3623c',1,'MCMCProcessor']]], + ['particle_25',['particle',['../classparticle.html',1,'particle'],['../classparticle.html#ac32ac5717215d09b9bc26553d2350fe5',1,'particle::particle(std::vector&lt; double &gt; position, std::vector&lt; double &gt; velocity)'],['../classparticle.html#a31e82afa2044567396e7357613a1438f',1,'particle::particle()']]], + ['pca_26',['pca',['../classcovarianceBase.html#ab4b7f96d3e977a0b3307ceecbd0baeb4',1,'covarianceBase']]], + ['pdfname_27',['PDFName',['../PlotLLH_8cpp.html#aacfbb7016eac3cab724a43e114986100',1,'PlotLLH.cpp']]], + ['pdgs_28',['pdgs',['../classXsecNorms4.html#afed4b95759559016df72bfed03763b6e',1,'XsecNorms4']]], + ['pdgtoprobs_29',['PDGToProbs',['../Structs_8h.html#a7bff6c239eb0213052f3193d84a7bee0',1,'Structs.h']]], + ['performbetastudy_30',['PerformBetaStudy',['../classcovarianceOsc.html#acf71a8dc42b231bedf3c68ced84cb379',1,'covarianceOsc']]], + ['personal_5fbest_5fposition_31',['personal_best_position',['../classparticle.html#a8b36e78ddaa8737f8d1d3d1b39e6924f',1,'particle']]], + ['personal_5fbest_5fvalue_32',['personal_best_value',['../classparticle.html#ad45e229bdf80e2eaadeb9e9ae216277b',1,'particle']]], + ['plotbinvalue_33',['plotBinValue',['../classMCMCProcessor.html#aa7611f55ac3c0ea70607761d037fbd91',1,'MCMCProcessor']]], + ['plotcolor_34',['PlotColor',['../GetPostfitParamPlots_8cpp.html#ab2b28d9b5fd61ee45bbdfa307b969241',1,'GetPostfitParamPlots.cpp']]], + ['plotdet_35',['PlotDet',['../classMCMCProcessor.html#a8b6f73288e20d82d74d119eabeae3e8d',1,'MCMCProcessor']]], + ['plotflatprior_36',['PlotFlatPrior',['../classMCMCProcessor.html#ad24411a2556504c440ff0af045e8e7aa',1,'MCMCProcessor']]], + ['plotjarlskog_37',['PlotJarlskog',['../classMCMCProcessor.html#af1392c6cff68e9f0a27e2c9a4e52cf4c',1,'MCMCProcessor']]], + ['plotllh_38',['PlotLLH',['../PlotLLH_8cpp.html#a53c3f8ef6b889ff0c9d2f6b18c7b1f38',1,'PlotLLH.cpp']]], + ['plotllh_2ecpp_39',['PlotLLH.cpp',['../PlotLLH_8cpp.html',1,'']]], + ['plotratios_40',['plotRatios',['../PlotLLH_8cpp.html#a03962c21a0e20503b01149a1252076ab',1,'PlotLLH.cpp']]], + ['plotrelativetoprior_41',['plotRelativeToPrior',['../classMCMCProcessor.html#afbac2a114c15ca7db4abe71dd549504c',1,'MCMCProcessor']]], + ['plots_42',['Famous Plots',['../md__2github_2workspace_2README.html#autotoc_md6',1,'']]], + ['plotting_20and_20diagnostic_43',['Plotting and Diagnostic',['../md__2github_2workspace_2README.html#autotoc_md18',1,'']]], + ['plottype_44',['plotType',['../GetPostfitParamPlots_8cpp.html#aee5c9d8d7ad14d8728dffad47b8d4efe',1,'GetPostfitParamPlots.cpp']]], + ['plotxsec_45',['PlotXSec',['../classMCMCProcessor.html#ad8a1aa692e8494ad58fd604e127a656d',1,'MCMCProcessor']]], + ['png_20alt_20mach3_20align_20center_20width_20100_46',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['polyintegralwidth_47',['polyintegralwidth',['../Structs_8cpp.html#a8bab8af5f0339c6ec0310ff5ea87f26d',1,'PolyIntegralWidth(TH2Poly *Histogram):&#160;Structs.cpp'],['../Structs_8h.html#a8bab8af5f0339c6ec0310ff5ea87f26d',1,'PolyIntegralWidth(TH2Poly *Histogram):&#160;Structs.cpp']]], + ['polyprojectionx_48',['polyprojectionx',['../Structs_8cpp.html#ade85048179165bf461dde874b64d9cb4',1,'PolyProjectionX(TObject *poly, std::string TempName, std::vector&lt; double &gt; xbins, bool computeErrors):&#160;Structs.cpp'],['../Structs_8h.html#a718d19341c552a231786569be79d6a8f',1,'PolyProjectionX(TObject *poly, std::string TempName, std::vector&lt; double &gt; xbins, bool computeErrors=false):&#160;Structs.cpp']]], + ['polyprojectiony_49',['polyprojectiony',['../Structs_8cpp.html#af724e87cd2e37bfab7ff566b98be55c4',1,'PolyProjectionY(TObject *poly, std::string TempName, std::vector&lt; double &gt; ybins, bool computeErrors):&#160;Structs.cpp'],['../Structs_8h.html#af1261eebc53700d334a4aa937d18a6a1',1,'PolyProjectionY(TObject *poly, std::string TempName, std::vector&lt; double &gt; ybins, bool computeErrors=false):&#160;Structs.cpp']]], + ['polyscalewidth_50',['polyscalewidth',['../Structs_8cpp.html#a61d8f295d13a5fe82a552c08d42c8bfa',1,'PolyScaleWidth(TH2Poly *Histogram, double scale):&#160;Structs.cpp'],['../Structs_8h.html#a61d8f295d13a5fe82a552c08d42c8bfa',1,'PolyScaleWidth(TH2Poly *Histogram, double scale):&#160;Structs.cpp']]], + ['position_51',['position',['../classparticle.html#a16f312fadb1c50e0a45a840f9e393eae',1,'particle']]], + ['post2dplotthreshold_52',['Post2DPlotThreshold',['../classMCMCProcessor.html#a25e4685b6299181021b02ac0e0b74681',1,'MCMCProcessor']]], + ['posterior_53',['Posterior',['../classMCMCProcessor.html#a82e6cfef1ba6fcfc8ac8f61acb5bf931',1,'MCMCProcessor']]], + ['posterior1dcut_54',['Posterior1DCut',['../classMCMCProcessor.html#a85917e25c4f5b5b966c50cccd9ddd6a0',1,'MCMCProcessor']]], + ['postfithistvec_55',['PostfitHistVec',['../GetPostfitParamPlots_8cpp.html#adf27e2a8c89392ebe0a2d6d7a65dab9e',1,'GetPostfitParamPlots.cpp']]], + ['prefit_56',['Prefit',['../GetPostfitParamPlots_8cpp.html#a3622d45d00f446252f0ea513d7f1f6cb',1,'GetPostfitParamPlots.cpp']]], + ['preoscpdgs_57',['preoscpdgs',['../classXsecNorms4.html#ac2e3b749d0c629e425861d2f6ecf82b0',1,'XsecNorms4']]], + ['preparechains_58',['PrepareChains',['../RHat_8cpp.html#af40d823e599ba2565e989e4f43c78628',1,'RHat.cpp']]], + ['preparediagmcmc_59',['PrepareDiagMCMC',['../classMCMCProcessor.html#a930cadafa41b31b58066dea68628de9f',1,'MCMCProcessor']]], + ['preparefit_60',['PrepareFit',['../classLikelihoodFit.html#adb89956955c043bf37cad04983e4facd',1,'LikelihoodFit']]], + ['prepareforgpu_61',['prepareforgpu',['../classSMonolith.html#a65beed5bb2984530aa497b7faeb54d1e',1,'SMonolith::PrepareForGPU(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a58165d265d676f7052a1b125117e1a1b',1,'SMonolith::PrepareForGPU(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline)']]], + ['prepareforgpu_5ftf1_62',['PrepareForGPU_TF1',['../classSMonolith.html#ac5dc91d304260fab18e7d7eb1cebe032',1,'SMonolith']]], + ['prepareforgpu_5ftspline3_63',['PrepareForGPU_TSpline3',['../classSMonolith.html#a3b2a29e485f1f35fd2bcb207c47c2469',1,'SMonolith']]], + ['prepareoutput_64',['PrepareOutput',['../classFitterBase.html#a53715760edd8c7640432f31793fd28f9',1,'FitterBase']]], + ['preparesplinefile_65',['PrepareSplineFile',['../classSMonolith.html#a79f4bf0cac279cf57ab8f06698052922',1,'SMonolith']]], + ['prepforreweight_66',['PrepForReweight',['../classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28',1,'splineFDBase']]], + ['prepfunctionalparameters_67',['PrepFunctionalParameters',['../classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd',1,'samplePDFFDBase']]], + ['prettify_5fname_68',['prettify_name',['../PlotLLH_8cpp.html#adc23a6999591c2bf438ae8a87e97d928',1,'PlotLLH.cpp']]], + ['prettifytitles_69',['prettifytitles',['../GetPostfitParamPlots_8cpp.html#acbde284ea52643cf3db23f6edc77850c',1,'PrettifyTitles(TH1D *Hist):&#160;GetPostfitParamPlots.cpp'],['../GetPostfitParamPlots_8cpp.html#ac62f1b08f728a24d44cfc23cb0e6cd03',1,'PrettifyTitles(TH2D *Hist):&#160;GetPostfitParamPlots.cpp']]], + ['primarybincontrib_5fbin_70',['PrimaryBinContrib_Bin',['../classOscillator.html#a5b3bc3a5c63f2ebc05c961827592fca3',1,'Oscillator']]], + ['primarybincontrib_5fweight_71',['PrimaryBinContrib_Weight',['../classOscillator.html#a6bcf9bfe8d38e9767bb3707f9fe04af4',1,'Oscillator']]], + ['primarybinningtemplatename_72',['PrimaryBinningTemplateName',['../classOscillator.html#aeb6ec9d266e710bec0702d40a6e442f0',1,'Oscillator']]], + ['primaryhistkey_73',['PrimaryHistKey',['../classOscillator.html#afde6d140da0e7ff8408c6e297e385b89',1,'Oscillator']]], + ['primaryxbinedges_74',['PrimaryXBinEdges',['../classOscillator.html#a1f754af9c94d6e8ae6e93876bdb83703',1,'Oscillator']]], + ['primaryxbinevalpoints_75',['PrimaryXBinEvalPoints',['../classOscillator.html#a3beffa339394086ff08d4692cae6ba1e',1,'Oscillator']]], + ['primaryybinedges_76',['PrimaryYBinEdges',['../classOscillator.html#a4dec754478a49bbfa651ce7c64f6b274',1,'Oscillator']]], + ['primaryybinevalpoints_77',['PrimaryYBinEvalPoints',['../classOscillator.html#a530c9cb1765518de3b19735fa3c0d79d',1,'Oscillator']]], + ['print_78',['print',['../classcovarianceOsc.html#a6f098e51551a6d175cce56027ddfd31f',1,'covarianceOsc::Print()'],['../classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff',1,'manager::Print()'],['../classXSecStruct.html#a5a434f5056ff925da38b8ec93f6485aa',1,'XSecStruct::Print()'],['../classTF1__red.html#a5c49b845a1ab45ca74d6ad221416138f',1,'TF1_red::Print()'],['../classcovarianceXsec.html#ade0e8f83dcf75c50e6dad08ab6715093',1,'covarianceXsec::Print()']]], + ['printarraydetails_79',['PrintArrayDetails',['../classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc',1,'splineFDBase']]], + ['printarraydimension_80',['PrintArrayDimension',['../classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81',1,'splineFDBase']]], + ['printbinning_81',['printbinning',['../classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593',1,'splineFDBase::PrintBinning()'],['../classOscillator.html#a544697650afaa66dd0ea3ff404ca6458',1,'Oscillator::PrintBinning()']]], + ['printbox_82',['PrintBox',['../classOscillator.html#aab127a66fa98077bf2a1a178d6f216ee',1,'Oscillator']]], + ['printindivstepscale_83',['printIndivStepScale',['../classcovarianceBase.html#ad3c0dddbedcf57f06a14ec52800a087b',1,'covarianceBase']]], + ['printinitialstate_84',['printInitialState',['../classstretch.html#a9fcfc6d50759b76dfcef3b5086f4167b',1,'stretch']]], + ['printlength_85',['PrintLength',['../classcovarianceBase.html#a9f6180397b0e20f0eefe129638a1f10e',1,'covarianceBase']]], + ['printnominal_86',['printNominal',['../classcovarianceBase.html#aebd37baf2d6551863d810bea83c73020',1,'covarianceBase']]], + ['printnominalcurrprop_87',['printNominalCurrProp',['../classcovarianceBase.html#a732268706d083b6ae4495e34e703bbda',1,'covarianceBase']]], + ['printoscillatorconfig_88',['PrintOscillatorConfig',['../classOscillator.html#ae0f8a71906d31ccc4cff41430bcbf735',1,'Oscillator']]], + ['printpars_89',['printPars',['../classcovarianceBase.html#ac1ff984cbc1b7858af9dd237cc1648d3',1,'covarianceBase']]], + ['printposteriors_90',['printPosteriors',['../classsamplePDFInterface.html#adc3602610f2c93714d40771145828685',1,'samplePDFInterface']]], + ['printprogress_91',['PrintProgress',['../classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4',1,'mcmc']]], + ['printprogressbar_92',['PrintProgressBar',['../namespaceMaCh3Utils.html#a5b63b3185a04cff2ea94e18e1831ce9e',1,'MaCh3Utils']]], + ['printsampledetails_93',['PrintSampleDetails',['../classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90',1,'splineFDBase']]], + ['printtopdf_94',['printToPDF',['../classMCMCProcessor.html#ad73755714ae3d6dc951158d5513c6eee',1,'MCMCProcessor']]], + ['prior_95',['prior',['../classPSO.html#afac1699007d3838da90d466bf4b69b31',1,'PSO']]], + ['probgpu_2ecu_96',['probGpu.cu',['../probGpu_8cu.html',1,'']]], + ['problist_97',['ProbList',['../classOscillator.html#ad9b440231a49b187427519296141edd9',1,'Oscillator']]], + ['probnu_98',['ProbNu',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7',1,'Structs.h']]], + ['probstopdg_99',['ProbsToPDG',['../Structs_8h.html#a602ad839195b7087a4897e8f6b603ee6',1,'Structs.h']]], + ['probtype_100',['ProbType',['../structfdmc__base.html#a1dd06648b45adb3a7f36fdf3f5620e4e',1,'fdmc_base']]], + ['processmcmc_101',['processmcmc',['../classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1',1,'mcmc::ProcessMCMC()'],['../ProcessMCMC_8cpp.html#abc581054e1f370aa49c179affaae791a',1,'ProcessMCMC(std::string inputFile):&#160;ProcessMCMC.cpp']]], + ['processmcmc_2ecpp_102',['ProcessMCMC.cpp',['../ProcessMCMC_8cpp.html',1,'']]], + ['productionheightbinedges_103',['ProductionHeightBinEdges',['../classOscillator.html#a93b575c6ed29c79382b59e27ce978e0d',1,'Oscillator']]], + ['productionheightfilename_104',['ProductionHeightFileName',['../classOscillator.html#ab72d1515e84960103c1f54142f1f04f3',1,'Oscillator']]], + ['propagator_105',['propagator',['../classOscillator.html#a22e72322d2ee2eacb522424b819a5d9c',1,'Oscillator']]], + ['proposedpar_106',['proposedpar',['../classstretch.html#a3527e1352b2abab12acb5aaf646addfc',1,'stretch']]], + ['proposestep_107',['proposestep',['../classcovarianceBase.html#a95c7ca23995af579cfa7f199833fe24a',1,'covarianceBase::proposeStep()'],['../classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c',1,'mcmc::ProposeStep()'],['../classcovarianceOsc.html#abb8df24417b380af9b96763b8abc6b2e',1,'covarianceOsc::proposeStep()']]], + ['pso_108',['pso',['../classPSO.html#a14542152b9bd6e2e0f59c8ea1e1e890f',1,'PSO::PSO()'],['../classPSO.html',1,'PSO']]], + ['pso_2ecpp_109',['PSO.cpp',['../PSO_8cpp.html',1,'']]], + ['pso_2eh_110',['PSO.h',['../PSO_8h.html',1,'']]], + ['pvals_111',['pvals',['../classThrowParms.html#a761c7ef866ef034f452f85fb9a5f9dba',1,'ThrowParms']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 00000000..eb0ff05f --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,72 @@ +var searchData= +[ + ['rand_0',['rand',['../classThrowParms.html#a8b3eb1cc7dde3218efb198f529ecda9d',1,'ThrowParms']]], + ['random_1',['random',['../classFitterBase.html#a2d3be9c591eaf8454e2eb5b4e12c6e67',1,'FitterBase::random'],['../classstretch.html#a67a0480d7414ee187f52299e1c0ff514',1,'stretch::random']]], + ['random_5fnumber_2',['random_number',['../classcovarianceBase.html#a60dcca091a79ccddd3ad5b414ccd809b',1,'covarianceBase']]], + ['randomconfiguration_3',['RandomConfiguration',['../classcovarianceBase.html#a867bff214af25bba68f921eaea8b5cdd',1,'covarianceBase']]], + ['randomize_4',['randomize',['../classcovarianceBase.html#a3432b7a9acc1243b8bdb17ec0b40d195',1,'covarianceBase']]], + ['randparams_5',['randParams',['../classcovarianceBase.html#a705e648220c06083cd1acc5fba4f2ef7',1,'covarianceBase']]], + ['ranges_5fmax_6',['ranges_max',['../classPSO.html#a1c5454d8b4000375138447cada8a46a2',1,'PSO']]], + ['ranges_5fmin_7',['ranges_min',['../classPSO.html#ad9824964649e96ac13d89d47bd5a5174',1,'PSO']]], + ['rastriginfunc_8',['rastriginFunc',['../classPSO.html#afa217959928bddc4afe24e6292448140',1,'PSO']]], + ['ratiolabelscaling_9',['ratioLabelScaling',['../PlotLLH_8cpp.html#a152bc19a7768c2022e7195771f385521',1,'PlotLLH.cpp']]], + ['ratioplotsplit_10',['ratioPlotSplit',['../PlotLLH_8cpp.html#a45cc23dd922ece737b1306d357671417',1,'PlotLLH.cpp']]], + ['raw_11',['raw',['../classmanager.html#ab3999cc856ede72b37f68bdb28bd5520',1,'manager']]], + ['reactorprior_12',['reactorPrior',['../classcovarianceOsc.html#aab556103dbe70cb584f06c27b81f21ac',1,'covarianceOsc']]], + ['readfdfile_13',['ReadFDFile',['../classMCMCProcessor.html#ae5ea421c8dd77ceac2e748008633b573',1,'MCMCProcessor']]], + ['readinputcov_14',['ReadInputCov',['../classMCMCProcessor.html#afef48d4fccf7551dc1845f8f6c08864f',1,'MCMCProcessor']]], + ['readme_2emd_15',['README.md',['../README_8md.html',1,'']]], + ['readndfile_16',['ReadNDFile',['../classMCMCProcessor.html#a66dd0f1f88dbeb2b6a1976d42f77e136',1,'MCMCProcessor']]], + ['readoscfile_17',['ReadOSCFile',['../classMCMCProcessor.html#a3733b3b753c73f79e6846bc92c4da11b',1,'MCMCProcessor']]], + ['readparsfromfile_18',['ReadParsFromFile',['../classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3',1,'mcmc']]], + ['readsettings_19',['ReadSettings',['../GetPostfitParamPlots_8cpp.html#ad608a08048d23e05a18d2f00cb7bc8a3',1,'GetPostfitParamPlots.cpp']]], + ['readxsecfile_20',['readxsecfile',['../classMCMCProcessor.html#a2b0b4afbf45adb93357abe96d108170b',1,'MCMCProcessor::ReadXSecFile()'],['../GetPenaltyTerm_8cpp.html#ad6a031a0073fbbf3e68974be18148c0a',1,'ReadXSecFile():&#160;GetPenaltyTerm.cpp']]], + ['rebinmode_21',['RebinMode',['../classOscillator.html#abe1a1c3f7c4082bf86e7575f13517fde',1,'Oscillator']]], + ['rebinoscillogram_22',['RebinOscillogram',['../classOscillator.html#a143025170214000c5c412cecc331e56d',1,'Oscillator']]], + ['reducetf1_23',['ReduceTF1',['../classSMonolith.html#a8c71919669fbcd9a2b1cbc0d4a463b84',1,'SMonolith']]], + ['reducetspline3_24',['ReduceTSpline3',['../classSMonolith.html#a3638cd29cc7013868d75d7173a29944b',1,'SMonolith']]], + ['reference_20documentation_25',['MaCh3 Reference Documentation',['../index.html',1,'']]], + ['reject_26',['reject',['../classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a',1,'mcmc']]], + ['removefitter_27',['removefitter',['../Structs_8h.html#afdf7434ae5f5db5d9707f49fff1307da',1,'RemoveFitter(TH1D *hist, std::string name):&#160;Structs.cpp'],['../Structs_8cpp.html#afdf7434ae5f5db5d9707f49fff1307da',1,'RemoveFitter(TH1D *hist, std::string name):&#160;Structs.cpp']]], + ['removeparameters_28',['RemoveParameters',['../classMCMCProcessor.html#a9a29c1cb64589ac136f7f927cafa18aa',1,'MCMCProcessor']]], + ['requirements_29',['System Requirements',['../md__2github_2workspace_2README.html#autotoc_md15',1,'']]], + ['reservememory_30',['ReserveMemory',['../classcovarianceBase.html#a75b5553823335bb82026ff46369fb67e',1,'covarianceBase']]], + ['reset_31',['Reset',['../classOscillator.html#abb02597132a34428d02173bca66c017e',1,'Oscillator']]], + ['resethistograms_32',['resethistograms',['../classMCMCProcessor.html#a36441ec3d5b0e24e48040282ffcda3eb',1,'MCMCProcessor::ResetHistograms()'],['../classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252',1,'samplePDFFDBase::ResetHistograms()']]], + ['resetindivstepscale_33',['resetIndivStepScale',['../classcovarianceBase.html#a0993a1ea6c5b06ba834e9e70af87ee9e',1,'covarianceBase']]], + ['resetsavedparams_34',['ResetSavedParams',['../classOscillator.html#a288b3fe21c230983f8f60693ba813da0',1,'Oscillator']]], + ['resizearrays_35',['ResizeArrays',['../classOscillator.html#a3496da0a184d84043af575d5d1413c04',1,'Oscillator']]], + ['resizeoscillogram_36',['ResizeOscillogram',['../classOscillator.html#a9c0951db3050112f1bbcb7196d1760d9',1,'Oscillator']]], + ['retpointer_37',['retpointer',['../classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034',1,'splineFDBase::retPointer()'],['../classSMonolith.html#a51bbc20cfe4ebed21f6d9f91a86ea0ee',1,'SMonolith::retPointer()'],['../classOscillator.html#acab40ba6575f37546d0951510404b3c2',1,'Oscillator::retPointer()'],['../classcovarianceBase.html#abf476818e624c68494372684658081a8',1,'covarianceBase::retPointer()']]], + ['returncherenkovthresholdmomentum_38',['returncherenkovthresholdmomentum',['../Structs_8cpp.html#a6c6f918bcc5cfc261888be8d8ce2e444',1,'returnCherenkovThresholdMomentum(int PDG):&#160;Structs.cpp'],['../Structs_8h.html#a6c6f918bcc5cfc261888be8d8ce2e444',1,'returnCherenkovThresholdMomentum(int PDG):&#160;Structs.cpp']]], + ['returnfinebinningfromcoarsebinnnig_39',['ReturnFineBinningFromCoarseBinnnig',['../classOscillator.html#a29148da885454d97fdc1863b107ad157',1,'Oscillator']]], + ['returnkinematicparameter_40',['returnkinematicparameter',['../classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028',1,'samplePDFFDBase::ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0'],['../classsamplePDFFDBase.html#a025fead41716023aaf9f12b654df6a9f',1,'samplePDFFDBase::ReturnKinematicParameter(double KinematicVariable, int iSample, int iEvent)=0']]], + ['returnkinematicparameterbinning_41',['ReturnKinematicParameterBinning',['../classsamplePDFFDBase.html#abfbc5e1153ac47c81c0c9307ddbb18f0',1,'samplePDFFDBase']]], + ['returnoscillogramarray_42',['ReturnOscillogramArray',['../classOscillator.html#aaa3ce53c48d538f27b78f26f0e37793d',1,'Oscillator']]], + ['returnprimarybinning_43',['ReturnPrimaryBinning',['../classOscillator.html#ad6af342c820e878ef2194dd7c277f3fe',1,'Oscillator']]], + ['returnprimaryoscillogram_44',['ReturnPrimaryOscillogram',['../classOscillator.html#a49ac59a3d4fc48c7813c834fe67dcf7b',1,'Oscillator']]], + ['returnprob_45',['ReturnProb',['../classOscillator.html#ac8303b7bd52fffbae39da342dba85beb',1,'Oscillator']]], + ['returnproductionheightbinedges_46',['ReturnProductionHeightBinEdges',['../classOscillator.html#a607d40a5329ceef16166ee7136200b58',1,'Oscillator']]], + ['returnsecondaryoscillogram_47',['ReturnSecondaryOscillogram',['../classOscillator.html#a27b5a2541b117cef7454c81fab91bd20',1,'Oscillator']]], + ['returnsecondaryxbinedges_48',['ReturnSecondaryXBinEdges',['../classOscillator.html#a7fd6df316a5ad83e1f2fd96a9cea0c34',1,'Oscillator']]], + ['returnsecondaryybinedges_49',['ReturnSecondaryYBinEdges',['../classOscillator.html#adca90d4885ccce6db146892017fd901f',1,'Oscillator']]], + ['returnunity_50',['ReturnUnity',['../classcovarianceBase.html#a3e2c11c7c0a3557068369b30e7aac17f',1,'covarianceBase']]], + ['reweight_51',['reweight',['../classsamplePDFInterface.html#a16fa111f8562bf00bab1f29f3a09b8a1',1,'samplePDFInterface::reweight()'],['../classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce',1,'samplePDFFDBase::reweight()']]], + ['reweightprior_52',['reweightprior',['../classMCMCProcessor.html#aba9eef0afbdcff18caee2e496b6047ff',1,'MCMCProcessor::ReweightPrior()'],['../ProcessMCMC_8cpp.html#abbd13994de9f24524b06b19aa901d73f',1,'ReweightPrior(MCMCProcessor *Processor):&#160;ProcessMCMC.cpp']]], + ['rhat_53',['RHat',['../RHat_8cpp.html#ab5cfb5e8741283e8d8252aae184004e4',1,'RHat.cpp']]], + ['rhat_2ecpp_54',['RHat.cpp',['../RHat_8cpp.html',1,'']]], + ['rhatfolded_55',['RHatFolded',['../RHat_8cpp.html#a754fbe6088f05d880121693722fe6b99',1,'RHat.cpp']]], + ['rnd_56',['rnd',['../classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44',1,'samplePDFBase']]], + ['run_57',['run',['../classPSO.html#af09adc84344d8618a37c900b05fd1bd7',1,'PSO']]], + ['run2dllhscan_58',['Run2DLLHScan',['../classFitterBase.html#ab8b32ca268c20dd643eaf92dae04cd0a',1,'FitterBase']]], + ['rundiagnostic_59',['RunDiagnostic',['../RHat_8cpp.html#a4c5629fb030eb27c32cab42a42c6623b',1,'RHat.cpp']]], + ['runllhscan_60',['RunLLHScan',['../classFitterBase.html#a018e8d09a62bca19840e1321b49df2c0',1,'FitterBase']]], + ['runmcmc_61',['runmcmc',['../classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31',1,'mcmc::runMCMC()'],['../classFitterBase.html#a1a9666dc09f91af804954e8968bc7b24',1,'FitterBase::runMCMC()'],['../classLikelihoodFit.html#a97f28cf4797fd2f6e3fac267dcdafb27',1,'LikelihoodFit::runMCMC()'],['../classMinuitFit.html#a8e746fb17d4bc75a9d308398a4a0229e',1,'MinuitFit::runMCMC()'],['../classPSO.html#afcd534dbf737430c8ab1e921e8730b81',1,'PSO::runMCMC()']]], + ['runstretch_62',['runStretch',['../classstretch.html#a5f32082718c49d9337bfdc83a7630613',1,'stretch']]], + ['rw_5fetru_63',['rw_etru',['../structfdmc__base.html#aa37a1a1ba95c3cadb92fd135c845a3cf',1,'fdmc_base']]], + ['rw_5flower_5flower_5fxbinedge_64',['rw_lower_lower_xbinedge',['../structfdmc__base.html#aa7c93fcdf1ecb44af5fb60d9906884b3',1,'fdmc_base']]], + ['rw_5flower_5fxbinedge_65',['rw_lower_xbinedge',['../structfdmc__base.html#ac21589725161539db7389ca71cc9d469',1,'fdmc_base']]], + ['rw_5ftruecz_66',['rw_truecz',['../structfdmc__base.html#a4db46c63bde006773ccc31054c74d213',1,'fdmc_base']]], + ['rw_5fupper_5fupper_5fxbinedge_67',['rw_upper_upper_xbinedge',['../structfdmc__base.html#a914879f08bef429544c23de3547f5485',1,'fdmc_base']]], + ['rw_5fupper_5fxbinedge_68',['rw_upper_xbinedge',['../structfdmc__base.html#af4abad4b5dc2004648207976d38048d5',1,'fdmc_base']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..3a337e2a --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,195 @@ +var searchData= +[ + ['sameaxis_0',['sameAxis',['../PlotLLH_8cpp.html#a0c4fa08819fe8fd375f7d521dfe2b63a',1,'PlotLLH.cpp']]], + ['sample_5fllh_1',['sample_llh',['../classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091',1,'FitterBase::sample_llh'],['../classstretch.html#a1754d48c9da8f327c5d37b577d2f291c',1,'stretch::sample_llh']]], + ['sampledetid_2',['sampledetid',['../classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc',1,'samplePDFFDBase::SampleDetID'],['../structfdmc__base.html#abef728b31edac3c34700325150cba861',1,'fdmc_base::SampleDetID']]], + ['samplelabelthreshold_3',['sampleLabelThreshold',['../PlotLLH_8cpp.html#a4a39ce5b09913469be1a966a5d99a88b',1,'PlotLLH.cpp']]], + ['samplename_4',['samplename',['../classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29',1,'samplePDFBase::SampleName'],['../classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd',1,'samplePDFFDBase::samplename']]], + ['samplename_5fv_5',['SampleName_v',['../classMCMCProcessor.html#a3660e404a6631cfa913a815481730a9b',1,'MCMCProcessor']]], + ['samplenames_6',['SampleNames',['../classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208',1,'splineFDBase']]], + ['samplepdfbase_7',['samplepdfbase',['../classsamplePDFBase.html#a8220847bbd2a30347e25f7a79101c3df',1,'samplePDFBase::samplePDFBase(double pot)'],['../classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92',1,'samplePDFBase::samplePDFBase()'],['../classsamplePDFBase.html',1,'samplePDFBase']]], + ['samplepdfbase_2ecpp_8',['samplePDFBase.cpp',['../samplePDFBase_8cpp.html',1,'']]], + ['samplepdfbase_2eh_9',['samplePDFBase.h',['../samplePDFBase_8h.html',1,'']]], + ['samplepdffd_5farray_10',['samplePDFFD_array',['../classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62',1,'samplePDFFDBase']]], + ['samplepdffd_5farray_5fw2_11',['samplePDFFD_array_w2',['../classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e',1,'samplePDFFDBase']]], + ['samplepdffd_5fdata_12',['samplePDFFD_data',['../classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e',1,'samplePDFFDBase']]], + ['samplepdffdbase_13',['samplepdffdbase',['../classsamplePDFFDBase.html',1,'samplePDFFDBase'],['../classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303',1,'samplePDFFDBase::samplePDFFDBase()'],['../classsamplePDFFDBase.html#a5d92ac355b68fdf36e9b478b674eeaf4',1,'samplePDFFDBase::samplePDFFDBase(double pot, std::string mc_version, covarianceXsec *xsec_cov)']]], + ['samplepdffdbase_2ecpp_14',['samplePDFFDBase.cpp',['../samplePDFFDBase_8cpp.html',1,'']]], + ['samplepdffdbase_2eh_15',['samplePDFFDBase.h',['../samplePDFFDBase_8h.html',1,'']]], + ['samplepdfinterface_16',['samplePDFInterface',['../classsamplePDFInterface.html',1,'']]], + ['samplepdfinterface_2eh_17',['samplePDFInterface.h',['../samplePDFInterface_8h.html',1,'']]], + ['samples_18',['samples',['../classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2',1,'stretch::samples'],['../classFitterBase.html#afac0dcceb1df194159c07945e8dc0069',1,'FitterBase::samples']]], + ['samplevalues_19',['SampleValues',['../classMCMCProcessor.html#a28e89498420221149ec97c353c430bf8',1,'MCMCProcessor']]], + ['save_5fnominal_20',['save_nominal',['../classstretch.html#a39ad43665c1bf8b872e200bf984bf860',1,'stretch::save_nominal'],['../classFitterBase.html#aedd882d8e4d0da0f89cf94e3a008affe',1,'FitterBase::save_nominal']]], + ['saveadaptivetofile_21',['saveAdaptiveToFile',['../classcovarianceBase.html#ad525c041a8c4a868cf63e8b5edb95903',1,'covarianceBase']]], + ['savename_22',['SaveName',['../GetPostfitParamPlots_8cpp.html#a78b45c4d250d7b2113925577bbce2dad',1,'GetPostfitParamPlots.cpp']]], + ['saveoscillogramstofile_23',['SaveOscillogramsToFile',['../classOscillator.html#a2907b6b25705cd6d4ddbd33b233f9364',1,'Oscillator']]], + ['saveoutput_24',['SaveOutput',['../classFitterBase.html#a418f581b688f035211107ddd83168c08',1,'FitterBase']]], + ['saveparams_25',['SaveParams',['../classOscillator.html#aac14f87f9a43cb976b1c68582b956d96',1,'Oscillator']]], + ['saveresults_26',['SaveResults',['../RHat_8cpp.html#a194d97ca48b57a07a9df018a65f3166e',1,'RHat.cpp']]], + ['savesettings_27',['savesettings',['../classmanager.html#a0990af01a220479a19ead5d0231aaf94',1,'manager::SaveSettings()'],['../classFitterBase.html#a48f38bfa8996fe00d51f35b05dd16b46',1,'FitterBase::SaveSettings()']]], + ['savesplinefile_28',['SaveSplineFile',['../classSMonolith.html#ab5692081772ca14bd012eb125e2ccfd4',1,'SMonolith']]], + ['scaleuncertainty_29',['ScaleUncertainty',['../classBaseFuncPar.html#a7ee224dc59380c3063d237b190c1732c',1,'BaseFuncPar']]], + ['scandirpath_30',['scanDirPath',['../PlotLLH_8cpp.html#a450192254924dae4470465acfd87401f',1,'PlotLLH.cpp']]], + ['scandirprefix_31',['scanDirPrefix',['../PlotLLH_8cpp.html#a39a5fb670b2433471c95d766fd692b89',1,'PlotLLH.cpp']]], + ['scaninput_32',['ScanInput',['../classMCMCProcessor.html#aeff2174617268c1e55333529459bffb6',1,'MCMCProcessor']]], + ['scanmasterspline_33',['scanmasterspline',['../classSMonolith.html#ad4b810869b043cd500f6d9192c886338',1,'SMonolith::ScanMasterSpline(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline, unsigned int &amp;NEvents, int &amp;MaxPoints, short int &amp;nParams, int &amp;nSplines, unsigned int &amp;nKnots)'],['../classSMonolith.html#adddc3566b9c6b26a236d400386970383',1,'SMonolith::ScanMasterSpline(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline, unsigned int &amp;NEvents, int &amp;MaxPoints, short int &amp;nParams)']]], + ['scanparameterorder_34',['ScanParameterOrder',['../classMCMCProcessor.html#a015cf0d6925d026e5bd9d82aa31083b6',1,'MCMCProcessor']]], + ['secondarybinningtemplatename_35',['SecondaryBinningTemplateName',['../classOscillator.html#a9488f28c888577110a2f47819bfbbe68',1,'Oscillator']]], + ['secondaryhistkey_36',['SecondaryHistKey',['../classOscillator.html#a0a1d14a50549dfad09c5f01255dbfde3',1,'Oscillator']]], + ['secondaryxbinedges_37',['SecondaryXBinEdges',['../classOscillator.html#af12aac0dce1198390ceaa8a32326eb81',1,'Oscillator']]], + ['secondaryxbinevalpoints_38',['SecondaryXBinEvalPoints',['../classOscillator.html#a2ce88122d08bd8ffde4ceb84748fa92c',1,'Oscillator']]], + ['secondaryybinedges_39',['SecondaryYBinEdges',['../classOscillator.html#a9968789998df1f14ee02de9f82867911',1,'Oscillator']]], + ['secondaryybinevalpoints_40',['SecondaryYBinEvalPoints',['../classOscillator.html#ad970795233f7696499a1753981eb6086',1,'Oscillator']]], + ['segments_41',['segments',['../classSMonolith.html#a53ab5b2235fd697f27556f1a1a7a5354',1,'SMonolith']]], + ['selection_42',['selection',['../classXsecNorms4.html#a1723c13b5d04cff5ce48718cae5b6e14',1,'XsecNorms4::Selection'],['../classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed',1,'samplePDFFDBase::Selection']]], + ['selectionbounds_43',['SelectionBounds',['../classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203',1,'samplePDFFDBase']]], + ['selectionstr_44',['SelectionStr',['../classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952',1,'samplePDFFDBase']]], + ['set1dbinning_45',['set1dbinning',['../classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7',1,'samplePDFBase::set1DBinning(int nbins, double *boundaries)'],['../classsamplePDFBase.html#a04e53e3aec02d69a7e59b1d9d2d1414c',1,'samplePDFBase::set1DBinning(int nbins, double low, double high)'],['../classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67',1,'samplePDFFDBase::set1DBinning(int nbins, double *boundaries)'],['../classsamplePDFFDBase.html#a9e9a67249e22644076a2424ccba7b725',1,'samplePDFFDBase::set1DBinning(int nbins, double low, double high)'],['../classsamplePDFFDBase.html#a07ec15fdb35f1f32511d635b9796de79',1,'samplePDFFDBase::set1DBinning(std::vector&lt; double &gt; &amp;XVec)']]], + ['set2dbinning_46',['set2dbinning',['../classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85',1,'samplePDFBase::set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)'],['../classsamplePDFBase.html#a5ba2bf80cd619bc219e9817fa429bdc2',1,'samplePDFBase::set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)'],['../classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551',1,'samplePDFFDBase::set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)'],['../classsamplePDFFDBase.html#adbc16c33bf6a6e870e3c0cb4f87043ef',1,'samplePDFFDBase::set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)'],['../classsamplePDFFDBase.html#a8b30b05e75954450b22f71ca5864f5c7',1,'samplePDFFDBase::set2DBinning(std::vector&lt; double &gt; &amp;XVec, std::vector&lt; double &gt; &amp;YVec)']]], + ['set_5fbest_5fparticle_47',['set_best_particle',['../classPSO.html#ab7aad43d851d0dd8e6a8ea732ad1fa12',1,'PSO']]], + ['set_5fpersonal_5fbest_5fposition_48',['set_personal_best_position',['../classparticle.html#a6e850e2803bff20ebec0038a87429211',1,'particle']]], + ['set_5fpersonal_5fbest_5fvalue_49',['set_personal_best_value',['../classparticle.html#a96e44e615e56a271679b9b1c5e6a6721',1,'particle']]], + ['set_5fplot_5fstyle_50',['set_plot_style',['../PlotLLH_8cpp.html#a2a8e7b0b123a8fa135a9c670bcdfe44c',1,'PlotLLH.cpp']]], + ['set_5fposition_51',['set_position',['../classparticle.html#af0b46439a6cba18c4a7f59a26ea405bf',1,'particle']]], + ['set_5fvalue_52',['set_value',['../classparticle.html#ab0a15a079761b5a4bb1c4bb4ba642411',1,'particle']]], + ['set_5fvelocity_53',['set_velocity',['../classparticle.html#ad0f119b37e53ba1dfe4345cc0ae3fc8a',1,'particle']]], + ['seta_54',['setA',['../classstretch.html#af62d72a369c9035c27f6b1eda04d7d1e',1,'stretch']]], + ['setadaptivethresholds_55',['setAdaptiveThresholds',['../classcovarianceBase.html#a7e2226411d8f584918980d09b9136175',1,'covarianceBase']]], + ['setbranches_56',['setBranches',['../classcovarianceBase.html#a8f1a4cf916aa5dae259c3e34e06aa2e2',1,'covarianceBase']]], + ['setchainlength_57',['setchainlength',['../classmcmc.html#af549f9b0ab4276710bc0d2987ad825a9',1,'mcmc::setChainLength()'],['../classstretch.html#a0c862a7bcd8af16a523dba58999e9ede',1,'stretch::setChainLength()']]], + ['setcovmatrix_58',['setCovMatrix',['../classcovarianceBase.html#a5f28f7294d25cca6334f7033a63596b9',1,'covarianceBase']]], + ['setcredibleinsigmas_59',['SetCredibleInSigmas',['../classMCMCProcessor.html#af6220955fdc72770d6afba01a5020e0f',1,'MCMCProcessor']]], + ['setcredibleintervals_60',['SetCredibleIntervals',['../classMCMCProcessor.html#a58f52da54e000b507744bec5880f6179',1,'MCMCProcessor']]], + ['setcredibleintervalscolours_61',['SetCredibleIntervalsColours',['../classMCMCProcessor.html#ac795824733393f9599c9cf0e21627b80',1,'MCMCProcessor']]], + ['setcredibleregioncolor_62',['SetCredibleRegionColor',['../classMCMCProcessor.html#a7d969b382bc5eb8dea92eb3a46d80457',1,'MCMCProcessor']]], + ['setcredibleregions_63',['SetCredibleRegions',['../classMCMCProcessor.html#a31837b3f19d69004d9ced2ac6c775e10',1,'MCMCProcessor']]], + ['setcredibleregionstyle_64',['SetCredibleRegionStyle',['../classMCMCProcessor.html#aecacea281d7e3bd0c020416903cfaa16',1,'MCMCProcessor']]], + ['setevallikelihood_65',['setEvalLikelihood',['../classcovarianceBase.html#a99aad06ba78ae55fff52c7e1869520f0',1,'covarianceBase']]], + ['setexcludednames_66',['SetExcludedNames',['../classMCMCProcessor.html#a09a6fa6cefcb20c00bee22c1dc5718c5',1,'MCMCProcessor']]], + ['setexcludedtypes_67',['SetExcludedTypes',['../classMCMCProcessor.html#a4364a8ab084906c8925c9db9dc110485',1,'MCMCProcessor']]], + ['setextrabranches_68',['setExtraBranches',['../classcovarianceOsc.html#a7af8971978ed3d76fe10b79667f6b4bd',1,'covarianceOsc']]], + ['setfancynames_69',['SetFancyNames',['../classMCMCProcessor.html#a7f61cf0a51670f24f16dd7d77b7f5ae4',1,'MCMCProcessor']]], + ['setfillhistograms_70',['SetFillHistograms',['../classOscillator.html#abb78c2da195b908c3807c7fd60daa0c9',1,'Oscillator']]], + ['setflipbeta_71',['setFlipBeta',['../classcovarianceOsc.html#a440aaba5f6c2c5fd1eda8fc92031a9a1',1,'covarianceOsc']]], + ['setflipdeltam23_72',['setFlipDeltaM23',['../classcovarianceOsc.html#aad7ee2764232f61af5a6deab075ee142',1,'covarianceOsc']]], + ['setfluxonlyparameters_73',['setFluxOnlyParameters',['../classcovarianceXsec.html#a01820560f38e287d382d8788ad5a6fd4',1,'covarianceXsec']]], + ['setfunc_74',['setfunc',['../classTSpline3__red.html#a789a27762c70468a17c77dd6de42efcb',1,'TSpline3_red::SetFunc()'],['../classTF1__red.html#aaa7b0ac2a485d07b5010e92bd42a5853',1,'TF1_red::SetFunc()'],['../classXSecStruct.html#a794cf6aa9ded997a4a938673119f0e66',1,'XSecStruct::SetFunc()']]], + ['setgpufit_75',['setGpuFit',['../classstretch.html#a13138997e14c00c56a8af51729b3ade3',1,'stretch']]], + ['setindivstepscale_76',['setindivstepscale',['../classcovarianceBase.html#a706b62253b0c42461f94dd5bdf7bf2e7',1,'covarianceBase::setIndivStepScale(std::vector&lt; double &gt; stepscale)'],['../classcovarianceBase.html#ad650c2641b5e5ec56fde1af5ef322e4b',1,'covarianceBase::setIndivStepScale(int ParameterIndex, double StepScale)']]], + ['setinitialstepnumber_77',['setInitialStepNumber',['../classmcmc.html#a7129ef21a4b2abab4bf142653d558535',1,'mcmc']]], + ['setmach3loggerformat_78',['SetMaCh3LoggerFormat',['../MaCh3Logger_8h.html#aa603c55ea73cd86d1994901227883e1e',1,'MaCh3Logger.h']]], + ['setmcmcbranches_79',['setMCMCBranches',['../classsamplePDFBase.html#a552c3759ff50549d3ba813d94e58b636',1,'samplePDFBase']]], + ['setmcthrow_80',['setMCthrow',['../classsamplePDFBase.html#aa4e659c358b432ef07b4ddd7d599593d',1,'samplePDFBase']]], + ['setname_81',['setName',['../classcovarianceBase.html#a609455bfeaf5cd0a9682a7ee4268a169',1,'covarianceBase']]], + ['setnbatches_82',['SetnBatches',['../classMCMCProcessor.html#a5b13f1879f84d13b7d139432a9b993c6',1,'MCMCProcessor']]], + ['setnlags_83',['SetnLags',['../classMCMCProcessor.html#a173d37d528ff201e66db8f92c156e3bb',1,'MCMCProcessor']]], + ['setnumberofsteps_84',['setNumberOfSteps',['../classcovarianceBase.html#a1e5aec8c073799ac9d40e65c0996b2c1',1,'covarianceBase']]], + ['setoscillator_85',['SetOscillator',['../classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10',1,'samplePDFFDBase']]], + ['setoscillatorconfig_86',['SetOscillatorConfig',['../classOscillator.html#a1c62a21da34f5f7faabe146024020cdb',1,'Oscillator']]], + ['setosconly_87',['setOscOnly',['../classstretch.html#afca2346083510dfd508d3d4ac8a2c341',1,'stretch']]], + ['setoutputsuffix_88',['SetOutputSuffix',['../classMCMCProcessor.html#a2f4bf14c95b830c457a73be5399403ad',1,'MCMCProcessor']]], + ['setpar_89',['setPar',['../classcovarianceBase.html#aae3b226cbd6a4c03f291620ebd018bc9',1,'covarianceBase']]], + ['setparameter_90',['SetParameter',['../classTF1__red.html#ae8d4053f0492305b0e85db0972a06f96',1,'TF1_red']]], + ['setparameters_91',['setParameters',['../classcovarianceBase.html#a3a33714da2415ef1d670573aa98f5551',1,'covarianceBase']]], + ['setparameters_5fpca_92',['setParameters_PCA',['../classcovarianceBase.html#af1759a59096c55711908bdaad51f1fd1',1,'covarianceBase']]], + ['setparcurr_5fpca_93',['setParCurr_PCA',['../classcovarianceBase.html#a593457c3ae0a2d1892846b484833274f',1,'covarianceBase']]], + ['setparcurrprop_94',['setParCurrProp',['../classcovarianceBase.html#a14e381a0af219c8bd2b13c6b1eb355a9',1,'covarianceBase']]], + ['setparname_95',['setParName',['../classcovarianceBase.html#acea84497d008ea2b1d1a4d956a64a890',1,'covarianceBase']]], + ['setparprop_96',['setParProp',['../classcovarianceBase.html#a19c4b271874224da9188623b249a669c',1,'covarianceBase']]], + ['setparprop_5fpca_97',['setParProp_PCA',['../classcovarianceBase.html#a7c9b2ae1b4144448385b47a576e4d07d',1,'covarianceBase']]], + ['setplotbinvalue_98',['SetPlotBinValue',['../classMCMCProcessor.html#aed120fafdfe97615f4c2a30aedde03dd',1,'MCMCProcessor']]], + ['setploterrorforflatprior_99',['SetPlotErrorForFlatPrior',['../classMCMCProcessor.html#adbe0ec06ce30447cb1c03a961364b929',1,'MCMCProcessor']]], + ['setplotrelativetoprior_100',['SetPlotRelativeToPrior',['../classMCMCProcessor.html#a6ea549289949ac19d2fc768d82c8f1c9',1,'MCMCProcessor']]], + ['setpost2dplotthreshold_101',['SetPost2DPlotThreshold',['../classMCMCProcessor.html#ab605f4d7bf4e2b24b4c0b1c5853b479f',1,'MCMCProcessor']]], + ['setposterior1dcut_102',['SetPosterior1DCut',['../classMCMCProcessor.html#a641da7f5e018d48d480638fbad6406a4',1,'MCMCProcessor']]], + ['setprintlength_103',['setPrintLength',['../classcovarianceBase.html#a340fbee1b5d97897431f2b0222f85337',1,'covarianceBase']]], + ['setprinttopdf_104',['SetPrintToPDF',['../classMCMCProcessor.html#a9db87211d9f066011daed18af7f4631e',1,'MCMCProcessor']]], + ['setproductionheightarray_105',['SetProductionHeightArray',['../classOscillator.html#ae63a18646bdc533c04d16e4c2512ba5f',1,'Oscillator']]], + ['setproductionheightbinedges_106',['SetProductionHeightBinEdges',['../classOscillator.html#af1b15d3a1e3920d4321fc5ecba2589ad',1,'Oscillator']]], + ['setseed_107',['SetSeed',['../classThrowParms.html#a3582e901ae8c3e45585c84f8e4c95c5b',1,'ThrowParms']]], + ['setsingleparameter_108',['setSingleParameter',['../classcovarianceBase.html#a978483dabf04239f1c475516b5cdab7f',1,'covarianceBase']]], + ['setsize_109',['SetSize',['../classTF1__red.html#a00ed2b99d9fe75bfb822ed7470fb5ae8',1,'TF1_red']]], + ['setsmoothing_110',['SetSmoothing',['../classMCMCProcessor.html#a4bec41cdc9af977a51b269e2a07fe961',1,'MCMCProcessor']]], + ['setsplinenumber_111',['SetSplineNumber',['../classXSecStruct.html#a76881a9b8931d8a5b092b62795b7b663',1,'XSecStruct']]], + ['setsplinepointers_112',['setSplinePointers',['../classSMonolith.html#a40f6b9256a18fa59009e5961aec776ff',1,'SMonolith']]], + ['setstepcut_113',['setstepcut',['../classMCMCProcessor.html#a69cc9eeaf22bfeb08b1172ec723db605',1,'MCMCProcessor::SetStepCut(std::string Cuts)'],['../classMCMCProcessor.html#a16f653dcb6358f2a8e393e3946a7e6d2',1,'MCMCProcessor::SetStepCut(const int Cuts)']]], + ['setstepscale_114',['setStepScale',['../classcovarianceBase.html#a1c78ffa8fed878eedba686a9d9ec44a9',1,'covarianceBase']]], + ['setteststatistic_115',['SetTestStatistic',['../classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97',1,'samplePDFBase']]], + ['setth1style_116',['setTH1Style',['../GetPostfitParamPlots_8cpp.html#af8675c0ad8ab5f45bf66a34642c0cbf2',1,'GetPostfitParamPlots.cpp']]], + ['setthrowmatrix_117',['setThrowMatrix',['../classcovarianceBase.html#af30ca7861452e1446e55700f4b49b608',1,'covarianceBase']]], + ['settingssaved_118',['SettingsSaved',['../classFitterBase.html#a588678c71d816f48ba3c140543dbe916',1,'FitterBase']]], + ['setuncertainty_119',['SetUncertainty',['../classBaseFuncPar.html#a114a593572870ff1db906046d6d555f8',1,'BaseFuncPar']]], + ['setup_120',['setup',['../classBaseFuncPar.html#a2b2eebac000335b5f9b91ecb4089bf19',1,'BaseFuncPar']]], + ['setupfuncparameters_121',['SetupFuncParameters',['../classsamplePDFFDBase.html#a9c9de54c4228dc54aa1b538ae10c558b',1,'samplePDFFDBase']]], + ['setupnormparameters_122',['SetupNormParameters',['../classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa',1,'samplePDFFDBase']]], + ['setupnormpars_123',['SetupNormPars',['../classcovarianceXsec.html#ae5b060ac997dfd8ffad0a5acdf871b8c',1,'covarianceXsec']]], + ['setuposccalc_124',['SetupOscCalc',['../classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad',1,'samplePDFFDBase']]], + ['setupoutput_125',['SetupOutput',['../classMCMCProcessor.html#aa4761be1345f1be3defe162b278a9d8e',1,'MCMCProcessor']]], + ['setupsplines_126',['setupsplines',['../classsplineBase.html#a46a6327b716e8f69aa8bd5f216e2eeee',1,'splineBase::setupSplines()'],['../classsplineInterface.html#a83f15de1b33f89e659c06120234b14b7',1,'splineInterface::setupSplines()'],['../classsamplePDFFDBase.html#aa145eb7b1e14c10339c288959dad3d65',1,'samplePDFFDBase::setupSplines()'],['../classsplineFDBase.html#a281be56a824e5057044e4ab1b073bc9d',1,'splineFDBase::SetupSplines()'],['../classsplineFDBase.html#a91521064517b5e4f0232570e6746bdf7',1,'splineFDBase::SetupSplines(int BinningOpt)']]], + ['setupweightpointers_127',['SetupWeightPointers',['../classsamplePDFFDBase.html#af58169bdc4b4a7e98c1f315dac96418e',1,'samplePDFFDBase']]], + ['setxseccov_128',['SetXsecCov',['../classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160',1,'samplePDFFDBase']]], + ['setxseconlyparameters_129',['setXsecOnlyParameters',['../classcovarianceXsec.html#afc512105a141dcf30bc5f478970aafa2',1,'covarianceXsec']]], + ['setxsecparnames_130',['setXsecParNames',['../classcovarianceXsec.html#a1a8b7172077a72a532bc77a0da4ac56c',1,'covarianceXsec']]], + ['shiftfunctors_2eh_131',['ShiftFunctors.h',['../ShiftFunctors_8h.html',1,'']]], + ['signal_132',['signal',['../structfdmc__base.html#ae94a6b0203acb2effc73bd37d799d4b3',1,'fdmc_base']]], + ['size_133',['size',['../GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82',1,'size:&#160;GetPenaltyTerm.cpp'],['../classcovarianceBase.html#a7d3922fb843ba65990c44cac324b9ccb',1,'covarianceBase::size']]], + ['skdet_5fpointer_134',['skdet_pointer',['../structfdmc__base.html#a1222d10ff4ba2f6a2b2018a81c8ffdae',1,'fdmc_base']]], + ['skescale_135',['SKEScale',['../classSKEScale.html',1,'']]], + ['smonolith_136',['smonolith',['../classSMonolith.html',1,'SMonolith'],['../classSMonolith.html#ac622c355f630c12438b547bbb9fe212c',1,'SMonolith::SMonolith(std::string FileName)'],['../classSMonolith.html#a59a63f3b0eb101f871e84d0730960b67',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a59ef52d97c185955534e8af69ba31f29',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TF1 * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#add144325f3dbacbd11d1596cf1639b17',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a20ae764ad15b91319da76c8eb8ba73d9',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TSpline3 * &gt; &gt; &amp;MasterSpline)']]], + ['spline_137',['spline',['../classspline.html',1,'spline'],['../classspline.html#a7c7a04cae16a741ee6b2fb8661b5deaf',1,'spline::spline()']]], + ['spline_2eh_138',['spline.h',['../spline_8h.html',1,'']]], + ['splinebase_139',['splinebase',['../classsplineBase.html',1,'splineBase'],['../classsplineBase.html#afcf238a7e106ddd4c1a03042e2df188e',1,'splineBase::splineBase()']]], + ['splinebase_2ecpp_140',['splineBase.cpp',['../splineBase_8cpp.html',1,'']]], + ['splinebase_2eh_141',['splineBase.h',['../splineBase_8h.html',1,'']]], + ['splinebinning_142',['SplineBinning',['../classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70',1,'splineFDBase']]], + ['splinefdbase_143',['splinefdbase',['../classsplineFDBase.html',1,'splineFDBase'],['../classsplineFDBase.html#a089883fce1a3f4180e3156215fb9c38a',1,'splineFDBase::splineFDBase()']]], + ['splinefdbase_2ecpp_144',['splineFDBase.cpp',['../splineFDBase_8cpp.html',1,'']]], + ['splinefdbase_2eh_145',['splineFDBase.h',['../splineFDBase_8h.html',1,'']]], + ['splinefile_146',['splinefile',['../classsplineBase.html#a7aa7a4675807a004408113a0c2bd2e95',1,'splineBase::splinefile'],['../structfdmc__base.html#afbf315b6d43b5e0de283fc9df180068f',1,'fdmc_base::splineFile'],['../classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6',1,'samplePDFFDBase::splineFile']]], + ['splinefileparprefixnames_147',['SplineFileParPrefixNames',['../classsplineFDBase.html#a5619363447e607cd835c46d601b10675',1,'splineFDBase']]], + ['splineinfoarray_148',['SplineInfoArray',['../classSMonolith.html#a50a4ad58aebffdb820626f855bae6821',1,'SMonolith']]], + ['splineinterface_149',['splineInterface',['../classsplineInterface.html',1,'']]], + ['splineinterface_2eh_150',['splineInterface.h',['../splineInterface_8h.html',1,'']]], + ['splineinterpolation_151',['SplineInterpolation',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4',1,'Structs.h']]], + ['splineinterpolation_5ftostring_152',['SplineInterpolation_ToString',['../Structs_8h.html#a268ee830ae5952cc560dc518fcd52486',1,'Structs.h']]], + ['splinemodevecs_153',['SplineModeVecs',['../classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b',1,'splineFDBase']]], + ['splinemonolith_2ecpp_154',['SplineMonolith.cpp',['../SplineMonolith_8cpp.html',1,'']]], + ['splinemonolith_2eh_155',['SplineMonolith.h',['../SplineMonolith_8h.html',1,'']]], + ['splineparsindex_156',['SplineParsIndex',['../classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d',1,'splineFDBase']]], + ['splineparspointer_157',['splineparspointer',['../structFastSplineInfo.html#a768e33415a2a6b50e9019d6a74fa5509',1,'FastSplineInfo::splineParsPointer'],['../classSMonolith.html#afa782652b0b3da923c5b20bb1319aadd',1,'SMonolith::splineParsPointer']]], + ['splinesegmentcoeffs_158',['SplineSegmentCoeffs',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8',1,'splineFDBase']]], + ['splinevec_5fmonolith_159',['splinevec_Monolith',['../classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d',1,'splineFDBase']]], + ['splitbysample_160',['splitBySample',['../PlotLLH_8cpp.html#ad9712ac69381fb82f518409a0b617fb0',1,'PlotLLH.cpp']]], + ['src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_161',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['standarddeviation_162',['StandardDeviation',['../RHat_8cpp.html#a5bdfaf60cce582e30db6bd3001de9935',1,'RHat.cpp']]], + ['standarddeviationfolded_163',['StandardDeviationFolded',['../RHat_8cpp.html#a85509f675b977490fa59bdf037d38ba2',1,'RHat.cpp']]], + ['standarddeviationglobal_164',['StandardDeviationGlobal',['../RHat_8cpp.html#a64de0e32daa60ec4f40e0e741d927334',1,'RHat.cpp']]], + ['standarddeviationglobalfolded_165',['StandardDeviationGlobalFolded',['../RHat_8cpp.html#a255f6a2b0ce0d9e0aee2c06645008b0c',1,'RHat.cpp']]], + ['stdnormrand_166',['StdNormRand',['../classThrowParms.html#af90305cda175280adc36cf76d9ac2148',1,'ThrowParms']]], + ['step_167',['step',['../classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c',1,'FitterBase::step'],['../classstretch.html#ad48ef9156f514130a9433bf53086853d',1,'stretch::step']]], + ['stepclock_168',['stepClock',['../classFitterBase.html#a1e47b6114574f59c10ad01567ae92198',1,'FitterBase']]], + ['stepcut_169',['StepCut',['../classMCMCProcessor.html#a576f0eb874afaf7e31ff5c86b9e5b8f9',1,'MCMCProcessor']]], + ['stepnumber_170',['StepNumber',['../classMCMCProcessor.html#a07549f3b67ca5409218d80c679f6e69e',1,'MCMCProcessor']]], + ['stepstart_171',['stepStart',['../classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4',1,'mcmc']]], + ['steptime_172',['stepTime',['../classFitterBase.html#a8354e9a7a9cc534277ff76ab37c9a763',1,'FitterBase']]], + ['storedselection_173',['StoredSelection',['../classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3',1,'samplePDFFDBase']]], + ['str2int_174',['str2int',['../Structs_8h.html#ab29c200876205c3add1d71f053195658',1,'Structs.h']]], + ['stretch_175',['stretch',['../classstretch.html#adf2d2378f0ecbec1ae19be241daf8932',1,'stretch::stretch(const char *name=&quot;output.root&quot;, int nwalkers=100, bool verbose=false)'],['../classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8',1,'stretch::stretch(bool verbose=false)'],['../classstretch.html',1,'stretch']]], + ['stretch_2ecpp_176',['stretch.cpp',['../stretch_8cpp.html',1,'']]], + ['stretch_2eh_177',['stretch.h',['../stretch_8h.html',1,'']]], + ['stringtoyaml_178',['stringtoyaml',['../YamlHelper_8h.html#a3ff1f2154c0a70ad5a145fcc5891e7ec',1,'STRINGtoYAML(const std::string &amp;yaml_string):&#160;YamlHelper.cpp'],['../YamlHelper_8cpp.html#a3ff1f2154c0a70ad5a145fcc5891e7ec',1,'STRINGtoYAML(const std::string &amp;yaml_string):&#160;YamlHelper.cpp']]], + ['stripduplicatedmodes_179',['StripDuplicatedModes',['../classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d',1,'splineFDBase']]], + ['structs_2ecpp_180',['Structs.cpp',['../Structs_8cpp.html',1,'']]], + ['structs_2eh_181',['Structs.h',['../Structs_8h.html',1,'']]], + ['swarmiterate_182',['swarmIterate',['../classPSO.html#af7b07ec9013e1d6859d7ffa8e54086c7',1,'PSO']]], + ['switchtocudaprobtype_183',['SwitchToCUDAProbType',['../classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387',1,'samplePDFFDBase']]], + ['synchronisememtransfer_184',['SynchroniseMemTransfer',['../classSMonolith.html#a68e18d73ed1ac524ceaea79d2a5460ce',1,'SMonolith']]], + ['syst_5fllh_185',['syst_llh',['../classstretch.html#a694a121d39b68416211df1e9e8292ebe',1,'stretch::syst_llh'],['../classFitterBase.html#ac948767a356e169c719a88315f8d1f47',1,'FitterBase::syst_llh']]], + ['syst_5fpos_186',['syst_pos',['../classBaseFuncPar.html#a2f57b0db18e57419c89efc823d40d27c',1,'BaseFuncPar']]], + ['system_187',['system',['../classPSO.html#ac17850adb6f660f8aded97456f52b140',1,'PSO']]], + ['system_20requirements_188',['System Requirements',['../md__2github_2workspace_2README.html#autotoc_md15',1,'']]], + ['systematics_189',['systematics',['../classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf',1,'FitterBase::systematics'],['../classstretch.html#ab7122273c4f81fe47dac2a6f18355e06',1,'stretch::systematics']]], + ['systname_5fv_190',['SystName_v',['../classMCMCProcessor.html#acb1871575fdd3ae156aed4bf7c7a0a73',1,'MCMCProcessor']]], + ['systvalues_191',['SystValues',['../classMCMCProcessor.html#a4eb2748c81b0aef9bd7e14785559e301',1,'MCMCProcessor']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 00000000..579872f0 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,55 @@ +var searchData= +[ + ['t_5fe_0',['t_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ae7563a0f735ed6772bd147a4b9ccd09a',1,'Structs.h']]], + ['t_5fm_1',['t_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af33cf18d3fc2d7dd38a4c6c4d98618a0',1,'Structs.h']]], + ['t_5ft_2',['t_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a6a6edd14e02d60d2f3c232609ae8e2b2',1,'Structs.h']]], + ['target_3',['Target',['../structfdmc__base.html#aff6f0d938f770de0c192d256e8da8dce',1,'fdmc_base']]], + ['targetcompression_4',['targetCompression',['../CombineMaCh3Chains_8cpp.html#a8ea7adaa7c7b0783e5562e9e8673fbe1',1,'CombineMaCh3Chains.cpp']]], + ['targetmat_5',['TargetMat',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580',1,'Structs.h']]], + ['targetmat_5ftostring_6',['TargetMat_ToString',['../Structs_8h.html#aee0f12a1dc049fc86a9648fcca383ccb',1,'Structs.h']]], + ['targets_7',['targets',['../classXsecNorms4.html#a0f6b21994200f446f21c42ec1cebf9bb',1,'XsecNorms4']]], + ['templateinputfilename_8',['TemplateInputFileName',['../classOscillator.html#a9799d325b7b716ae42aa65a7be383b73',1,'Oscillator']]], + ['terminaltostring_9',['TerminalToString',['../namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c',1,'MaCh3Utils']]], + ['test_10',['test',['../classEnergyScale.html#a273f63de62586b798ee17592d5776257',1,'EnergyScale']]], + ['teststatistic_11',['TestStatistic',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67',1,'Structs.h']]], + ['teststatistic_5ftostring_12',['TestStatistic_ToString',['../Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726',1,'Structs.h']]], + ['tf1_5fred_13',['tf1_red',['../classTF1__red.html',1,'TF1_red'],['../classTF1__red.html#a503700d13da3bc04710c6a52e14877e6',1,'TF1_red::TF1_red()'],['../classTF1__red.html#a758afb03ee51495a0d1e4ebc15f5edba',1,'TF1_red::TF1_red(__int__ nSize, __float__ *Array, __int__ Parameter)'],['../classTF1__red.html#ad2d487b894c7716e00d6381448c0b4ff',1,'TF1_red::TF1_red(TF1 *&amp;Function, int Param=-1)']]], + ['three_5fvector_5faddition_14',['three_vector_addition',['../classPSO.html#a440e0cb32000cf9c5d2170d0c2d08dc2',1,'PSO']]], + ['throwmatrix_15',['throwMatrix',['../classcovarianceBase.html#a6cb3d0b4096fbb55b040f70cd5b6e32b',1,'covarianceBase']]], + ['throwmatrix_5fcholdecomp_16',['throwMatrix_CholDecomp',['../classcovarianceBase.html#ab95f5e066c2dfb1d20d120bc6c85dda2',1,'covarianceBase']]], + ['throwmatrixcholdecomp_17',['throwMatrixCholDecomp',['../classcovarianceBase.html#aca17e48a5fa8e353317d58c205fb89df',1,'covarianceBase']]], + ['thrownominal_18',['throwNominal',['../classcovarianceBase.html#ac179636033de2746f634ad2cd1985d57',1,'covarianceBase']]], + ['throwparameters_19',['throwParameters',['../classcovarianceBase.html#aa5d82895bcbae7773b6813c02cf2f485',1,'covarianceBase']]], + ['throwparcurr_20',['throwParCurr',['../classcovarianceBase.html#a4e92a9db846d956473efbe5712c71d31',1,'covarianceBase']]], + ['throwparms_21',['throwparms',['../classThrowParms.html',1,'ThrowParms'],['../classThrowParms.html#aa5b7b7b75d35e87a6fe467cff25db73d',1,'ThrowParms::ThrowParms()']]], + ['throwparms_2ecpp_22',['ThrowParms.cpp',['../ThrowParms_8cpp.html',1,'']]], + ['throwparms_2eh_23',['ThrowParms.h',['../ThrowParms_8h.html',1,'']]], + ['throwparprop_24',['throwParProp',['../classcovarianceBase.html#af4d127ff4761379dd11843523835c4dc',1,'covarianceBase']]], + ['throwset_25',['ThrowSet',['../classThrowParms.html#a436e39062e287f2a813b0d1ae3d72712',1,'ThrowParms']]], + ['titlenames_26',['TitleNames',['../ProcessMCMC_8cpp.html#a2bff863f66d44b865ce21762802730c8',1,'ProcessMCMC.cpp']]], + ['tmacrotostring_27',['tmacrotostring',['../YamlHelper_8h.html#a8f274e653fbd3e5451faf71549318c24',1,'TMacroToString(const TMacro &amp;macro):&#160;YamlHelper.cpp'],['../YamlHelper_8cpp.html#a8f274e653fbd3e5451faf71549318c24',1,'TMacroToString(const TMacro &amp;macro):&#160;YamlHelper.cpp']]], + ['tmacrotoyaml_28',['tmacrotoyaml',['../YamlHelper_8h.html#a7e0ade2fd295a927676c243c97d0aa64',1,'TMacroToYAML(const TMacro &amp;macro):&#160;YamlHelper.cpp'],['../YamlHelper_8cpp.html#a7e0ade2fd295a927676c243c97d0aa64',1,'TMacroToYAML(const TMacro &amp;macro):&#160;YamlHelper.cpp']]], + ['tmatrixintoth2d_29',['tmatrixintoth2d',['../ProcessMCMC_8cpp.html#abe5fa966ccba5ad5b7f7efea786894c3',1,'TMatrixIntoTH2D():&#160;ProcessMCMC.cpp'],['../namespaceMaCh3Utils.html#a9b4fef8344d315068805fab0875ee486',1,'MaCh3Utils::TMatrixIntoTH2D()']]], + ['to_20compile_30',['How to Compile',['../md__2github_2workspace_2README.html#autotoc_md8',1,'']]], + ['to_20contribute_20code_20to_20mach3_31',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['to_20use_32',['How To Use',['../md__2github_2workspace_2README.html#autotoc_md16',1,'']]], + ['togglefixallparameters_33',['toggleFixAllParameters',['../classcovarianceBase.html#adb2d1a39cd2bd160257bc9e34e32df4c',1,'covarianceBase']]], + ['togglefixparameter_34',['toggleFixParameter',['../classcovarianceBase.html#aafbbdc05b87df882dc341e20fe870603',1,'covarianceBase']]], + ['total_5fsteps_35',['total_steps',['../classcovarianceBase.html#afa85fb6668931ef7494c4af511a7111c',1,'covarianceBase']]], + ['total_5fw_36',['total_w',['../structfdmc__base.html#a4c4783b6eb014adbaf180f10e94e7d96',1,'fdmc_base']]], + ['total_5fweight_5fpointers_37',['total_weight_pointers',['../structfdmc__base.html#a4a17a196cb46bc85da5e7865b83d0f93',1,'fdmc_base']]], + ['totalonsplitplots_38',['totalOnSplitPlots',['../PlotLLH_8cpp.html#a6446498097144fc5f704c241f009d44d',1,'PlotLLH.cpp']]], + ['transfermat_39',['TransferMat',['../classcovarianceBase.html#a5e94f6afb5077daab30815b3ee5269c1',1,'covarianceBase']]], + ['transfermatt_40',['TransferMatT',['../classcovarianceBase.html#a5c1a531cb84c2b7e320f6c3f8f2e3126',1,'covarianceBase']]], + ['transfertomonolith_41',['TransferToMonolith',['../classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8',1,'splineFDBase']]], + ['transfertoparam_42',['TransferToParam',['../classcovarianceBase.html#a65ac4956a782b01768f445732522a450',1,'covarianceBase']]], + ['transfertopca_43',['TransferToPCA',['../classcovarianceBase.html#a651f5ecd8973918d5683606a607fa88c',1,'covarianceBase']]], + ['truncated_5fspline_44',['truncated_spline',['../classTruncated__Spline.html',1,'Truncated_Spline'],['../classTruncated__Spline.html#ae40da5403298aacb6b45cd7690b61420',1,'Truncated_Spline::Truncated_Spline()'],['../classTruncated__Spline.html#a83c0431fb5f7a27a08ccc358b35f0f99',1,'Truncated_Spline::Truncated_Spline(TSpline3 *&amp;spline, int Param=-1)']]], + ['tspline3_5fred_45',['tspline3_red',['../classTSpline3__red.html#ae76e72436b20a59ee33eb1d41dbe59eb',1,'TSpline3_red::TSpline3_red()'],['../classTSpline3__red.html#a46bab297c2277560912b90db4e074200',1,'TSpline3_red::TSpline3_red(TSpline3 *&amp;spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)'],['../classTSpline3__red.html',1,'TSpline3_red'],['../classTSpline3__red.html#a23a318e0b3c3db5a3db83d8caa3e5cfc',1,'TSpline3_red::TSpline3_red()']]], + ['tune_46',['tune',['../classtune.html#afdd12b403a8c6535a58c5499d15bf354',1,'tune::tune()'],['../classtune.html',1,'tune']]], + ['tune_2ecpp_47',['tune.cpp',['../tune_8cpp.html',1,'']]], + ['tune_2eh_48',['tune.h',['../tune_8h.html',1,'']]], + ['tune_5ffile_49',['tune_file',['../classtune.html#a264f9e35481137d8f4ce75bc517578b8',1,'tune']]], + ['tune_5fpars_50',['tune_pars',['../classtune.html#a44a0787326d639fcacd1a43373883feb',1,'tune']]], + ['tuneparameters_51',['tuneParameters',['../classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4',1,'tune']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 00000000..dc46ef64 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['uncertainties_0',['uncertainties',['../classPSO.html#ad525975ef87127a49f78484366f264df',1,'PSO']]], + ['uncertainty_5fcheck_1',['uncertainty_check',['../classPSO.html#aa347879022c35fcb5018adaeb830ee1c',1,'PSO']]], + ['uniquecoeffindices_2',['uniquecoeffindices',['../classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c',1,'splineFDBase']]], + ['uniquesplinevec_5fmonolith_3',['uniquesplinevec_Monolith',['../classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781',1,'splineFDBase']]], + ['uniquesystcurrsegment_4',['UniqueSystCurrSegment',['../classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036',1,'splineFDBase']]], + ['uniquesystindices_5',['UniqueSystIndices',['../classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6',1,'splineFDBase']]], + ['uniquesystnames_6',['UniqueSystNames',['../classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd',1,'splineFDBase']]], + ['uniquesystnknots_7',['UniqueSystNKnots',['../classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8',1,'splineFDBase']]], + ['uniquesystxpts_8',['UniqueSystXPts',['../classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed',1,'splineFDBase']]], + ['unity_9',['unity',['../structfdmc__base.html#a12e69ee22f800b6399bda527c173c455',1,'fdmc_base::Unity'],['../classcovarianceBase.html#a7682c3de33ae5b23b23e070dc0a3f778',1,'covarianceBase::Unity']]], + ['updateadaptivecovariance_10',['updateAdaptiveCovariance',['../classcovarianceBase.html#a50ce8ebb96ebd64190dc37e4bf950a9b',1,'covarianceBase']]], + ['updatethrowmatrix_11',['updateThrowMatrix',['../classcovarianceBase.html#a7e2d3623bbbf3edee558e04737fe2add',1,'covarianceBase']]], + ['upper_5fadapt_12',['upper_adapt',['../classcovarianceBase.html#a1d9cc6bc2f278cfa6a9923fb9475e01d',1,'covarianceBase']]], + ['ur_13',['UR',['../structBox.html#a91e3a5bc435593fa2bab7389e47bf0fd',1,'Box']]], + ['usage_14',['usage',['../CombineMaCh3Chains_8cpp.html#a2ef30c42cbc289d899a8be5d2d8f77d0',1,'CombineMaCh3Chains.cpp']]], + ['use_15',['How To Use',['../md__2github_2workspace_2README.html#autotoc_md16',1,'']]], + ['use_5fadaptive_16',['use_adaptive',['../classcovarianceBase.html#a838731abd6716940043b484b2b266f86',1,'covarianceBase']]], + ['usebeta_17',['USEBETA',['../samplePDFFDBase_8h.html#aef32089fdd2db890db53022a2e7da7e8',1,'samplePDFFDBase.h']]], + ['usebinnedoscreweighting_18',['usebinnedoscreweighting',['../classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9',1,'samplePDFFDBase::UseBinnedOscReweighting(bool ans)'],['../classsamplePDFFDBase.html#a0fee963934f4918d36c55626c0fb793a',1,'samplePDFFDBase::UseBinnedOscReweighting(bool ans, int nbins, double *osc_bins)']]], + ['usebinningtemplates_19',['UseBinningTemplates',['../classOscillator.html#aade9aad48cdcaf0b0d684352a8c3d651',1,'Oscillator']]], + ['usechemicalcomposition_20',['UseChemicalComposition',['../classOscillator.html#acc125fd3575ec825a8cd65659a3ca186',1,'Oscillator']]], + ['usefinebinsperbin_21',['useFineBinsPerBin',['../classOscillator.html#ad2aad55aa2cd4ff56b03890d0aa49abe',1,'Oscillator']]], + ['usenondoubledangles_22',['UseNonDoubledAngles',['../classsamplePDFFDBase.html#a36253a401aca201ca4f1808a437db4d9',1,'samplePDFFDBase']]], + ['useproductionheightaveraging_23',['UseProductionHeightAveraging',['../classOscillator.html#a3d695f97e6e54b49ed4879b04f78f92a',1,'Oscillator']]], + ['usereactorprior_24',['useReactorPrior',['../classcovarianceOsc.html#a91995c48dcdf4ab10f952ac2e11abf96',1,'covarianceOsc']]], + ['useseparatethrowmatrix_25',['useseparatethrowmatrix',['../classcovarianceBase.html#a42b737f8c1acb412f3da6e0352d7e43e',1,'covarianceBase::useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName=&quot;&quot;)'],['../classcovarianceBase.html#a7f3d05db388d95e35de241145ad732c0',1,'covarianceBase::useSeparateThrowMatrix()']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 00000000..e3f06244 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['validpar_0',['ValidPar',['../RHat_8cpp.html#a5217beba3b3cb82269e95bf52c3d62c5',1,'RHat.cpp']]], + ['vals_1',['vals',['../classSMonolith.html#aa2a793b82a6c650a6fad52510e49b6b0',1,'SMonolith']]], + ['vector_5fadd_2',['vector_add',['../classPSO.html#a0ade870a1dde6ec231b508e629ed1ba2',1,'PSO']]], + ['vector_5fmultiply_3',['vector_multiply',['../classPSO.html#a400ceec227bfe822db4b5d4557e06a1b',1,'PSO']]], + ['vector_5fsubtract_4',['vector_subtract',['../classPSO.html#a1a67501489c5cea6b871525447f09255',1,'PSO']]], + ['vel_5',['vel',['../classPSO.html#ac361ae70f9487058ff1e02f2a6334998',1,'PSO']]], + ['velocity_6',['velocity',['../classparticle.html#a7c7a70f520cbcd91e49e17f7b9406044',1,'particle']]], + ['verbose_7',['VERBOSE',['../RHat_8cpp.html#af99838407de1f00344ce35d8675e41a7',1,'RHat.cpp']]], + ['violin_8',['Violin',['../GetPostfitParamPlots_8cpp.html#a92251598dc4d11508ddb63e3ff2ba4cb',1,'GetPostfitParamPlots.cpp']]], + ['violin2_9',['Violin2',['../GetPostfitParamPlots_8cpp.html#abb13e28854ba4a299e5ac10ab1ac3c99',1,'GetPostfitParamPlots.cpp']]], + ['violinpre_10',['ViolinPre',['../GetPostfitParamPlots_8cpp.html#a458a0e952db082d150759dc07985394a',1,'GetPostfitParamPlots.cpp']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 00000000..223b4a67 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['weightvec_5fmonolith_0',['weightvec_Monolith',['../classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a',1,'splineFDBase']]], + ['width_20100_1',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['writeoutput_2',['WriteOutput',['../classPSO.html#af2a3d758cc67e9b6b6a9a96499345b5b',1,'PSO']]] +]; diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 00000000..b7fc9e24 --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['x_0',['x',['../structCorner.html#a91d5d3774672bb879c8938a7e8eacdbd',1,'Corner']]], + ['x_5fvar_1',['x_var',['../structfdmc__base.html#a4f3b63575284bea13073812fd0bfbc5b',1,'fdmc_base']]], + ['xbin_2',['XBin',['../structfdmc__base.html#a8df8a4cead4cdefa450ba754b9e9dece',1,'fdmc_base']]], + ['xbinedges_3',['XBinEdges',['../classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49',1,'samplePDFFDBase']]], + ['xcoeff_5farr_4',['xcoeff_arr',['../classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb',1,'splineFDBase']]], + ['xpos_5',['XPos',['../classTSpline3__red.html#aa5aa178094edfe4babf554f6cc96853a',1,'TSpline3_red']]], + ['xpts_6',['xPts',['../structFastSplineInfo.html#a1e1456bf7caf11ea7ddac0047afb4dd1',1,'FastSplineInfo']]], + ['xsec_7',['xsec',['../classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153',1,'splineFDBase']]], + ['xsec_5fnorm_5fpointers_8',['xsec_norm_pointers',['../structfdmc__base.html#a7421ef3bf4d8d431ae6f0b833cc787cd',1,'fdmc_base']]], + ['xsec_5fnorms_9',['xsec_norms',['../classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed',1,'samplePDFFDBase']]], + ['xsec_5fnorms_5fbins_10',['xsec_norms_bins',['../structfdmc__base.html#a8410052c18d9a77efe7b706463262f27',1,'fdmc_base']]], + ['xsec_5fspline_5fpointers_11',['xsec_spline_pointers',['../structfdmc__base.html#a15da813f6be7afe4011a8380667fc2fb',1,'fdmc_base']]], + ['xsec_5fw_12',['xsec_w',['../structfdmc__base.html#a31f571addd744817766ffe4c879a0377',1,'fdmc_base']]], + ['xseccov_13',['XsecCov',['../classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7',1,'samplePDFFDBase']]], + ['xsecnorms4_14',['XsecNorms4',['../classXsecNorms4.html',1,'']]], + ['xsecsplines_15',['xsecsplines',['../classsamplePDFBase.html#a333405326522241288286a1d0907dc2e',1,'samplePDFBase']]], + ['xsecstartingpos_16',['XsecStartingPos',['../GetPostfitParamPlots_8cpp.html#a3bb8bb8766f5ea15aa9ac31a1c9127e8',1,'GetPostfitParamPlots.cpp']]], + ['xsecstruct_17',['xsecstruct',['../classXSecStruct.html#af446c18d9c1cb8816cca7c7e91e562f2',1,'XSecStruct::XSecStruct(__int__ NumberOfSplines)'],['../classXSecStruct.html#a7d1ae10909b2f292a342e10824f53aa1',1,'XSecStruct::XSecStruct()'],['../classXSecStruct.html',1,'XSecStruct&lt; T &gt;']]], + ['xvararray_18',['xVarArray',['../classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5',1,'splineFDBase']]] +]; diff --git a/search/all_18.js b/search/all_18.js new file mode 100644 index 00000000..bd172517 --- /dev/null +++ b/search/all_18.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['y_0',['y',['../structCorner.html#a48b049580abddb5475f8595660129128',1,'Corner']]], + ['y_5fvar_1',['y_var',['../structfdmc__base.html#ac4587979647952a6ea2cf6180dcc32ee',1,'fdmc_base']]], + ['yamlhelper_2ecpp_2',['YamlHelper.cpp',['../YamlHelper_8cpp.html',1,'']]], + ['yamlhelper_2eh_3',['YamlHelper.h',['../YamlHelper_8h.html',1,'']]], + ['yamltostring_4',['yamltostring',['../YamlHelper_8cpp.html#aae72fb06a391f1073add5eed6c6485dd',1,'YAMLtoSTRING(const YAML::Node &amp;node):&#160;YamlHelper.cpp'],['../YamlHelper_8h.html#aae72fb06a391f1073add5eed6c6485dd',1,'YAMLtoSTRING(const YAML::Node &amp;node):&#160;YamlHelper.cpp']]], + ['ybin_5',['YBin',['../structfdmc__base.html#aad146de365062f4891a23018f9b2a035',1,'fdmc_base']]], + ['ybinedges_6',['YBinEdges',['../classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6',1,'samplePDFFDBase']]], + ['yresp_7',['YResp',['../classTSpline3__red.html#ada790a4b72314766f464c62e575a4140',1,'TSpline3_red']]], + ['ytitleoffset_8',['yTitleOffset',['../PlotLLH_8cpp.html#a90e133c14aaf43c18c855db7a949cb3d',1,'PlotLLH.cpp']]] +]; diff --git a/search/all_19.js b/search/all_19.js new file mode 100644 index 00000000..3203ea93 --- /dev/null +++ b/search/all_19.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['_7ebasefuncpar_0',['~BaseFuncPar',['../classBaseFuncPar.html#a0cd19743e80b402106202ff1a82f8e14',1,'BaseFuncPar']]], + ['_7ecovariancebase_1',['~covarianceBase',['../classcovarianceBase.html#a1e7a87a1d7e054475b4b921407e0a2d1',1,'covarianceBase']]], + ['_7ecovarianceosc_2',['~covarianceOsc',['../classcovarianceOsc.html#aab90b93f18a4cffbed4c225fecfdc5a8',1,'covarianceOsc']]], + ['_7ecovariancexsec_3',['~covarianceXsec',['../classcovarianceXsec.html#af84383b735f450c33c9c34f7ca207a66',1,'covarianceXsec']]], + ['_7eenergyscale_4',['~EnergyScale',['../classEnergyScale.html#a24c0550c8bac1b50946a7fc918bf8ee5',1,'EnergyScale']]], + ['_7efitterbase_5',['~FitterBase',['../classFitterBase.html#ae8677b449e49ca86bafee685e8dbe93f',1,'FitterBase']]], + ['_7elikelihoodfit_6',['~LikelihoodFit',['../classLikelihoodFit.html#a29f6b86b13948c58c0dd8b16daf8d757',1,'LikelihoodFit']]], + ['_7emanager_7',['~manager',['../classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2',1,'manager']]], + ['_7emcmc_8',['~mcmc',['../classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92',1,'mcmc']]], + ['_7emcmcprocessor_9',['~MCMCProcessor',['../classMCMCProcessor.html#a50810cd50c5a4545bd5c1e486aae7b1c',1,'MCMCProcessor']]], + ['_7eminuitfit_10',['~MinuitFit',['../classMinuitFit.html#ac79d8c4ef26a715b6f4edce0b20af9aa',1,'MinuitFit']]], + ['_7esamplepdfbase_11',['~samplePDFBase',['../classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1',1,'samplePDFBase']]], + ['_7esamplepdffdbase_12',['~samplePDFFDBase',['../classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a',1,'samplePDFFDBase']]], + ['_7esmonolith_13',['~SMonolith',['../classSMonolith.html#ac0ae7f110fa4c6e46e808d8c1ae979b6',1,'SMonolith']]], + ['_7espline_14',['~spline',['../classspline.html#a18a8cc5fa2ce196e458b92dec2664c1f',1,'spline']]], + ['_7esplinebase_15',['~splineBase',['../classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16',1,'splineBase']]], + ['_7esplinefdbase_16',['~splineFDBase',['../classsplineFDBase.html#aef7692f02d28abdcfc09b6ed6bdcabf2',1,'splineFDBase']]], + ['_7estretch_17',['~stretch',['../classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4',1,'stretch']]], + ['_7etf1_5fred_18',['~TF1_red',['../classTF1__red.html#a154077c37858ec88449cae76c41d671b',1,'TF1_red']]], + ['_7ethrowparms_19',['~ThrowParms',['../classThrowParms.html#ac81ea768c6ade4f456f1b917340a64a4',1,'ThrowParms']]], + ['_7etruncated_5fspline_20',['~Truncated_Spline',['../classTruncated__Spline.html#a4ce82ec74b255ecbfe97a372b377444e',1,'Truncated_Spline']]], + ['_7etspline3_5fred_21',['~TSpline3_red',['../classTSpline3__red.html#a275808bab562c82d155433c1d62ac1a1',1,'TSpline3_red']]], + ['_7etune_22',['~tune',['../classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d',1,'tune']]], + ['_7exsecstruct_23',['~XSecStruct',['../classXSecStruct.html#af9d63792f8ad59bb5dc5f79dee16ef38',1,'XSecStruct']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..fd6e50ce --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['a_0',['a',['../classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533',1,'stretch']]], + ['acccount_1',['accCount',['../classFitterBase.html#a2774f3a0047c4347ee0db05406425f79',1,'FitterBase']]], + ['acceptanceprobabilities_2',['AcceptanceProbabilities',['../classMCMCProcessor.html#a278b82fa945d847e57ae6ed6357d8f61',1,'MCMCProcessor']]], + ['acceptstep_3',['acceptStep',['../classcovarianceBase.html#aa2344b1482362eed11d817acdb6befe4',1,'covarianceBase']]], + ['accprob_4',['accprob',['../classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90',1,'FitterBase::accProb'],['../classstretch.html#a3bdd76ceeddae7e33f4cc99f3f11623e',1,'stretch::accProb']]], + ['accprobbatchedaverages_5',['AccProbBatchedAverages',['../classMCMCProcessor.html#a523a223a4754c133121796f4591c7be3',1,'MCMCProcessor']]], + ['accprobvalues_6',['AccProbValues',['../classMCMCProcessor.html#a88cab29770fd6098a674a0ab3628a251',1,'MCMCProcessor']]], + ['adaptivecovariance_7',['adaptiveCovariance',['../classcovarianceBase.html#a4c5b25b0be2459922b53f990f2a63c71',1,'covarianceBase']]], + ['adddata_8',['adddata',['../classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512',1,'samplePDFFDBase::addData()'],['../classsamplePDFInterface.html#a430875be32a7abe8e5582f015d52d256',1,'samplePDFInterface::addData(TH2D *binneddata)=0'],['../classsamplePDFInterface.html#a6dfc76415fd85c2b20807212185d5803',1,'samplePDFInterface::addData(TH1D *binneddata)=0'],['../classsamplePDFInterface.html#afba8628475f8167da36b9f0c8fc91034',1,'samplePDFInterface::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;dat)=0'],['../classsamplePDFInterface.html#aa06edb735a994f18b2819622b0df3898',1,'samplePDFInterface::addData(std::vector&lt; double &gt; &amp;dat)=0'],['../classsamplePDFFDBase.html#aee64da350bb6618a0b438f98f392c4f8',1,'samplePDFFDBase::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;data)'],['../classsamplePDFFDBase.html#a42ab6773e267dfd8e987c8d0dab4861b',1,'samplePDFFDBase::addData(std::vector&lt; double &gt; &amp;data)'],['../classsamplePDFFDBase.html#a6a89cc5ceb45ccd0f4da70823dc398f1',1,'samplePDFFDBase::addData(TH2D *Data)'],['../classsamplePDFBase.html#ab20be5d14e8d8946df1e2c98c4808104',1,'samplePDFBase::addData(TH2D *binneddata)'],['../classsamplePDFBase.html#acbdd3f87ad66eace243aa49361762e6c',1,'samplePDFBase::addData(TH1D *binneddata)'],['../classsamplePDFBase.html#a78681e36e1748bdd978c29d78a67c698',1,'samplePDFBase::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;dat)'],['../classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331',1,'samplePDFBase::addData(std::vector&lt; double &gt; &amp;dat)']]], + ['addoschandler_9',['addoschandler',['../classFitterBase.html#ab24be22ccdfe7a9087eb4ba0b19a4fa2',1,'FitterBase::addOscHandler(covarianceOsc *oscf)'],['../classFitterBase.html#a3815ee89c5580175bb952c9adf3fabb4',1,'FitterBase::addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)']]], + ['addsample_10',['AddSample',['../classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4',1,'splineFDBase']]], + ['addsamplepdf_11',['addsamplepdf',['../classstretch.html#a0509bf2dd3592dc03a547c813065a292',1,'stretch::addSamplePDF()'],['../classFitterBase.html#abe93c6d49aa079d811a9021de59691b1',1,'FitterBase::addSamplePDF(samplePDFBase *sample)']]], + ['addsystobj_12',['addsystobj',['../classFitterBase.html#a1d0068193922448a6fed0e0d3ff4305a',1,'FitterBase::addSystObj()'],['../classstretch.html#a5068746af3b9ae197104f5d5f87ab583',1,'stretch::addSystObj()']]], + ['addxsecsplines_13',['addXsecSplines',['../classsamplePDFBase.html#a5db95a83c4c494c02fb5df8ec65f13ee',1,'samplePDFBase']]], + ['against_20mach3_14',['Building against MaCh3',['../md__2github_2workspace_2README.html#autotoc_md9',1,'']]], + ['algorithms_15',['Fitting algorithms',['../md__2github_2workspace_2README.html#autotoc_md13',1,'']]], + ['align_20center_20width_20100_16',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['alt_20mach3_20align_20center_20width_20100_17',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['and_20diagnostic_18',['Plotting and Diagnostic',['../md__2github_2workspace_2README.html#autotoc_md18',1,'']]], + ['and_20guidelines_19',['Help and Guidelines',['../md__2github_2workspace_2README.html#autotoc_md17',1,'']]], + ['anneal_20',['anneal',['../classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc',1,'mcmc']]], + ['annealtemp_21',['AnnealTemp',['../classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302',1,'mcmc']]], + ['apply_22',['apply',['../classEnergyScale.html#a25f331dc17db4e175ffd58b40584fba3',1,'EnergyScale::Apply()'],['../classSKEScale.html#a73ed33e14de07f6b5efcf449757476d8',1,'SKEScale::Apply()'],['../classBaseFuncPar.html#a60a8e93e54fe0cc9235a22bdb8315888',1,'BaseFuncPar::Apply()']]], + ['applyshifts_23',['applyShifts',['../classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b',1,'samplePDFFDBase']]], + ['applysmoothing_24',['ApplySmoothing',['../classMCMCProcessor.html#a682c1c47626542f5820d633ba2bc010c',1,'MCMCProcessor']]], + ['arrayconfig_25',['ArrayConfig',['../classOscillator.html#a37f2cfa9d511b92ebbed589f1338a2a8',1,'Oscillator']]], + ['auto_5fsave_26',['auto_save',['../classFitterBase.html#ad955982e63066918cba9c53381608d09',1,'FitterBase::auto_save'],['../classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236',1,'stretch::auto_save']]], + ['autocorrelation_27',['AutoCorrelation',['../classMCMCProcessor.html#a322bee0c362ba83df8c45769d299ce9f',1,'MCMCProcessor']]], + ['autocorrlag_28',['AutoCorrLag',['../classMCMCProcessor.html#a6156bba72e1f076e66f0356e48506a36',1,'MCMCProcessor']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..197d54ab --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['basefuncpar_0',['basefuncpar',['../classBaseFuncPar.html',1,'BaseFuncPar'],['../classBaseFuncPar.html#a296ecef506bf4ad92910337f5f82a1e6',1,'BaseFuncPar::BaseFuncPar()']]], + ['batchedanalysis_1',['BatchedAnalysis',['../classMCMCProcessor.html#a29d492906e0c027d089331a0509cd2c3',1,'MCMCProcessor']]], + ['batchedaverages_2',['BatchedAverages',['../classMCMCProcessor.html#ab3f590b501162fc2ee5b78ce75689771',1,'MCMCProcessor']]], + ['batchedmeans_3',['BatchedMeans',['../classMCMCProcessor.html#af3658b8adee50f6ef5557ebbd1c87b8e',1,'MCMCProcessor']]], + ['best_5fparticle_4',['best_particle',['../classPSO.html#aaf8a31e5604b900ce5702910d7e12c15',1,'PSO']]], + ['betweenchainvariance_5',['BetweenChainVariance',['../RHat_8cpp.html#a52dcf07f8f740636605516f6c2ab3e40',1,'RHat.cpp']]], + ['betweenchainvariancefolded_6',['BetweenChainVarianceFolded',['../RHat_8cpp.html#a3a65452412d9dd00c1a9e93d0bab1a26',1,'RHat.cpp']]], + ['binningopt_7',['BinningOpt',['../classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8',1,'samplePDFFDBase']]], + ['binningopts_8',['BinningOpts',['../classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e',1,'splineFDBase']]], + ['bisection_9',['bisection',['../classPSO.html#af45f4a02f49c33401588a12f667e7380',1,'PSO']]], + ['bl_10',['BL',['../structBox.html#a9d51cc0b4c543af5ab222b431e0206ad',1,'Box']]], + ['blah_11',['blah',['../classBaseFuncPar.html#a62cf6a2156bab8ece0011c5434ea902c',1,'BaseFuncPar']]], + ['box_12',['Box',['../structBox.html',1,'']]], + ['branchnames_13',['branchnames',['../classMCMCProcessor.html#ad043b6b2c885f47ab9967831bc8d0f5a',1,'MCMCProcessor::BranchNames'],['../GetPenaltyTerm_8cpp.html#a871d6466cea2597401bdb203293f4033',1,'BranchNames:&#160;GetPenaltyTerm.cpp'],['../RHat_8cpp.html#a871d6466cea2597401bdb203293f4033',1,'BranchNames:&#160;RHat.cpp']]], + ['building_20against_20mach3_14',['Building against MaCh3',['../md__2github_2workspace_2README.html#autotoc_md9',1,'']]], + ['buildsampleindexingarray_15',['BuildSampleIndexingArray',['../classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704',1,'splineFDBase']]], + ['burnincut_16',['BurnInCut',['../classMCMCProcessor.html#a22f82dadceccbe87dd8c5b7daa8432e8',1,'MCMCProcessor']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..29730742 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,102 @@ +var searchData= +[ + ['cachemcmc_0',['CacheMCMC',['../classMCMCProcessor.html#aea84f0315695aa05ec41fcf965b1b031',1,'MCMCProcessor']]], + ['cachesteps_1',['CacheSteps',['../classMCMCProcessor.html#ace48a54fb08e2a3943d4e2ed1f8c4a4b',1,'MCMCProcessor']]], + ['calc_5funcertainty_2',['calc_uncertainty',['../classPSO.html#ae7203a860e979f105da189c23f1a9c3a',1,'PSO']]], + ['calcbayesfactor_3',['CalcBayesFactor',['../ProcessMCMC_8cpp.html#ac5381031738b5fa6481d7ac33d2ad854',1,'ProcessMCMC.cpp']]], + ['calcbipolarplot_4',['CalcBipolarPlot',['../ProcessMCMC_8cpp.html#a2d9c3cc52d1f5c3cc3e0775ae596e9c7',1,'ProcessMCMC.cpp']]], + ['calcchi_5',['CalcChi',['../classPSO.html#aca234a3a9776e5cbb94bd1ab57f27b01',1,'PSO']]], + ['calcchi2_6',['calcchi2',['../classLikelihoodFit.html#af7383703e9f93e5aebcf699d80a6fb9e',1,'LikelihoodFit::CalcChi2()'],['../classPSO.html#a42f873a16ad3d3d9809262a01bf68538',1,'PSO::CalcChi2()']]], + ['calclikelihood_7',['CalcLikelihood',['../classcovarianceBase.html#a0056f747843633b2f8408f599f13f89f',1,'covarianceBase']]], + ['calcmedian_8',['CalcMedian',['../RHat_8cpp.html#ac038d6f2a074799534fc4a986ca36ef3',1,'RHat.cpp']]], + ['calcoscweights_9',['calcOscWeights',['../classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865',1,'samplePDFFDBase']]], + ['calcreweight_10',['calcReWeight',['../classcovarianceBase.html#a17fd81a6df482370d8a66098a257b756',1,'covarianceBase']]], + ['calcrhat_11',['CalcRhat',['../RHat_8cpp.html#abd5f8455bf73bda17794dc06218e6713',1,'RHat.cpp']]], + ['calcsavagedickey_12',['CalcSavageDickey',['../ProcessMCMC_8cpp.html#af772f7bdfdba080075141597e9c99f79',1,'ProcessMCMC.cpp']]], + ['calcsplineweights_13',['CalcSplineWeights',['../classSMonolith.html#ae1be13e249dcd9bb5913a7f0123aa0e4',1,'SMonolith']]], + ['calcsplineweights_5ftf1_14',['CalcSplineWeights_TF1',['../classSMonolith.html#a335ea2a499d2b2c7f1410b24b25456a1',1,'SMonolith']]], + ['calculateenu_15',['calculateenu',['../Structs_8h.html#a2dce7c8dec7d4d7f9c61346893973421',1,'CalculateEnu(double PLep, double cosTheta, double EB, bool neutrino):&#160;Structs.cpp'],['../Structs_8cpp.html#a887ec835f8432e04f3a1eba147d796d9',1,'CalculateEnu(double PLep, double costh, double Eb, bool neutrino):&#160;Structs.cpp']]], + ['calculateess_16',['CalculateESS',['../classMCMCProcessor.html#af576c8b4bf25ffbaa40b3939d25cf442',1,'MCMCProcessor']]], + ['calculateq2_17',['calculateq2',['../Structs_8cpp.html#af6c0e794fc9fe6b93be0d07fc84ca67a',1,'CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2):&#160;Structs.cpp'],['../Structs_8h.html#a060e41fa0e5f91ce4fcbb6a4cafeaf13',1,'CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2=0.0):&#160;Structs.cpp']]], + ['calcweights_18',['calcWeights',['../classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba',1,'splineFDBase']]], + ['calcxsecnormsbins_19',['CalcXsecNormsBins',['../classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b',1,'samplePDFFDBase']]], + ['calcxsecweightfunc_20',['CalcXsecWeightFunc',['../classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548',1,'samplePDFFDBase']]], + ['calcxsecweightnorm_21',['CalcXsecWeightNorm',['../classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d',1,'samplePDFFDBase']]], + ['calcxsecweightspline_22',['CalcXsecWeightSpline',['../classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f',1,'samplePDFFDBase']]], + ['canv_23',['canv',['../GetPostfitParamPlots_8cpp.html#aec2fb4e7af6c83a8ccbdfcfcb7b76a83',1,'GetPostfitParamPlots.cpp']]], + ['canvasname_24',['CanvasName',['../classMCMCProcessor.html#ab5aec3dc293919701d31e6ae705601dd',1,'MCMCProcessor']]], + ['capvariable_25',['CapVariable',['../RHat_8cpp.html#a29838c9a1c93843ffd2eb4dc33f2076d',1,'RHat.cpp']]], + ['center_20width_20100_26',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['central_5fvalue_27',['Central_Value',['../classMCMCProcessor.html#aad661c6d53f9f891e18ff8ccdbd08479',1,'MCMCProcessor']]], + ['chain_28',['chain',['../RHat_8cpp.html#ae3b2f036ab47bd4692ba318d81a4cc1e',1,'Chain:&#160;RHat.cpp'],['../classMCMCProcessor.html#a6be3bbebd4a79fe9814a3da09b3bb820',1,'MCMCProcessor::Chain']]], + ['chainlength_29',['chainlength',['../classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a',1,'mcmc::chainLength'],['../classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47',1,'stretch::chainLength']]], + ['checkbounds_30',['checkbounds',['../classcovarianceOsc.html#ad181d61769506529f8f00c10c2a86944',1,'covarianceOsc::CheckBounds()'],['../classcovarianceBase.html#ac3c3e322dc06ce6a44a887ae13e522ae',1,'covarianceBase::CheckBounds()']]], + ['checkearthdensityfile_31',['CheckEarthDensityFile',['../classOscillator.html#af4cda0c4a00663cbf6d922c0288d887d',1,'Oscillator']]], + ['checknodeexists_32',['CheckNodeExists',['../YamlHelper_8h.html#ad2340a340fd6649a6d220abc16d4757b',1,'YamlHelper.h']]], + ['checknodeexistshelper_33',['checknodeexistshelper',['../YamlHelper_8h.html#a2ec5eac7a7a860300203a9c418e802ee',1,'CheckNodeExistsHelper(const T &amp;node):&#160;YamlHelper.h'],['../YamlHelper_8h.html#a5809a38cdc84e79f861c6de8f84ae83e',1,'CheckNodeExistsHelper(const T &amp;node, const std::string &amp;key, Args... args):&#160;YamlHelper.h']]], + ['checkorderofparams_34',['CheckOrderOfParams',['../classcovarianceOsc.html#a895550a3b7531c221c1f313d42bfc107',1,'covarianceOsc']]], + ['checksoftwareversions_35',['checkSoftwareVersions',['../CombineMaCh3Chains_8cpp.html#a235be88505001370042a2ad21ef5cef5',1,'CombineMaCh3Chains.cpp']]], + ['checkstep_36',['CheckStep',['../classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651',1,'mcmc']]], + ['checkth2polyfileversion_37',['checkth2polyfileversion',['../Structs_8h.html#a1aa25e8399ca7a229b8aa77c25407832',1,'CheckTH2PolyFileVersion(TFile *file):&#160;Structs.cpp'],['../Structs_8cpp.html#a1aa25e8399ca7a229b8aa77c25407832',1,'CheckTH2PolyFileVersion(TFile *file):&#160;Structs.cpp']]], + ['chel_5fdec_38',['chel_dec',['../classThrowParms.html#aa0e556aabe6cefd70cdbd6dbf941f4f0',1,'ThrowParms']]], + ['cheloskydecomp_39',['CheloskyDecomp',['../classThrowParms.html#af0b2855233b1b6b1817e38cc1fdfbd56',1,'ThrowParms']]], + ['chemicalcomposition_5fnom_40',['chemicalComposition_Nom',['../classOscillator.html#a898f7d71b9e265c4b75af10aba106443',1,'Oscillator']]], + ['cite_41',['Cite',['../md__2github_2workspace_2README.html#autotoc_md7',1,'']]], + ['cleanupmemory_42',['cleanUpMemory',['../classsplineFDBase.html#a6e765571776f8affeca355a184fef11a',1,'splineFDBase']]], + ['clock_43',['clock',['../classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5',1,'stretch::clock'],['../classFitterBase.html#aafacee3aada764cd6f7720d1eaeed3cb',1,'FitterBase::clock']]], + ['code_20to_20mach3_44',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['coeffindex_45',['CoeffIndex',['../classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2',1,'splineFDBase']]], + ['coeffindexvec_46',['coeffindexvec',['../classsplineFDBase.html#af63885ddb6731f77808d029372e6b187',1,'splineFDBase']]], + ['combinechain_47',['CombineChain',['../CombineMaCh3Chains_8cpp.html#ab3d5ec7be0fa7770a879fa1edde2ed26',1,'CombineMaCh3Chains.cpp']]], + ['combinemach3chains_2ecpp_48',['CombineMaCh3Chains.cpp',['../CombineMaCh3Chains_8cpp.html',1,'']]], + ['compile_49',['How to Compile',['../md__2github_2workspace_2README.html#autotoc_md8',1,'']]], + ['config_50',['config',['../classmanager.html#a7519c9ab5670ae939d18485d31057b46',1,'manager::config'],['../GetPostfitParamPlots_8cpp.html#a01d92a800904faa16b8c1c1372c40fb3',1,'config:&#160;GetPostfitParamPlots.cpp'],['../ProcessMCMC_8cpp.html#a13056efd080ab16304b6f7be0ebf0a61',1,'config:&#160;ProcessMCMC.cpp']]], + ['constructpca_51',['ConstructPCA',['../classcovarianceBase.html#a8ac3a458097817eca534c23554a7635b',1,'covarianceBase']]], + ['contribute_20code_20to_20mach3_52',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['contributing_2emd_53',['CONTRIBUTING.md',['../CONTRIBUTING_8md.html',1,'']]], + ['copydir_54',['CopyDir',['../CombineMaCh3Chains_8cpp.html#a1cecdc9d9c387545f811006b11f0ba71',1,'CombineMaCh3Chains.cpp']]], + ['copypartoblockhist_55',['copyParToBlockHist',['../GetPostfitParamPlots_8cpp.html#ac9d82a2084e3fcddff1ad0ad9f2042e5',1,'GetPostfitParamPlots.cpp']]], + ['corner_56',['Corner',['../structCorner.html',1,'']]], + ['corr_5fthrow_57',['corr_throw',['../classcovarianceBase.html#a7b70de3f098aae1d537d80bac5969d88',1,'covarianceBase']]], + ['correlatesteps_58',['CorrelateSteps',['../classcovarianceBase.html#aba2b2dae2546299c9a4dab618d65e7c0',1,'covarianceBase']]], + ['correlation_59',['Correlation',['../classMCMCProcessor.html#a03f28431158777cdd81d058b6632a92f',1,'MCMCProcessor']]], + ['countnumberofloadedsplines_60',['CountNumberOfLoadedSplines',['../classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed',1,'splineFDBase']]], + ['covar_61',['covar',['../classThrowParms.html#af27bd2c5ae4323a41bf696f91673ed54',1,'ThrowParms']]], + ['covariance_62',['Covariance',['../classMCMCProcessor.html#af9a40632e2d7f1266d69a74d5b5f2244',1,'MCMCProcessor']]], + ['covariancebase_63',['covariancebase',['../classcovarianceBase.html',1,'covarianceBase'],['../classcovarianceBase.html#adc473e5e1813df2358124471c5540337',1,'covarianceBase::covarianceBase(const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)'],['../classcovarianceBase.html#abd9745caccde077f9ad98c78ccb0a0b5',1,'covarianceBase::covarianceBase(const char *name, const char *file, int seed)'],['../classcovarianceBase.html#ac7b8a062756f85459f9128de1f617d5a',1,'covarianceBase::covarianceBase(const char *name, const char *file)'],['../classcovarianceBase.html#aff470db01018cb75b90ad3f12a005c56',1,'covarianceBase::covarianceBase(std::vector&lt; std::string &gt; YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)']]], + ['covariancebase_2ecpp_64',['covarianceBase.cpp',['../covarianceBase_8cpp.html',1,'']]], + ['covariancebase_2eh_65',['covarianceBase.h',['../covarianceBase_8h.html',1,'']]], + ['covarianceosc_66',['covarianceosc',['../classcovarianceOsc.html#a9346e1377d22750e43cdbd37a97e7b82',1,'covarianceOsc::covarianceOsc()'],['../classcovarianceOsc.html',1,'covarianceOsc']]], + ['covarianceosc_2ecpp_67',['covarianceOsc.cpp',['../covarianceOsc_8cpp.html',1,'']]], + ['covarianceosc_2eh_68',['covarianceOsc.h',['../covarianceOsc_8h.html',1,'']]], + ['covarianceutils_2ecpp_69',['CovarianceUtils.cpp',['../CovarianceUtils_8cpp.html',1,'']]], + ['covarianceutils_2eh_70',['CovarianceUtils.h',['../CovarianceUtils_8h.html',1,'']]], + ['covariancexsec_71',['covariancexsec',['../classcovarianceXsec.html',1,'covarianceXsec'],['../classcovarianceXsec.html#a1733beb9ee3e35360304a25afd2ff9bc',1,'covarianceXsec::covarianceXsec()']]], + ['covariancexsec_2ecpp_72',['covarianceXsec.cpp',['../covarianceXsec_8cpp.html',1,'']]], + ['covariancexsec_2eh_73',['covarianceXsec.h',['../covarianceXsec_8h.html',1,'']]], + ['covfolder_74',['CovFolder',['../classFitterBase.html#aacc46437245ba8a9817f2ed2e86a96e0',1,'FitterBase']]], + ['covmatrix_75',['covMatrix',['../classcovarianceBase.html#a6c3fe8db34c06299fd1633951ac00937',1,'covarianceBase']]], + ['covpos_76',['CovPos',['../classMCMCProcessor.html#a7c6afb0ed75207fd02c28e408f0592d4',1,'MCMCProcessor']]], + ['cpu_5fcoeff_5fmany_77',['cpu_coeff_many',['../classSMonolith.html#a40b079264ca625f263c6016826a8a3d3',1,'SMonolith']]], + ['cpu_5fcoeff_5fx_78',['cpu_coeff_x',['../classSMonolith.html#aef5fe64b8717e8e336acf95b79d3007e',1,'SMonolith']]], + ['cpu_5fnknots_5farr_79',['cpu_nKnots_arr',['../classSMonolith.html#a81d1bc991ef8d4739174b8d6abe26635',1,'SMonolith']]], + ['cpu_5fnparamperevent_80',['cpu_nParamPerEvent',['../classSMonolith.html#a0a6599372d1e3d38105478a68308d9a6',1,'SMonolith']]], + ['cpu_5fnpoints_5farr_81',['cpu_nPoints_arr',['../classSMonolith.html#a14b9c21186a53196f49c8d8d3555fbf2',1,'SMonolith']]], + ['cpu_5fparamno_5farr_82',['cpu_paramNo_arr',['../classSMonolith.html#a2ff1205fce2c0f5a8066fa531c49615c',1,'SMonolith']]], + ['cpu_5ftotal_5fweights_83',['cpu_total_weights',['../classSMonolith.html#ab572dd7e0a46caf44eb925a89cbfb0cf',1,'SMonolith']]], + ['cpu_5fweights_84',['cpu_weights',['../classSMonolith.html#a8614e8ef07431d99f62ab88d9ebdad16',1,'SMonolith']]], + ['cpu_5fweights_5fvar_85',['cpu_weights_var',['../classSMonolith.html#ab6a29f13d8e6efb380f2b9d59cfa88fc',1,'SMonolith']]], + ['credible_5fintervals_86',['Credible_Intervals',['../classMCMCProcessor.html#ab1231047a76d04f03e59321a98141b0b',1,'MCMCProcessor']]], + ['credible_5fintervalscolours_87',['Credible_IntervalsColours',['../classMCMCProcessor.html#ab7e79733be57f51881ad955ff2b335da',1,'MCMCProcessor']]], + ['credible_5fregioncolor_88',['Credible_RegionColor',['../classMCMCProcessor.html#ac9193caf706ba2bd3043707ebf4e71e4',1,'MCMCProcessor']]], + ['credible_5fregions_89',['Credible_Regions',['../classMCMCProcessor.html#a43df0eb7bf5a65e211fbfed5c2d9ea82',1,'MCMCProcessor']]], + ['credible_5fregionstyle_90',['Credible_RegionStyle',['../classMCMCProcessor.html#a1b6c96873ab28f7b129ad038e8673acc',1,'MCMCProcessor']]], + ['credibleinsigmas_91',['CredibleInSigmas',['../classMCMCProcessor.html#a316a8a42437c4f3f583dfba27a833830',1,'MCMCProcessor']]], + ['crosssectionparameters_92',['CrossSectionParameters',['../GetPostfitParamPlots_8cpp.html#a5307771642312031f0050189b493a621',1,'GetPostfitParamPlots.cpp']]], + ['cuda_93',['CUDA',['../md__2github_2workspace_2README.html#autotoc_md11',1,'']]], + ['cuda_5fcallable_5fmember_94',['CUDA_CALLABLE_MEMBER',['../spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7',1,'spline.h']]], + ['cudaprob_5fnu_95',['CUDAProb_nu',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7',1,'Structs.h']]], + ['curr_5fvalue_96',['curr_value',['../classparticle.html#a3fa66bc070aa43b66389b8e0b9754f32',1,'particle']]], + ['currentpar_97',['currentpar',['../classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe',1,'stretch']]], + ['currsegment_98',['CurrSegment',['../structFastSplineInfo.html#aeff9dcbf8e31e0e5e105d065f4d72958',1,'FastSplineInfo']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..b67497b1 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,38 @@ +var searchData= +[ + ['datasample_0',['dataSample',['../classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6',1,'samplePDFBase']]], + ['datasample2d_1',['dataSample2D',['../classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354',1,'samplePDFBase']]], + ['dathist_2',['dathist',['../classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb',1,'samplePDFBase']]], + ['dathist2d_3',['dathist2d',['../classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc',1,'samplePDFBase']]], + ['debug_4',['debug',['../classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5',1,'stretch::debug'],['../md__2github_2workspace_2README.html#autotoc_md14',1,'Debug']]], + ['debugfile_5',['debugFile',['../classstretch.html#ade09543f90fc59fd752b13ab48266aec',1,'stretch']]], + ['debuginterval_6',['debugInterval',['../classstretch.html#accdccd0cf0ee25c613b779233ccc1e26',1,'stretch']]], + ['definemiscvalues_7',['DefineMiscValues',['../classOscillator.html#aef425c1c62f7dbb79c1ce229684cfcfc',1,'Oscillator']]], + ['definepropagatorenums_8',['DefinePropagatorEnums',['../classOscillator.html#ab69d82c06206fe62734eee146b9f01e0',1,'Oscillator']]], + ['deletearrays_9',['DeleteArrays',['../classOscillator.html#aba469223a88f88f6367a6ee9dd3b553f',1,'Oscillator']]], + ['deletehistograms_10',['DeleteHistograms',['../classOscillator.html#a3cc846e5fce770d75d81b82d930b847d',1,'Oscillator']]], + ['deleteoscillogram_11',['DeleteOscillogram',['../classOscillator.html#a1aec272b2f3149124302470cc0e7d501',1,'Oscillator']]], + ['deletepropagator_12',['DeletePropagator',['../classOscillator.html#a7bee4fc4338c3753188fd43840646462',1,'Oscillator']]], + ['density_13',['density',['../classcovarianceOsc.html#af5be9ae714e460c7353dc53b9c08dc52',1,'covarianceOsc']]], + ['destroyarrays_14',['DestroyArrays',['../RHat_8cpp.html#abb60917440a91d5a3507fd4059d3e23b',1,'RHat.cpp']]], + ['detids_15',['DetIDs',['../classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15',1,'splineFDBase']]], + ['diagmcmc_16',['diagmcmc',['../classMCMCProcessor.html#a7f8faecae63616ba100cf24ae42ecc08',1,'MCMCProcessor::DiagMCMC()'],['../DiagMCMC_8cpp.html#a73b9fcbb4ef23d61a60d3a6cdb45feba',1,'DiagMCMC(std::string inputFile, std::string config):&#160;DiagMCMC.cpp']]], + ['diagmcmc_2ecpp_17',['DiagMCMC.cpp',['../DiagMCMC_8cpp.html',1,'']]], + ['diagnosecovariancematrix_18',['DiagnoseCovarianceMatrix',['../ProcessMCMC_8cpp.html#a0a8acd4f01586a646ce233eccd085d65',1,'ProcessMCMC.cpp']]], + ['diagnostic_19',['Plotting and Diagnostic',['../md__2github_2workspace_2README.html#autotoc_md18',1,'']]], + ['dimensions_20',['Dimensions',['../classsplineFDBase.html#a6c28400605049bdee229885c46463dcd',1,'splineFDBase']]], + ['doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_21',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['documentation_22',['MaCh3 Reference Documentation',['../index.html',1,'']]], + ['dodiagmcmc_23',['doDiagMCMC',['../classMCMCProcessor.html#adf449e50cf358f737fe4a2b65d9668e9',1,'MCMCProcessor']]], + ['doubled_5fangle_24',['doubled_angle',['../classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5',1,'samplePDFFDBase']]], + ['doxygen_25',['Doxygen',['../md__2github_2workspace_2CONTRIBUTING.html#autotoc_md2',1,'']]], + ['drawcorrelations1d_26',['DrawCorrelations1D',['../classMCMCProcessor.html#a5b0961bcb0eea7a347e6a29ef7738d80',1,'MCMCProcessor']]], + ['drawcovariance_27',['DrawCovariance',['../classMCMCProcessor.html#a8d9b9c1c780a51b130fe528583dc5019',1,'MCMCProcessor']]], + ['drawgrid_28',['drawGrid',['../PlotLLH_8cpp.html#a2e96eb214ac8a38fee799342bada8f1f',1,'PlotLLH.cpp']]], + ['drawplots_29',['DrawPlots',['../GetPostfitParamPlots_8cpp.html#a45738037de200b8401aa64fbabf4ef67',1,'GetPostfitParamPlots.cpp']]], + ['drawpostfit_30',['DrawPostfit',['../classMCMCProcessor.html#ab420de77e598da4b02ba74cdc20f2ea9',1,'MCMCProcessor']]], + ['drawrange_31',['DrawRange',['../classMCMCProcessor.html#a4abe633b264acd9b0459c7b8ccd8b9df',1,'MCMCProcessor']]], + ['draws_32',['Draws',['../RHat_8cpp.html#a9adc829d645affbb93eff1775ab7c0c6',1,'RHat.cpp']]], + ['drawsfolded_33',['DrawsFolded',['../RHat_8cpp.html#a7e7fe290fda4362be54b8cf5d56fea51',1,'RHat.cpp']]], + ['dumpweights_34',['DumpWeights',['../classsamplePDFFDBase.html#a571f6a6915c16e9bd97ac6691a8cbe1b',1,'samplePDFFDBase']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..02c9b4b6 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['e_5fe_0',['e_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af04821f14b7efebe3d2c170571d1cd80',1,'Structs.h']]], + ['e_5fm_1',['e_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a8d0364977d2872d7b24c32538dff19d0',1,'Structs.h']]], + ['e_5ft_2',['e_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a28f9d8572b6dde9faa7378ab7bcd10ee',1,'Structs.h']]], + ['earthdensityfile_3',['EarthDensityFile',['../classOscillator.html#aa9aa88f2ed604fd8f10441e35004d16b',1,'Oscillator']]], + ['ebins_4',['ebins',['../classXsecNorms4.html#aa88f48b1879b3f629389b2acdca43c03',1,'XsecNorms4']]], + ['effectivesamplesize_5',['EffectiveSampleSize',['../RHat_8cpp.html#ae673254e98992bd483de55c6c1d1dcaf',1,'RHat.cpp']]], + ['effectivesamplesizefolded_6',['EffectiveSampleSizeFolded',['../RHat_8cpp.html#a39a08e7110f564d00239beccded97be8',1,'RHat.cpp']]], + ['eigen_5fthreshold_7',['eigen_threshold',['../classcovarianceBase.html#add54ab1ba46b723fa23d7c95dfad671a',1,'covarianceBase']]], + ['eigen_5fvalues_8',['eigen_values',['../classcovarianceBase.html#ad4980d328fc0689fd0b4147574b5caa9',1,'covarianceBase']]], + ['eigen_5fvalues_5fmaster_9',['eigen_values_master',['../classcovarianceBase.html#aeb4d5757fb7c531bb415ca9564f48c81',1,'covarianceBase']]], + ['eigen_5fvectors_10',['eigen_vectors',['../classcovarianceBase.html#ac58cd28e2261429e597a8c4eb9d1c53d',1,'covarianceBase']]], + ['enableadaptivemcmc_11',['enableAdaptiveMCMC',['../classcovarianceBase.html#a9aac84433e8b18eec1a683583145c061',1,'covarianceBase']]], + ['energyscale_12',['energyscale',['../classEnergyScale.html#a7d616fb5f4f141861ecd383174106ed0',1,'EnergyScale::EnergyScale()'],['../classEnergyScale.html',1,'EnergyScale']]], + ['errors_13',['Errors',['../classMCMCProcessor.html#a5174aaa900edf16ddc6e841ea4adae83',1,'MCMCProcessor']]], + ['errors_5fgauss_14',['Errors_Gauss',['../classMCMCProcessor.html#aa78b7ed1bb9966f84f4eaf8cedf5e688',1,'MCMCProcessor']]], + ['errors_5fhpd_15',['Errors_HPD',['../classMCMCProcessor.html#abb5c6ad85c89227bbb9bc5de2eb71272',1,'MCMCProcessor']]], + ['errors_5fhpd_5fnegative_16',['Errors_HPD_Negative',['../classMCMCProcessor.html#a7b85df39f22390dac24f4d66a89518e5',1,'MCMCProcessor']]], + ['errors_5fhpd_5fpositive_17',['Errors_HPD_Positive',['../classMCMCProcessor.html#af96664fa8cc51c49ad1385da07a343b8',1,'MCMCProcessor']]], + ['escale_5fpointer_18',['EScale_pointer',['../structfdmc__base.html#a266ecead35a0e2a5f08e89d9989dac50',1,'fdmc_base']]], + ['estimatedatatransferrate_19',['EstimateDataTransferRate',['../namespaceMaCh3Utils.html#a4203d9c1f43730103d429f1d6497b843',1,'MaCh3Utils']]], + ['eval_20',['eval',['../classXSecStruct.html#ae081852c345ef9a386bc56bac3dbe41c',1,'XSecStruct::Eval()'],['../classTruncated__Spline.html#af82c4ab57c70c99d54d05536b0c74912',1,'Truncated_Spline::Eval()'],['../classTSpline3__red.html#a870aadaf6bf97c886a3da7afb31c28d8',1,'TSpline3_red::Eval()'],['../classTF1__red.html#a54859d4228932ca73a050ac50375ce35',1,'TF1_red::Eval()'],['../classspline.html#a094cc95917c77e4cd0c429941adcdc35',1,'spline::Eval()']]], + ['evaluate_21',['Evaluate',['../classSMonolith.html#ad5a827f53e0cde78656f264f7b4af78a',1,'SMonolith']]], + ['evaluate_5ftf1_22',['Evaluate_TF1',['../classSMonolith.html#acfe89403e2b71f0691b87e5e3611ccdf',1,'SMonolith']]], + ['excludednames_23',['ExcludedNames',['../classMCMCProcessor.html#a7425f7802e50bcb5ff4b38e20157c423',1,'MCMCProcessor']]], + ['excludedtypes_24',['ExcludedTypes',['../classMCMCProcessor.html#aada4aadea10661586b46c1013a9d018f',1,'MCMCProcessor']]], + ['extradrawoptions_25',['extraDrawOptions',['../PlotLLH_8cpp.html#a2f7bc9077820e9591c96209a0c522cfe',1,'PlotLLH.cpp']]], + ['extrafilenames_26',['ExtraFileNames',['../PlotLLH_8cpp.html#a90b6d10f4967493c73efc11132db7732',1,'PlotLLH.cpp']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..a9c60232 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,92 @@ +var searchData= +[ + ['famous_20plots_0',['Famous Plots',['../md__2github_2workspace_2README.html#autotoc_md6',1,'']]], + ['fancyplotnames_1',['FancyPlotNames',['../classMCMCProcessor.html#ad25fe818c94163b0c4a8fcdfd387c148',1,'MCMCProcessor']]], + ['fancytitles_2',['FancyTitles',['../GetPostfitParamPlots_8cpp.html#a18bae56e60ec67a6190dda0a2edeb808',1,'GetPostfitParamPlots.cpp']]], + ['fastsplineinfo_3',['FastSplineInfo',['../structFastSplineInfo.html',1,'']]], + ['fb_4',['fB',['../classspline.html#a7b23a13caa6d68159b035db9155b425b',1,'spline']]], + ['fbestvalue_5',['fBestValue',['../classPSO.html#ad28ca8bc8c7864a753b1cfa72733c148',1,'PSO']]], + ['fbinning_6',['fBinning',['../classOscillator.html#a2b6c52f04c6aeeccb0cd4f6ec4259f96',1,'Oscillator']]], + ['fc_7',['fC',['../classspline.html#a53ce91618f1c479d2f444af31855c90c',1,'spline']]], + ['fconstriction_8',['fConstriction',['../classPSO.html#a1c7ca23e5dcdf35cd6812b85221c0d4b',1,'PSO']]], + ['fconvergence_9',['fConvergence',['../classPSO.html#ac9884499d5945597cb33ef0518f6f61e',1,'PSO']]], + ['fd_10',['fD',['../classspline.html#a68559ca14ce7c89d2595681c2605dd63',1,'spline']]], + ['fdelta_11',['fDelta',['../classspline.html#a301682848b329bcef441bb13bfe33f46',1,'spline']]], + ['fdim_12',['fDim',['../classPSO.html#ae6c1bc89308fd18ffa8b043319029836',1,'PSO']]], + ['fdmc_5fbase_13',['fdmc_base',['../structfdmc__base.html',1,'']]], + ['fdmcstruct_2eh_14',['FDMCStruct.h',['../FDMCStruct_8h.html',1,'']]], + ['fdparameters_15',['FDParameters',['../GetPostfitParamPlots_8cpp.html#a15657a5f07a9fde98fc9210b7ae80f9e',1,'GetPostfitParamPlots.cpp']]], + ['fdparametersstartingpos_16',['FDParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#a6dfe886b2ff4881ee2434479a9028985',1,'GetPostfitParamPlots.cpp']]], + ['ffillhistograms_17',['fFillHistograms',['../classOscillator.html#a1eddbd950e06f52470bf1228464351f6',1,'Oscillator']]], + ['file_5fexists_18',['file_exists',['../Structs_8h.html#afbf5ccf44bc187caa268d4d158f4e5f6',1,'Structs.h']]], + ['filelabel_19',['FileLabel',['../GetPostfitParamPlots_8cpp.html#aea3f7a89a2ddbe5b596363aced9e1139',1,'GetPostfitParamPlots.cpp']]], + ['filelabels_20',['FileLabels',['../PlotLLH_8cpp.html#a750b9a367a2a6297f041bc0e464351f9',1,'PlotLLH.cpp']]], + ['filelabels_5fdefault_21',['FileLabels_default',['../PlotLLH_8cpp.html#ade75aeda707b3d798ee6b0f8ac44a92e',1,'PlotLLH.cpp']]], + ['filename_22',['FileName',['../classmanager.html#a1004958d1431ff607c08fa795b5953b7',1,'manager']]], + ['filenames_23',['filenames',['../GetPostfitParamPlots_8cpp.html#a8e90c1478f4be185364988cac765a163',1,'FileNames:&#160;GetPostfitParamPlots.cpp'],['../ProcessMCMC_8cpp.html#a8e90c1478f4be185364988cac765a163',1,'FileNames:&#160;ProcessMCMC.cpp']]], + ['filesaved_24',['FileSaved',['../classFitterBase.html#a699abe6a2c89706b54544212152d613a',1,'FitterBase']]], + ['fill1dhist_25',['fill1dhist',['../classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad',1,'samplePDFInterface::fill1DHist()'],['../classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc',1,'samplePDFFDBase::fill1DHist()']]], + ['fill2dhist_26',['fill2dhist',['../classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63',1,'samplePDFInterface::fill2DHist()'],['../classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984',1,'samplePDFFDBase::fill2DHist()']]], + ['fillarray_27',['fillArray',['../classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9',1,'samplePDFFDBase']]], + ['fillarrays_28',['FillArrays',['../classOscillator.html#a4b00536cf82a517768374307b76f3ae6',1,'Oscillator']]], + ['fillarrays_5fmanycontrib_5farea_29',['FillArrays_ManyContrib_Area',['../classOscillator.html#a8b4b6081082ed033728fb35d0dfe76d2',1,'Oscillator']]], + ['fillarrays_5fstandard_30',['FillArrays_Standard',['../classOscillator.html#a1fb6cb1e2acc4a5d5da72fd624f93b19',1,'Oscillator']]], + ['filloscillogram_31',['FillOscillogram',['../classOscillator.html#a338f483a27048a37c274bf6c16c317ab',1,'Oscillator']]], + ['fillprimaryhistograms_32',['FillPrimaryHistograms',['../classOscillator.html#af8127a000f846dd4b232610b2ffa6be0',1,'Oscillator']]], + ['fillprimaryoscillogram_33',['FillPrimaryOscillogram',['../classOscillator.html#a09b23c4b387dd86df22fc54caea7b080',1,'Oscillator']]], + ['fillsamplearray_34',['FillSampleArray',['../classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f',1,'splineFDBase']]], + ['fillsecondaryhistograms_35',['FillSecondaryHistograms',['../classOscillator.html#ad7f08a13fa2a7965332af6e138278173',1,'Oscillator']]], + ['fillsplinebins_36',['fillSplineBins',['../classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e',1,'samplePDFFDBase']]], + ['findeventoscbin_37',['FindEventOscBin',['../classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5',1,'samplePDFFDBase']]], + ['findfrommanager_38',['FindFromManager',['../YamlHelper_8h.html#a2a8231c2076b91564e31e55567018f00',1,'YamlHelper.h']]], + ['findfrommanagerhelper_39',['findfrommanagerhelper',['../YamlHelper_8h.html#ad047b94c4cdbbc6d7c73a75243b0a010',1,'FindFromManagerHelper(const YAML::Node &amp;node, const std::string &amp;key, Args... args):&#160;YamlHelper.h'],['../YamlHelper_8h.html#a296c2eab8cecbc8a278add0ea507da94',1,'FindFromManagerHelper(const YAML::Node &amp;node):&#160;YamlHelper.h']]], + ['findinputfiles_40',['FindInputFiles',['../classMCMCProcessor.html#aea15e730ff77556bb93bc4cff675744c',1,'MCMCProcessor']]], + ['findnominalbinandedges1d_41',['FindNominalBinAndEdges1D',['../classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a',1,'samplePDFFDBase']]], + ['findnominalbinandedges2d_42',['FindNominalBinAndEdges2D',['../classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa',1,'samplePDFFDBase']]], + ['findsplinebinning_43',['FindSplineBinning',['../classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b',1,'splineFDBase']]], + ['findsplinesegment_44',['findsplinesegment',['../classSMonolith.html#ae91451c45359e8a4e9655155c7eebe7a',1,'SMonolith::FindSplineSegment()'],['../classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273',1,'splineFDBase::FindSplineSegment()']]], + ['finduniquemodes_45',['FindUniqueModes',['../classsplineFDBase.html#a0249bb22856a7a01b64b7828046801aa',1,'splineFDBase']]], + ['findx_46',['findx',['../classTruncated__Spline.html#a0ff225fc53ec9d59402a8bddf45190e0',1,'Truncated_Spline::FindX()'],['../classTSpline3__red.html#a39668a1dc14058a1f833e9621ec19caf',1,'TSpline3_red::FindX()']]], + ['finecoarseratiocosz_47',['fineCoarseRatioCosz',['../classOscillator.html#a45686c104c1adae1ebe0f0b2c7c464ae',1,'Oscillator']]], + ['finecoarseratioenergy_48',['fineCoarseRatioEnergy',['../classOscillator.html#a03a5e7210a6023a96273f04c7489ae88',1,'Oscillator']]], + ['finertia_49',['fInertia',['../classPSO.html#a9b3d14a97a9d838a9f009f9cc54968d3',1,'PSO']]], + ['firstpcadpar_50',['FirstPCAdpar',['../classcovarianceBase.html#abba75182305d556818c76974a054a17d',1,'covarianceBase']]], + ['fiterations_51',['fIterations',['../classPSO.html#aa2adb0a6985424439c44b8d0c7afec08',1,'PSO']]], + ['fitman_52',['fitMan',['../classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095',1,'FitterBase']]], + ['fitterbase_53',['fitterbase',['../classFitterBase.html',1,'FitterBase'],['../classFitterBase.html#a2d45811f9bcb9719f312048bbd36a423',1,'FitterBase::FitterBase()']]], + ['fitterbase_2ecpp_54',['FitterBase.cpp',['../FitterBase_8cpp.html',1,'']]], + ['fitterbase_2eh_55',['FitterBase.h',['../FitterBase_8h.html',1,'']]], + ['fitting_20algorithms_56',['Fitting algorithms',['../md__2github_2workspace_2README.html#autotoc_md13',1,'']]], + ['fixed_57',['fixed',['../classPSO.html#a90cf855167748b488851c559de49283c',1,'PSO']]], + ['fkstep_58',['fKstep',['../classspline.html#a610b9b9c320613aad0c99cebe021a278',1,'spline']]], + ['flavourname_59',['flavourName',['../structfdmc__base.html#a0469374786ae2e3e11ddd59bd08fc42a',1,'fdmc_base']]], + ['flipbeta_60',['flipBeta',['../classcovarianceOsc.html#a2a431f804dd4d0f49dbb56c7d3c0d58e',1,'covarianceOsc']]], + ['flipdelm_61',['flipdelM',['../classcovarianceOsc.html#a9a36ac8acc5baad4b41ff0fe53958100',1,'covarianceOsc']]], + ['float_5ft_62',['FLOAT_T',['../OscClass__CUDAProb3_8h.html#ae859fcc828db5cc21dc6bd9611634949',1,'OscClass_CUDAProb3.h']]], + ['flux_5fw_63',['flux_w',['../structfdmc__base.html#a377d4784d0f20005a0cfa2dd671d7b5d',1,'fdmc_base']]], + ['fluxparameters_64',['FluxParameters',['../GetPostfitParamPlots_8cpp.html#adf4147e2ac31f2cb321121a90cb8c853',1,'GetPostfitParamPlots.cpp']]], + ['fmirroring_65',['fMirroring',['../classLikelihoodFit.html#ae1e5d13b373bf73e1b1003f7f9d65f00',1,'LikelihoodFit']]], + ['fnp_66',['fNp',['../classspline.html#a322ac057718bfb06996dc7c3e518ef55',1,'spline']]], + ['fone_67',['fOne',['../classPSO.html#aa02f509433bb6c25126a180ab27b8277',1,'PSO']]], + ['forceoverwrite_68',['forceOverwrite',['../CombineMaCh3Chains_8cpp.html#a3adafbbaf60d2c0038ff083b1b17722d',1,'CombineMaCh3Chains.cpp']]], + ['formatting_69',['Formatting',['../md__2github_2workspace_2CONTRIBUTING.html#autotoc_md3',1,'']]], + ['foscpar_70',['foscpar',['../classOscillator.html#adda4bce3f5465f96a5600ca903404ef3',1,'Oscillator']]], + ['four_5fvector_5faddition_71',['four_vector_addition',['../classPSO.html#ac6522025d324079b88bc7ea8c5e766d6',1,'PSO']]], + ['fparcurr_5fpca_72',['fParCurr_PCA',['../classcovarianceBase.html#aa96f87ab90dc26fc1b5e157149b9dfd3',1,'covarianceBase']]], + ['fparprop_5fpca_73',['fParProp_PCA',['../classcovarianceBase.html#a2e101b6b7028c82a02e617c90212e4cc',1,'covarianceBase']]], + ['fparsigma_5fpca_74',['fParSigma_PCA',['../classcovarianceBase.html#a7b83a17de68cc7838b93de242d91d9a0',1,'covarianceBase']]], + ['fparticles_75',['fParticles',['../classPSO.html#a9e9da89144237a7f3369b9b3739e73ad',1,'PSO']]], + ['fprodh_76',['fprodH',['../classOscillator.html#a8b02a285592d83a89bf1b0b220ef22c0',1,'Oscillator']]], + ['fractionoverlapped_77',['FractionOverlapped',['../classOscillator.html#af97891766e2267f373ef85010d96401e',1,'Oscillator']]], + ['ftestlikelihood_78',['fTestLikelihood',['../classFitterBase.html#ada898e35bab22af470f2cd1e28af609b',1,'FitterBase']]], + ['fteststatistic_79',['fTestStatistic',['../classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d',1,'samplePDFBase']]], + ['ftwo_80',['fTwo',['../classPSO.html#a56539eb264d11e1c37674ad55504d454',1,'PSO']]], + ['func_81',['Func',['../classXSecStruct.html#a9334a6ce9789e80e9b52409f45efc71c',1,'XSecStruct']]], + ['funcparsindex_82',['funcParsIndex',['../classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78',1,'samplePDFFDBase']]], + ['funcparsnames_83',['funcParsNames',['../classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900',1,'samplePDFFDBase']]], + ['fx_84',['fX',['../classspline.html#af545ed0bb9307de3fd9a47b72d2afa72',1,'spline']]], + ['fxmax_85',['fXmax',['../classspline.html#ada4bae351e736ef0cefd36ef971b2a46',1,'spline']]], + ['fxmin_86',['fXmin',['../classspline.html#a7b84491491e316cce7a160ef61d79eb5',1,'spline']]], + ['fy_87',['fY',['../classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2',1,'spline']]], + ['fyp_5fval_88',['fYp_Val',['../classOscillator.html#a371ac3f841d37c5370d2d06518e9e5ab',1,'Oscillator']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..e1fc7ffb --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,167 @@ +var searchData= +[ + ['gauss_0',['Gauss',['../classMCMCProcessor.html#a92c1d9b0ebdf90951221cdaf2ac4cc2c',1,'MCMCProcessor']]], + ['generate_1',['generate',['../classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c',1,'samplePDFBase::generate()'],['../classsamplePDFInterface.html#aa15d46479142ea021af71733f95049ae',1,'samplePDFInterface::generate()']]], + ['generate2d_2',['generate2d',['../classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b',1,'samplePDFBase::generate2D()'],['../classsamplePDFInterface.html#ab8e7f95c1db8da2d96f5385b276d499b',1,'samplePDFInterface::generate2D()']]], + ['get1ddatahist_3',['get1DDataHist',['../classsamplePDFBase.html#a2354d4238fcf3311daf151741f2601ad',1,'samplePDFBase']]], + ['get1dhist_4',['get1DHist',['../classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc',1,'samplePDFBase']]], + ['get2ddatahist_5',['get2DDataHist',['../classsamplePDFBase.html#af42053e1d1c5521110f38d41195f1b64',1,'samplePDFBase']]], + ['get2dhist_6',['get2DHist',['../classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b',1,'samplePDFBase']]], + ['get_5fbest_5fparticle_7',['get_best_particle',['../classPSO.html#a9c915f7ef789c499d7f9d2e3c31fb2bf',1,'PSO']]], + ['get_5fpersonal_5fbest_5fposition_8',['get_personal_best_position',['../classparticle.html#a49e62920bb60565abfe3e186b313744e',1,'particle']]], + ['get_5fpersonal_5fbest_5fvalue_9',['get_personal_best_value',['../classparticle.html#a5e3ff4cfd13828939252119ad5b4637c',1,'particle']]], + ['get_5fposition_10',['get_position',['../classparticle.html#a80f74f071446a4100718cabdacc7533c',1,'particle']]], + ['get_5fvalue_11',['get_value',['../classparticle.html#a99bce4ba53278e8cb97b9c1de11ff0d4',1,'particle']]], + ['get_5fvelocity_12',['get_velocity',['../classparticle.html#ac2bc6cb51ad1661424eb629cf859e42c',1,'particle']]], + ['geta_13',['getA',['../classstretch.html#a265ce3bf25c97637ae88da1cbc572e75',1,'stretch']]], + ['getarithmetic_14',['GetArithmetic',['../classMCMCProcessor.html#a86e94eb85faf26fee126366a39ce7c2c',1,'MCMCProcessor']]], + ['getbayesfactor_15',['GetBayesFactor',['../classMCMCProcessor.html#aaeee87390feefd85d8c68bf4e0a63387',1,'MCMCProcessor']]], + ['getbinningopt_16',['GetBinningOpt',['../classsamplePDFFDBase.html#a4c5be0f42f94df87954a0b823786b3cc',1,'samplePDFFDBase']]], + ['getbranchnames_17',['GetBranchNames',['../classMCMCProcessor.html#a3905a8c1e333cb52a192c0cfaf1a0949',1,'MCMCProcessor']]], + ['getcoeff_18',['GetCoeff',['../classTSpline3__red.html#a8aedd8e18706f3aa511e873d4934a595',1,'TSpline3_red']]], + ['getcorrelationmatrix_19',['GetCorrelationMatrix',['../classcovarianceBase.html#ac14fabdb87f5101cdbfcecb8e6b6b811',1,'covarianceBase']]], + ['getcovariance_20',['GetCovariance',['../classMCMCProcessor.html#ac9e4fdea5d2de92a1abad5b79b7daf88',1,'MCMCProcessor']]], + ['getcovlikelihood_21',['getCovLikelihood',['../classsamplePDFInterface.html#a0a581fa7cb091aa5d4378b19ab19083f',1,'samplePDFInterface']]], + ['getcovmatrix_22',['getCovMatrix',['../classcovarianceBase.html#a5968a05b1139d72344ea08b8cd6c76c6',1,'covarianceBase']]], + ['getcpuinfo_23',['GetCPUInfo',['../namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf',1,'MaCh3Utils']]], + ['getcredibleinterval_24',['GetCredibleInterval',['../classMCMCProcessor.html#a91dc66cdf94ebbdde34cfbaa68a21520',1,'MCMCProcessor']]], + ['getcredibleregion_25',['GetCredibleRegion',['../classMCMCProcessor.html#a8480d9a0ae878ec2f48409be5546d972',1,'MCMCProcessor']]], + ['getcudaprobflavour_26',['GetCUDAProbFlavour',['../Structs_8h.html#a0f3bb0c23c578a9e1d3c6eebfd5eaf36',1,'Structs.h']]], + ['getdatasample_27',['getDataSample',['../classsamplePDFBase.html#af509da2b8d4b68569c9ee8061bdeee05',1,'samplePDFBase']]], + ['getdensity_28',['GetDensity',['../classcovarianceOsc.html#aae3f81247d3aa3b3a1f3e83dc540edfb',1,'covarianceOsc']]], + ['getdiagonalerror_29',['getDiagonalError',['../classcovarianceBase.html#a01e3ab6a6758fc58b8c695556a39d879',1,'covarianceBase']]], + ['getdimlabel_30',['getDimLabel',['../classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2',1,'splineFDBase']]], + ['getdiscvar_31',['getDiscVar',['../classinterfacePDFEbE.html#ab4ca3c49dc494555995c8346718562b9',1,'interfacePDFEbE']]], + ['getdunnekaboth_32',['GetDunneKaboth',['../classMCMCProcessor.html#a1c9e49fecb85351fc5bc3134d00a8ef8',1,'MCMCProcessor']]], + ['geteigenvalues_33',['getEigenValues',['../classcovarianceBase.html#add3d24e738cde5a2f5ab1b2b377a2afb',1,'covarianceBase']]], + ['geteigenvaluesmaster_34',['getEigenValuesMaster',['../classcovarianceBase.html#a104f2d2f1b7f60693bba489ac4e753cc',1,'covarianceBase']]], + ['geteigenvectors_35',['getEigenVectors',['../classcovarianceBase.html#ad1b0e5f25843ee77ec1c6094856cda27',1,'covarianceBase']]], + ['getevallikelihood_36',['getEvalLikelihood',['../classcovarianceBase.html#a5b338f4562be5a179782728ce886a5c6',1,'covarianceBase']]], + ['geteventrate_37',['geteventrate',['../classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b',1,'samplePDFBase::getEventRate()'],['../classsamplePDFInterface.html#a659178e9c6c6a6b5ad8f17b23a26cedc',1,'samplePDFInterface::getEventRate()']]], + ['geteventsplines_38',['GetEventSplines',['../classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca',1,'splineFDBase']]], + ['geteventweight_39',['geteventweight',['../classinterfacePDFEbE.html#aeb735d7fd18933d9a8176aa6ccb8f6bf',1,'interfacePDFEbE::GetEventWeight()'],['../classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9',1,'samplePDFFDBase::GetEventWeight()']]], + ['getfdcov_40',['GetFDCov',['../classMCMCProcessor.html#a0d7cf9a1c745a18d0ecc90d4610d7ee0',1,'MCMCProcessor']]], + ['getfdsplinefileparsnamesfromdetid_41',['GetFDSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a8196b6329ce89e607e90de8d472b5bb6',1,'covarianceXsec']]], + ['getfilename_42',['GetFileName',['../classmanager.html#ab81f0be941a168843b372d38999877f2',1,'manager']]], + ['getfrommanager_43',['GetFromManager',['../YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c',1,'YamlHelper.h']]], + ['getfunc_44',['GetFunc',['../classXSecStruct.html#a68f53156cada0c531aefe107dd781989',1,'XSecStruct']]], + ['getfuncparsindexfromdetid_45',['GetFuncParsIndexFromDetID',['../classcovarianceXsec.html#a25bad5be0ce0a0778dcdf596b7930f2e',1,'covarianceXsec']]], + ['getfuncparsnamesfromdetid_46',['GetFuncParsNamesFromDetID',['../classcovarianceXsec.html#ac3c73b55a96de2413224e7bd50a98f82',1,'covarianceXsec']]], + ['getgaussian_47',['GetGaussian',['../classMCMCProcessor.html#a11b18392df922deddc4483e7f8d4f3e5',1,'MCMCProcessor']]], + ['getgenerated_48',['GetGenerated',['../classcovarianceBase.html#a3d8d40e4f44cd0c89a1a2d4b4711f332',1,'covarianceBase']]], + ['getgeneratedvalues_49',['getGeneratedValues',['../classcovarianceBase.html#aa274bd03ce40a69ab2a67d34d45bcdb2',1,'covarianceBase']]], + ['getgpufit_50',['getGpuFit',['../classstretch.html#a42647e00bf6768e3bac3eecf73f78a00',1,'stretch']]], + ['getgpuinfo_51',['GetGPUInfo',['../namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928',1,'MaCh3Utils']]], + ['getgundamparamname_52',['getGUNDAMParamName',['../PlotLLH_8cpp.html#ac5effc81a292324338784b0fd1c8d9cf',1,'PlotLLH.cpp']]], + ['gethpd_53',['GetHPD',['../classMCMCProcessor.html#a56e83925be3cfd8f6823b1c44392f2fc',1,'MCMCProcessor']]], + ['gethpost_54',['GetHpost',['../classMCMCProcessor.html#a70f5590946414af43c3b6c3a5cd315de',1,'MCMCProcessor']]], + ['gethpost2d_55',['GetHpost2D',['../classMCMCProcessor.html#a7882d6c6a54bb345df394ef13b2962d1',1,'MCMCProcessor']]], + ['getinputfile_56',['getInputFile',['../classcovarianceBase.html#a11ca26d02384b73eeba7b6f756e25544',1,'covarianceBase']]], + ['getinvcovmatrix_57',['getInvCovMatrix',['../classcovarianceBase.html#a12221dba3e93480881d1195482ef6d87',1,'covarianceBase']]], + ['getisrhc_58',['GetIsRHC',['../classsamplePDFFDBase.html#a77b64358710d398374db3567c4ce0bf9',1,'samplePDFFDBase']]], + ['getjeffreysscale_59',['GetJeffreysScale',['../classMCMCProcessor.html#a72dc816ccfaec949a1fea4119b5198a0',1,'MCMCProcessor']]], + ['getknot_60',['GetKnot',['../classTSpline3__red.html#ab34981fd36d9c17cf5c93f7fe6ee2645',1,'TSpline3_red']]], + ['getlikelihood_61',['getlikelihood',['../classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8',1,'samplePDFBase::GetLikelihood()'],['../classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c',1,'samplePDFFDBase::GetLikelihood()'],['../classsamplePDFInterface.html#a90531e4ef2a555b3248f126fc971b476',1,'samplePDFInterface::GetLikelihood()'],['../classcovarianceBase.html#a9ee2fbfe0f1ac86c8c129095638e0f76',1,'covarianceBase::GetLikelihood()'],['../classcovarianceOsc.html#ac274d65036b6d534f8ea82023d6e3ad3',1,'covarianceOsc::GetLikelihood()']]], + ['getlikelihood_5fkernel_62',['getlikelihood_kernel',['../classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6',1,'samplePDFBase::GetLikelihood_kernel()'],['../classsamplePDFInterface.html#a4cdc84a7bc279b76e55ad9daaa8df7a2',1,'samplePDFInterface::GetLikelihood_kernel()']]], + ['getlowerbound_63',['GetLowerBound',['../classcovarianceBase.html#a634e89392da441ff88cad3a3ba619ccc',1,'covarianceBase']]], + ['getmassfrompdg_64',['GetMassFromPDG',['../namespaceMaCh3Utils.html#a86d34372bb55524024fbdadd65834967',1,'MaCh3Utils']]], + ['getmcstatllh_65',['GetMCStatLLH',['../classmanager.html#a149d43d444a7492187d0051c531923bd',1,'manager']]], + ['getmodename_66',['GetModeName',['../classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7',1,'samplePDFBase']]], + ['getmodestruct_67',['GetModeStruct',['../classsamplePDFBase.html#a0680888d26ecd0efc40379ba7ea42d6d',1,'samplePDFBase']]], + ['getname_68',['getname',['../classTF1__red.html#a8f210d3b941692f2947340dbbcdbf908',1,'TF1_red::GetName()'],['../classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de',1,'samplePDFBase::GetName()'],['../classcovarianceBase.html#a73f68a953b99aeed919a0d270788b4c0',1,'covarianceBase::getName()'],['../classPSO.html#a95d9cbbfdcdc4d453254a3b1477cbbab',1,'PSO::GetName()'],['../classMinuitFit.html#a21eb79a3aa06baf99b0e5bd86e9d5c7c',1,'MinuitFit::GetName()'],['../classmcmc.html#a0446e3c1f2af2173ffd6f017fdf6f1ba',1,'mcmc::GetName()'],['../classLikelihoodFit.html#aff5ac0361aa016cebb24d4687e0da4ac',1,'LikelihoodFit::GetName()'],['../classFitterBase.html#a3706f6d722073b447b3de8c3a6516601',1,'FitterBase::GetName()'],['../classTSpline3__red.html#a7dfd0b2f144a8b75d0f2500df5277eac',1,'TSpline3_red::GetName()']]], + ['getndcov_69',['GetNDCov',['../classMCMCProcessor.html#a949934e2b34901f4b8d6e44368cb0f96',1,'MCMCProcessor']]], + ['getndim_70',['getndim',['../classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb',1,'splineFDBase::getNDim()'],['../classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778',1,'samplePDFFDBase::GetNDim()']]], + ['getndsplinefileparsnamesfromdetid_71',['GetNDSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a74546abc04d8bd13b959c0d348ab789b',1,'covarianceXsec']]], + ['getnentries_72',['GetnEntries',['../classMCMCProcessor.html#acf40fb480c198c5934e81803973451c1',1,'MCMCProcessor']]], + ['getneventsinsample_73',['getNEventsInSample',['../classinterfacePDFEbE.html#aae045e6d54c3f4e86002aac58fd6d8a6',1,'interfacePDFEbE']]], + ['getnfd_74',['GetNFD',['../classMCMCProcessor.html#ad376c15dcf60a4284dfa23368e097450',1,'MCMCProcessor']]], + ['getnflux_75',['GetNFlux',['../classMCMCProcessor.html#a82e67c2a28b286aae353636782c93a23',1,'MCMCProcessor']]], + ['getnmcsamples_76',['getNMCSamples',['../classinterfacePDFEbE.html#a5e48b903f6805472d7f7e6d7d33be215',1,'interfacePDFEbE']]], + ['getnmodes_77',['GetNModes',['../classMaCh3__Modes.html#a86fd4bf65b9b90a724e79551b4478da8',1,'MaCh3_Modes']]], + ['getnnd_78',['GetNND',['../classMCMCProcessor.html#af92fab1bce506912ae00d1aa5d9b7233',1,'MCMCProcessor']]], + ['getnominal_79',['getnominal',['../classcovarianceBase.html#a5bf31f7d7a5e24c49d4157d411080dbf',1,'covarianceBase::getNominal()'],['../classcovarianceXsec.html#aea8d453c3b4bfe236faff0bf48623118',1,'covarianceXsec::getNominal(const int i) override']]], + ['getnominalarray_80',['getnominalarray',['../classcovarianceXsec.html#a98cf4b870e62badc83bcda99ae3574ae',1,'covarianceXsec::getNominalArray()'],['../classcovarianceBase.html#ae0a231f87266048a3cd2e0032eaf0f30',1,'covarianceBase::getNominalArray()']]], + ['getnormparsfromdetid_81',['GetNormParsFromDetID',['../classcovarianceXsec.html#aea3542e88e6947b5da383a12c7d4e54c',1,'covarianceXsec']]], + ['getnp_82',['GetNp',['../classTSpline3__red.html#a9d09b9ada9990a6f33d9ff005c977535',1,'TSpline3_red']]], + ['getnparams_83',['GetNParams',['../classMCMCProcessor.html#adbde2f115d983b233d0a9ea896187586',1,'MCMCProcessor']]], + ['getnpars_84',['getnpars',['../classLikelihoodFit.html#a18cec4a653bda51d551a779db1ccb596',1,'LikelihoodFit::GetNPars()'],['../classcovarianceBase.html#a261941a4c06e5d875174d8769a4d02f1',1,'covarianceBase::getNpars()']]], + ['getnsamples_85',['GetNsamples',['../classsamplePDFBase.html#a0000b101bead86f5581baacb8d33383f',1,'samplePDFBase']]], + ['getnsteps_86',['GetnSteps',['../classMCMCProcessor.html#ad9ffb63b188bd9cfd56f0be2f3928ab7',1,'MCMCProcessor']]], + ['getnthparameter_87',['GetNthParameter',['../classMCMCProcessor.html#a28dfe42f1bf6fd3a145287be1e63fb0b',1,'MCMCProcessor']]], + ['getnthreads_88',['GetNThreads',['../namespaceMaCh3Utils.html#a5aff908b9241c673e8d05403996e2229',1,'MaCh3Utils']]], + ['getnumberofparams_89',['GetNumberOfParams',['../classXSecStruct.html#a06edd7edcff041a85bef922da9d2bfb2',1,'XSecStruct']]], + ['getnumfuncparamsfromdetid_90',['GetNumFuncParamsFromDetID',['../classcovarianceXsec.html#a90e2aa373a8ffb9b838f90fbc7a67641',1,'covarianceXsec']]], + ['getnumparams_91',['GetNumParams',['../classcovarianceBase.html#a3daac6405cc791347b768a5afe8a13d2',1,'covarianceBase']]], + ['getnumsplineparamsfromdetid_92',['GetNumSplineParamsFromDetID',['../classcovarianceXsec.html#a9b94545b5fa89c27a07c03f856ebcf60',1,'covarianceXsec']]], + ['getnxsec_93',['GetNXSec',['../classMCMCProcessor.html#ae5ba9ac70fefcd01afd5066281438883',1,'MCMCProcessor']]], + ['getosc_94',['GetOSC',['../classMCMCProcessor.html#a6aaa70eeca8d40c94f9836b3108cf579',1,'MCMCProcessor']]], + ['getosccov_95',['GetOscCov',['../classMCMCProcessor.html#ac824a20f93cd288c206000ef02fef1f2',1,'MCMCProcessor']]], + ['getoscillogramnbins_96',['GetOscillogramNBins',['../classOscillator.html#a333796deed14f45c8412d2e1fe44a155',1,'Oscillator']]], + ['getosconly_97',['getOscOnly',['../classstretch.html#a706dbc8b21269ee4cc7546058a70be51',1,'stretch']]], + ['getotherfilehist_98',['getOtherFileHist',['../GetPostfitParamPlots_8cpp.html#a3a89c02f89f29d5f75fd228e088c1896',1,'GetPostfitParamPlots.cpp']]], + ['getparameter_99',['GetParameter',['../classTF1__red.html#a467e0aef58c190adddd57018f00ce206',1,'TF1_red']]], + ['getparameterhist_100',['getParameterHist',['../PlotLLH_8cpp.html#aacc357def887311bea23a72db6a06878',1,'PlotLLH.cpp']]], + ['getparametermeans_101',['getParameterMeans',['../classcovarianceBase.html#ab89b754afc93b63f41070710af4c0f2d',1,'covarianceBase']]], + ['getparamindexfromname_102',['GetParamIndexFromName',['../classMCMCProcessor.html#a79fbacee092135cb1e42ed60202600e6',1,'MCMCProcessor']]], + ['getparamtype_103',['GetParamType',['../classcovarianceXsec.html#ae74c131ca46a8715f75710a8d801524f',1,'covarianceXsec']]], + ['getparcurr_104',['getParCurr',['../classcovarianceBase.html#a040e445c6d4f8d4eea8fc13418cea7ff',1,'covarianceBase']]], + ['getparcurr_5fpca_105',['getParCurr_PCA',['../classcovarianceBase.html#af4c0edbf1bd150484bc4696480ef9a77',1,'covarianceBase']]], + ['getpardetid_106',['GetParDetID',['../classcovarianceXsec.html#aad522479b06581729efd6c1cd12d11df',1,'covarianceXsec']]], + ['getparfancyname_107',['getparfancyname',['../classcovarianceBase.html#a6a46b5fed3e7feb6e9e151e90927bdbc',1,'covarianceBase::GetParFancyName(const int i)'],['../classcovarianceBase.html#a519d02704e1b9b98f0ff3044596fe11c',1,'covarianceBase::GetParFancyName(const int i) const']]], + ['getparinit_108',['getParInit',['../classcovarianceBase.html#a1cede85accaac2ea7056740893d90c49',1,'covarianceBase']]], + ['getparname_109',['getparname',['../classcovarianceBase.html#a033c5b6a8669537acaa6c5fc252899e6',1,'covarianceBase::GetParName(const int i)'],['../classcovarianceBase.html#a2c10aa293cd0e66665f915b484f54e9c',1,'covarianceBase::GetParName(const int i) const']]], + ['getparprop_110',['getParProp',['../classcovarianceBase.html#a37c87fa18db7e4ac087d120bca955617',1,'covarianceBase']]], + ['getparprop_5fpca_111',['getParProp_PCA',['../classcovarianceBase.html#a3e29910a1706f60db5f615b3b6f05994',1,'covarianceBase']]], + ['getparsplineinterpolation_112',['GetParSplineInterpolation',['../classcovarianceXsec.html#aa37632d8db3830ff55c828e5add92d23',1,'covarianceXsec']]], + ['getpathlength_113',['GetPathLength',['../classcovarianceOsc.html#a367025ccd9467fa42dfeef223763261b',1,'covarianceOsc']]], + ['getpenaltyterm_114',['GetPenaltyTerm',['../GetPenaltyTerm_8cpp.html#aca180a34f33cad687281cba8e8ee6196',1,'GetPenaltyTerm.cpp']]], + ['getpenaltyterm_2ecpp_115',['GetPenaltyTerm.cpp',['../GetPenaltyTerm_8cpp.html',1,'']]], + ['getperformbetastudy_116',['GetPerformBetaStudy',['../classcovarianceOsc.html#a14ec27f04f1cb37b4ef3f7278a5ffe07',1,'covarianceOsc']]], + ['getpolarplot_117',['GetPolarPlot',['../classMCMCProcessor.html#a3cbdb2a888e58fa1a9768f56d9a48e3e',1,'MCMCProcessor']]], + ['getpostfit_118',['GetPostfit',['../classMCMCProcessor.html#a5fc015740496b821648f0e5ca8cffe80',1,'MCMCProcessor']]], + ['getpostfit_5find_119',['GetPostfit_Ind',['../classMCMCProcessor.html#a59fa9550b7c69c616929217ae89c2f42',1,'MCMCProcessor']]], + ['getpostfitparamplots_120',['GetPostfitParamPlots',['../GetPostfitParamPlots_8cpp.html#ad53f55565623ac6efd066209b1821ea6',1,'GetPostfitParamPlots.cpp']]], + ['getpostfitparamplots_2ecpp_121',['GetPostfitParamPlots.cpp',['../GetPostfitParamPlots_8cpp.html',1,'']]], + ['getprefitvalues_122',['getPreFitValues',['../classcovarianceBase.html#a48030255d1057937c1060645a94b69af',1,'covarianceBase']]], + ['getproposed_123',['getProposed',['../classcovarianceBase.html#a53be39d0c968b0c6c3a16ec38fe03da7',1,'covarianceBase']]], + ['getproppars_124',['getPropPars',['../classcovarianceOsc.html#a5732a5abf9aa3d73f9dec5ba9d33217f',1,'covarianceOsc']]], + ['getsampleindex_125',['getSampleIndex',['../classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca',1,'splineFDBase']]], + ['getsamplelikelihood_126',['getSampleLikelihood',['../classsamplePDFBase.html#a850aef19dec9a2ac0047c416e3fa3b1d',1,'samplePDFBase']]], + ['getsamplename_127',['getsamplename',['../classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2',1,'samplePDFBase::GetSampleName()'],['../classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf',1,'samplePDFFDBase::GetSampleName()']]], + ['getsamplenames_128',['GetSampleNames',['../classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2',1,'samplePDFBase']]], + ['getsavagedickey_129',['GetSavageDickey',['../classMCMCProcessor.html#af048f4412d59946acb3d35106ca5c413',1,'MCMCProcessor']]], + ['getsigmavalue_130',['GetSigmaValue',['../classMCMCProcessor.html#a9a5e853fa93adbb9d425ff999c03308c',1,'MCMCProcessor']]], + ['getsize_131',['getsize',['../classTF1__red.html#af9e3b0e8d2edad0e7e08f3bf215525c9',1,'TF1_red::GetSize()'],['../classcovarianceBase.html#ab3c974412479cd6d891a3c325820dc1e',1,'covarianceBase::getSize()'],['../classThrowParms.html#a15d20b7bd5a244211220d74158c5cc00',1,'ThrowParms::GetSize()']]], + ['getsplinecoeff_5fsepmany_132',['getsplinecoeff_sepmany',['../classSMonolith.html#acbbe3398718d0d02d65a1e92a91c112c',1,'SMonolith::getSplineCoeff_SepMany()'],['../classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae',1,'splineFDBase::getSplineCoeff_SepMany()']]], + ['getsplinefileparsnamesfromdetid_133',['GetSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a577f572750f4531b952b118dceac569c',1,'covarianceXsec']]], + ['getsplineinterpolation_134',['GetSplineInterpolation',['../classcovarianceXsec.html#a1cef7811e0441730f65087e12d8721e5',1,'covarianceXsec']]], + ['getsplinemodevecfromdetid_135',['GetSplineModeVecFromDetID',['../classcovarianceXsec.html#a59925cec0677ed7da99532ae5e320a30',1,'covarianceXsec']]], + ['getsplineparsindexfromdetid_136',['GetSplineParsIndexFromDetID',['../classcovarianceXsec.html#a512a1a48b171fc65bdbccd7460171e51',1,'covarianceXsec']]], + ['getsplineparsnamesfromdetid_137',['GetSplineParsNamesFromDetID',['../classcovarianceXsec.html#a692e5cb3d7ea006dd10164bd3c59d3dd',1,'covarianceXsec']]], + ['getsplitsamplestack_138',['getSplitSampleStack',['../PlotLLH_8cpp.html#ab0a1f8d7d22ebec47e5b4bb95af3fd74',1,'PlotLLH.cpp']]], + ['getteststatllh_139',['getteststatllh',['../classsamplePDFBase.html#aae43146f1732e7095839c3e6d9e3832a',1,'samplePDFBase::getTestStatLLH(const double data, const double mc, const double w2)'],['../classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453',1,'samplePDFBase::getTestStatLLH(double data, double mc)']]], + ['gettf1coeff_140',['getTF1Coeff',['../classSMonolith.html#a87230e35c15ce4523bc3d630416e30f3',1,'SMonolith']]], + ['getthrowmatrix_141',['getThrowMatrix',['../classcovarianceBase.html#aa306bea2b30013ca55f2a95b8d16ec42',1,'covarianceBase']]], + ['getthrowmatrix_5fcholdecomp_142',['getThrowMatrix_CholDecomp',['../classcovarianceBase.html#a563a904298d0bd5ec5518708396e0e22',1,'covarianceBase']]], + ['gettransfermatrix_143',['getTransferMatrix',['../classcovarianceBase.html#acdcf459e3ef443e93c66d83cde87e238',1,'covarianceBase']]], + ['gettriangleplot_144',['GetTrianglePlot',['../ProcessMCMC_8cpp.html#a02c2311b736096adc8525876c0ec1487',1,'ProcessMCMC.cpp']]], + ['getupperbound_145',['GetUpperBound',['../classcovarianceBase.html#a0c6510aa48248382ba2da0330015b8c6',1,'covarianceBase']]], + ['getvalue_146',['getValue',['../namespaceMaCh3Utils.html#a417b0bad440b7f273ca404ff25dd86a2',1,'MaCh3Utils']]], + ['getviolin_147',['GetViolin',['../classMCMCProcessor.html#a4ecd30520854d1379946bd8b1f2992f2',1,'MCMCProcessor']]], + ['getviolinplots_148',['GetViolinPlots',['../GetPostfitParamPlots_8cpp.html#a8681598ff6721b09a9d1f03c4efe114d',1,'GetPostfitParamPlots.cpp']]], + ['getviolinprior_149',['GetViolinPrior',['../classMCMCProcessor.html#a0489e9f57b847389bc0c9f8af5a0abdb',1,'MCMCProcessor']]], + ['getxseccov_150',['GetXSecCov',['../classMCMCProcessor.html#ac5d0426772d6ddeb18090ef74ad12243',1,'MCMCProcessor']]], + ['gewekediagnostic_151',['GewekeDiagnostic',['../classMCMCProcessor.html#a03b7c4bb9cd9a90aa7d284b0f1a6156b',1,'MCMCProcessor']]], + ['gpu_5fcoeff_5fmany_152',['gpu_coeff_many',['../classSMonolith.html#ad48ce38bdd62d27df5405fdbf7dbc0c7',1,'SMonolith']]], + ['gpu_5fcoeff_5fx_153',['gpu_coeff_x',['../classSMonolith.html#a3eb59435b695f7f9653f027e49e4b33f',1,'SMonolith']]], + ['gpu_5ffit_154',['gpu_fit',['../classstretch.html#a7ca4fdf6398add1bdc629c103d52de94',1,'stretch']]], + ['gpu_5fnknots_5farr_155',['gpu_nKnots_arr',['../classSMonolith.html#a0ff9a70ffa877c13f6aa53a44e447e39',1,'SMonolith']]], + ['gpu_5fnparamperevent_156',['gpu_nParamPerEvent',['../classSMonolith.html#ac6656d53aaefa0db75f4cf57aa517dbf',1,'SMonolith']]], + ['gpu_5fnpoints_5farr_157',['gpu_nPoints_arr',['../classSMonolith.html#a2e36f546602e0d375dcbacd8771369c7',1,'SMonolith']]], + ['gpu_5fparamno_5farr_158',['gpu_paramNo_arr',['../classSMonolith.html#a6aaa90b9158e01743235a465fd80caaf',1,'SMonolith']]], + ['gpu_5ftotal_5fweights_159',['gpu_total_weights',['../classSMonolith.html#a43ffa53dafb6006e7bd23597a402e8b4',1,'SMonolith']]], + ['gpu_5fweights_160',['gpu_weights',['../classSMonolith.html#a1317bac1e66e5400c59bc4dd9ff3cdd9',1,'SMonolith']]], + ['gpumcmcprocessorutils_2ecu_161',['gpuMCMCProcessorUtils.cu',['../gpuMCMCProcessorUtils_8cu.html',1,'']]], + ['gpusplineutils_2ecu_162',['gpuSplineUtils.cu',['../gpuSplineUtils_8cu.html',1,'']]], + ['guidelines_163',['Help and Guidelines',['../md__2github_2workspace_2README.html#autotoc_md17',1,'']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..a7c6fafb --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['haskinbounds_0',['hasKinBounds',['../classXsecNorms4.html#ab5d815107d57b4f7ae22ccb3f2ae318b',1,'XsecNorms4']]], + ['hcoarsecosz_1',['hCoarseCosz',['../classOscillator.html#aa2f13d53fcfc4b0b7446088bb83d0d12',1,'Oscillator']]], + ['hcoarseenergy_2',['hCoarseEnergy',['../classOscillator.html#a26d4b8cdeec29ce802a8534ec0bbe9e0',1,'Oscillator']]], + ['help_20and_20guidelines_3',['Help and Guidelines',['../md__2github_2workspace_2README.html#autotoc_md17',1,'']]], + ['hfinecosz_4',['hFineCosz',['../classOscillator.html#a7ca8c31e42729185d7a86d213ed4e080',1,'Oscillator']]], + ['hfineenergy_5',['hFineEnergy',['../classOscillator.html#a57c4971f8da63332a6a7d9561670ca7b',1,'Oscillator']]], + ['histogramsinitialised_6',['HistogramsInitialised',['../classOscillator.html#a3627014bbf95f278475a9975fa38d157',1,'Oscillator']]], + ['horncurrents_7',['horncurrents',['../classXsecNorms4.html#ad9b663a9fe71c5b3feb844179bba8822',1,'XsecNorms4']]], + ['how_20to_20compile_8',['How to Compile',['../md__2github_2workspace_2README.html#autotoc_md8',1,'']]], + ['how_20to_20contribute_20code_20to_20mach3_9',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['how_20to_20use_10',['How To Use',['../md__2github_2workspace_2README.html#autotoc_md16',1,'']]], + ['hpost_11',['hpost',['../classMCMCProcessor.html#aa3c928a09df7d6fc431c0b879d5c40e4',1,'MCMCProcessor']]], + ['hpost2d_12',['hpost2D',['../classMCMCProcessor.html#a0ddcfa4ba1e4dcdea366d88decc64391',1,'MCMCProcessor']]], + ['hprimarybinning_13',['hPrimaryBinning',['../classOscillator.html#ad7da187ecbc0c6c2f39d16fe4221d97a',1,'Oscillator']]], + ['hprimarycounter_5farr_14',['hPrimaryCounter_Arr',['../classOscillator.html#aadb940b81b39594edd3c0ef4fc7b943a',1,'Oscillator']]], + ['hprimaryoscillogram_15',['hPrimaryOscillogram',['../classOscillator.html#a2da4a6d4f1659c0566bda4f6dcab0390',1,'Oscillator']]], + ['hprimaryoscillogram_5farr_16',['hPrimaryOscillogram_Arr',['../classOscillator.html#a65fa5131e8c51f25c7ffd28fd7ef0dcf',1,'Oscillator']]], + ['hproductionheightrange_17',['hProductionHeightRange',['../classOscillator.html#a82944052f3d795cd89114c053404237a',1,'Oscillator']]], + ['hsecondarybinning_18',['hSecondaryBinning',['../classOscillator.html#a731b6fe605f49fbf9c2e5e11296bfb2e',1,'Oscillator']]], + ['hsecondaryoscillogram_19',['hSecondaryOscillogram',['../classOscillator.html#aca9d73d11eeabaef515547d3dd3cd2ae',1,'Oscillator']]], + ['hviolin_20',['hviolin',['../classMCMCProcessor.html#a556988f03b24e3af33e9a29b23d2b1e2',1,'MCMCProcessor']]], + ['hviolin_5fprior_21',['hviolin_prior',['../classMCMCProcessor.html#a25d79f451d5d584c3e7ef0e1423e5e8e',1,'MCMCProcessor']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..335b5b93 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['iamvaried_0',['IamVaried',['../classMCMCProcessor.html#a95fa49737432818bc830a44898d0d850',1,'MCMCProcessor']]], + ['img_20src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_1',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['index_2',['index',['../classXsecNorms4.html#a6c45244b8c559ada13c1c886dea37cc2',1,'XsecNorms4']]], + ['index_5fcpu_3',['index_cpu',['../classSMonolith.html#ae9fa50f60f717558f517faea6a38d251',1,'SMonolith']]], + ['indexvec_4',['indexvec',['../classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12',1,'splineFDBase']]], + ['init_5',['init',['../classsamplePDFInterface.html#aabea95f400c78b85100f548e9d8e8144',1,'samplePDFInterface::init()'],['../classcovarianceBase.html#ab5141e2014519c1483788f4995686164',1,'covarianceBase::init(TMatrixDSym *covMat)'],['../classcovarianceBase.html#a53d643c213a7c973145c9bd6f2ad5d88',1,'covarianceBase::init(std::vector&lt; std::string &gt; YAMLFile)'],['../classcovarianceBase.html#abbdd5ddf5ae51c2c4113631754ec24e6',1,'covarianceBase::init(const char *name, const char *file)'],['../classtune.html#a38d17743a856c100ed0726bc2e8e0300',1,'tune::init()'],['../classstretch.html#abf351cef5d33603cb6be70749577d9e4',1,'stretch::init()'],['../classPSO.html#a20cba5b6be9f5996dba818220f7a3524',1,'PSO::init()'],['../classsamplePDFInterface.html#a8188c4bd0d437cdbf52298b4a4f73560',1,'samplePDFInterface::init()'],['../classsamplePDFBase.html#af82aa921ee6e6c204d97e6b6a7cf27ae',1,'samplePDFBase::init(double pot, std::string mc_version)'],['../classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8',1,'samplePDFBase::init(double pot)']]], + ['initialise_6',['initialise',['../classMCMCProcessor.html#a224995a0b47bd9cbd04e099cc3ca634c',1,'MCMCProcessor::Initialise()'],['../classSMonolith.html#a45cece9dcbe699e00a7b5fdff4806c1e',1,'SMonolith::Initialise()']]], + ['initialisearrays_7',['InitialiseArrays',['../RHat_8cpp.html#a3efe8085dcbead1e66a6cf54fc77ab5e',1,'RHat.cpp']]], + ['initialisehistograms_8',['InitialiseHistograms',['../classOscillator.html#ad179520d34c471a982ebc9e0fd821482',1,'Oscillator']]], + ['initialisenewadaptivechain_9',['initialiseNewAdaptiveChain',['../classcovarianceBase.html#ac4163afc3e1062fdea9466904f9b74ca',1,'covarianceBase']]], + ['initoscillogram_10',['InitOscillogram',['../classOscillator.html#a355d12f90e89d73dc1238331cbe8e309',1,'Oscillator']]], + ['initparams_11',['initParams',['../classcovarianceXsec.html#a3c14aecda656f24a94c2b6df86e30518',1,'covarianceXsec']]], + ['initpropagator_12',['InitPropagator',['../classOscillator.html#ad6d1e943b6738eed430667a0b626ec51',1,'Oscillator']]], + ['initxsecfromconfig_13',['InitXsecFromConfig',['../classcovarianceXsec.html#a90bd7a32f16efc88c070e57fabafd13b',1,'covarianceXsec']]], + ['inpfilelist_14',['inpFileList',['../CombineMaCh3Chains_8cpp.html#a92bfb809a0500604336ae74b5198373b',1,'CombineMaCh3Chains.cpp']]], + ['inputfile_15',['inputFile',['../classcovarianceBase.html#a5451d4189a9fb7591c8ce728852ba82e',1,'covarianceBase']]], + ['inputfilename_16',['InputFileName',['../classOscillator.html#a67231919b021341e75959e7284692d07',1,'Oscillator']]], + ['interfacepdfebe_17',['interfacePDFEbE',['../classinterfacePDFEbE.html',1,'']]], + ['interfacepdfebe_2ecpp_18',['interfacePDFEbE.cpp',['../interfacePDFEbE_8cpp.html',1,'']]], + ['interfacepdfebe_2eh_19',['interfacePDFEbE.h',['../interfacePDFEbE_8h.html',1,'']]], + ['introduction_20',['Introduction',['../index.html#autotoc_md0',1,'']]], + ['invcovmatrix_21',['invcovmatrix',['../classcovarianceBase.html#a35c7dc7817eaf4058e9775b6bc792ebc',1,'covarianceBase::invCovMatrix'],['../GetPenaltyTerm_8cpp.html#a3fd4dd88b1fa6119298781296ea761c5',1,'invCovMatrix:&#160;GetPenaltyTerm.cpp']]], + ['invertcovmatrix_22',['InvertCovMatrix',['../classcovarianceBase.html#a49a8341eb8e997fb090749117320edf9',1,'covarianceBase']]], + ['isalreadycalculated_23',['isAlreadyCalculated',['../classOscillator.html#a4514973cb03fee06171ebdd33de253bf',1,'Oscillator']]], + ['isbound_24',['isbound',['../structfdmc__base.html#ac4988faabe298f55534aba070186d0b5',1,'fdmc_base']]], + ['isdecomposed_5fpca_25',['isDecomposed_PCA',['../classcovarianceBase.html#ae9f3cb2a310874b86965903714ef2bd8',1,'covarianceBase']]], + ['iseventselected_26',['iseventselected',['../classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781',1,'samplePDFFDBase::IsEventSelected(int iSample, int iEvent)'],['../classsamplePDFFDBase.html#a36052ef8bdd85b1e390996aad361d953',1,'samplePDFFDBase::IsEventSelected(std::vector&lt; std::string &gt; ParameterStr, int iSample, int iEvent)'],['../classsamplePDFFDBase.html#aed71380c5f2f25a5c28896ca3ac27f7f',1,'samplePDFFDBase::IsEventSelected(std::vector&lt; std::string &gt; ParameterStr, std::vector&lt; std::vector&lt; double &gt; &gt; &amp;Selection, int iSample, int iEvent)']]], + ['isflat_27',['isflat',['../GetPenaltyTerm_8cpp.html#ae7c3a438d4508eba7ac26e26135b2c17',1,'isFlat:&#160;GetPenaltyTerm.cpp'],['../classSMonolith.html#ac69a542d8c48acd8faf797c20cad4590',1,'SMonolith::isFlat()']]], + ['isflatarray_28',['isflatarray',['../classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3',1,'splineFDBase']]], + ['isflux_29',['isFlux',['../classcovarianceXsec.html#a76a3fd06dd9cbe2eb6ccf560a435bf76',1,'covarianceXsec']]], + ['islinear_30',['islinear',['../classOscillator.html#a7f3eb39d4674724a51cb55c7daff8c20',1,'Oscillator::isLinear()'],['../classOscillator.html#a646a52ceae668dc0b4cc58245d9f0939',1,'Oscillator::IsLinear']]], + ['isnc_31',['isNC',['../structfdmc__base.html#a3b50812cc57ead329ccf495012cf906e',1,'fdmc_base']]], + ['isparameterfixed_32',['isParameterFixed',['../classcovarianceBase.html#a2424eaebd9daa92b0294b352310770a3',1,'covarianceBase']]], + ['isparameterfixedpca_33',['isParameterFixedPCA',['../classcovarianceBase.html#ab7cb212b7fda7f402629855b58a69cec',1,'covarianceBase']]], + ['isparflux_34',['IsParFlux',['../classcovarianceXsec.html#a1297bd93b010760e05122e53507dbedc',1,'covarianceXsec']]], + ['ispca_35',['IsPCA',['../classcovarianceBase.html#a30f3f34243be0f6bc901e525497e7f56',1,'covarianceBase']]], + ['isrhc_36',['IsRHC',['../classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a',1,'samplePDFFDBase']]], + ['isusinggpu_37',['isUsingGPU',['../classOscillator.html#a04e27d2c84837eadda34fcc36d92ab70',1,'Oscillator']]], + ['isvalidbox_38',['IsValidBox',['../classOscillator.html#a9aba209aecd9521e4db62b7500c147b6',1,'Oscillator']]], + ['isvalidsplineindex_39',['isValidSplineIndex',['../classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b',1,'splineFDBase']]], + ['isxsec_40',['IsXsec',['../classMCMCProcessor.html#a2c06d64020e9246e720cc131a9f4986d',1,'MCMCProcessor']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..bb548fae --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,54 @@ +var searchData= +[ + ['kakima_0',['kAkima',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4afe5701215b64da0194c6fead25edd976',1,'Structs.h']]], + ['kbarlowbeeston_1',['kBarlowBeeston',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4',1,'Structs.h']]], + ['kbeta_2',['kBeta',['../classcovarianceOsc.html#aabdb0f6c6bad4b4c425dd5da57df766c',1,'covarianceOsc']]], + ['kcoeffb_3',['kCoeffB',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc',1,'splineFDBase']]], + ['kcoeffc_4',['kCoeffC',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e',1,'splineFDBase']]], + ['kcoeffd_5',['kCoeffD',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0',1,'splineFDBase']]], + ['kcoeffy_6',['kCoeffY',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be',1,'splineFDBase']]], + ['kdegpu_2ecu_7',['kdeGpu.cu',['../kdeGpu_8cu.html',1,'']]], + ['kdegpu2_2ecu_8',['kdeGpu2.cu',['../kdeGpu2_8cu.html',1,'']]], + ['kdeltacp_9',['kDeltaCP',['../classcovarianceOsc.html#ac4068139be51a4426706d4ddf4bf930d',1,'covarianceOsc']]], + ['kdeltam23_10',['kDeltaM23',['../classcovarianceOsc.html#a5f554c455622a351015fa782e9933801',1,'covarianceOsc']]], + ['kdembinskiabdelmottele_11',['kDembinskiAbdelmottele',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb',1,'Structs.h']]], + ['kfddetpar_12',['kFDDetPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20bad7032c60390bd4bb843950e9a7afcdae',1,'MCMCProcessor.h']]], + ['kicecube_13',['kIceCube',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472',1,'Structs.h']]], + ['kinematicvarstr_14',['KinematicVarStr',['../classXsecNorms4.html#a67a1d237f1fdb41a0c11898fada0f00c',1,'XsecNorms4']]], + ['klinear_15',['kLinear',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4ac188c019178783e5be55110601309d7d',1,'Structs.h']]], + ['kmaxparticles_16',['kMaxParticles',['../classPSO.html#a0c6dc51dae4c926cf236eb482d000384',1,'PSO']]], + ['kmonotonic_17',['kMonotonic',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a68f4b10c9689389fd8fea39dc6c097d3',1,'Structs.h']]], + ['kndpar_18',['kNDPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba4ac215e1a6cd9e776ec0a230f62a0bb4',1,'MCMCProcessor.h']]], + ['knowndetidsmap_19',['knowndetidsmap',['../namespaceMaCh3Utils.html#ab58c07d7176a31b58fe4c1fb0c81fd10',1,'MaCh3Utils::KnownDetIDsMap'],['../namespaceMaCh3Utils.html#ad70f340fe7d2128586d54797f6501514',1,'MaCh3Utils::KnownDetIDsMap({ {0, 1}, {1, 8}, {2, 16}, {3, 32}, {4, 64}, {5, 128}, {6, 256}, {7, 512}, })']]], + ['knparameterenum_20',['kNParameterEnum',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20babd8035289bbe1770c6cb4d4d3e9d1b5a',1,'MCMCProcessor.h']]], + ['knteststatistics_21',['kNTestStatistics',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1459dbcc0f1b68b266cf0ddc37c34aee',1,'Structs.h']]], + ['knue_22',['kNue',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2aab024bd4737ec207f00dcd86a5d05908',1,'Structs.h']]], + ['knuebar_23',['kNueBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a74373d078c38b05c7ce7af9fe89e9f60',1,'Structs.h']]], + ['knumu_24',['kNumu',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2ab0c6aa36beb10b27d1595708db570b20',1,'Structs.h']]], + ['knumubar_25',['kNumuBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a4002f8369785cc180fd411cacc50ad6a',1,'Structs.h']]], + ['knutau_26',['kNutau',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a3845eaeb2a574c79e40ccb2e7b0c0a21',1,'Structs.h']]], + ['knutaubar_27',['kNutauBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a17308656c7ae2206d971d1a8682c5feb',1,'Structs.h']]], + ['kolmogorovsmirnovtest_28',['KolmogorovSmirnovTest',['../ProcessMCMC_8cpp.html#aece705f01f7c21ad0d0f5f9f64af6d0d',1,'ProcessMCMC.cpp']]], + ['koscpar_29',['kOSCPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba03865cac80b3eb8f5ef46421eb8dab06',1,'MCMCProcessor.h']]], + ['kpearson_30',['kPearson',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7',1,'Structs.h']]], + ['kpoisson_31',['kPoisson',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5',1,'Structs.h']]], + ['kprobnue_32',['kProbNue',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a5cd6d0de7e8784e41d9b25b568e4a910',1,'Structs.h']]], + ['kprobnuebar_33',['kProbNueBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a8d16d56aca132d6c241c7bfa76a678ce',1,'Structs.h']]], + ['kprobnumu_34',['kProbNumu',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a06c430fb843a21e2716d7a4ac4b02b8f',1,'Structs.h']]], + ['kprobnumubar_35',['kProbNumuBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a72f2254b7daf89baabd39b7b42998ad7',1,'Structs.h']]], + ['kprobnutau_36',['kProbNutau',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a01745b4e2b8e4c6e585d5256336ec0fc',1,'Structs.h']]], + ['kprobnutaubar_37',['kProbNutauBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a02ac372b77ed65a76630c2bf8435e888',1,'Structs.h']]], + ['ksintheta23_38',['kSinTheta23',['../classcovarianceOsc.html#ae065d9a3c633bfcef6915b2b86d3e209',1,'covarianceOsc']]], + ['ksplineinterpolations_39',['kSplineInterpolations',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a9e1a345912f2baebd863ab7d40c9ab7b',1,'Structs.h']]], + ['ktarget_5fal_40',['kTarget_Al',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a66f3bd62228437490c204146fc3c9650',1,'Structs.h']]], + ['ktarget_5far_41',['kTarget_Ar',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aaf8c52b9d0543ba495ac4810ae574ab6',1,'Structs.h']]], + ['ktarget_5fc_42',['kTarget_C',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a4ef60de1c65e797b83a21dc41c9d24c1',1,'Structs.h']]], + ['ktarget_5ffe_43',['kTarget_Fe',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a40b8c7791706f48abf66e8fa8f943282',1,'Structs.h']]], + ['ktarget_5fh_44',['kTarget_H',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a93b6b80f9eb311ce2ed33ee3ab3d628f',1,'Structs.h']]], + ['ktarget_5fn_45',['kTarget_N',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580ac62ee782c726abaef5be73fa37051f1a',1,'Structs.h']]], + ['ktarget_5fo_46',['kTarget_O',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aed102c56020984a88e9d68c44f7cc59e',1,'Structs.h']]], + ['ktarget_5fpb_47',['kTarget_Pb',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580ad5d1996f0e943feb8183b9b07ab701c0',1,'Structs.h']]], + ['ktarget_5fti_48',['kTarget_Ti',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aaf03f51fe85225e1b0a61f50e6593dc4',1,'Structs.h']]], + ['ktspline3_49',['kTSpline3',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a56c886e7b34c938027a7140748999c8a',1,'Structs.h']]], + ['kxsecpar_50',['kXSecPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba7386f5611ea4d01b85b9bb92a5ca335f',1,'MCMCProcessor.h']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..5be0b3a8 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['l_0',['L',['../classcovarianceOsc.html#a6325f8cf5f93b542d7e6199ec0a3facb',1,'covarianceOsc']]], + ['lagl_1',['LagL',['../classMCMCProcessor.html#a499cdae3bf94643d76648058c9160913',1,'MCMCProcessor']]], + ['lastpcadpar_2',['LastPCAdpar',['../classcovarianceBase.html#a5ebdc744b733656972a15f1657915a3f',1,'covarianceBase']]], + ['lcoarsecosz_3',['lCoarseCosz',['../classOscillator.html#a3e3942ecafb657261686d12d85319d0e',1,'Oscillator']]], + ['lcoarseenergy_4',['lCoarseEnergy',['../classOscillator.html#a2c910ee2cce15ceadce370ef6dd37e36',1,'Oscillator']]], + ['length_5',['length',['../classTF1__red.html#afb6f71c68561d1f4da22054197fd495d',1,'TF1_red']]], + ['lfinecosz_6',['lFineCosz',['../classOscillator.html#a8abef911d6715101e5134c6810f718d8',1,'Oscillator']]], + ['lfineenergy_7',['lFineEnergy',['../classOscillator.html#af7b7a22de9ada05bfde0a3c94c5a89ea',1,'Oscillator']]], + ['likelihoodfit_8',['likelihoodfit',['../classLikelihoodFit.html',1,'LikelihoodFit'],['../classLikelihoodFit.html#a1d3cb4fbaa7a0e6e1d7f4804a434e1ea',1,'LikelihoodFit::LikelihoodFit()']]], + ['likelihoodfit_2ecpp_9',['LikelihoodFit.cpp',['../LikelihoodFit_8cpp.html',1,'']]], + ['likelihoodfit_2eh_10',['LikelihoodFit.h',['../LikelihoodFit_8h.html',1,'']]], + ['linewidth_11',['lineWidth',['../PlotLLH_8cpp.html#a7740e2371b2eb3a71ca8660b26a842e4',1,'PlotLLH.cpp']]], + ['linspace_12',['linspace',['../classOscillator.html#aac8981cdcfe4d89228d9a45d2dd7f396',1,'Oscillator']]], + ['loadsplinefile_13',['LoadSplineFile',['../classSMonolith.html#a6783cdc3c485378ca21852e1a7b02482',1,'SMonolith']]], + ['logger_14',['Logger',['../md__2github_2workspace_2CONTRIBUTING.html#autotoc_md4',1,'']]], + ['loglcurr_15',['loglcurr',['../classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976',1,'FitterBase::logLCurr'],['../classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb',1,'stretch::logLCurr']]], + ['loglprop_16',['loglprop',['../classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace',1,'FitterBase::logLProp'],['../classstretch.html#a5b2b99948404ef0fd2f6892c471c7682',1,'stretch::logLProp']]], + ['logspace_17',['logspace',['../classOscillator.html#a1c8845334fcbedc588b8f6bafebe3e52',1,'Oscillator']]], + ['lower_5fadapt_18',['lower_adapt',['../classcovarianceBase.html#a1b5d0d1b92c39512e29a5d8ec8fdd857',1,'covarianceBase']]], + ['lproductionheightrange_19',['lProductionHeightRange',['../classOscillator.html#a3bd67bd51070a45ea5976f0655a48b5d',1,'Oscillator']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..555876ae --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,91 @@ +var searchData= +[ + ['m_5fe_0',['m_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ab2771e69b128dc53bc4f8bacfcfcecb0',1,'Structs.h']]], + ['m_5fm_1',['m_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a41071dca17d04928fa0852ded8c1025b',1,'Structs.h']]], + ['m_5ft_2',['m_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af7aaf8e15fe7f438db465ff6ce791d1b',1,'Structs.h']]], + ['mach3_3',['mach3',['../md__2github_2workspace_2README.html#autotoc_md9',1,'Building against MaCh3'],['../md__2github_2workspace_2CONTRIBUTING.html',1,'How to Contribute Code to MaCh3']]], + ['mach3_20img_20src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_4',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['mach3_20reference_20documentation_5',['MaCh3 Reference Documentation',['../index.html',1,'']]], + ['mach3_5fmodes_6',['MaCh3_Modes',['../classMaCh3__Modes.html',1,'']]], + ['mach3llhfilename_7',['Mach3LLHFileName',['../PlotLLH_8cpp.html#a6d439ed7ab6a5217ffd29ebaf72f3fcd',1,'PlotLLH.cpp']]], + ['mach3log_5fcritical_8',['MACH3LOG_CRITICAL',['../MaCh3Logger_8h.html#a07ff6d6a15b24f94afc88a1b89779beb',1,'MaCh3Logger.h']]], + ['mach3log_5fdebug_9',['MACH3LOG_DEBUG',['../MaCh3Logger_8h.html#a4db4657acad5c79ac4bbb66a9d1c5905',1,'MaCh3Logger.h']]], + ['mach3log_5ferror_10',['MACH3LOG_ERROR',['../MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2',1,'MaCh3Logger.h']]], + ['mach3log_5finfo_11',['MACH3LOG_INFO',['../MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3',1,'MaCh3Logger.h']]], + ['mach3log_5foff_12',['MACH3LOG_OFF',['../MaCh3Logger_8h.html#afa930300ae979052e16935bee1397a95',1,'MaCh3Logger.h']]], + ['mach3log_5ftrace_13',['MACH3LOG_TRACE',['../MaCh3Logger_8h.html#afc88f0aa23c7127b2ff6e5c7ca3fa892',1,'MaCh3Logger.h']]], + ['mach3log_5fwarn_14',['MACH3LOG_WARN',['../MaCh3Logger_8h.html#ad5b2eb6377721e3ac95def22c2386bb1',1,'MaCh3Logger.h']]], + ['mach3logger_2eh_15',['MaCh3Logger.h',['../MaCh3Logger_8h.html',1,'']]], + ['mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_16',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['mach3utils_17',['MaCh3Utils',['../namespaceMaCh3Utils.html',1,'']]], + ['mach3welcome_18',['MaCh3Welcome',['../namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c',1,'MaCh3Utils']]], + ['madepostfit_19',['MadePostfit',['../classMCMCProcessor.html#aecc35d4ea7d2c7e020e50388ba0ffb64',1,'MCMCProcessor']]], + ['main_20',['main',['../GetPostfitParamPlots_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;GetPostfitParamPlots.cpp'],['../RHat_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;RHat.cpp'],['../ProcessMCMC_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;ProcessMCMC.cpp'],['../PlotLLH_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv):&#160;PlotLLH.cpp'],['../CombineMaCh3Chains_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;CombineMaCh3Chains.cpp'],['../GetPenaltyTerm_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;GetPenaltyTerm.cpp'],['../DiagMCMC_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;DiagMCMC.cpp']]], + ['mainpage_2emd_21',['mainpage.md',['../mainpage_8md.html',1,'']]], + ['makeclosestposdef_22',['makeClosestPosDef',['../classcovarianceBase.html#a8a709e1c6c58618cf65400eef1741cc7',1,'covarianceBase']]], + ['makecorr_23',['MakeCorr',['../classMCMCProcessor.html#a6960c878948006c40534fc4a1a3d3857',1,'MCMCProcessor']]], + ['makecovariance_24',['MakeCovariance',['../classMCMCProcessor.html#afc94f21ffd599b1e2dd7e62f24f6c4de',1,'MCMCProcessor']]], + ['makecovariance_5fmp_25',['MakeCovariance_MP',['../classMCMCProcessor.html#a02b05bf6fc92ef7eed5ea01d044a963d',1,'MCMCProcessor']]], + ['makecredibleintervals_26',['MakeCredibleIntervals',['../classMCMCProcessor.html#a04f8df87fd18567a15376528bdd1347d',1,'MCMCProcessor']]], + ['makecredibleregions_27',['MakeCredibleRegions',['../classMCMCProcessor.html#a21f73b2353b546d06ae2a01046cf534e',1,'MCMCProcessor']]], + ['makefddetplots_28',['MakeFDDetPlots',['../GetPostfitParamPlots_8cpp.html#afe35956eaa3ea0ca15aa76c791342ee7',1,'GetPostfitParamPlots.cpp']]], + ['makefluxplots_29',['MakeFluxPlots',['../GetPostfitParamPlots_8cpp.html#a8eea239b18cd012be79062d6704ba590',1,'GetPostfitParamPlots.cpp']]], + ['makenddetplots_30',['MakeNDDetPlots',['../GetPostfitParamPlots_8cpp.html#a537db5b05ce6037e9221b2250d91c688',1,'GetPostfitParamPlots.cpp']]], + ['makeoscplots_31',['MakeOscPlots',['../GetPostfitParamPlots_8cpp.html#a955c5fe946d1b9941e2b9444514f2699',1,'GetPostfitParamPlots.cpp']]], + ['makeoutputfile_32',['MakeOutputFile',['../classMCMCProcessor.html#aa5a7761e97cf2e24c7d877a5374b7333',1,'MCMCProcessor']]], + ['makeposdef_33',['MakePosDef',['../classcovarianceBase.html#a9fed634edbeca5336be11a26516b4efe',1,'covarianceBase']]], + ['makepostfit_34',['MakePostfit',['../classMCMCProcessor.html#a8667510132aa01395520f028287f511b',1,'MCMCProcessor']]], + ['makeprefit_35',['MakePrefit',['../classMCMCProcessor.html#a03267ff95cb0f4dab0882db852893768',1,'MCMCProcessor']]], + ['makeratio_36',['makeRatio',['../GetPostfitParamPlots_8cpp.html#a832c42b3026f68415157d43337c79b01',1,'GetPostfitParamPlots.cpp']]], + ['maketgraphasymmerrors_37',['MakeTGraphAsymmErrors',['../GetPostfitParamPlots_8cpp.html#aed2de9cedffab9b66f1d8ef50137ecef',1,'GetPostfitParamPlots.cpp']]], + ['maketriangleplot_38',['MakeTrianglePlot',['../classMCMCProcessor.html#ab3ba06637facc17a38c25fe80976ebfb',1,'MCMCProcessor']]], + ['makevector_39',['MakeVector',['../Structs_8h.html#a6a7efa31950e85001a060205c7d07c97',1,'Structs.h']]], + ['makeviolin_40',['MakeViolin',['../classMCMCProcessor.html#a04976c69f0ef0b3f39edcf5f25f90981',1,'MCMCProcessor']]], + ['makexsecplots_41',['MakeXsecPlots',['../GetPostfitParamPlots_8cpp.html#af79360b46fcb2923363d459ca9c4a0a8',1,'GetPostfitParamPlots.cpp']]], + ['manager_42',['manager',['../classmanager.html',1,'manager'],['../classmanager.html#a33e8fc4162ae32f5107c3eb35a5831ec',1,'manager::manager()']]], + ['manager_2ecpp_43',['manager.cpp',['../manager_8cpp.html',1,'']]], + ['manager_2eh_44',['manager.h',['../manager_8h.html',1,'']]], + ['manycoeff_5farr_45',['manycoeff_arr',['../classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d',1,'splineFDBase']]], + ['marginalposteriorvariance_46',['MarginalPosteriorVariance',['../RHat_8cpp.html#a68813385f1240d1264e139391b12bf05',1,'RHat.cpp']]], + ['marginalposteriorvariancefolded_47',['MarginalPosteriorVarianceFolded',['../RHat_8cpp.html#af4fae3d323e2f5220b3506386304f8f4',1,'RHat.cpp']]], + ['matrixmult_48',['matrixmult',['../namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00',1,'MaCh3Utils::MatrixMult(TMatrixD A, TMatrixD B)'],['../namespaceMaCh3Utils.html#a0cd7bf76aca73a1e36519b04e19dd6c0',1,'MaCh3Utils::MatrixMult(double *A, double *B, int n)'],['../namespaceMaCh3Utils.html#af03aca63ae363cb51c7033e8e91ade6d',1,'MaCh3Utils::MatrixMult(double **A, double **B, int n)']]], + ['matrixname_49',['matrixName',['../classcovarianceBase.html#a47cf443e7de1d83bd979ccc8d35b8599',1,'covarianceBase']]], + ['matrixvectormulti_50',['MatrixVectorMulti',['../classcovarianceBase.html#a3c1e06ff3aa33867b5c22ef189997c5b',1,'covarianceBase']]], + ['matrixvectormultisingle_51',['MatrixVectorMultiSingle',['../classcovarianceBase.html#acde5a16f1159cbdb802b6e05a1607494',1,'covarianceBase']]], + ['mc_5fstat_5fllh_52',['mc_stat_llh',['../classmanager.html#aa7619b235f224c34e77f8d09f42a5911',1,'manager']]], + ['mcmc_53',['mcmc',['../classmcmc.html',1,'mcmc'],['../classmcmc.html#a56195958aee22996158d3ba341dcf31e',1,'mcmc::mcmc()']]], + ['mcmc_2ecpp_54',['mcmc.cpp',['../mcmc_8cpp.html',1,'']]], + ['mcmc_2eh_55',['mcmc.h',['../mcmc_8h.html',1,'']]], + ['mcmcfile_56',['mcmcfile',['../classMCMCProcessor.html#a6d212d77a818304a8674a7b9b18d43b8',1,'MCMCProcessor::MCMCFile'],['../RHat_8cpp.html#aa19a5e341d34dce5448ee490dedba8ef',1,'MCMCFile:&#160;RHat.cpp']]], + ['mcmcprocessor_57',['mcmcprocessor',['../classMCMCProcessor.html',1,'MCMCProcessor'],['../classMCMCProcessor.html#a88b08d13e8783b2d7d443d377a64130d',1,'MCMCProcessor::MCMCProcessor()']]], + ['mcmcprocessor_2ecpp_58',['MCMCProcessor.cpp',['../MCMCProcessor_8cpp.html',1,'']]], + ['mcmcprocessor_2eh_59',['MCMCProcessor.h',['../MCMCProcessor_8h.html',1,'']]], + ['mcsamples_60',['MCSamples',['../classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13',1,'samplePDFFDBase']]], + ['mcthrow_61',['MCthrow',['../classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838',1,'samplePDFBase']]], + ['mean_62',['Mean',['../RHat_8cpp.html#ab7d224b5fffa9367046f2976bb4972d1',1,'RHat.cpp']]], + ['meanfolded_63',['MeanFolded',['../RHat_8cpp.html#a458eb859b19f20edc7607814bd68d449',1,'RHat.cpp']]], + ['meanglobal_64',['MeanGlobal',['../RHat_8cpp.html#a4526fa4abfccd1173c87267a0beb6977',1,'RHat.cpp']]], + ['meanglobalfolded_65',['MeanGlobalFolded',['../RHat_8cpp.html#a5afb47112913938579beb8b9f385a574',1,'RHat.cpp']]], + ['means_66',['Means',['../classMCMCProcessor.html#acaf7f239136dfa3506d095b612323d0a',1,'MCMCProcessor']]], + ['means_5fgauss_67',['Means_Gauss',['../classMCMCProcessor.html#a600fc8c39af2750df91fb7a0ff85ac74',1,'MCMCProcessor']]], + ['means_5fhpd_68',['Means_HPD',['../classMCMCProcessor.html#a32657dc39a7fc0d04804f6195a3d8c3e',1,'MCMCProcessor']]], + ['medianarr_69',['MedianArr',['../RHat_8cpp.html#a761fd0b4a970686c00ce3e4daefd7f73',1,'RHat.cpp']]], + ['minuit_70',['minuit',['../classMinuitFit.html#a3f5a1b7de36ce6c55821e262b016cb19',1,'MinuitFit']]], + ['minuitfit_71',['minuitfit',['../classMinuitFit.html#a5392a49207148d7b884974db3d3f5eac',1,'MinuitFit::MinuitFit()'],['../classMinuitFit.html',1,'MinuitFit']]], + ['minuitfit_2ecpp_72',['MinuitFit.cpp',['../MinuitFit_8cpp.html',1,'']]], + ['minuitfit_2eh_73',['MinuitFit.h',['../MinuitFit_8h.html',1,'']]], + ['mode_74',['mode',['../structfdmc__base.html#a86b6b78f41e045592074494f960c8128',1,'fdmc_base']]], + ['mode_5ftofancystring_75',['Mode_ToFancyString',['../classMaCh3__Modes.html#a62f99686baadf45e267d69405044a15f',1,'MaCh3_Modes']]], + ['mode_5ftosplinemode_76',['Mode_ToSplineMode',['../classMaCh3__Modes.html#afb8e231f7b18118ec89046713e46807d',1,'MaCh3_Modes']]], + ['mode_5ftostring_77',['Mode_ToString',['../classMaCh3__Modes.html#a24414f21a8178b5dbf146fbb33f94729',1,'MaCh3_Modes']]], + ['modes_78',['modes',['../classXsecNorms4.html#ad0632d5a94a37ee5ce297698abadd844',1,'XsecNorms4']]], + ['modestruct_79',['ModeStruct',['../classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133',1,'samplePDFBase']]], + ['modifyweights_80',['ModifyWeights',['../classSMonolith.html#affe44c41d692827757f22f5b9173170f',1,'SMonolith']]], + ['modifyweights_5fgpu_81',['ModifyWeights_GPU',['../classSMonolith.html#a72cd282322bdaadb23d8a376efa9e2c1',1,'SMonolith']]], + ['monitor_2ecpp_82',['Monitor.cpp',['../Monitor_8cpp.html',1,'']]], + ['monitor_2eh_83',['Monitor.h',['../Monitor_8h.html',1,'']]], + ['monolithindex_84',['MonolithIndex',['../classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a',1,'splineFDBase']]], + ['monolithsize_85',['MonolithSize',['../classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce',1,'splineFDBase']]], + ['multipleprocessmcmc_86',['MultipleProcessMCMC',['../ProcessMCMC_8cpp.html#a83be70750a728e4deae518ea3ffaf388',1,'ProcessMCMC.cpp']]], + ['multithreading_87',['Multithreading',['../md__2github_2workspace_2README.html#autotoc_md10',1,'']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..d6e8dc5b --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,81 @@ +var searchData= +[ + ['n_0',['N',['../classstretch.html#a8725b8b5a1d794ea4a4549346992d373',1,'stretch']]], + ['n_5fpars_1',['n_pars',['../classtune.html#aabd82286e47540764bdc139c9c2c1bf0',1,'tune']]], + ['name_2',['name',['../classXsecNorms4.html#a848104ff97acc9a0df9861acc8615aa7',1,'XsecNorms4']]], + ['nbatches_3',['nBatches',['../classMCMCProcessor.html#a02c5a3f849cf217705816c650c678d19',1,'MCMCProcessor']]], + ['nbins_4',['nbins',['../GetPostfitParamPlots_8cpp.html#ae4842c1619a902b2761696f3849889a1',1,'nBins:&#160;GetPostfitParamPlots.cpp'],['../classMCMCProcessor.html#a6b74f8195bcbca0979f9e9fe43468bae',1,'MCMCProcessor::nBins']]], + ['nbranches_5',['nBranches',['../classMCMCProcessor.html#af6ba5d9aec5350fafebbf81309e813cb',1,'MCMCProcessor']]], + ['nchains_6',['Nchains',['../RHat_8cpp.html#a231bc179b5599c7e29d5ba28ff2b4b70',1,'RHat.cpp']]], + ['ncoarsecosz_7',['nCoarseCosz',['../classOscillator.html#a3255db661337e56813d6d36b3114a42d',1,'Oscillator']]], + ['ncoarseenergy_8',['nCoarseEnergy',['../classOscillator.html#a44ed039b5273d288cff2e38999eeac2a',1,'Oscillator']]], + ['ndims_9',['nDims',['../classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8',1,'samplePDFBase']]], + ['ndparameters_10',['NDParameters',['../GetPostfitParamPlots_8cpp.html#adb4ee3a874472b4ffccc8734da66250e',1,'GetPostfitParamPlots.cpp']]], + ['ndparametersstartingpos_11',['NDParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#aa7bc6e5554391b57acf10c691b6374e0',1,'GetPostfitParamPlots.cpp']]], + ['ndraw_12',['ndraw',['../RHat_8cpp.html#ae2faf756e30936102294777663fae31d',1,'nDraw:&#160;RHat.cpp'],['../classMCMCProcessor.html#aa30545fedb0af2ad9619d6accf42a10d',1,'MCMCProcessor::nDraw']]], + ['ndsamplesbins_13',['ndsamplesbins',['../classMCMCProcessor.html#ae76b02ce85737d30c778698ba127933b',1,'MCMCProcessor::NDSamplesBins'],['../GetPostfitParamPlots_8cpp.html#a828808dfc5081853471b1bf2cf12109f',1,'NDSamplesBins:&#160;GetPostfitParamPlots.cpp']]], + ['ndsamplesnames_14',['ndsamplesnames',['../classMCMCProcessor.html#a27c8a25155baab660fc9658861c433ab',1,'MCMCProcessor::NDSamplesNames'],['../GetPostfitParamPlots_8cpp.html#af30d1996a67bb4c906afbede1c815e31',1,'NDSamplesNames:&#160;GetPostfitParamPlots.cpp']]], + ['nentries_15',['nEntries',['../classMCMCProcessor.html#af3a19b885e9c34e1674aea8cfbe14e1c',1,'MCMCProcessor']]], + ['neutrinoflavourtoindex_16',['NeutrinoFlavourToIndex',['../classOscillator.html#ab07a0513911356e0dad8fc518e0a9d1d',1,'Oscillator']]], + ['neutrinoindextoflavour_17',['NeutrinoIndexToFlavour',['../classOscillator.html#abbef83bf5434479309c108e4f2309e15',1,'Oscillator']]], + ['neutrinoindextosign_18',['NeutrinoIndexToSign',['../classOscillator.html#a53c250d9ecef1f06de2b1ad7cb7d7a8c',1,'Oscillator']]], + ['neutrinosigntoindex_19',['NeutrinoSignToIndex',['../classOscillator.html#afcf2afcc433827f8adf75cec1a4efe5b',1,'Oscillator']]], + ['neutrinotype_20',['NeutrinoType',['../structfdmc__base.html#a68642e2df5ed3df12633de57599f276a',1,'fdmc_base']]], + ['neutrinotypes_21',['NeutrinoTypes',['../classOscillator.html#ae838fed43a46d8a7476a46fc500c7609',1,'Oscillator']]], + ['neutrinotypes_5fnames_22',['NeutrinoTypes_Names',['../classOscillator.html#a3b1d16da8ceb60e74217bb5f42df8210',1,'Oscillator']]], + ['nevents_23',['nevents',['../structfdmc__base.html#abc7c499f714510adc13362187ec541e0',1,'fdmc_base::nEvents'],['../classSMonolith.html#ac86282b04659bae5cccb6073c9edc0a5',1,'SMonolith::NEvents']]], + ['nfiles_24',['nFiles',['../ProcessMCMC_8cpp.html#a6b25bcddaae9b868109dc98a54476e46',1,'ProcessMCMC.cpp']]], + ['nfinalflavours_25',['nFinalFlavours',['../classOscillator.html#a535e02743b317f2400747b824d075ee6',1,'Oscillator']]], + ['nfinecosz_26',['nFineCosz',['../classOscillator.html#a3d1aa5b31722cd5342dfe6d30ee7fa99',1,'Oscillator']]], + ['nfineenergy_27',['nFineEnergy',['../classOscillator.html#a632860953ec6d0a0b1b0436e10c9777e',1,'Oscillator']]], + ['nflux_28',['nFlux',['../classMCMCProcessor.html#acfc681553c5fbba89e133dfda605db3c',1,'MCMCProcessor']]], + ['nfuncparams_29',['nFuncParams',['../classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3',1,'samplePDFFDBase']]], + ['ninitialflavours_30',['nInitialFlavours',['../classOscillator.html#a77bf50907a561d490844aa901282c6f2',1,'Oscillator']]], + ['nkeptpcapars_31',['nKeptPCApars',['../classcovarianceBase.html#a36379c39ddfc130b2008944471795b47',1,'covarianceBase']]], + ['nknots_32',['nKnots',['../classSMonolith.html#afc0e3d1eafd575cf7628319a66925d5b',1,'SMonolith']]], + ['nknowndetids_33',['nKnownDetIDs',['../namespaceMaCh3Utils.html#a24bdf4d0354265aecdd2b7e357a3c64b',1,'MaCh3Utils']]], + ['nlayers_34',['nLayers',['../classOscillator.html#a162b06439b1da21a33929c329d1bf5f5',1,'Oscillator']]], + ['nmaxbin_35',['nMaxBin',['../classOscillator.html#a02c589ad1c87cfa2b1f97f0c0cda326c',1,'Oscillator']]], + ['nneutrinosigns_36',['nNeutrinoSigns',['../classOscillator.html#a01dab3bc1c38f47917850b6fb31edbf4',1,'Oscillator']]], + ['nominal_37',['nominal',['../GetPenaltyTerm_8cpp.html#a2c8ba98cfe4ac3d1f09ac3e90319e090',1,'GetPenaltyTerm.cpp']]], + ['nomxbin_38',['NomXBin',['../structfdmc__base.html#ae69617156a70dffc091e5e16efab2067',1,'fdmc_base']]], + ['nomybin_39',['NomYBin',['../structfdmc__base.html#abd8d56f6ab427aa3e657707e6ad805f7',1,'fdmc_base']]], + ['nonsampledirnames_40',['nonSampleDirNames',['../PlotLLH_8cpp.html#a4efd2f2417608fa67730f672cd7a534f',1,'PlotLLH.cpp']]], + ['nooverflowintegral_41',['nooverflowintegral',['../Structs_8h.html#a34ea004397beb80720b7cf838ba94410',1,'NoOverflowIntegral(TH2Poly *):&#160;Structs.cpp'],['../Structs_8cpp.html#ab18c6b2408d7b9021bad06d47a06ee8d',1,'NoOverflowIntegral(TH2Poly *poly):&#160;Structs.cpp']]], + ['normalisepoly_42',['normalisepoly',['../Structs_8h.html#ae28c217f8e8591248bfa54e95fdd7741',1,'NormalisePoly(TH2Poly *Histogram):&#160;Structs.cpp'],['../Structs_8cpp.html#ae28c217f8e8591248bfa54e95fdd7741',1,'NormalisePoly(TH2Poly *Histogram):&#160;Structs.cpp']]], + ['normparams_43',['NormParams',['../classcovarianceXsec.html#acd6c2346a5b808c6917e4828bbb633f5',1,'covarianceXsec']]], + ['noscchans_44',['nOscChans',['../classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3',1,'splineFDBase']]], + ['noscpars_45',['nOscpars',['../classOscillator.html#a19c25955aac622b8d1783faeed89a1d1',1,'Oscillator']]], + ['not_5ffound_5fstr_46',['NOT_FOUND_STR',['../PlotLLH_8cpp.html#a4f80a1d1e24115848d333d2b59c238af',1,'PlotLLH.cpp']]], + ['nparam_47',['nParam',['../classMCMCProcessor.html#a4200e7cbe1c8f811d3640ebfd648ca85',1,'MCMCProcessor']]], + ['nparams_48',['nparams',['../classXSecStruct.html#a51b6898cd72dc0305745b21547a6ccb9',1,'XSecStruct::nParams'],['../classSMonolith.html#a4606b53f321992377d420a838c76ab3b',1,'SMonolith::nParams']]], + ['npars_49',['npars',['../classThrowParms.html#a0a29faa43eb964a982d8da7e1511f4af',1,'ThrowParms::npars'],['../classLikelihoodFit.html#ac779acfe140500d06e42a1d4ace25385',1,'LikelihoodFit::NPars'],['../classcovarianceBase.html#ac98c384a7063e12d4aa538d111b0cf80',1,'covarianceBase::npars']]], + ['nparspca_50',['NParsPCA',['../classLikelihoodFit.html#a0b50b7b607751e80b6c85e9db98631af',1,'LikelihoodFit']]], + ['npoints_51',['nPoints',['../classTSpline3__red.html#a30f59091bb5e5fb23850e45edb3bc654',1,'TSpline3_red']]], + ['nprimarybins_52',['nPrimaryBins',['../classOscillator.html#a893046dc7a3a4f9a47a67279b367eb3a',1,'Oscillator']]], + ['nprimarybinsx_53',['nPrimaryBinsX',['../classOscillator.html#a49d6df7e692434f1e72c225ddb3fa6f0',1,'Oscillator']]], + ['nprimarybinsy_54',['nPrimaryBinsY',['../classOscillator.html#a0a298ed536659720b790dd0e5725edec',1,'Oscillator']]], + ['nprimaryhists_55',['nPrimaryHists',['../classOscillator.html#a5998c82def4497c12a0927502cd12045',1,'Oscillator']]], + ['nproductionheightaveragingbins_56',['nProductionHeightAveragingBins',['../classOscillator.html#a26b4bd8fb0b02641b56e9cb0b1eaf05a',1,'Oscillator']]], + ['npts_57',['nPts',['../structFastSplineInfo.html#a3588208caca5261000da06f24f908b37',1,'FastSplineInfo']]], + ['nsamples_58',['nsamples',['../classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3',1,'samplePDFBase::nSamples'],['../classMCMCProcessor.html#a419d3669dbb54a55a635e35691134cc1',1,'MCMCProcessor::nSamples']]], + ['nsecondarybins_59',['nSecondaryBins',['../classOscillator.html#af940f9e3168802e453b786ba74ad2322',1,'Oscillator']]], + ['nsecondarybinsx_60',['nSecondaryBinsX',['../classOscillator.html#a62d4013f31fbad6545971e5ca0c59496',1,'Oscillator']]], + ['nsecondarybinsy_61',['nSecondaryBinsY',['../classOscillator.html#a3998a232197e0448b15f9073a056bf27',1,'Oscillator']]], + ['nselections_62',['NSelections',['../classsamplePDFFDBase.html#a2e76b60ca2d2369b7ac798c6d1963077',1,'samplePDFFDBase']]], + ['nsplineparams_63',['nSplineParams',['../classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40',1,'splineFDBase']]], + ['nsplines_5ftotal_64',['NSplines_total',['../classSMonolith.html#a419c7eb29dfa7187b52d18c430763721',1,'SMonolith']]], + ['nsplines_5ftotal_5flarge_65',['NSplines_total_large',['../classSMonolith.html#aee3c18513f8209f1ac940b492cd3ed68',1,'SMonolith']]], + ['nsplines_5fvalid_66',['NSplines_valid',['../classSMonolith.html#ab72795333d6f632565b0f7eb0ca8a658',1,'SMonolith']]], + ['nsteps_67',['nSteps',['../classMCMCProcessor.html#aae0016a4e1d105d5d65243438c622a97',1,'MCMCProcessor']]], + ['nsysts_68',['nSysts',['../classMCMCProcessor.html#adf518be96278f1d3901404cfbe767b67',1,'MCMCProcessor']]], + ['ntotal_5fweight_5fpointers_69',['ntotal_weight_pointers',['../structfdmc__base.html#a12160f1e50ecedf3ffaeacd833f31708',1,'fdmc_base']]], + ['ntoys_70',['Ntoys',['../RHat_8cpp.html#afa110f35953074d3cc7ad452d003fd7a',1,'RHat.cpp']]], + ['nuniquesysts_71',['nUniqueSysts',['../classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af',1,'splineFDBase']]], + ['nupdg_72',['nupdg',['../structfdmc__base.html#ad17fa8ac568b25cf995d3ee317e339a9',1,'fdmc_base::nupdg'],['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2',1,'NuPDG:&#160;Structs.h']]], + ['nupdgunosc_73',['nupdgUnosc',['../structfdmc__base.html#a222ac569ed5f4037392caa0bb0be85aa',1,'fdmc_base']]], + ['nutype_74',['nutype',['../structfdmc__base.html#a4e92a2591643f90cbba9b86243f43310',1,'fdmc_base::nutype'],['../classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b',1,'splineBase::nutype']]], + ['nwalk_75',['nwalk',['../classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e',1,'stretch']]], + ['nxsec_5fnorm_5fpointers_76',['nxsec_norm_pointers',['../structfdmc__base.html#ad8f9b7898527027d84a0278ab8325561',1,'fdmc_base']]], + ['nxsec_5fspline_5fpointers_77',['nxsec_spline_pointers',['../structfdmc__base.html#a773bd0b1e143d015dd1631fd3b4a5733',1,'fdmc_base']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..00b2c67c --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['osc_0',['osc',['../classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634',1,'FitterBase::osc'],['../classstretch.html#abcfd2f7460a63de15654eb99400942c9',1,'stretch::osc'],['../classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045',1,'samplePDFFDBase::Osc']]], + ['osc2_1',['osc2',['../classFitterBase.html#a248ca37a92c46ddd944a31d348b8c7bb',1,'FitterBase']]], + ['osc_5fbinned_2',['osc_binned',['../classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836',1,'samplePDFFDBase']]], + ['osc_5fbinned_5faxis_3',['osc_binned_axis',['../classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828',1,'samplePDFFDBase']]], + ['osc_5fllh_4',['osc_llh',['../classFitterBase.html#ac7a4c5b2a90aba0e4bf6600b7af05168',1,'FitterBase::osc_llh'],['../classstretch.html#a57c45d6fc50aebcad403605cee37c9bc',1,'stretch::osc_llh']]], + ['osc_5fonly_5',['osc_only',['../classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3',1,'stretch']]], + ['osc_5fw_6',['osc_w',['../structfdmc__base.html#a22d2671171c494171edc77cd6d2b93ac',1,'fdmc_base']]], + ['osc_5fw_5fpointer_7',['osc_w_pointer',['../structfdmc__base.html#ab7a414bc0959c7114aa6cb7be7684948',1,'fdmc_base']]], + ['oscbar_8',['oscbar',['../classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67',1,'stretch']]], + ['oscchannels_9',['OscChannels',['../classOscillator.html#a18dfed5e9805e92d67d554f056e6a63b',1,'Oscillator']]], + ['oscchannels_5fnames_10',['OscChannels_Names',['../classOscillator.html#aadf0505e741083bbde8845f1077c2f82',1,'Oscillator']]], + ['oscclass_5fcudaprob3_2ecpp_11',['OscClass_CUDAProb3.cpp',['../OscClass__CUDAProb3_8cpp.html',1,'']]], + ['oscclass_5fcudaprob3_2eh_12',['OscClass_CUDAProb3.h',['../OscClass__CUDAProb3_8h.html',1,'']]], + ['oscillator_13',['oscillator',['../md__2github_2workspace_2README.html#autotoc_md12',1,'Oscillator'],['../classOscillator.html',1,'Oscillator'],['../classOscillator.html#acc240480ba377fa014440f718af60daf',1,'Oscillator::Oscillator()'],['../structfdmc__base.html#a9bdecfa8f4ffd15989d9b9dda3236ab9',1,'fdmc_base::Oscillator']]], + ['oscnutype_14',['oscnutype',['../structfdmc__base.html#a8bdce59edb6430b7c865832cb264b39e',1,'fdmc_base']]], + ['oscparameters_15',['OscParameters',['../GetPostfitParamPlots_8cpp.html#a5aedbc0849506477d31e20d345c967eb',1,'GetPostfitParamPlots.cpp']]], + ['oscparametersstartingpos_16',['OscParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#a3ec8e00c5c17bd6768473b08156f6c1c',1,'GetPostfitParamPlots.cpp']]], + ['oscpars1_17',['oscpars1',['../classcovarianceOsc.html#ad93cd8b3f255a865b56b008a9e867634',1,'covarianceOsc']]], + ['outfilename_18',['OutFileName',['../CombineMaCh3Chains_8cpp.html#a021f9f978660c299af0d70b8d3b3d74c',1,'CombineMaCh3Chains.cpp']]], + ['outputfile_19',['outputfile',['../classMCMCProcessor.html#a62035b99df4617ab334cd1abd6ed0346',1,'MCMCProcessor::OutputFile'],['../classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990',1,'FitterBase::outputFile'],['../classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d',1,'stretch::outputFile']]], + ['outputname_20',['OutputName',['../classMCMCProcessor.html#a3d17c1720b91d6d0361da0b5dabfbbff',1,'MCMCProcessor']]], + ['outputprepared_21',['OutputPrepared',['../classFitterBase.html#a3bfd8f69df891d03bae0587cd1a1e1b7',1,'FitterBase']]], + ['outputsuffix_22',['OutputSuffix',['../classMCMCProcessor.html#aa34b50ce33fb2cb7d9e9ef2d9f2f67c1',1,'MCMCProcessor']]], + ['outtree_23',['outtree',['../classFitterBase.html#aed2032b9c4a4f2248abe548f54f8dcc8',1,'FitterBase::outTree'],['../classstretch.html#aaf0ddc53f573e673ad700418a2735d3c',1,'stretch::outTree']]], + ['overflowintegral_24',['overflowintegral',['../Structs_8cpp.html#a34345b88bcd0e45db5612d58a972a154',1,'OverflowIntegral(TH2Poly *poly):&#160;Structs.cpp'],['../Structs_8h.html#af8fbe767b9d4b04ddcfeb5a49dda16da',1,'OverflowIntegral(TH2Poly *):&#160;Structs.cpp']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..01b45829 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['basefuncpar_0',['BaseFuncPar',['../classBaseFuncPar.html',1,'']]], + ['box_1',['Box',['../structBox.html',1,'']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..a3a53f29 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['corner_0',['Corner',['../structCorner.html',1,'']]], + ['covariancebase_1',['covarianceBase',['../classcovarianceBase.html',1,'']]], + ['covarianceosc_2',['covarianceOsc',['../classcovarianceOsc.html',1,'']]], + ['covariancexsec_3',['covarianceXsec',['../classcovarianceXsec.html',1,'']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..c7f37a36 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['energyscale_0',['EnergyScale',['../classEnergyScale.html',1,'']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..fdc2c6f2 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['fastsplineinfo_0',['FastSplineInfo',['../structFastSplineInfo.html',1,'']]], + ['fdmc_5fbase_1',['fdmc_base',['../structfdmc__base.html',1,'']]], + ['fitterbase_2',['FitterBase',['../classFitterBase.html',1,'']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..cb94c3e0 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['interfacepdfebe_0',['interfacePDFEbE',['../classinterfacePDFEbE.html',1,'']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 00000000..2eb69e06 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['likelihoodfit_0',['LikelihoodFit',['../classLikelihoodFit.html',1,'']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 00000000..d58264f6 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['mach3_5fmodes_0',['MaCh3_Modes',['../classMaCh3__Modes.html',1,'']]], + ['manager_1',['manager',['../classmanager.html',1,'']]], + ['mcmc_2',['mcmc',['../classmcmc.html',1,'']]], + ['mcmcprocessor_3',['MCMCProcessor',['../classMCMCProcessor.html',1,'']]], + ['minuitfit_4',['MinuitFit',['../classMinuitFit.html',1,'']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 00000000..da5e1873 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['oscillator_0',['Oscillator',['../classOscillator.html',1,'']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 00000000..e96f2dc5 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['particle_0',['particle',['../classparticle.html',1,'']]], + ['pso_1',['PSO',['../classPSO.html',1,'']]] +]; diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 00000000..90702c36 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['samplepdfbase_0',['samplePDFBase',['../classsamplePDFBase.html',1,'']]], + ['samplepdffdbase_1',['samplePDFFDBase',['../classsamplePDFFDBase.html',1,'']]], + ['samplepdfinterface_2',['samplePDFInterface',['../classsamplePDFInterface.html',1,'']]], + ['skescale_3',['SKEScale',['../classSKEScale.html',1,'']]], + ['smonolith_4',['SMonolith',['../classSMonolith.html',1,'']]], + ['spline_5',['spline',['../classspline.html',1,'']]], + ['splinebase_6',['splineBase',['../classsplineBase.html',1,'']]], + ['splinefdbase_7',['splineFDBase',['../classsplineFDBase.html',1,'']]], + ['splineinterface_8',['splineInterface',['../classsplineInterface.html',1,'']]], + ['stretch_9',['stretch',['../classstretch.html',1,'']]] +]; diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 00000000..9062d7ec --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['tf1_5fred_0',['TF1_red',['../classTF1__red.html',1,'']]], + ['throwparms_1',['ThrowParms',['../classThrowParms.html',1,'']]], + ['truncated_5fspline_2',['Truncated_Spline',['../classTruncated__Spline.html',1,'']]], + ['tspline3_5fred_3',['TSpline3_red',['../classTSpline3__red.html',1,'']]], + ['tune_4',['tune',['../classtune.html',1,'']]] +]; diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 00000000..d228602f --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xsecnorms4_0',['XsecNorms4',['../classXsecNorms4.html',1,'']]], + ['xsecstruct_1',['XSecStruct',['../classXSecStruct.html',1,'']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 00000000..337d6cc1 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 11 11" + height="11" + width="11" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <path + id="path12" + d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z " + style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" /> +</svg> diff --git a/search/defines_0.js b/search/defines_0.js new file mode 100644 index 00000000..4c247a0a --- /dev/null +++ b/search/defines_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['_5f_5fbad_5fdouble_5f_5f_0',['__BAD_DOUBLE__',['../Structs_8h.html#a077c29deadfcb19af8c0c5cdf194118f',1,'Structs.h']]], + ['_5f_5fbad_5fint_5f_5f_1',['__BAD_INT__',['../Structs_8h.html#a7f562abe9c5a00ed82cfb38c60a74c39',1,'Structs.h']]], + ['_5f_5fbad_5fspline_5f_5f_2',['__BAD_SPLINE__',['../splineFDBase_8h.html#ae03212ae713477b2462720ff4d8abc30',1,'splineFDBase.h']]], + ['_5f_5fdefault_5freturn_5fval_5f_5f_3',['__DEFAULT_RETURN_VAL__',['../Structs_8h.html#a228eb740378da7cf951cd547cc82f439',1,'Structs.h']]], + ['_5f_5ffloat_5f_5f_4',['__float__',['../Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c',1,'Structs.h']]], + ['_5f_5fint_5f_5f_5',['__int__',['../Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3',1,'Structs.h']]], + ['_5f_5flarge_5flogl_5f_5f_6',['__LARGE_LOGL__',['../covarianceBase_8h.html#a949fbeb0e56580fc737cc2ccda06ccfa',1,'covarianceBase.h']]], + ['_5f_5fth2polyoverflowbins_5f_5f_7',['__th2polyoverflowbins__',['../Structs_8h.html#a9e73f964c30e6e3eef4c49bbd3aec314',1,'__TH2PolyOverflowBins__:&#160;Structs.h'],['../Structs_8h.html#a9e73f964c30e6e3eef4c49bbd3aec314',1,'__TH2PolyOverflowBins__:&#160;Structs.h']]], + ['_5f_5fundef_5f_5f_8',['__UNDEF__',['../MCMCProcessor_8h.html#a4972df9ed3901c5a9ad1fa86489ef042',1,'MCMCProcessor.h']]], + ['_5f_5funsigned_5fint_5f_5f_9',['__unsigned_int__',['../Structs_8h.html#addbdab6c52c9f6eac69ceb389bd814f5',1,'Structs.h']]], + ['_5fncoeff_5f_10',['_nCoeff_',['../SplineMonolith_8h.html#a283177311bade7400c6088e8fad71a1f',1,'SplineMonolith.h']]], + ['_5fntf1coeff_5f_11',['_nTF1Coeff_',['../SplineMonolith_8h.html#a911160077ffa38727e0494f178ce380a',1,'SplineMonolith.h']]] +]; diff --git a/search/defines_1.js b/search/defines_1.js new file mode 100644 index 00000000..cb2b5a14 --- /dev/null +++ b/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cuda_5fcallable_5fmember_0',['CUDA_CALLABLE_MEMBER',['../spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7',1,'spline.h']]] +]; diff --git a/search/defines_2.js b/search/defines_2.js new file mode 100644 index 00000000..c9c4b982 --- /dev/null +++ b/search/defines_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['mach3log_5fcritical_0',['MACH3LOG_CRITICAL',['../MaCh3Logger_8h.html#a07ff6d6a15b24f94afc88a1b89779beb',1,'MaCh3Logger.h']]], + ['mach3log_5fdebug_1',['MACH3LOG_DEBUG',['../MaCh3Logger_8h.html#a4db4657acad5c79ac4bbb66a9d1c5905',1,'MaCh3Logger.h']]], + ['mach3log_5ferror_2',['MACH3LOG_ERROR',['../MaCh3Logger_8h.html#a61052119a625282d0ec6d4a97adf3ee2',1,'MaCh3Logger.h']]], + ['mach3log_5finfo_3',['MACH3LOG_INFO',['../MaCh3Logger_8h.html#a95fa4dffc648e4c5536c9292c2bdcac3',1,'MaCh3Logger.h']]], + ['mach3log_5foff_4',['MACH3LOG_OFF',['../MaCh3Logger_8h.html#afa930300ae979052e16935bee1397a95',1,'MaCh3Logger.h']]], + ['mach3log_5ftrace_5',['MACH3LOG_TRACE',['../MaCh3Logger_8h.html#afc88f0aa23c7127b2ff6e5c7ca3fa892',1,'MaCh3Logger.h']]], + ['mach3log_5fwarn_6',['MACH3LOG_WARN',['../MaCh3Logger_8h.html#ad5b2eb6377721e3ac95def22c2386bb1',1,'MaCh3Logger.h']]] +]; diff --git a/search/defines_3.js b/search/defines_3.js new file mode 100644 index 00000000..b3955844 --- /dev/null +++ b/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['usebeta_0',['USEBETA',['../samplePDFFDBase_8h.html#aef32089fdd2db890db53022a2e7da7e8',1,'samplePDFFDBase.h']]] +]; diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 00000000..c28a4b9d --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cudaprob_5fnu_0',['CUDAProb_nu',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7',1,'Structs.h']]] +]; diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 00000000..91b4ce2a --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nupdg_0',['NuPDG',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2',1,'Structs.h']]] +]; diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 00000000..ca6f954b --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parameterenum_0',['ParameterEnum',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20b',1,'MCMCProcessor.h']]], + ['probnu_1',['ProbNu',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7',1,'Structs.h']]] +]; diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 00000000..a0e1efdc --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['splineinterpolation_0',['SplineInterpolation',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4',1,'Structs.h']]], + ['splinesegmentcoeffs_1',['SplineSegmentCoeffs',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8',1,'splineFDBase']]] +]; diff --git a/search/enums_4.js b/search/enums_4.js new file mode 100644 index 00000000..06cdf6a1 --- /dev/null +++ b/search/enums_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['targetmat_0',['TargetMat',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580',1,'Structs.h']]], + ['teststatistic_1',['TestStatistic',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67',1,'Structs.h']]] +]; diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 00000000..3c5f4f09 --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['e_5fe_0',['e_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af04821f14b7efebe3d2c170571d1cd80',1,'Structs.h']]], + ['e_5fm_1',['e_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a8d0364977d2872d7b24c32538dff19d0',1,'Structs.h']]], + ['e_5ft_2',['e_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a28f9d8572b6dde9faa7378ab7bcd10ee',1,'Structs.h']]] +]; diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 00000000..e7c89d2d --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['kakima_0',['kAkima',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4afe5701215b64da0194c6fead25edd976',1,'Structs.h']]], + ['kbarlowbeeston_1',['kBarlowBeeston',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a3c9b50397bd37ce679bbdda14f6108c4',1,'Structs.h']]], + ['kcoeffb_2',['kCoeffB',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc',1,'splineFDBase']]], + ['kcoeffc_3',['kCoeffC',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e',1,'splineFDBase']]], + ['kcoeffd_4',['kCoeffD',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0',1,'splineFDBase']]], + ['kcoeffy_5',['kCoeffY',['../classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be',1,'splineFDBase']]], + ['kdembinskiabdelmottele_6',['kDembinskiAbdelmottele',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a6589bdeaef8de84e7ef545fd709772bb',1,'Structs.h']]], + ['kfddetpar_7',['kFDDetPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20bad7032c60390bd4bb843950e9a7afcdae',1,'MCMCProcessor.h']]], + ['kicecube_8',['kIceCube',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a5a1aedce85942661f297f503d606c472',1,'Structs.h']]], + ['klinear_9',['kLinear',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4ac188c019178783e5be55110601309d7d',1,'Structs.h']]], + ['kmonotonic_10',['kMonotonic',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a68f4b10c9689389fd8fea39dc6c097d3',1,'Structs.h']]], + ['kndpar_11',['kNDPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba4ac215e1a6cd9e776ec0a230f62a0bb4',1,'MCMCProcessor.h']]], + ['knparameterenum_12',['kNParameterEnum',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20babd8035289bbe1770c6cb4d4d3e9d1b5a',1,'MCMCProcessor.h']]], + ['knteststatistics_13',['kNTestStatistics',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1459dbcc0f1b68b266cf0ddc37c34aee',1,'Structs.h']]], + ['knue_14',['kNue',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2aab024bd4737ec207f00dcd86a5d05908',1,'Structs.h']]], + ['knuebar_15',['kNueBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a74373d078c38b05c7ce7af9fe89e9f60',1,'Structs.h']]], + ['knumu_16',['kNumu',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2ab0c6aa36beb10b27d1595708db570b20',1,'Structs.h']]], + ['knumubar_17',['kNumuBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a4002f8369785cc180fd411cacc50ad6a',1,'Structs.h']]], + ['knutau_18',['kNutau',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a3845eaeb2a574c79e40ccb2e7b0c0a21',1,'Structs.h']]], + ['knutaubar_19',['kNutauBar',['../Structs_8h.html#a0dfdd8cf84b8fa3495e9e5e520fe6cd2a17308656c7ae2206d971d1a8682c5feb',1,'Structs.h']]], + ['koscpar_20',['kOSCPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba03865cac80b3eb8f5ef46421eb8dab06',1,'MCMCProcessor.h']]], + ['kpearson_21',['kPearson',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a1ac0c03f07bf2bb9ad083e449d69ffd7',1,'Structs.h']]], + ['kpoisson_22',['kPoisson',['../Structs_8h.html#a960da89e33ac45a56f7bbfac3068dc67a82f43d91f1eda213c4b5c486672a32a5',1,'Structs.h']]], + ['kprobnue_23',['kProbNue',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a5cd6d0de7e8784e41d9b25b568e4a910',1,'Structs.h']]], + ['kprobnuebar_24',['kProbNueBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a8d16d56aca132d6c241c7bfa76a678ce',1,'Structs.h']]], + ['kprobnumu_25',['kProbNumu',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a06c430fb843a21e2716d7a4ac4b02b8f',1,'Structs.h']]], + ['kprobnumubar_26',['kProbNumuBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a72f2254b7daf89baabd39b7b42998ad7',1,'Structs.h']]], + ['kprobnutau_27',['kProbNutau',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a01745b4e2b8e4c6e585d5256336ec0fc',1,'Structs.h']]], + ['kprobnutaubar_28',['kProbNutauBar',['../Structs_8h.html#a5a4651943de972b89fd091d11fa7b3d7a02ac372b77ed65a76630c2bf8435e888',1,'Structs.h']]], + ['ksplineinterpolations_29',['kSplineInterpolations',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a9e1a345912f2baebd863ab7d40c9ab7b',1,'Structs.h']]], + ['ktarget_5fal_30',['kTarget_Al',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a66f3bd62228437490c204146fc3c9650',1,'Structs.h']]], + ['ktarget_5far_31',['kTarget_Ar',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aaf8c52b9d0543ba495ac4810ae574ab6',1,'Structs.h']]], + ['ktarget_5fc_32',['kTarget_C',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a4ef60de1c65e797b83a21dc41c9d24c1',1,'Structs.h']]], + ['ktarget_5ffe_33',['kTarget_Fe',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a40b8c7791706f48abf66e8fa8f943282',1,'Structs.h']]], + ['ktarget_5fh_34',['kTarget_H',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580a93b6b80f9eb311ce2ed33ee3ab3d628f',1,'Structs.h']]], + ['ktarget_5fn_35',['kTarget_N',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580ac62ee782c726abaef5be73fa37051f1a',1,'Structs.h']]], + ['ktarget_5fo_36',['kTarget_O',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aed102c56020984a88e9d68c44f7cc59e',1,'Structs.h']]], + ['ktarget_5fpb_37',['kTarget_Pb',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580ad5d1996f0e943feb8183b9b07ab701c0',1,'Structs.h']]], + ['ktarget_5fti_38',['kTarget_Ti',['../Structs_8h.html#a706416000041de040e97d5dbe0bdb580aaf03f51fe85225e1b0a61f50e6593dc4',1,'Structs.h']]], + ['ktspline3_39',['kTSpline3',['../Structs_8h.html#a6720d732608767153550aebebcf8fbf4a56c886e7b34c938027a7140748999c8a',1,'Structs.h']]], + ['kxsecpar_40',['kXSecPar',['../MCMCProcessor_8h.html#acd2848273413543fe14936252942c20ba7386f5611ea4d01b85b9bb92a5ca335f',1,'MCMCProcessor.h']]] +]; diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 00000000..45436250 --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['m_5fe_0',['m_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ab2771e69b128dc53bc4f8bacfcfcecb0',1,'Structs.h']]], + ['m_5fm_1',['m_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a41071dca17d04928fa0852ded8c1025b',1,'Structs.h']]], + ['m_5ft_2',['m_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af7aaf8e15fe7f438db465ff6ce791d1b',1,'Structs.h']]] +]; diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 00000000..0b99b8f4 --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['t_5fe_0',['t_e',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7ae7563a0f735ed6772bd147a4b9ccd09a',1,'Structs.h']]], + ['t_5fm_1',['t_m',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7af33cf18d3fc2d7dd38a4c6c4d98618a0',1,'Structs.h']]], + ['t_5ft_2',['t_t',['../Structs_8h.html#ae0d15be5d1316877430ecb0ce94adec7a6a6edd14e02d60d2f3c232609ae8e2b2',1,'Structs.h']]] +]; diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 00000000..8761a272 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['combinemach3chains_2ecpp_0',['CombineMaCh3Chains.cpp',['../CombineMaCh3Chains_8cpp.html',1,'']]], + ['contributing_2emd_1',['CONTRIBUTING.md',['../CONTRIBUTING_8md.html',1,'']]], + ['covariancebase_2ecpp_2',['covarianceBase.cpp',['../covarianceBase_8cpp.html',1,'']]], + ['covariancebase_2eh_3',['covarianceBase.h',['../covarianceBase_8h.html',1,'']]], + ['covarianceosc_2ecpp_4',['covarianceOsc.cpp',['../covarianceOsc_8cpp.html',1,'']]], + ['covarianceosc_2eh_5',['covarianceOsc.h',['../covarianceOsc_8h.html',1,'']]], + ['covarianceutils_2ecpp_6',['CovarianceUtils.cpp',['../CovarianceUtils_8cpp.html',1,'']]], + ['covarianceutils_2eh_7',['CovarianceUtils.h',['../CovarianceUtils_8h.html',1,'']]], + ['covariancexsec_2ecpp_8',['covarianceXsec.cpp',['../covarianceXsec_8cpp.html',1,'']]], + ['covariancexsec_2eh_9',['covarianceXsec.h',['../covarianceXsec_8h.html',1,'']]] +]; diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 00000000..c4176bac --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['diagmcmc_2ecpp_0',['DiagMCMC.cpp',['../DiagMCMC_8cpp.html',1,'']]] +]; diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 00000000..668fe733 --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['fdmcstruct_2eh_0',['FDMCStruct.h',['../FDMCStruct_8h.html',1,'']]], + ['fitterbase_2ecpp_1',['FitterBase.cpp',['../FitterBase_8cpp.html',1,'']]], + ['fitterbase_2eh_2',['FitterBase.h',['../FitterBase_8h.html',1,'']]] +]; diff --git a/search/files_3.js b/search/files_3.js new file mode 100644 index 00000000..1eadd460 --- /dev/null +++ b/search/files_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getpenaltyterm_2ecpp_0',['GetPenaltyTerm.cpp',['../GetPenaltyTerm_8cpp.html',1,'']]], + ['getpostfitparamplots_2ecpp_1',['GetPostfitParamPlots.cpp',['../GetPostfitParamPlots_8cpp.html',1,'']]], + ['gpumcmcprocessorutils_2ecu_2',['gpuMCMCProcessorUtils.cu',['../gpuMCMCProcessorUtils_8cu.html',1,'']]], + ['gpusplineutils_2ecu_3',['gpuSplineUtils.cu',['../gpuSplineUtils_8cu.html',1,'']]] +]; diff --git a/search/files_4.js b/search/files_4.js new file mode 100644 index 00000000..0e7d1859 --- /dev/null +++ b/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['interfacepdfebe_2ecpp_0',['interfacePDFEbE.cpp',['../interfacePDFEbE_8cpp.html',1,'']]], + ['interfacepdfebe_2eh_1',['interfacePDFEbE.h',['../interfacePDFEbE_8h.html',1,'']]] +]; diff --git a/search/files_5.js b/search/files_5.js new file mode 100644 index 00000000..80c5e8f9 --- /dev/null +++ b/search/files_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kdegpu_2ecu_0',['kdeGpu.cu',['../kdeGpu_8cu.html',1,'']]], + ['kdegpu2_2ecu_1',['kdeGpu2.cu',['../kdeGpu2_8cu.html',1,'']]] +]; diff --git a/search/files_6.js b/search/files_6.js new file mode 100644 index 00000000..1117976b --- /dev/null +++ b/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['likelihoodfit_2ecpp_0',['LikelihoodFit.cpp',['../LikelihoodFit_8cpp.html',1,'']]], + ['likelihoodfit_2eh_1',['LikelihoodFit.h',['../LikelihoodFit_8h.html',1,'']]] +]; diff --git a/search/files_7.js b/search/files_7.js new file mode 100644 index 00000000..aa6f4b0e --- /dev/null +++ b/search/files_7.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['mach3logger_2eh_0',['MaCh3Logger.h',['../MaCh3Logger_8h.html',1,'']]], + ['mainpage_2emd_1',['mainpage.md',['../mainpage_8md.html',1,'']]], + ['manager_2ecpp_2',['manager.cpp',['../manager_8cpp.html',1,'']]], + ['manager_2eh_3',['manager.h',['../manager_8h.html',1,'']]], + ['mcmc_2ecpp_4',['mcmc.cpp',['../mcmc_8cpp.html',1,'']]], + ['mcmc_2eh_5',['mcmc.h',['../mcmc_8h.html',1,'']]], + ['mcmcprocessor_2ecpp_6',['MCMCProcessor.cpp',['../MCMCProcessor_8cpp.html',1,'']]], + ['mcmcprocessor_2eh_7',['MCMCProcessor.h',['../MCMCProcessor_8h.html',1,'']]], + ['minuitfit_2ecpp_8',['MinuitFit.cpp',['../MinuitFit_8cpp.html',1,'']]], + ['minuitfit_2eh_9',['MinuitFit.h',['../MinuitFit_8h.html',1,'']]], + ['monitor_2ecpp_10',['Monitor.cpp',['../Monitor_8cpp.html',1,'']]], + ['monitor_2eh_11',['Monitor.h',['../Monitor_8h.html',1,'']]] +]; diff --git a/search/files_8.js b/search/files_8.js new file mode 100644 index 00000000..04bba802 --- /dev/null +++ b/search/files_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['oscclass_5fcudaprob3_2ecpp_0',['OscClass_CUDAProb3.cpp',['../OscClass__CUDAProb3_8cpp.html',1,'']]], + ['oscclass_5fcudaprob3_2eh_1',['OscClass_CUDAProb3.h',['../OscClass__CUDAProb3_8h.html',1,'']]] +]; diff --git a/search/files_9.js b/search/files_9.js new file mode 100644 index 00000000..7311fe43 --- /dev/null +++ b/search/files_9.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['plotllh_2ecpp_0',['PlotLLH.cpp',['../PlotLLH_8cpp.html',1,'']]], + ['probgpu_2ecu_1',['probGpu.cu',['../probGpu_8cu.html',1,'']]], + ['processmcmc_2ecpp_2',['ProcessMCMC.cpp',['../ProcessMCMC_8cpp.html',1,'']]], + ['pso_2ecpp_3',['PSO.cpp',['../PSO_8cpp.html',1,'']]], + ['pso_2eh_4',['PSO.h',['../PSO_8h.html',1,'']]] +]; diff --git a/search/files_a.js b/search/files_a.js new file mode 100644 index 00000000..8787484c --- /dev/null +++ b/search/files_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../README_8md.html',1,'']]], + ['rhat_2ecpp_1',['RHat.cpp',['../RHat_8cpp.html',1,'']]] +]; diff --git a/search/files_b.js b/search/files_b.js new file mode 100644 index 00000000..160e8534 --- /dev/null +++ b/search/files_b.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['samplepdfbase_2ecpp_0',['samplePDFBase.cpp',['../samplePDFBase_8cpp.html',1,'']]], + ['samplepdfbase_2eh_1',['samplePDFBase.h',['../samplePDFBase_8h.html',1,'']]], + ['samplepdffdbase_2ecpp_2',['samplePDFFDBase.cpp',['../samplePDFFDBase_8cpp.html',1,'']]], + ['samplepdffdbase_2eh_3',['samplePDFFDBase.h',['../samplePDFFDBase_8h.html',1,'']]], + ['samplepdfinterface_2eh_4',['samplePDFInterface.h',['../samplePDFInterface_8h.html',1,'']]], + ['shiftfunctors_2eh_5',['ShiftFunctors.h',['../ShiftFunctors_8h.html',1,'']]], + ['spline_2eh_6',['spline.h',['../spline_8h.html',1,'']]], + ['splinebase_2ecpp_7',['splineBase.cpp',['../splineBase_8cpp.html',1,'']]], + ['splinebase_2eh_8',['splineBase.h',['../splineBase_8h.html',1,'']]], + ['splinefdbase_2ecpp_9',['splineFDBase.cpp',['../splineFDBase_8cpp.html',1,'']]], + ['splinefdbase_2eh_10',['splineFDBase.h',['../splineFDBase_8h.html',1,'']]], + ['splineinterface_2eh_11',['splineInterface.h',['../splineInterface_8h.html',1,'']]], + ['splinemonolith_2ecpp_12',['SplineMonolith.cpp',['../SplineMonolith_8cpp.html',1,'']]], + ['splinemonolith_2eh_13',['SplineMonolith.h',['../SplineMonolith_8h.html',1,'']]], + ['stretch_2ecpp_14',['stretch.cpp',['../stretch_8cpp.html',1,'']]], + ['stretch_2eh_15',['stretch.h',['../stretch_8h.html',1,'']]], + ['structs_2ecpp_16',['Structs.cpp',['../Structs_8cpp.html',1,'']]], + ['structs_2eh_17',['Structs.h',['../Structs_8h.html',1,'']]] +]; diff --git a/search/files_c.js b/search/files_c.js new file mode 100644 index 00000000..65cc9f96 --- /dev/null +++ b/search/files_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['throwparms_2ecpp_0',['ThrowParms.cpp',['../ThrowParms_8cpp.html',1,'']]], + ['throwparms_2eh_1',['ThrowParms.h',['../ThrowParms_8h.html',1,'']]], + ['tune_2ecpp_2',['tune.cpp',['../tune_8cpp.html',1,'']]], + ['tune_2eh_3',['tune.h',['../tune_8h.html',1,'']]] +]; diff --git a/search/files_d.js b/search/files_d.js new file mode 100644 index 00000000..13343d67 --- /dev/null +++ b/search/files_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['yamlhelper_2ecpp_0',['YamlHelper.cpp',['../YamlHelper_8cpp.html',1,'']]], + ['yamlhelper_2eh_1',['YamlHelper.h',['../YamlHelper_8h.html',1,'']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..4d0991fe --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['acceptanceprobabilities_0',['AcceptanceProbabilities',['../classMCMCProcessor.html#a278b82fa945d847e57ae6ed6357d8f61',1,'MCMCProcessor']]], + ['acceptstep_1',['acceptStep',['../classcovarianceBase.html#aa2344b1482362eed11d817acdb6befe4',1,'covarianceBase']]], + ['adddata_2',['adddata',['../classsamplePDFInterface.html#a430875be32a7abe8e5582f015d52d256',1,'samplePDFInterface::addData(TH2D *binneddata)=0'],['../classsamplePDFInterface.html#a6dfc76415fd85c2b20807212185d5803',1,'samplePDFInterface::addData(TH1D *binneddata)=0'],['../classsamplePDFInterface.html#afba8628475f8167da36b9f0c8fc91034',1,'samplePDFInterface::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;dat)=0'],['../classsamplePDFInterface.html#aa06edb735a994f18b2819622b0df3898',1,'samplePDFInterface::addData(std::vector&lt; double &gt; &amp;dat)=0'],['../classsamplePDFFDBase.html#aee64da350bb6618a0b438f98f392c4f8',1,'samplePDFFDBase::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;data)'],['../classsamplePDFFDBase.html#a42ab6773e267dfd8e987c8d0dab4861b',1,'samplePDFFDBase::addData(std::vector&lt; double &gt; &amp;data)'],['../classsamplePDFFDBase.html#adc056e89f35950eaf8719134a892a512',1,'samplePDFFDBase::addData(TH1D *Data)'],['../classsamplePDFBase.html#ab20be5d14e8d8946df1e2c98c4808104',1,'samplePDFBase::addData(TH2D *binneddata)'],['../classsamplePDFBase.html#acbdd3f87ad66eace243aa49361762e6c',1,'samplePDFBase::addData(TH1D *binneddata)'],['../classsamplePDFBase.html#a78681e36e1748bdd978c29d78a67c698',1,'samplePDFBase::addData(std::vector&lt; vector&lt; double &gt; &gt; &amp;dat)'],['../classsamplePDFBase.html#a2f0509b7bb3452433cfa9b4b0a35e331',1,'samplePDFBase::addData(std::vector&lt; double &gt; &amp;dat)'],['../classsamplePDFFDBase.html#a6a89cc5ceb45ccd0f4da70823dc398f1',1,'samplePDFFDBase::addData()']]], + ['addoschandler_3',['addoschandler',['../classFitterBase.html#ab24be22ccdfe7a9087eb4ba0b19a4fa2',1,'FitterBase::addOscHandler(covarianceOsc *oscf)'],['../classFitterBase.html#a3815ee89c5580175bb952c9adf3fabb4',1,'FitterBase::addOscHandler(covarianceOsc *osca, covarianceOsc *oscb)']]], + ['addsample_4',['AddSample',['../classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4',1,'splineFDBase']]], + ['addsamplepdf_5',['addsamplepdf',['../classFitterBase.html#abe93c6d49aa079d811a9021de59691b1',1,'FitterBase::addSamplePDF()'],['../classstretch.html#a0509bf2dd3592dc03a547c813065a292',1,'stretch::addSamplePDF()']]], + ['addsystobj_6',['addsystobj',['../classFitterBase.html#a1d0068193922448a6fed0e0d3ff4305a',1,'FitterBase::addSystObj()'],['../classstretch.html#a5068746af3b9ae197104f5d5f87ab583',1,'stretch::addSystObj()']]], + ['addxsecsplines_7',['addXsecSplines',['../classsamplePDFBase.html#a5db95a83c4c494c02fb5df8ec65f13ee',1,'samplePDFBase']]], + ['apply_8',['apply',['../classBaseFuncPar.html#a60a8e93e54fe0cc9235a22bdb8315888',1,'BaseFuncPar::Apply()'],['../classSKEScale.html#a73ed33e14de07f6b5efcf449757476d8',1,'SKEScale::Apply()'],['../classEnergyScale.html#a25f331dc17db4e175ffd58b40584fba3',1,'EnergyScale::Apply()']]], + ['applyshifts_9',['applyShifts',['../classsamplePDFFDBase.html#aecf3addcc9045e2da648b8bf1f99d84b',1,'samplePDFFDBase']]], + ['autocorrelation_10',['AutoCorrelation',['../classMCMCProcessor.html#a322bee0c362ba83df8c45769d299ce9f',1,'MCMCProcessor']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 00000000..1cc9055f --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['basefuncpar_0',['BaseFuncPar',['../classBaseFuncPar.html#a296ecef506bf4ad92910337f5f82a1e6',1,'BaseFuncPar']]], + ['batchedanalysis_1',['BatchedAnalysis',['../classMCMCProcessor.html#a29d492906e0c027d089331a0509cd2c3',1,'MCMCProcessor']]], + ['batchedmeans_2',['BatchedMeans',['../classMCMCProcessor.html#af3658b8adee50f6ef5557ebbd1c87b8e',1,'MCMCProcessor']]], + ['bisection_3',['bisection',['../classPSO.html#af45f4a02f49c33401588a12f667e7380',1,'PSO']]], + ['buildsampleindexingarray_4',['BuildSampleIndexingArray',['../classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704',1,'splineFDBase']]] +]; diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 00000000..8b00351b --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['targetmat_5ftostring_0',['TargetMat_ToString',['../Structs_8h.html#aee0f12a1dc049fc86a9648fcca383ccb',1,'Structs.h']]], + ['terminaltostring_1',['TerminalToString',['../namespaceMaCh3Utils.html#aeed4ea9cad38e64fc3bae7590373d42c',1,'MaCh3Utils']]], + ['teststatistic_5ftostring_2',['TestStatistic_ToString',['../Structs_8h.html#afe33f23691e6b5e3e0f5ab97aaeb7726',1,'Structs.h']]], + ['tf1_5fred_3',['tf1_red',['../classTF1__red.html#a758afb03ee51495a0d1e4ebc15f5edba',1,'TF1_red::TF1_red(__int__ nSize, __float__ *Array, __int__ Parameter)'],['../classTF1__red.html#a503700d13da3bc04710c6a52e14877e6',1,'TF1_red::TF1_red()'],['../classTF1__red.html#ad2d487b894c7716e00d6381448c0b4ff',1,'TF1_red::TF1_red(TF1 *&amp;Function, int Param=-1)']]], + ['three_5fvector_5faddition_4',['three_vector_addition',['../classPSO.html#a440e0cb32000cf9c5d2170d0c2d08dc2',1,'PSO']]], + ['thrownominal_5',['throwNominal',['../classcovarianceBase.html#ac179636033de2746f634ad2cd1985d57',1,'covarianceBase']]], + ['throwparameters_6',['throwParameters',['../classcovarianceBase.html#aa5d82895bcbae7773b6813c02cf2f485',1,'covarianceBase']]], + ['throwparcurr_7',['throwParCurr',['../classcovarianceBase.html#a4e92a9db846d956473efbe5712c71d31',1,'covarianceBase']]], + ['throwparms_8',['ThrowParms',['../classThrowParms.html#aa5b7b7b75d35e87a6fe467cff25db73d',1,'ThrowParms']]], + ['throwparprop_9',['throwParProp',['../classcovarianceBase.html#af4d127ff4761379dd11843523835c4dc',1,'covarianceBase']]], + ['throwset_10',['ThrowSet',['../classThrowParms.html#a436e39062e287f2a813b0d1ae3d72712',1,'ThrowParms']]], + ['tmacrotostring_11',['tmacrotostring',['../YamlHelper_8h.html#a8f274e653fbd3e5451faf71549318c24',1,'TMacroToString(const TMacro &amp;macro):&#160;YamlHelper.cpp'],['../YamlHelper_8cpp.html#a8f274e653fbd3e5451faf71549318c24',1,'TMacroToString(const TMacro &amp;macro):&#160;YamlHelper.cpp']]], + ['tmacrotoyaml_12',['tmacrotoyaml',['../YamlHelper_8h.html#a7e0ade2fd295a927676c243c97d0aa64',1,'TMacroToYAML(const TMacro &amp;macro):&#160;YamlHelper.cpp'],['../YamlHelper_8cpp.html#a7e0ade2fd295a927676c243c97d0aa64',1,'TMacroToYAML(const TMacro &amp;macro):&#160;YamlHelper.cpp']]], + ['tmatrixintoth2d_13',['tmatrixintoth2d',['../ProcessMCMC_8cpp.html#abe5fa966ccba5ad5b7f7efea786894c3',1,'TMatrixIntoTH2D():&#160;ProcessMCMC.cpp'],['../namespaceMaCh3Utils.html#a9b4fef8344d315068805fab0875ee486',1,'MaCh3Utils::TMatrixIntoTH2D()']]], + ['togglefixallparameters_14',['toggleFixAllParameters',['../classcovarianceBase.html#adb2d1a39cd2bd160257bc9e34e32df4c',1,'covarianceBase']]], + ['togglefixparameter_15',['toggleFixParameter',['../classcovarianceBase.html#aafbbdc05b87df882dc341e20fe870603',1,'covarianceBase']]], + ['transfertomonolith_16',['TransferToMonolith',['../classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8',1,'splineFDBase']]], + ['transfertoparam_17',['TransferToParam',['../classcovarianceBase.html#a65ac4956a782b01768f445732522a450',1,'covarianceBase']]], + ['transfertopca_18',['TransferToPCA',['../classcovarianceBase.html#a651f5ecd8973918d5683606a607fa88c',1,'covarianceBase']]], + ['truncated_5fspline_19',['truncated_spline',['../classTruncated__Spline.html#a83c0431fb5f7a27a08ccc358b35f0f99',1,'Truncated_Spline::Truncated_Spline(TSpline3 *&amp;spline, int Param=-1)'],['../classTruncated__Spline.html#ae40da5403298aacb6b45cd7690b61420',1,'Truncated_Spline::Truncated_Spline()']]], + ['tspline3_5fred_20',['tspline3_red',['../classTSpline3__red.html#a23a318e0b3c3db5a3db83d8caa3e5cfc',1,'TSpline3_red::TSpline3_red(__float__ *X, __float__ *Y, __int__ N, __float__ **P, __int__ parNo)'],['../classTSpline3__red.html#a46bab297c2277560912b90db4e074200',1,'TSpline3_red::TSpline3_red(TSpline3 *&amp;spline, int Param=-1, SplineInterpolation InterPolation=kTSpline3)'],['../classTSpline3__red.html#ae76e72436b20a59ee33eb1d41dbe59eb',1,'TSpline3_red::TSpline3_red()']]], + ['tune_21',['tune',['../classtune.html#afdd12b403a8c6535a58c5499d15bf354',1,'tune']]], + ['tuneparameters_22',['tuneParameters',['../classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4',1,'tune']]] +]; diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 00000000..13cfba71 --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['uncertainty_5fcheck_0',['uncertainty_check',['../classPSO.html#aa347879022c35fcb5018adaeb830ee1c',1,'PSO']]], + ['updateadaptivecovariance_1',['updateAdaptiveCovariance',['../classcovarianceBase.html#a50ce8ebb96ebd64190dc37e4bf950a9b',1,'covarianceBase']]], + ['updatethrowmatrix_2',['updateThrowMatrix',['../classcovarianceBase.html#a7e2d3623bbbf3edee558e04737fe2add',1,'covarianceBase']]], + ['usage_3',['usage',['../CombineMaCh3Chains_8cpp.html#a2ef30c42cbc289d899a8be5d2d8f77d0',1,'CombineMaCh3Chains.cpp']]], + ['usebinnedoscreweighting_4',['usebinnedoscreweighting',['../classsamplePDFFDBase.html#afeec8a0e7066ead8c88ed0696e29d7a9',1,'samplePDFFDBase::UseBinnedOscReweighting(bool ans)'],['../classsamplePDFFDBase.html#a0fee963934f4918d36c55626c0fb793a',1,'samplePDFFDBase::UseBinnedOscReweighting(bool ans, int nbins, double *osc_bins)']]], + ['usenondoubledangles_5',['UseNonDoubledAngles',['../classsamplePDFFDBase.html#a36253a401aca201ca4f1808a437db4d9',1,'samplePDFFDBase']]], + ['usereactorprior_6',['useReactorPrior',['../classcovarianceOsc.html#a91995c48dcdf4ab10f952ac2e11abf96',1,'covarianceOsc']]], + ['useseparatethrowmatrix_7',['useseparatethrowmatrix',['../classcovarianceBase.html#a42b737f8c1acb412f3da6e0352d7e43e',1,'covarianceBase::useSeparateThrowMatrix(TString throwMatrixName, TString throwMatrixFile, TString parameterMeansName=&quot;&quot;)'],['../classcovarianceBase.html#a7f3d05db388d95e35de241145ad732c0',1,'covarianceBase::useSeparateThrowMatrix()']]] +]; diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 00000000..93c2b67b --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['vector_5fadd_0',['vector_add',['../classPSO.html#a0ade870a1dde6ec231b508e629ed1ba2',1,'PSO']]], + ['vector_5fmultiply_1',['vector_multiply',['../classPSO.html#a400ceec227bfe822db4b5d4557e06a1b',1,'PSO']]], + ['vector_5fsubtract_2',['vector_subtract',['../classPSO.html#a1a67501489c5cea6b871525447f09255',1,'PSO']]] +]; diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 00000000..678b98f0 --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['writeoutput_0',['WriteOutput',['../classPSO.html#af2a3d758cc67e9b6b6a9a96499345b5b',1,'PSO']]] +]; diff --git a/search/functions_14.js b/search/functions_14.js new file mode 100644 index 00000000..1949604c --- /dev/null +++ b/search/functions_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xsecstruct_0',['xsecstruct',['../classXSecStruct.html#af446c18d9c1cb8816cca7c7e91e562f2',1,'XSecStruct::XSecStruct(__int__ NumberOfSplines)'],['../classXSecStruct.html#a7d1ae10909b2f292a342e10824f53aa1',1,'XSecStruct::XSecStruct()']]] +]; diff --git a/search/functions_15.js b/search/functions_15.js new file mode 100644 index 00000000..ce4ff238 --- /dev/null +++ b/search/functions_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yamltostring_0',['yamltostring',['../YamlHelper_8cpp.html#aae72fb06a391f1073add5eed6c6485dd',1,'YAMLtoSTRING(const YAML::Node &amp;node):&#160;YamlHelper.cpp'],['../YamlHelper_8h.html#aae72fb06a391f1073add5eed6c6485dd',1,'YAMLtoSTRING(const YAML::Node &amp;node):&#160;YamlHelper.cpp']]] +]; diff --git a/search/functions_16.js b/search/functions_16.js new file mode 100644 index 00000000..3203ea93 --- /dev/null +++ b/search/functions_16.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['_7ebasefuncpar_0',['~BaseFuncPar',['../classBaseFuncPar.html#a0cd19743e80b402106202ff1a82f8e14',1,'BaseFuncPar']]], + ['_7ecovariancebase_1',['~covarianceBase',['../classcovarianceBase.html#a1e7a87a1d7e054475b4b921407e0a2d1',1,'covarianceBase']]], + ['_7ecovarianceosc_2',['~covarianceOsc',['../classcovarianceOsc.html#aab90b93f18a4cffbed4c225fecfdc5a8',1,'covarianceOsc']]], + ['_7ecovariancexsec_3',['~covarianceXsec',['../classcovarianceXsec.html#af84383b735f450c33c9c34f7ca207a66',1,'covarianceXsec']]], + ['_7eenergyscale_4',['~EnergyScale',['../classEnergyScale.html#a24c0550c8bac1b50946a7fc918bf8ee5',1,'EnergyScale']]], + ['_7efitterbase_5',['~FitterBase',['../classFitterBase.html#ae8677b449e49ca86bafee685e8dbe93f',1,'FitterBase']]], + ['_7elikelihoodfit_6',['~LikelihoodFit',['../classLikelihoodFit.html#a29f6b86b13948c58c0dd8b16daf8d757',1,'LikelihoodFit']]], + ['_7emanager_7',['~manager',['../classmanager.html#ad5f9fad9ba7b6e4ff0d65834a478bfc2',1,'manager']]], + ['_7emcmc_8',['~mcmc',['../classmcmc.html#a6685a5d7fdac30e3676d5076ea26ec92',1,'mcmc']]], + ['_7emcmcprocessor_9',['~MCMCProcessor',['../classMCMCProcessor.html#a50810cd50c5a4545bd5c1e486aae7b1c',1,'MCMCProcessor']]], + ['_7eminuitfit_10',['~MinuitFit',['../classMinuitFit.html#ac79d8c4ef26a715b6f4edce0b20af9aa',1,'MinuitFit']]], + ['_7esamplepdfbase_11',['~samplePDFBase',['../classsamplePDFBase.html#ade4338d5ad1bc53ebfdba18c71af12b1',1,'samplePDFBase']]], + ['_7esamplepdffdbase_12',['~samplePDFFDBase',['../classsamplePDFFDBase.html#a4c750f77b67c6a728d61f14a1537aa4a',1,'samplePDFFDBase']]], + ['_7esmonolith_13',['~SMonolith',['../classSMonolith.html#ac0ae7f110fa4c6e46e808d8c1ae979b6',1,'SMonolith']]], + ['_7espline_14',['~spline',['../classspline.html#a18a8cc5fa2ce196e458b92dec2664c1f',1,'spline']]], + ['_7esplinebase_15',['~splineBase',['../classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16',1,'splineBase']]], + ['_7esplinefdbase_16',['~splineFDBase',['../classsplineFDBase.html#aef7692f02d28abdcfc09b6ed6bdcabf2',1,'splineFDBase']]], + ['_7estretch_17',['~stretch',['../classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4',1,'stretch']]], + ['_7etf1_5fred_18',['~TF1_red',['../classTF1__red.html#a154077c37858ec88449cae76c41d671b',1,'TF1_red']]], + ['_7ethrowparms_19',['~ThrowParms',['../classThrowParms.html#ac81ea768c6ade4f456f1b917340a64a4',1,'ThrowParms']]], + ['_7etruncated_5fspline_20',['~Truncated_Spline',['../classTruncated__Spline.html#a4ce82ec74b255ecbfe97a372b377444e',1,'Truncated_Spline']]], + ['_7etspline3_5fred_21',['~TSpline3_red',['../classTSpline3__red.html#a275808bab562c82d155433c1d62ac1a1',1,'TSpline3_red']]], + ['_7etune_22',['~tune',['../classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d',1,'tune']]], + ['_7exsecstruct_23',['~XSecStruct',['../classXSecStruct.html#af9d63792f8ad59bb5dc5f79dee16ef38',1,'XSecStruct']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 00000000..85c26f27 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['cachesteps_0',['CacheSteps',['../classMCMCProcessor.html#ace48a54fb08e2a3943d4e2ed1f8c4a4b',1,'MCMCProcessor']]], + ['calc_5funcertainty_1',['calc_uncertainty',['../classPSO.html#ae7203a860e979f105da189c23f1a9c3a',1,'PSO']]], + ['calcbayesfactor_2',['CalcBayesFactor',['../ProcessMCMC_8cpp.html#ac5381031738b5fa6481d7ac33d2ad854',1,'ProcessMCMC.cpp']]], + ['calcbipolarplot_3',['CalcBipolarPlot',['../ProcessMCMC_8cpp.html#a2d9c3cc52d1f5c3cc3e0775ae596e9c7',1,'ProcessMCMC.cpp']]], + ['calcchi_4',['CalcChi',['../classPSO.html#aca234a3a9776e5cbb94bd1ab57f27b01',1,'PSO']]], + ['calcchi2_5',['calcchi2',['../classPSO.html#a42f873a16ad3d3d9809262a01bf68538',1,'PSO::CalcChi2()'],['../classLikelihoodFit.html#af7383703e9f93e5aebcf699d80a6fb9e',1,'LikelihoodFit::CalcChi2()']]], + ['calclikelihood_6',['CalcLikelihood',['../classcovarianceBase.html#a0056f747843633b2f8408f599f13f89f',1,'covarianceBase']]], + ['calcmedian_7',['CalcMedian',['../RHat_8cpp.html#ac038d6f2a074799534fc4a986ca36ef3',1,'RHat.cpp']]], + ['calcoscweights_8',['calcOscWeights',['../classsamplePDFFDBase.html#af3ce53658ddfbb9c9d49c83451506865',1,'samplePDFFDBase']]], + ['calcreweight_9',['calcReWeight',['../classcovarianceBase.html#a17fd81a6df482370d8a66098a257b756',1,'covarianceBase']]], + ['calcrhat_10',['CalcRhat',['../RHat_8cpp.html#abd5f8455bf73bda17794dc06218e6713',1,'RHat.cpp']]], + ['calcsavagedickey_11',['CalcSavageDickey',['../ProcessMCMC_8cpp.html#af772f7bdfdba080075141597e9c99f79',1,'ProcessMCMC.cpp']]], + ['calcsplineweights_12',['CalcSplineWeights',['../classSMonolith.html#ae1be13e249dcd9bb5913a7f0123aa0e4',1,'SMonolith']]], + ['calcsplineweights_5ftf1_13',['CalcSplineWeights_TF1',['../classSMonolith.html#a335ea2a499d2b2c7f1410b24b25456a1',1,'SMonolith']]], + ['calculateenu_14',['calculateenu',['../Structs_8h.html#a2dce7c8dec7d4d7f9c61346893973421',1,'CalculateEnu(double PLep, double cosTheta, double EB, bool neutrino):&#160;Structs.cpp'],['../Structs_8cpp.html#a887ec835f8432e04f3a1eba147d796d9',1,'CalculateEnu(double PLep, double costh, double Eb, bool neutrino):&#160;Structs.cpp']]], + ['calculateess_15',['CalculateESS',['../classMCMCProcessor.html#af576c8b4bf25ffbaa40b3939d25cf442',1,'MCMCProcessor']]], + ['calculateq2_16',['calculateq2',['../Structs_8h.html#a060e41fa0e5f91ce4fcbb6a4cafeaf13',1,'CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2=0.0):&#160;Structs.cpp'],['../Structs_8cpp.html#af6c0e794fc9fe6b93be0d07fc84ca67a',1,'CalculateQ2(double PLep, double PUpd, double EnuTrue, double InitialQ2):&#160;Structs.cpp']]], + ['calcweights_17',['calcWeights',['../classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba',1,'splineFDBase']]], + ['calcxsecnormsbins_18',['CalcXsecNormsBins',['../classsamplePDFFDBase.html#a4bac245c85ce274b1e7d3072df7ece2b',1,'samplePDFFDBase']]], + ['calcxsecweightfunc_19',['CalcXsecWeightFunc',['../classsamplePDFFDBase.html#a3f9bd31096c917426dcd00c826538548',1,'samplePDFFDBase']]], + ['calcxsecweightnorm_20',['CalcXsecWeightNorm',['../classsamplePDFFDBase.html#aefdd8a15c707ea82c7843b72a801464d',1,'samplePDFFDBase']]], + ['calcxsecweightspline_21',['CalcXsecWeightSpline',['../classsamplePDFFDBase.html#aed7d4c54abecd59d83838bbea85a777f',1,'samplePDFFDBase']]], + ['capvariable_22',['CapVariable',['../RHat_8cpp.html#a29838c9a1c93843ffd2eb4dc33f2076d',1,'RHat.cpp']]], + ['checkbounds_23',['checkbounds',['../classcovarianceBase.html#ac3c3e322dc06ce6a44a887ae13e522ae',1,'covarianceBase::CheckBounds()'],['../classcovarianceOsc.html#ad181d61769506529f8f00c10c2a86944',1,'covarianceOsc::CheckBounds()']]], + ['checkearthdensityfile_24',['CheckEarthDensityFile',['../classOscillator.html#af4cda0c4a00663cbf6d922c0288d887d',1,'Oscillator']]], + ['checknodeexists_25',['CheckNodeExists',['../YamlHelper_8h.html#ad2340a340fd6649a6d220abc16d4757b',1,'YamlHelper.h']]], + ['checknodeexistshelper_26',['checknodeexistshelper',['../YamlHelper_8h.html#a5809a38cdc84e79f861c6de8f84ae83e',1,'CheckNodeExistsHelper(const T &amp;node, const std::string &amp;key, Args... args):&#160;YamlHelper.h'],['../YamlHelper_8h.html#a2ec5eac7a7a860300203a9c418e802ee',1,'CheckNodeExistsHelper(const T &amp;node):&#160;YamlHelper.h']]], + ['checkorderofparams_27',['CheckOrderOfParams',['../classcovarianceOsc.html#a895550a3b7531c221c1f313d42bfc107',1,'covarianceOsc']]], + ['checksoftwareversions_28',['checkSoftwareVersions',['../CombineMaCh3Chains_8cpp.html#a235be88505001370042a2ad21ef5cef5',1,'CombineMaCh3Chains.cpp']]], + ['checkstep_29',['CheckStep',['../classmcmc.html#aa2f1c8aa3d951b935bbb3ec637b6b651',1,'mcmc']]], + ['checkth2polyfileversion_30',['checkth2polyfileversion',['../Structs_8cpp.html#a1aa25e8399ca7a229b8aa77c25407832',1,'CheckTH2PolyFileVersion(TFile *file):&#160;Structs.cpp'],['../Structs_8h.html#a1aa25e8399ca7a229b8aa77c25407832',1,'CheckTH2PolyFileVersion(TFile *file):&#160;Structs.cpp']]], + ['cheloskydecomp_31',['CheloskyDecomp',['../classThrowParms.html#af0b2855233b1b6b1817e38cc1fdfbd56',1,'ThrowParms']]], + ['cleanupmemory_32',['cleanUpMemory',['../classsplineFDBase.html#a6e765571776f8affeca355a184fef11a',1,'splineFDBase']]], + ['combinechain_33',['CombineChain',['../CombineMaCh3Chains_8cpp.html#ab3d5ec7be0fa7770a879fa1edde2ed26',1,'CombineMaCh3Chains.cpp']]], + ['constructpca_34',['ConstructPCA',['../classcovarianceBase.html#a8ac3a458097817eca534c23554a7635b',1,'covarianceBase']]], + ['copydir_35',['CopyDir',['../CombineMaCh3Chains_8cpp.html#a1cecdc9d9c387545f811006b11f0ba71',1,'CombineMaCh3Chains.cpp']]], + ['copypartoblockhist_36',['copyParToBlockHist',['../GetPostfitParamPlots_8cpp.html#ac9d82a2084e3fcddff1ad0ad9f2042e5',1,'GetPostfitParamPlots.cpp']]], + ['correlatesteps_37',['CorrelateSteps',['../classcovarianceBase.html#aba2b2dae2546299c9a4dab618d65e7c0',1,'covarianceBase']]], + ['countnumberofloadedsplines_38',['CountNumberOfLoadedSplines',['../classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed',1,'splineFDBase']]], + ['covariancebase_39',['covariancebase',['../classcovarianceBase.html#adc473e5e1813df2358124471c5540337',1,'covarianceBase::covarianceBase(const char *name, const char *file, int seed, double threshold, int FirstPCAdpar, int LastPCAdpar)'],['../classcovarianceBase.html#abd9745caccde077f9ad98c78ccb0a0b5',1,'covarianceBase::covarianceBase(const char *name, const char *file, int seed)'],['../classcovarianceBase.html#ac7b8a062756f85459f9128de1f617d5a',1,'covarianceBase::covarianceBase(const char *name, const char *file)'],['../classcovarianceBase.html#aff470db01018cb75b90ad3f12a005c56',1,'covarianceBase::covarianceBase(std::vector&lt; std::string &gt; YAMLFile, double threshold=-1, int FirstPCAdpar=-999, int LastPCAdpar=-999)']]], + ['covarianceosc_40',['covarianceOsc',['../classcovarianceOsc.html#a9346e1377d22750e43cdbd37a97e7b82',1,'covarianceOsc']]], + ['covariancexsec_41',['covarianceXsec',['../classcovarianceXsec.html#a1733beb9ee3e35360304a25afd2ff9bc',1,'covarianceXsec']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 00000000..0f353ab1 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['definemiscvalues_0',['DefineMiscValues',['../classOscillator.html#aef425c1c62f7dbb79c1ce229684cfcfc',1,'Oscillator']]], + ['definepropagatorenums_1',['DefinePropagatorEnums',['../classOscillator.html#ab69d82c06206fe62734eee146b9f01e0',1,'Oscillator']]], + ['deletearrays_2',['DeleteArrays',['../classOscillator.html#aba469223a88f88f6367a6ee9dd3b553f',1,'Oscillator']]], + ['deletehistograms_3',['DeleteHistograms',['../classOscillator.html#a3cc846e5fce770d75d81b82d930b847d',1,'Oscillator']]], + ['deleteoscillogram_4',['DeleteOscillogram',['../classOscillator.html#a1aec272b2f3149124302470cc0e7d501',1,'Oscillator']]], + ['deletepropagator_5',['DeletePropagator',['../classOscillator.html#a7bee4fc4338c3753188fd43840646462',1,'Oscillator']]], + ['destroyarrays_6',['DestroyArrays',['../RHat_8cpp.html#abb60917440a91d5a3507fd4059d3e23b',1,'RHat.cpp']]], + ['diagmcmc_7',['diagmcmc',['../classMCMCProcessor.html#a7f8faecae63616ba100cf24ae42ecc08',1,'MCMCProcessor::DiagMCMC()'],['../DiagMCMC_8cpp.html#a73b9fcbb4ef23d61a60d3a6cdb45feba',1,'DiagMCMC(std::string inputFile, std::string config):&#160;DiagMCMC.cpp']]], + ['diagnosecovariancematrix_8',['DiagnoseCovarianceMatrix',['../ProcessMCMC_8cpp.html#a0a8acd4f01586a646ce233eccd085d65',1,'ProcessMCMC.cpp']]], + ['drawcorrelations1d_9',['DrawCorrelations1D',['../classMCMCProcessor.html#a5b0961bcb0eea7a347e6a29ef7738d80',1,'MCMCProcessor']]], + ['drawcovariance_10',['DrawCovariance',['../classMCMCProcessor.html#a8d9b9c1c780a51b130fe528583dc5019',1,'MCMCProcessor']]], + ['drawplots_11',['DrawPlots',['../GetPostfitParamPlots_8cpp.html#a45738037de200b8401aa64fbabf4ef67',1,'GetPostfitParamPlots.cpp']]], + ['drawpostfit_12',['DrawPostfit',['../classMCMCProcessor.html#ab420de77e598da4b02ba74cdc20f2ea9',1,'MCMCProcessor']]], + ['dumpweights_13',['DumpWeights',['../classsamplePDFFDBase.html#a571f6a6915c16e9bd97ac6691a8cbe1b',1,'samplePDFFDBase']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 00000000..6bd0e05a --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['enableadaptivemcmc_0',['enableAdaptiveMCMC',['../classcovarianceBase.html#a9aac84433e8b18eec1a683583145c061',1,'covarianceBase']]], + ['energyscale_1',['EnergyScale',['../classEnergyScale.html#a7d616fb5f4f141861ecd383174106ed0',1,'EnergyScale']]], + ['estimatedatatransferrate_2',['EstimateDataTransferRate',['../namespaceMaCh3Utils.html#a4203d9c1f43730103d429f1d6497b843',1,'MaCh3Utils']]], + ['eval_3',['eval',['../classspline.html#a094cc95917c77e4cd0c429941adcdc35',1,'spline::Eval()'],['../classXSecStruct.html#ae081852c345ef9a386bc56bac3dbe41c',1,'XSecStruct::Eval()'],['../classTF1__red.html#a54859d4228932ca73a050ac50375ce35',1,'TF1_red::Eval()'],['../classTSpline3__red.html#a870aadaf6bf97c886a3da7afb31c28d8',1,'TSpline3_red::Eval()'],['../classTruncated__Spline.html#af82c4ab57c70c99d54d05536b0c74912',1,'Truncated_Spline::Eval()']]], + ['evaluate_4',['Evaluate',['../classSMonolith.html#ad5a827f53e0cde78656f264f7b4af78a',1,'SMonolith']]], + ['evaluate_5ftf1_5',['Evaluate_TF1',['../classSMonolith.html#acfe89403e2b71f0691b87e5e3611ccdf',1,'SMonolith']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 00000000..7eada074 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['fancytitles_0',['FancyTitles',['../GetPostfitParamPlots_8cpp.html#a18bae56e60ec67a6190dda0a2edeb808',1,'GetPostfitParamPlots.cpp']]], + ['file_5fexists_1',['file_exists',['../Structs_8h.html#afbf5ccf44bc187caa268d4d158f4e5f6',1,'Structs.h']]], + ['fill1dhist_2',['fill1dhist',['../classsamplePDFInterface.html#adb062546513e3f050898c0939bd178ad',1,'samplePDFInterface::fill1DHist()'],['../classsamplePDFFDBase.html#a5e7379b053537e46a8416cdf17f368fc',1,'samplePDFFDBase::fill1DHist()']]], + ['fill2dhist_3',['fill2dhist',['../classsamplePDFInterface.html#a659170f132acede9c9cc481ed0727a63',1,'samplePDFInterface::fill2DHist()'],['../classsamplePDFFDBase.html#a5bdaf812ba043022d39aed41a0e23984',1,'samplePDFFDBase::fill2DHist()']]], + ['fillarray_4',['fillArray',['../classsamplePDFFDBase.html#a0d6150d9e001bd6df8732bf2fd7480b9',1,'samplePDFFDBase']]], + ['fillarrays_5',['FillArrays',['../classOscillator.html#a4b00536cf82a517768374307b76f3ae6',1,'Oscillator']]], + ['fillarrays_5fmanycontrib_5farea_6',['FillArrays_ManyContrib_Area',['../classOscillator.html#a8b4b6081082ed033728fb35d0dfe76d2',1,'Oscillator']]], + ['fillarrays_5fstandard_7',['FillArrays_Standard',['../classOscillator.html#a1fb6cb1e2acc4a5d5da72fd624f93b19',1,'Oscillator']]], + ['filloscillogram_8',['FillOscillogram',['../classOscillator.html#a338f483a27048a37c274bf6c16c317ab',1,'Oscillator']]], + ['fillprimaryhistograms_9',['FillPrimaryHistograms',['../classOscillator.html#af8127a000f846dd4b232610b2ffa6be0',1,'Oscillator']]], + ['fillprimaryoscillogram_10',['FillPrimaryOscillogram',['../classOscillator.html#a09b23c4b387dd86df22fc54caea7b080',1,'Oscillator']]], + ['fillsamplearray_11',['FillSampleArray',['../classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f',1,'splineFDBase']]], + ['fillsecondaryhistograms_12',['FillSecondaryHistograms',['../classOscillator.html#ad7f08a13fa2a7965332af6e138278173',1,'Oscillator']]], + ['fillsplinebins_13',['fillSplineBins',['../classsamplePDFFDBase.html#acf33f477d5ed7ed4113ef50b190ccf3e',1,'samplePDFFDBase']]], + ['findeventoscbin_14',['FindEventOscBin',['../classsamplePDFFDBase.html#ae1d5cafd4533fabaafe4868420dc51c5',1,'samplePDFFDBase']]], + ['findfrommanager_15',['FindFromManager',['../YamlHelper_8h.html#a2a8231c2076b91564e31e55567018f00',1,'YamlHelper.h']]], + ['findfrommanagerhelper_16',['findfrommanagerhelper',['../YamlHelper_8h.html#a296c2eab8cecbc8a278add0ea507da94',1,'FindFromManagerHelper(const YAML::Node &amp;node):&#160;YamlHelper.h'],['../YamlHelper_8h.html#ad047b94c4cdbbc6d7c73a75243b0a010',1,'FindFromManagerHelper(const YAML::Node &amp;node, const std::string &amp;key, Args... args):&#160;YamlHelper.h']]], + ['findinputfiles_17',['FindInputFiles',['../classMCMCProcessor.html#aea15e730ff77556bb93bc4cff675744c',1,'MCMCProcessor']]], + ['findnominalbinandedges1d_18',['FindNominalBinAndEdges1D',['../classsamplePDFFDBase.html#a22f717d491f71858a946662cc9ca3f3a',1,'samplePDFFDBase']]], + ['findnominalbinandedges2d_19',['FindNominalBinAndEdges2D',['../classsamplePDFFDBase.html#a34643be1764871881d7b166874365aaa',1,'samplePDFFDBase']]], + ['findsplinebinning_20',['FindSplineBinning',['../classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b',1,'splineFDBase']]], + ['findsplinesegment_21',['findsplinesegment',['../classSMonolith.html#ae91451c45359e8a4e9655155c7eebe7a',1,'SMonolith::FindSplineSegment()'],['../classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273',1,'splineFDBase::FindSplineSegment()']]], + ['finduniquemodes_22',['FindUniqueModes',['../classsplineFDBase.html#a0249bb22856a7a01b64b7828046801aa',1,'splineFDBase']]], + ['findx_23',['findx',['../classTSpline3__red.html#a39668a1dc14058a1f833e9621ec19caf',1,'TSpline3_red::FindX()'],['../classTruncated__Spline.html#a0ff225fc53ec9d59402a8bddf45190e0',1,'Truncated_Spline::FindX()']]], + ['fitterbase_24',['FitterBase',['../classFitterBase.html#a2d45811f9bcb9719f312048bbd36a423',1,'FitterBase']]], + ['four_5fvector_5faddition_25',['four_vector_addition',['../classPSO.html#ac6522025d324079b88bc7ea8c5e766d6',1,'PSO']]], + ['fractionoverlapped_26',['FractionOverlapped',['../classOscillator.html#af97891766e2267f373ef85010d96401e',1,'Oscillator']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 00000000..d36e3855 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,152 @@ +var searchData= +[ + ['generate_0',['generate',['../classsamplePDFInterface.html#aa15d46479142ea021af71733f95049ae',1,'samplePDFInterface::generate()'],['../classsamplePDFBase.html#aa445adc37e57b0d6271aca4f67e60e4c',1,'samplePDFBase::generate()']]], + ['generate2d_1',['generate2d',['../classsamplePDFInterface.html#ab8e7f95c1db8da2d96f5385b276d499b',1,'samplePDFInterface::generate2D()'],['../classsamplePDFBase.html#a9e2d79691204668e5995162be0a6812b',1,'samplePDFBase::generate2D(TH2D *pdf=0)']]], + ['get1ddatahist_2',['get1DDataHist',['../classsamplePDFBase.html#a2354d4238fcf3311daf151741f2601ad',1,'samplePDFBase']]], + ['get1dhist_3',['get1DHist',['../classsamplePDFBase.html#af0efa07b157d452fb4057a3ff4b67fcc',1,'samplePDFBase']]], + ['get2ddatahist_4',['get2DDataHist',['../classsamplePDFBase.html#af42053e1d1c5521110f38d41195f1b64',1,'samplePDFBase']]], + ['get2dhist_5',['get2DHist',['../classsamplePDFBase.html#aed001ca4ec86198875f385b6034a375b',1,'samplePDFBase']]], + ['get_5fbest_5fparticle_6',['get_best_particle',['../classPSO.html#a9c915f7ef789c499d7f9d2e3c31fb2bf',1,'PSO']]], + ['get_5fpersonal_5fbest_5fposition_7',['get_personal_best_position',['../classparticle.html#a49e62920bb60565abfe3e186b313744e',1,'particle']]], + ['get_5fpersonal_5fbest_5fvalue_8',['get_personal_best_value',['../classparticle.html#a5e3ff4cfd13828939252119ad5b4637c',1,'particle']]], + ['get_5fposition_9',['get_position',['../classparticle.html#a80f74f071446a4100718cabdacc7533c',1,'particle']]], + ['get_5fvalue_10',['get_value',['../classparticle.html#a99bce4ba53278e8cb97b9c1de11ff0d4',1,'particle']]], + ['get_5fvelocity_11',['get_velocity',['../classparticle.html#ac2bc6cb51ad1661424eb629cf859e42c',1,'particle']]], + ['geta_12',['getA',['../classstretch.html#a265ce3bf25c97637ae88da1cbc572e75',1,'stretch']]], + ['getarithmetic_13',['GetArithmetic',['../classMCMCProcessor.html#a86e94eb85faf26fee126366a39ce7c2c',1,'MCMCProcessor']]], + ['getbayesfactor_14',['GetBayesFactor',['../classMCMCProcessor.html#aaeee87390feefd85d8c68bf4e0a63387',1,'MCMCProcessor']]], + ['getbinningopt_15',['GetBinningOpt',['../classsamplePDFFDBase.html#a4c5be0f42f94df87954a0b823786b3cc',1,'samplePDFFDBase']]], + ['getbranchnames_16',['GetBranchNames',['../classMCMCProcessor.html#a3905a8c1e333cb52a192c0cfaf1a0949',1,'MCMCProcessor']]], + ['getcoeff_17',['GetCoeff',['../classTSpline3__red.html#a8aedd8e18706f3aa511e873d4934a595',1,'TSpline3_red']]], + ['getcorrelationmatrix_18',['GetCorrelationMatrix',['../classcovarianceBase.html#ac14fabdb87f5101cdbfcecb8e6b6b811',1,'covarianceBase']]], + ['getcovariance_19',['GetCovariance',['../classMCMCProcessor.html#ac9e4fdea5d2de92a1abad5b79b7daf88',1,'MCMCProcessor']]], + ['getcovlikelihood_20',['getCovLikelihood',['../classsamplePDFInterface.html#a0a581fa7cb091aa5d4378b19ab19083f',1,'samplePDFInterface']]], + ['getcovmatrix_21',['getCovMatrix',['../classcovarianceBase.html#a5968a05b1139d72344ea08b8cd6c76c6',1,'covarianceBase']]], + ['getcpuinfo_22',['GetCPUInfo',['../namespaceMaCh3Utils.html#a8a55fb4e064bedc9b679c5da048ce2bf',1,'MaCh3Utils']]], + ['getcredibleinterval_23',['GetCredibleInterval',['../classMCMCProcessor.html#a91dc66cdf94ebbdde34cfbaa68a21520',1,'MCMCProcessor']]], + ['getcredibleregion_24',['GetCredibleRegion',['../classMCMCProcessor.html#a8480d9a0ae878ec2f48409be5546d972',1,'MCMCProcessor']]], + ['getcudaprobflavour_25',['GetCUDAProbFlavour',['../Structs_8h.html#a0f3bb0c23c578a9e1d3c6eebfd5eaf36',1,'Structs.h']]], + ['getdatasample_26',['getDataSample',['../classsamplePDFBase.html#af509da2b8d4b68569c9ee8061bdeee05',1,'samplePDFBase']]], + ['getdensity_27',['GetDensity',['../classcovarianceOsc.html#aae3f81247d3aa3b3a1f3e83dc540edfb',1,'covarianceOsc']]], + ['getdiagonalerror_28',['getDiagonalError',['../classcovarianceBase.html#a01e3ab6a6758fc58b8c695556a39d879',1,'covarianceBase']]], + ['getdimlabel_29',['getDimLabel',['../classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2',1,'splineFDBase']]], + ['getdiscvar_30',['getDiscVar',['../classinterfacePDFEbE.html#ab4ca3c49dc494555995c8346718562b9',1,'interfacePDFEbE']]], + ['getdunnekaboth_31',['GetDunneKaboth',['../classMCMCProcessor.html#a1c9e49fecb85351fc5bc3134d00a8ef8',1,'MCMCProcessor']]], + ['geteigenvalues_32',['getEigenValues',['../classcovarianceBase.html#add3d24e738cde5a2f5ab1b2b377a2afb',1,'covarianceBase']]], + ['geteigenvaluesmaster_33',['getEigenValuesMaster',['../classcovarianceBase.html#a104f2d2f1b7f60693bba489ac4e753cc',1,'covarianceBase']]], + ['geteigenvectors_34',['getEigenVectors',['../classcovarianceBase.html#ad1b0e5f25843ee77ec1c6094856cda27',1,'covarianceBase']]], + ['getevallikelihood_35',['getEvalLikelihood',['../classcovarianceBase.html#a5b338f4562be5a179782728ce886a5c6',1,'covarianceBase']]], + ['geteventrate_36',['geteventrate',['../classsamplePDFBase.html#a9c8b6274b443814f9f5da6efd829f41b',1,'samplePDFBase::getEventRate()'],['../classsamplePDFInterface.html#a659178e9c6c6a6b5ad8f17b23a26cedc',1,'samplePDFInterface::getEventRate()']]], + ['geteventsplines_37',['GetEventSplines',['../classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca',1,'splineFDBase']]], + ['geteventweight_38',['geteventweight',['../classinterfacePDFEbE.html#aeb735d7fd18933d9a8176aa6ccb8f6bf',1,'interfacePDFEbE::GetEventWeight()'],['../classsamplePDFFDBase.html#ab7c23747f7b9fc8686e42eba7b5b6ba9',1,'samplePDFFDBase::GetEventWeight()']]], + ['getfdcov_39',['GetFDCov',['../classMCMCProcessor.html#a0d7cf9a1c745a18d0ecc90d4610d7ee0',1,'MCMCProcessor']]], + ['getfdsplinefileparsnamesfromdetid_40',['GetFDSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a8196b6329ce89e607e90de8d472b5bb6',1,'covarianceXsec']]], + ['getfilename_41',['GetFileName',['../classmanager.html#ab81f0be941a168843b372d38999877f2',1,'manager']]], + ['getfrommanager_42',['GetFromManager',['../YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c',1,'YamlHelper.h']]], + ['getfunc_43',['GetFunc',['../classXSecStruct.html#a68f53156cada0c531aefe107dd781989',1,'XSecStruct']]], + ['getfuncparsindexfromdetid_44',['GetFuncParsIndexFromDetID',['../classcovarianceXsec.html#a25bad5be0ce0a0778dcdf596b7930f2e',1,'covarianceXsec']]], + ['getfuncparsnamesfromdetid_45',['GetFuncParsNamesFromDetID',['../classcovarianceXsec.html#ac3c73b55a96de2413224e7bd50a98f82',1,'covarianceXsec']]], + ['getgaussian_46',['GetGaussian',['../classMCMCProcessor.html#a11b18392df922deddc4483e7f8d4f3e5',1,'MCMCProcessor']]], + ['getgenerated_47',['GetGenerated',['../classcovarianceBase.html#a3d8d40e4f44cd0c89a1a2d4b4711f332',1,'covarianceBase']]], + ['getgeneratedvalues_48',['getGeneratedValues',['../classcovarianceBase.html#aa274bd03ce40a69ab2a67d34d45bcdb2',1,'covarianceBase']]], + ['getgpufit_49',['getGpuFit',['../classstretch.html#a42647e00bf6768e3bac3eecf73f78a00',1,'stretch']]], + ['getgpuinfo_50',['GetGPUInfo',['../namespaceMaCh3Utils.html#a9b97c309891603fece844f2579f30928',1,'MaCh3Utils']]], + ['getgundamparamname_51',['getGUNDAMParamName',['../PlotLLH_8cpp.html#ac5effc81a292324338784b0fd1c8d9cf',1,'PlotLLH.cpp']]], + ['gethpd_52',['GetHPD',['../classMCMCProcessor.html#a56e83925be3cfd8f6823b1c44392f2fc',1,'MCMCProcessor']]], + ['gethpost_53',['GetHpost',['../classMCMCProcessor.html#a70f5590946414af43c3b6c3a5cd315de',1,'MCMCProcessor']]], + ['gethpost2d_54',['GetHpost2D',['../classMCMCProcessor.html#a7882d6c6a54bb345df394ef13b2962d1',1,'MCMCProcessor']]], + ['getinputfile_55',['getInputFile',['../classcovarianceBase.html#a11ca26d02384b73eeba7b6f756e25544',1,'covarianceBase']]], + ['getinvcovmatrix_56',['getInvCovMatrix',['../classcovarianceBase.html#a12221dba3e93480881d1195482ef6d87',1,'covarianceBase']]], + ['getisrhc_57',['GetIsRHC',['../classsamplePDFFDBase.html#a77b64358710d398374db3567c4ce0bf9',1,'samplePDFFDBase']]], + ['getjeffreysscale_58',['GetJeffreysScale',['../classMCMCProcessor.html#a72dc816ccfaec949a1fea4119b5198a0',1,'MCMCProcessor']]], + ['getknot_59',['GetKnot',['../classTSpline3__red.html#ab34981fd36d9c17cf5c93f7fe6ee2645',1,'TSpline3_red']]], + ['getlikelihood_60',['getlikelihood',['../classsamplePDFFDBase.html#a8134d8dc28c804923563e2f701dd3c5c',1,'samplePDFFDBase::GetLikelihood()'],['../classcovarianceOsc.html#ac274d65036b6d534f8ea82023d6e3ad3',1,'covarianceOsc::GetLikelihood()'],['../classcovarianceBase.html#a9ee2fbfe0f1ac86c8c129095638e0f76',1,'covarianceBase::GetLikelihood()'],['../classsamplePDFInterface.html#a90531e4ef2a555b3248f126fc971b476',1,'samplePDFInterface::GetLikelihood()'],['../classsamplePDFBase.html#a3c7db8ea36666a915ef072991da5c3c8',1,'samplePDFBase::GetLikelihood()=0']]], + ['getlikelihood_5fkernel_61',['getlikelihood_kernel',['../classsamplePDFBase.html#a4e599b555eb2c622743ff58a20b660d6',1,'samplePDFBase::GetLikelihood_kernel()'],['../classsamplePDFInterface.html#a4cdc84a7bc279b76e55ad9daaa8df7a2',1,'samplePDFInterface::GetLikelihood_kernel()']]], + ['getlowerbound_62',['GetLowerBound',['../classcovarianceBase.html#a634e89392da441ff88cad3a3ba619ccc',1,'covarianceBase']]], + ['getmassfrompdg_63',['GetMassFromPDG',['../namespaceMaCh3Utils.html#a86d34372bb55524024fbdadd65834967',1,'MaCh3Utils']]], + ['getmcstatllh_64',['GetMCStatLLH',['../classmanager.html#a149d43d444a7492187d0051c531923bd',1,'manager']]], + ['getmodename_65',['GetModeName',['../classsamplePDFBase.html#a031399b6277a9f4da527d5169fc8c0c7',1,'samplePDFBase']]], + ['getmodestruct_66',['GetModeStruct',['../classsamplePDFBase.html#a0680888d26ecd0efc40379ba7ea42d6d',1,'samplePDFBase']]], + ['getname_67',['getname',['../classTSpline3__red.html#a7dfd0b2f144a8b75d0f2500df5277eac',1,'TSpline3_red::GetName()'],['../classFitterBase.html#a3706f6d722073b447b3de8c3a6516601',1,'FitterBase::GetName()'],['../classLikelihoodFit.html#aff5ac0361aa016cebb24d4687e0da4ac',1,'LikelihoodFit::GetName()'],['../classmcmc.html#a0446e3c1f2af2173ffd6f017fdf6f1ba',1,'mcmc::GetName()'],['../classMinuitFit.html#a21eb79a3aa06baf99b0e5bd86e9d5c7c',1,'MinuitFit::GetName()'],['../classPSO.html#a95d9cbbfdcdc4d453254a3b1477cbbab',1,'PSO::GetName()'],['../classcovarianceBase.html#a73f68a953b99aeed919a0d270788b4c0',1,'covarianceBase::getName()'],['../classTF1__red.html#a8f210d3b941692f2947340dbbcdbf908',1,'TF1_red::GetName()'],['../classsamplePDFBase.html#a1d89044c7ad25a5782673075842565de',1,'samplePDFBase::GetName()']]], + ['getndcov_68',['GetNDCov',['../classMCMCProcessor.html#a949934e2b34901f4b8d6e44368cb0f96',1,'MCMCProcessor']]], + ['getndim_69',['getndim',['../classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb',1,'splineFDBase::getNDim()'],['../classsamplePDFFDBase.html#aed3fcc9a6474fdefcc0ee30cd992c778',1,'samplePDFFDBase::GetNDim()']]], + ['getndsplinefileparsnamesfromdetid_70',['GetNDSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a74546abc04d8bd13b959c0d348ab789b',1,'covarianceXsec']]], + ['getnentries_71',['GetnEntries',['../classMCMCProcessor.html#acf40fb480c198c5934e81803973451c1',1,'MCMCProcessor']]], + ['getneventsinsample_72',['getNEventsInSample',['../classinterfacePDFEbE.html#aae045e6d54c3f4e86002aac58fd6d8a6',1,'interfacePDFEbE']]], + ['getnfd_73',['GetNFD',['../classMCMCProcessor.html#ad376c15dcf60a4284dfa23368e097450',1,'MCMCProcessor']]], + ['getnflux_74',['GetNFlux',['../classMCMCProcessor.html#a82e67c2a28b286aae353636782c93a23',1,'MCMCProcessor']]], + ['getnmcsamples_75',['getNMCSamples',['../classinterfacePDFEbE.html#a5e48b903f6805472d7f7e6d7d33be215',1,'interfacePDFEbE']]], + ['getnmodes_76',['GetNModes',['../classMaCh3__Modes.html#a86fd4bf65b9b90a724e79551b4478da8',1,'MaCh3_Modes']]], + ['getnnd_77',['GetNND',['../classMCMCProcessor.html#af92fab1bce506912ae00d1aa5d9b7233',1,'MCMCProcessor']]], + ['getnominal_78',['getnominal',['../classcovarianceXsec.html#aea8d453c3b4bfe236faff0bf48623118',1,'covarianceXsec::getNominal()'],['../classcovarianceBase.html#a5bf31f7d7a5e24c49d4157d411080dbf',1,'covarianceBase::getNominal()']]], + ['getnominalarray_79',['getnominalarray',['../classcovarianceXsec.html#a98cf4b870e62badc83bcda99ae3574ae',1,'covarianceXsec::getNominalArray()'],['../classcovarianceBase.html#ae0a231f87266048a3cd2e0032eaf0f30',1,'covarianceBase::getNominalArray()']]], + ['getnormparsfromdetid_80',['GetNormParsFromDetID',['../classcovarianceXsec.html#aea3542e88e6947b5da383a12c7d4e54c',1,'covarianceXsec']]], + ['getnp_81',['GetNp',['../classTSpline3__red.html#a9d09b9ada9990a6f33d9ff005c977535',1,'TSpline3_red']]], + ['getnparams_82',['GetNParams',['../classMCMCProcessor.html#adbde2f115d983b233d0a9ea896187586',1,'MCMCProcessor']]], + ['getnpars_83',['getnpars',['../classcovarianceBase.html#a261941a4c06e5d875174d8769a4d02f1',1,'covarianceBase::getNpars()'],['../classLikelihoodFit.html#a18cec4a653bda51d551a779db1ccb596',1,'LikelihoodFit::GetNPars()']]], + ['getnsamples_84',['GetNsamples',['../classsamplePDFBase.html#a0000b101bead86f5581baacb8d33383f',1,'samplePDFBase']]], + ['getnsteps_85',['GetnSteps',['../classMCMCProcessor.html#ad9ffb63b188bd9cfd56f0be2f3928ab7',1,'MCMCProcessor']]], + ['getnthparameter_86',['GetNthParameter',['../classMCMCProcessor.html#a28dfe42f1bf6fd3a145287be1e63fb0b',1,'MCMCProcessor']]], + ['getnthreads_87',['GetNThreads',['../namespaceMaCh3Utils.html#a5aff908b9241c673e8d05403996e2229',1,'MaCh3Utils']]], + ['getnumberofparams_88',['GetNumberOfParams',['../classXSecStruct.html#a06edd7edcff041a85bef922da9d2bfb2',1,'XSecStruct']]], + ['getnumfuncparamsfromdetid_89',['GetNumFuncParamsFromDetID',['../classcovarianceXsec.html#a90e2aa373a8ffb9b838f90fbc7a67641',1,'covarianceXsec']]], + ['getnumparams_90',['GetNumParams',['../classcovarianceBase.html#a3daac6405cc791347b768a5afe8a13d2',1,'covarianceBase']]], + ['getnumsplineparamsfromdetid_91',['GetNumSplineParamsFromDetID',['../classcovarianceXsec.html#a9b94545b5fa89c27a07c03f856ebcf60',1,'covarianceXsec']]], + ['getnxsec_92',['GetNXSec',['../classMCMCProcessor.html#ae5ba9ac70fefcd01afd5066281438883',1,'MCMCProcessor']]], + ['getosc_93',['GetOSC',['../classMCMCProcessor.html#a6aaa70eeca8d40c94f9836b3108cf579',1,'MCMCProcessor']]], + ['getosccov_94',['GetOscCov',['../classMCMCProcessor.html#ac824a20f93cd288c206000ef02fef1f2',1,'MCMCProcessor']]], + ['getoscillogramnbins_95',['GetOscillogramNBins',['../classOscillator.html#a333796deed14f45c8412d2e1fe44a155',1,'Oscillator']]], + ['getosconly_96',['getOscOnly',['../classstretch.html#a706dbc8b21269ee4cc7546058a70be51',1,'stretch']]], + ['getotherfilehist_97',['getOtherFileHist',['../GetPostfitParamPlots_8cpp.html#a3a89c02f89f29d5f75fd228e088c1896',1,'GetPostfitParamPlots.cpp']]], + ['getparameter_98',['GetParameter',['../classTF1__red.html#a467e0aef58c190adddd57018f00ce206',1,'TF1_red']]], + ['getparameterhist_99',['getParameterHist',['../PlotLLH_8cpp.html#aacc357def887311bea23a72db6a06878',1,'PlotLLH.cpp']]], + ['getparametermeans_100',['getParameterMeans',['../classcovarianceBase.html#ab89b754afc93b63f41070710af4c0f2d',1,'covarianceBase']]], + ['getparamindexfromname_101',['GetParamIndexFromName',['../classMCMCProcessor.html#a79fbacee092135cb1e42ed60202600e6',1,'MCMCProcessor']]], + ['getparamtype_102',['GetParamType',['../classcovarianceXsec.html#ae74c131ca46a8715f75710a8d801524f',1,'covarianceXsec']]], + ['getparcurr_103',['getParCurr',['../classcovarianceBase.html#a040e445c6d4f8d4eea8fc13418cea7ff',1,'covarianceBase']]], + ['getparcurr_5fpca_104',['getParCurr_PCA',['../classcovarianceBase.html#af4c0edbf1bd150484bc4696480ef9a77',1,'covarianceBase']]], + ['getpardetid_105',['GetParDetID',['../classcovarianceXsec.html#aad522479b06581729efd6c1cd12d11df',1,'covarianceXsec']]], + ['getparfancyname_106',['getparfancyname',['../classcovarianceBase.html#a519d02704e1b9b98f0ff3044596fe11c',1,'covarianceBase::GetParFancyName(const int i) const'],['../classcovarianceBase.html#a6a46b5fed3e7feb6e9e151e90927bdbc',1,'covarianceBase::GetParFancyName(const int i)']]], + ['getparinit_107',['getParInit',['../classcovarianceBase.html#a1cede85accaac2ea7056740893d90c49',1,'covarianceBase']]], + ['getparname_108',['getparname',['../classcovarianceBase.html#a2c10aa293cd0e66665f915b484f54e9c',1,'covarianceBase::GetParName(const int i) const'],['../classcovarianceBase.html#a033c5b6a8669537acaa6c5fc252899e6',1,'covarianceBase::GetParName(const int i)']]], + ['getparprop_109',['getParProp',['../classcovarianceBase.html#a37c87fa18db7e4ac087d120bca955617',1,'covarianceBase']]], + ['getparprop_5fpca_110',['getParProp_PCA',['../classcovarianceBase.html#a3e29910a1706f60db5f615b3b6f05994',1,'covarianceBase']]], + ['getparsplineinterpolation_111',['GetParSplineInterpolation',['../classcovarianceXsec.html#aa37632d8db3830ff55c828e5add92d23',1,'covarianceXsec']]], + ['getpathlength_112',['GetPathLength',['../classcovarianceOsc.html#a367025ccd9467fa42dfeef223763261b',1,'covarianceOsc']]], + ['getpenaltyterm_113',['GetPenaltyTerm',['../GetPenaltyTerm_8cpp.html#aca180a34f33cad687281cba8e8ee6196',1,'GetPenaltyTerm.cpp']]], + ['getperformbetastudy_114',['GetPerformBetaStudy',['../classcovarianceOsc.html#a14ec27f04f1cb37b4ef3f7278a5ffe07',1,'covarianceOsc']]], + ['getpolarplot_115',['GetPolarPlot',['../classMCMCProcessor.html#a3cbdb2a888e58fa1a9768f56d9a48e3e',1,'MCMCProcessor']]], + ['getpostfit_116',['GetPostfit',['../classMCMCProcessor.html#a5fc015740496b821648f0e5ca8cffe80',1,'MCMCProcessor']]], + ['getpostfit_5find_117',['GetPostfit_Ind',['../classMCMCProcessor.html#a59fa9550b7c69c616929217ae89c2f42',1,'MCMCProcessor']]], + ['getpostfitparamplots_118',['GetPostfitParamPlots',['../GetPostfitParamPlots_8cpp.html#ad53f55565623ac6efd066209b1821ea6',1,'GetPostfitParamPlots.cpp']]], + ['getprefitvalues_119',['getPreFitValues',['../classcovarianceBase.html#a48030255d1057937c1060645a94b69af',1,'covarianceBase']]], + ['getproposed_120',['getProposed',['../classcovarianceBase.html#a53be39d0c968b0c6c3a16ec38fe03da7',1,'covarianceBase']]], + ['getproppars_121',['getPropPars',['../classcovarianceOsc.html#a5732a5abf9aa3d73f9dec5ba9d33217f',1,'covarianceOsc']]], + ['getsampleindex_122',['getSampleIndex',['../classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca',1,'splineFDBase']]], + ['getsamplelikelihood_123',['getSampleLikelihood',['../classsamplePDFBase.html#a850aef19dec9a2ac0047c416e3fa3b1d',1,'samplePDFBase']]], + ['getsamplename_124',['getsamplename',['../classsamplePDFBase.html#a35ced08988cee48ac111024c70a2c7c2',1,'samplePDFBase::GetSampleName()'],['../classsamplePDFFDBase.html#a6d37b9e3fdf282148680e3bdb3ca95cf',1,'samplePDFFDBase::GetSampleName()']]], + ['getsamplenames_125',['GetSampleNames',['../classsamplePDFBase.html#aeb459a4295ed4d692e31bfd76d34e8c2',1,'samplePDFBase']]], + ['getsavagedickey_126',['GetSavageDickey',['../classMCMCProcessor.html#af048f4412d59946acb3d35106ca5c413',1,'MCMCProcessor']]], + ['getsigmavalue_127',['GetSigmaValue',['../classMCMCProcessor.html#a9a5e853fa93adbb9d425ff999c03308c',1,'MCMCProcessor']]], + ['getsize_128',['getsize',['../classTF1__red.html#af9e3b0e8d2edad0e7e08f3bf215525c9',1,'TF1_red::GetSize()'],['../classThrowParms.html#a15d20b7bd5a244211220d74158c5cc00',1,'ThrowParms::GetSize()'],['../classcovarianceBase.html#ab3c974412479cd6d891a3c325820dc1e',1,'covarianceBase::getSize()']]], + ['getsplinecoeff_5fsepmany_129',['getsplinecoeff_sepmany',['../classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae',1,'splineFDBase::getSplineCoeff_SepMany()'],['../classSMonolith.html#acbbe3398718d0d02d65a1e92a91c112c',1,'SMonolith::getSplineCoeff_SepMany()']]], + ['getsplinefileparsnamesfromdetid_130',['GetSplineFileParsNamesFromDetID',['../classcovarianceXsec.html#a577f572750f4531b952b118dceac569c',1,'covarianceXsec']]], + ['getsplineinterpolation_131',['GetSplineInterpolation',['../classcovarianceXsec.html#a1cef7811e0441730f65087e12d8721e5',1,'covarianceXsec']]], + ['getsplinemodevecfromdetid_132',['GetSplineModeVecFromDetID',['../classcovarianceXsec.html#a59925cec0677ed7da99532ae5e320a30',1,'covarianceXsec']]], + ['getsplineparsindexfromdetid_133',['GetSplineParsIndexFromDetID',['../classcovarianceXsec.html#a512a1a48b171fc65bdbccd7460171e51',1,'covarianceXsec']]], + ['getsplineparsnamesfromdetid_134',['GetSplineParsNamesFromDetID',['../classcovarianceXsec.html#a692e5cb3d7ea006dd10164bd3c59d3dd',1,'covarianceXsec']]], + ['getsplitsamplestack_135',['getSplitSampleStack',['../PlotLLH_8cpp.html#ab0a1f8d7d22ebec47e5b4bb95af3fd74',1,'PlotLLH.cpp']]], + ['getteststatllh_136',['getteststatllh',['../classsamplePDFBase.html#aae43146f1732e7095839c3e6d9e3832a',1,'samplePDFBase::getTestStatLLH(const double data, const double mc, const double w2)'],['../classsamplePDFBase.html#a772ebf22fbffd9336b2d8c2f46988453',1,'samplePDFBase::getTestStatLLH(double data, double mc)']]], + ['gettf1coeff_137',['getTF1Coeff',['../classSMonolith.html#a87230e35c15ce4523bc3d630416e30f3',1,'SMonolith']]], + ['getthrowmatrix_138',['getThrowMatrix',['../classcovarianceBase.html#aa306bea2b30013ca55f2a95b8d16ec42',1,'covarianceBase']]], + ['getthrowmatrix_5fcholdecomp_139',['getThrowMatrix_CholDecomp',['../classcovarianceBase.html#a563a904298d0bd5ec5518708396e0e22',1,'covarianceBase']]], + ['gettransfermatrix_140',['getTransferMatrix',['../classcovarianceBase.html#acdcf459e3ef443e93c66d83cde87e238',1,'covarianceBase']]], + ['gettriangleplot_141',['GetTrianglePlot',['../ProcessMCMC_8cpp.html#a02c2311b736096adc8525876c0ec1487',1,'ProcessMCMC.cpp']]], + ['getupperbound_142',['GetUpperBound',['../classcovarianceBase.html#a0c6510aa48248382ba2da0330015b8c6',1,'covarianceBase']]], + ['getvalue_143',['getValue',['../namespaceMaCh3Utils.html#a417b0bad440b7f273ca404ff25dd86a2',1,'MaCh3Utils']]], + ['getviolin_144',['GetViolin',['../classMCMCProcessor.html#a4ecd30520854d1379946bd8b1f2992f2',1,'MCMCProcessor']]], + ['getviolinplots_145',['GetViolinPlots',['../GetPostfitParamPlots_8cpp.html#a8681598ff6721b09a9d1f03c4efe114d',1,'GetPostfitParamPlots.cpp']]], + ['getviolinprior_146',['GetViolinPrior',['../classMCMCProcessor.html#a0489e9f57b847389bc0c9f8af5a0abdb',1,'MCMCProcessor']]], + ['getxseccov_147',['GetXSecCov',['../classMCMCProcessor.html#ac5d0426772d6ddeb18090ef74ad12243',1,'MCMCProcessor']]], + ['gewekediagnostic_148',['GewekeDiagnostic',['../classMCMCProcessor.html#a03b7c4bb9cd9a90aa7d284b0f1a6156b',1,'MCMCProcessor']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 00000000..19f254cd --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['init_0',['init',['../classsamplePDFBase.html#af82aa921ee6e6c204d97e6b6a7cf27ae',1,'samplePDFBase::init()'],['../classsamplePDFInterface.html#aabea95f400c78b85100f548e9d8e8144',1,'samplePDFInterface::init(double pot)=0'],['../classsamplePDFInterface.html#a8188c4bd0d437cdbf52298b4a4f73560',1,'samplePDFInterface::init(double pot, std::string mc_version)=0'],['../classPSO.html#a20cba5b6be9f5996dba818220f7a3524',1,'PSO::init()'],['../classstretch.html#abf351cef5d33603cb6be70749577d9e4',1,'stretch::init()'],['../classtune.html#a38d17743a856c100ed0726bc2e8e0300',1,'tune::init()'],['../classcovarianceBase.html#abbdd5ddf5ae51c2c4113631754ec24e6',1,'covarianceBase::init(const char *name, const char *file)'],['../classcovarianceBase.html#a53d643c213a7c973145c9bd6f2ad5d88',1,'covarianceBase::init(std::vector&lt; std::string &gt; YAMLFile)'],['../classcovarianceBase.html#ab5141e2014519c1483788f4995686164',1,'covarianceBase::init(TMatrixDSym *covMat)'],['../classsamplePDFBase.html#a5d07bd30725439bad3c15039aeca5ea8',1,'samplePDFBase::init()']]], + ['initialise_1',['initialise',['../classSMonolith.html#a45cece9dcbe699e00a7b5fdff4806c1e',1,'SMonolith::Initialise()'],['../classMCMCProcessor.html#a224995a0b47bd9cbd04e099cc3ca634c',1,'MCMCProcessor::Initialise()']]], + ['initialisearrays_2',['InitialiseArrays',['../RHat_8cpp.html#a3efe8085dcbead1e66a6cf54fc77ab5e',1,'RHat.cpp']]], + ['initialisehistograms_3',['InitialiseHistograms',['../classOscillator.html#ad179520d34c471a982ebc9e0fd821482',1,'Oscillator']]], + ['initialisenewadaptivechain_4',['initialiseNewAdaptiveChain',['../classcovarianceBase.html#ac4163afc3e1062fdea9466904f9b74ca',1,'covarianceBase']]], + ['initoscillogram_5',['InitOscillogram',['../classOscillator.html#a355d12f90e89d73dc1238331cbe8e309',1,'Oscillator']]], + ['initparams_6',['initParams',['../classcovarianceXsec.html#a3c14aecda656f24a94c2b6df86e30518',1,'covarianceXsec']]], + ['initpropagator_7',['InitPropagator',['../classOscillator.html#ad6d1e943b6738eed430667a0b626ec51',1,'Oscillator']]], + ['initxsecfromconfig_8',['InitXsecFromConfig',['../classcovarianceXsec.html#a90bd7a32f16efc88c070e57fabafd13b',1,'covarianceXsec']]], + ['isalreadycalculated_9',['isAlreadyCalculated',['../classOscillator.html#a4514973cb03fee06171ebdd33de253bf',1,'Oscillator']]], + ['iseventselected_10',['iseventselected',['../classsamplePDFFDBase.html#a5e35856e91339009cb1744a738145781',1,'samplePDFFDBase::IsEventSelected(int iSample, int iEvent)'],['../classsamplePDFFDBase.html#a36052ef8bdd85b1e390996aad361d953',1,'samplePDFFDBase::IsEventSelected(std::vector&lt; std::string &gt; ParameterStr, int iSample, int iEvent)'],['../classsamplePDFFDBase.html#aed71380c5f2f25a5c28896ca3ac27f7f',1,'samplePDFFDBase::IsEventSelected(std::vector&lt; std::string &gt; ParameterStr, std::vector&lt; std::vector&lt; double &gt; &gt; &amp;Selection, int iSample, int iEvent)']]], + ['isflat_11',['isFlat',['../classSMonolith.html#ac69a542d8c48acd8faf797c20cad4590',1,'SMonolith']]], + ['islinear_12',['isLinear',['../classOscillator.html#a7f3eb39d4674724a51cb55c7daff8c20',1,'Oscillator']]], + ['isparameterfixed_13',['isParameterFixed',['../classcovarianceBase.html#a2424eaebd9daa92b0294b352310770a3',1,'covarianceBase']]], + ['isparameterfixedpca_14',['isParameterFixedPCA',['../classcovarianceBase.html#ab7cb212b7fda7f402629855b58a69cec',1,'covarianceBase']]], + ['isparflux_15',['IsParFlux',['../classcovarianceXsec.html#a1297bd93b010760e05122e53507dbedc',1,'covarianceXsec']]], + ['ispca_16',['IsPCA',['../classcovarianceBase.html#a30f3f34243be0f6bc901e525497e7f56',1,'covarianceBase']]], + ['isusinggpu_17',['isUsingGPU',['../classOscillator.html#a04e27d2c84837eadda34fcc36d92ab70',1,'Oscillator']]], + ['isvalidbox_18',['IsValidBox',['../classOscillator.html#a9aba209aecd9521e4db62b7500c147b6',1,'Oscillator']]], + ['isvalidsplineindex_19',['isValidSplineIndex',['../classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b',1,'splineFDBase']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 00000000..0b25538f --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['knowndetidsmap_0',['KnownDetIDsMap',['../namespaceMaCh3Utils.html#ad70f340fe7d2128586d54797f6501514',1,'MaCh3Utils']]], + ['kolmogorovsmirnovtest_1',['KolmogorovSmirnovTest',['../ProcessMCMC_8cpp.html#aece705f01f7c21ad0d0f5f9f64af6d0d',1,'ProcessMCMC.cpp']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 00000000..09100831 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['likelihoodfit_0',['LikelihoodFit',['../classLikelihoodFit.html#a1d3cb4fbaa7a0e6e1d7f4804a434e1ea',1,'LikelihoodFit']]], + ['linspace_1',['linspace',['../classOscillator.html#aac8981cdcfe4d89228d9a45d2dd7f396',1,'Oscillator']]], + ['loadsplinefile_2',['LoadSplineFile',['../classSMonolith.html#a6783cdc3c485378ca21852e1a7b02482',1,'SMonolith']]], + ['logspace_3',['logspace',['../classOscillator.html#a1c8845334fcbedc588b8f6bafebe3e52',1,'Oscillator']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 00000000..88bb64b8 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['mach3welcome_0',['MaCh3Welcome',['../namespaceMaCh3Utils.html#ac6f4a3b6a7749967ff9a011469352f6c',1,'MaCh3Utils']]], + ['main_1',['main',['../RHat_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;RHat.cpp'],['../ProcessMCMC_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;ProcessMCMC.cpp'],['../PlotLLH_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(int argc, char **argv):&#160;PlotLLH.cpp'],['../GetPostfitParamPlots_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;GetPostfitParamPlots.cpp'],['../GetPenaltyTerm_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;GetPenaltyTerm.cpp'],['../DiagMCMC_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;DiagMCMC.cpp'],['../CombineMaCh3Chains_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;CombineMaCh3Chains.cpp']]], + ['makeclosestposdef_2',['makeClosestPosDef',['../classcovarianceBase.html#a8a709e1c6c58618cf65400eef1741cc7',1,'covarianceBase']]], + ['makecovariance_3',['MakeCovariance',['../classMCMCProcessor.html#afc94f21ffd599b1e2dd7e62f24f6c4de',1,'MCMCProcessor']]], + ['makecovariance_5fmp_4',['MakeCovariance_MP',['../classMCMCProcessor.html#a02b05bf6fc92ef7eed5ea01d044a963d',1,'MCMCProcessor']]], + ['makecredibleintervals_5',['MakeCredibleIntervals',['../classMCMCProcessor.html#a04f8df87fd18567a15376528bdd1347d',1,'MCMCProcessor']]], + ['makecredibleregions_6',['MakeCredibleRegions',['../classMCMCProcessor.html#a21f73b2353b546d06ae2a01046cf534e',1,'MCMCProcessor']]], + ['makefddetplots_7',['MakeFDDetPlots',['../GetPostfitParamPlots_8cpp.html#afe35956eaa3ea0ca15aa76c791342ee7',1,'GetPostfitParamPlots.cpp']]], + ['makefluxplots_8',['MakeFluxPlots',['../GetPostfitParamPlots_8cpp.html#a8eea239b18cd012be79062d6704ba590',1,'GetPostfitParamPlots.cpp']]], + ['makenddetplots_9',['MakeNDDetPlots',['../GetPostfitParamPlots_8cpp.html#a537db5b05ce6037e9221b2250d91c688',1,'GetPostfitParamPlots.cpp']]], + ['makeoscplots_10',['MakeOscPlots',['../GetPostfitParamPlots_8cpp.html#a955c5fe946d1b9941e2b9444514f2699',1,'GetPostfitParamPlots.cpp']]], + ['makeoutputfile_11',['MakeOutputFile',['../classMCMCProcessor.html#aa5a7761e97cf2e24c7d877a5374b7333',1,'MCMCProcessor']]], + ['makeposdef_12',['MakePosDef',['../classcovarianceBase.html#a9fed634edbeca5336be11a26516b4efe',1,'covarianceBase']]], + ['makepostfit_13',['MakePostfit',['../classMCMCProcessor.html#a8667510132aa01395520f028287f511b',1,'MCMCProcessor']]], + ['makeprefit_14',['MakePrefit',['../classMCMCProcessor.html#a03267ff95cb0f4dab0882db852893768',1,'MCMCProcessor']]], + ['makeratio_15',['makeRatio',['../GetPostfitParamPlots_8cpp.html#a832c42b3026f68415157d43337c79b01',1,'GetPostfitParamPlots.cpp']]], + ['maketgraphasymmerrors_16',['MakeTGraphAsymmErrors',['../GetPostfitParamPlots_8cpp.html#aed2de9cedffab9b66f1d8ef50137ecef',1,'GetPostfitParamPlots.cpp']]], + ['maketriangleplot_17',['MakeTrianglePlot',['../classMCMCProcessor.html#ab3ba06637facc17a38c25fe80976ebfb',1,'MCMCProcessor']]], + ['makevector_18',['MakeVector',['../Structs_8h.html#a6a7efa31950e85001a060205c7d07c97',1,'Structs.h']]], + ['makeviolin_19',['MakeViolin',['../classMCMCProcessor.html#a04976c69f0ef0b3f39edcf5f25f90981',1,'MCMCProcessor']]], + ['makexsecplots_20',['MakeXsecPlots',['../GetPostfitParamPlots_8cpp.html#af79360b46fcb2923363d459ca9c4a0a8',1,'GetPostfitParamPlots.cpp']]], + ['manager_21',['manager',['../classmanager.html#a33e8fc4162ae32f5107c3eb35a5831ec',1,'manager']]], + ['matrixmult_22',['matrixmult',['../namespaceMaCh3Utils.html#a0cd7bf76aca73a1e36519b04e19dd6c0',1,'MaCh3Utils::MatrixMult(double *A, double *B, int n)'],['../namespaceMaCh3Utils.html#af03aca63ae363cb51c7033e8e91ade6d',1,'MaCh3Utils::MatrixMult(double **A, double **B, int n)'],['../namespaceMaCh3Utils.html#ac4d63087b4dc0c0a0e49d375ece4cb00',1,'MaCh3Utils::MatrixMult(TMatrixD A, TMatrixD B)']]], + ['matrixvectormulti_23',['MatrixVectorMulti',['../classcovarianceBase.html#a3c1e06ff3aa33867b5c22ef189997c5b',1,'covarianceBase']]], + ['matrixvectormultisingle_24',['MatrixVectorMultiSingle',['../classcovarianceBase.html#acde5a16f1159cbdb802b6e05a1607494',1,'covarianceBase']]], + ['mcmc_25',['mcmc',['../classmcmc.html#a56195958aee22996158d3ba341dcf31e',1,'mcmc']]], + ['mcmcprocessor_26',['MCMCProcessor',['../classMCMCProcessor.html#a88b08d13e8783b2d7d443d377a64130d',1,'MCMCProcessor']]], + ['minuitfit_27',['MinuitFit',['../classMinuitFit.html#a5392a49207148d7b884974db3d3f5eac',1,'MinuitFit']]], + ['mode_5ftofancystring_28',['Mode_ToFancyString',['../classMaCh3__Modes.html#a62f99686baadf45e267d69405044a15f',1,'MaCh3_Modes']]], + ['mode_5ftosplinemode_29',['Mode_ToSplineMode',['../classMaCh3__Modes.html#afb8e231f7b18118ec89046713e46807d',1,'MaCh3_Modes']]], + ['mode_5ftostring_30',['Mode_ToString',['../classMaCh3__Modes.html#a24414f21a8178b5dbf146fbb33f94729',1,'MaCh3_Modes']]], + ['modifyweights_31',['ModifyWeights',['../classSMonolith.html#affe44c41d692827757f22f5b9173170f',1,'SMonolith']]], + ['modifyweights_5fgpu_32',['ModifyWeights_GPU',['../classSMonolith.html#a72cd282322bdaadb23d8a376efa9e2c1',1,'SMonolith']]], + ['multipleprocessmcmc_33',['MultipleProcessMCMC',['../ProcessMCMC_8cpp.html#a83be70750a728e4deae518ea3ffaf388',1,'ProcessMCMC.cpp']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 00000000..cef3395b --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['neutrinoflavourtoindex_0',['NeutrinoFlavourToIndex',['../classOscillator.html#ab07a0513911356e0dad8fc518e0a9d1d',1,'Oscillator']]], + ['neutrinoindextoflavour_1',['NeutrinoIndexToFlavour',['../classOscillator.html#abbef83bf5434479309c108e4f2309e15',1,'Oscillator']]], + ['neutrinoindextosign_2',['NeutrinoIndexToSign',['../classOscillator.html#a53c250d9ecef1f06de2b1ad7cb7d7a8c',1,'Oscillator']]], + ['neutrinosigntoindex_3',['NeutrinoSignToIndex',['../classOscillator.html#afcf2afcc433827f8adf75cec1a4efe5b',1,'Oscillator']]], + ['nooverflowintegral_4',['nooverflowintegral',['../Structs_8cpp.html#ab18c6b2408d7b9021bad06d47a06ee8d',1,'NoOverflowIntegral(TH2Poly *poly):&#160;Structs.cpp'],['../Structs_8h.html#a34ea004397beb80720b7cf838ba94410',1,'NoOverflowIntegral(TH2Poly *):&#160;Structs.cpp']]], + ['normalisepoly_5',['normalisepoly',['../Structs_8cpp.html#ae28c217f8e8591248bfa54e95fdd7741',1,'NormalisePoly(TH2Poly *Histogram):&#160;Structs.cpp'],['../Structs_8h.html#ae28c217f8e8591248bfa54e95fdd7741',1,'NormalisePoly(TH2Poly *Histogram):&#160;Structs.cpp']]] +]; diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 00000000..2c48ef6a --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['oscillator_0',['Oscillator',['../classOscillator.html#acc240480ba377fa014440f718af60daf',1,'Oscillator']]], + ['overflowintegral_1',['overflowintegral',['../Structs_8cpp.html#a34345b88bcd0e45db5612d58a972a154',1,'OverflowIntegral(TH2Poly *poly):&#160;Structs.cpp'],['../Structs_8h.html#af8fbe767b9d4b04ddcfeb5a49dda16da',1,'OverflowIntegral(TH2Poly *):&#160;Structs.cpp']]] +]; diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 00000000..0f7ed65b --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['paramtraces_0',['ParamTraces',['../classMCMCProcessor.html#a929d6efec80bb4de05eea7011257439a',1,'MCMCProcessor']]], + ['parsearg_1',['ParseArg',['../CombineMaCh3Chains_8cpp.html#a4304fea6fca59fa81f1aa40b86bb10d2',1,'CombineMaCh3Chains.cpp']]], + ['parsefilelabels_2',['parseFileLabels',['../PlotLLH_8cpp.html#a1ccbbc86b2e8fd8775451501562f204c',1,'PlotLLH.cpp']]], + ['parseline_3',['parseLine',['../namespaceMaCh3Utils.html#af06aa84306b4d4692f30e63d08180c83',1,'MaCh3Utils']]], + ['particle_4',['particle',['../classparticle.html#a31e82afa2044567396e7357613a1438f',1,'particle::particle()'],['../classparticle.html#ac32ac5717215d09b9bc26553d2350fe5',1,'particle::particle(std::vector&lt; double &gt; position, std::vector&lt; double &gt; velocity)']]], + ['pdgtoprobs_5',['PDGToProbs',['../Structs_8h.html#a7bff6c239eb0213052f3193d84a7bee0',1,'Structs.h']]], + ['plotllh_6',['PlotLLH',['../PlotLLH_8cpp.html#a53c3f8ef6b889ff0c9d2f6b18c7b1f38',1,'PlotLLH.cpp']]], + ['polyintegralwidth_7',['polyintegralwidth',['../Structs_8h.html#a8bab8af5f0339c6ec0310ff5ea87f26d',1,'PolyIntegralWidth(TH2Poly *Histogram):&#160;Structs.cpp'],['../Structs_8cpp.html#a8bab8af5f0339c6ec0310ff5ea87f26d',1,'PolyIntegralWidth(TH2Poly *Histogram):&#160;Structs.cpp']]], + ['polyprojectionx_8',['polyprojectionx',['../Structs_8h.html#a718d19341c552a231786569be79d6a8f',1,'PolyProjectionX(TObject *poly, std::string TempName, std::vector&lt; double &gt; xbins, bool computeErrors=false):&#160;Structs.cpp'],['../Structs_8cpp.html#ade85048179165bf461dde874b64d9cb4',1,'PolyProjectionX(TObject *poly, std::string TempName, std::vector&lt; double &gt; xbins, bool computeErrors):&#160;Structs.cpp']]], + ['polyprojectiony_9',['polyprojectiony',['../Structs_8cpp.html#af724e87cd2e37bfab7ff566b98be55c4',1,'PolyProjectionY(TObject *poly, std::string TempName, std::vector&lt; double &gt; ybins, bool computeErrors):&#160;Structs.cpp'],['../Structs_8h.html#af1261eebc53700d334a4aa937d18a6a1',1,'PolyProjectionY(TObject *poly, std::string TempName, std::vector&lt; double &gt; ybins, bool computeErrors=false):&#160;Structs.cpp']]], + ['polyscalewidth_10',['polyscalewidth',['../Structs_8cpp.html#a61d8f295d13a5fe82a552c08d42c8bfa',1,'PolyScaleWidth(TH2Poly *Histogram, double scale):&#160;Structs.cpp'],['../Structs_8h.html#a61d8f295d13a5fe82a552c08d42c8bfa',1,'PolyScaleWidth(TH2Poly *Histogram, double scale):&#160;Structs.cpp']]], + ['preparechains_11',['PrepareChains',['../RHat_8cpp.html#af40d823e599ba2565e989e4f43c78628',1,'RHat.cpp']]], + ['preparediagmcmc_12',['PrepareDiagMCMC',['../classMCMCProcessor.html#a930cadafa41b31b58066dea68628de9f',1,'MCMCProcessor']]], + ['preparefit_13',['PrepareFit',['../classLikelihoodFit.html#adb89956955c043bf37cad04983e4facd',1,'LikelihoodFit']]], + ['prepareforgpu_14',['prepareforgpu',['../classSMonolith.html#a58165d265d676f7052a1b125117e1a1b',1,'SMonolith::PrepareForGPU(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a65beed5bb2984530aa497b7faeb54d1e',1,'SMonolith::PrepareForGPU(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline)']]], + ['prepareforgpu_5ftf1_15',['PrepareForGPU_TF1',['../classSMonolith.html#ac5dc91d304260fab18e7d7eb1cebe032',1,'SMonolith']]], + ['prepareforgpu_5ftspline3_16',['PrepareForGPU_TSpline3',['../classSMonolith.html#a3b2a29e485f1f35fd2bcb207c47c2469',1,'SMonolith']]], + ['prepareoutput_17',['PrepareOutput',['../classFitterBase.html#a53715760edd8c7640432f31793fd28f9',1,'FitterBase']]], + ['preparesplinefile_18',['PrepareSplineFile',['../classSMonolith.html#a79f4bf0cac279cf57ab8f06698052922',1,'SMonolith']]], + ['prepforreweight_19',['PrepForReweight',['../classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28',1,'splineFDBase']]], + ['prepfunctionalparameters_20',['PrepFunctionalParameters',['../classsamplePDFFDBase.html#a178798ab81db5ed999c53d1d0474f5bd',1,'samplePDFFDBase']]], + ['prettify_5fname_21',['prettify_name',['../PlotLLH_8cpp.html#adc23a6999591c2bf438ae8a87e97d928',1,'PlotLLH.cpp']]], + ['prettifytitles_22',['prettifytitles',['../GetPostfitParamPlots_8cpp.html#ac62f1b08f728a24d44cfc23cb0e6cd03',1,'PrettifyTitles(TH2D *Hist):&#160;GetPostfitParamPlots.cpp'],['../GetPostfitParamPlots_8cpp.html#acbde284ea52643cf3db23f6edc77850c',1,'PrettifyTitles(TH1D *Hist):&#160;GetPostfitParamPlots.cpp']]], + ['print_23',['print',['../classmanager.html#a10ff16396efbc1dedcbd931c50ff7eff',1,'manager::Print()'],['../classcovarianceXsec.html#ade0e8f83dcf75c50e6dad08ab6715093',1,'covarianceXsec::Print()'],['../classcovarianceOsc.html#a6f098e51551a6d175cce56027ddfd31f',1,'covarianceOsc::Print()'],['../classTF1__red.html#a5c49b845a1ab45ca74d6ad221416138f',1,'TF1_red::Print()'],['../classXSecStruct.html#a5a434f5056ff925da38b8ec93f6485aa',1,'XSecStruct::Print()']]], + ['printarraydetails_24',['PrintArrayDetails',['../classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc',1,'splineFDBase']]], + ['printarraydimension_25',['PrintArrayDimension',['../classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81',1,'splineFDBase']]], + ['printbinning_26',['printbinning',['../classOscillator.html#a544697650afaa66dd0ea3ff404ca6458',1,'Oscillator::PrintBinning()'],['../classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593',1,'splineFDBase::PrintBinning()']]], + ['printbox_27',['PrintBox',['../classOscillator.html#aab127a66fa98077bf2a1a178d6f216ee',1,'Oscillator']]], + ['printindivstepscale_28',['printIndivStepScale',['../classcovarianceBase.html#ad3c0dddbedcf57f06a14ec52800a087b',1,'covarianceBase']]], + ['printinitialstate_29',['printInitialState',['../classstretch.html#a9fcfc6d50759b76dfcef3b5086f4167b',1,'stretch']]], + ['printnominal_30',['printNominal',['../classcovarianceBase.html#aebd37baf2d6551863d810bea83c73020',1,'covarianceBase']]], + ['printnominalcurrprop_31',['printNominalCurrProp',['../classcovarianceBase.html#a732268706d083b6ae4495e34e703bbda',1,'covarianceBase']]], + ['printoscillatorconfig_32',['PrintOscillatorConfig',['../classOscillator.html#ae0f8a71906d31ccc4cff41430bcbf735',1,'Oscillator']]], + ['printpars_33',['printPars',['../classcovarianceBase.html#ac1ff984cbc1b7858af9dd237cc1648d3',1,'covarianceBase']]], + ['printposteriors_34',['printPosteriors',['../classsamplePDFInterface.html#adc3602610f2c93714d40771145828685',1,'samplePDFInterface']]], + ['printprogress_35',['PrintProgress',['../classmcmc.html#ae0eabbfc70f9bae615332caa48b3f4f4',1,'mcmc']]], + ['printprogressbar_36',['PrintProgressBar',['../namespaceMaCh3Utils.html#a5b63b3185a04cff2ea94e18e1831ce9e',1,'MaCh3Utils']]], + ['printsampledetails_37',['PrintSampleDetails',['../classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90',1,'splineFDBase']]], + ['probstopdg_38',['ProbsToPDG',['../Structs_8h.html#a602ad839195b7087a4897e8f6b603ee6',1,'Structs.h']]], + ['processmcmc_39',['processmcmc',['../classmcmc.html#ae7e8bc73e53214c6d04dcd8531fd21f1',1,'mcmc::ProcessMCMC()'],['../ProcessMCMC_8cpp.html#abc581054e1f370aa49c179affaae791a',1,'ProcessMCMC():&#160;ProcessMCMC.cpp']]], + ['proposestep_40',['proposestep',['../classmcmc.html#aaf921343861cec8bb96beb2503b3fe2c',1,'mcmc::ProposeStep()'],['../classcovarianceOsc.html#abb8df24417b380af9b96763b8abc6b2e',1,'covarianceOsc::proposeStep()'],['../classcovarianceBase.html#a95c7ca23995af579cfa7f199833fe24a',1,'covarianceBase::proposeStep()']]], + ['pso_41',['PSO',['../classPSO.html#a14542152b9bd6e2e0f59c8ea1e1e890f',1,'PSO']]] +]; diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 00000000..2fd00c99 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,48 @@ +var searchData= +[ + ['randomconfiguration_0',['RandomConfiguration',['../classcovarianceBase.html#a867bff214af25bba68f921eaea8b5cdd',1,'covarianceBase']]], + ['randomize_1',['randomize',['../classcovarianceBase.html#a3432b7a9acc1243b8bdb17ec0b40d195',1,'covarianceBase']]], + ['rastriginfunc_2',['rastriginFunc',['../classPSO.html#afa217959928bddc4afe24e6292448140',1,'PSO']]], + ['raw_3',['raw',['../classmanager.html#ab3999cc856ede72b37f68bdb28bd5520',1,'manager']]], + ['readfdfile_4',['ReadFDFile',['../classMCMCProcessor.html#ae5ea421c8dd77ceac2e748008633b573',1,'MCMCProcessor']]], + ['readinputcov_5',['ReadInputCov',['../classMCMCProcessor.html#afef48d4fccf7551dc1845f8f6c08864f',1,'MCMCProcessor']]], + ['readndfile_6',['ReadNDFile',['../classMCMCProcessor.html#a66dd0f1f88dbeb2b6a1976d42f77e136',1,'MCMCProcessor']]], + ['readoscfile_7',['ReadOSCFile',['../classMCMCProcessor.html#a3733b3b753c73f79e6846bc92c4da11b',1,'MCMCProcessor']]], + ['readparsfromfile_8',['ReadParsFromFile',['../classmcmc.html#abdc25b836c2067136ada66e6a8b7ddc3',1,'mcmc']]], + ['readsettings_9',['ReadSettings',['../GetPostfitParamPlots_8cpp.html#ad608a08048d23e05a18d2f00cb7bc8a3',1,'GetPostfitParamPlots.cpp']]], + ['readxsecfile_10',['readxsecfile',['../classMCMCProcessor.html#a2b0b4afbf45adb93357abe96d108170b',1,'MCMCProcessor::ReadXSecFile()'],['../GetPenaltyTerm_8cpp.html#ad6a031a0073fbbf3e68974be18148c0a',1,'ReadXSecFile():&#160;GetPenaltyTerm.cpp']]], + ['rebinoscillogram_11',['RebinOscillogram',['../classOscillator.html#a143025170214000c5c412cecc331e56d',1,'Oscillator']]], + ['reducetf1_12',['ReduceTF1',['../classSMonolith.html#a8c71919669fbcd9a2b1cbc0d4a463b84',1,'SMonolith']]], + ['reducetspline3_13',['ReduceTSpline3',['../classSMonolith.html#a3638cd29cc7013868d75d7173a29944b',1,'SMonolith']]], + ['removefitter_14',['removefitter',['../Structs_8cpp.html#afdf7434ae5f5db5d9707f49fff1307da',1,'RemoveFitter(TH1D *hist, std::string name):&#160;Structs.cpp'],['../Structs_8h.html#afdf7434ae5f5db5d9707f49fff1307da',1,'RemoveFitter(TH1D *hist, std::string name):&#160;Structs.cpp']]], + ['removeparameters_15',['RemoveParameters',['../classMCMCProcessor.html#a9a29c1cb64589ac136f7f927cafa18aa',1,'MCMCProcessor']]], + ['reservememory_16',['ReserveMemory',['../classcovarianceBase.html#a75b5553823335bb82026ff46369fb67e',1,'covarianceBase']]], + ['reset_17',['Reset',['../classOscillator.html#abb02597132a34428d02173bca66c017e',1,'Oscillator']]], + ['resethistograms_18',['resethistograms',['../classsamplePDFFDBase.html#a512dcf2e3a6c8a2f8ab80ee55ce23252',1,'samplePDFFDBase::ResetHistograms()'],['../classMCMCProcessor.html#a36441ec3d5b0e24e48040282ffcda3eb',1,'MCMCProcessor::ResetHistograms()']]], + ['resetindivstepscale_19',['resetIndivStepScale',['../classcovarianceBase.html#a0993a1ea6c5b06ba834e9e70af87ee9e',1,'covarianceBase']]], + ['resetsavedparams_20',['ResetSavedParams',['../classOscillator.html#a288b3fe21c230983f8f60693ba813da0',1,'Oscillator']]], + ['resizearrays_21',['ResizeArrays',['../classOscillator.html#a3496da0a184d84043af575d5d1413c04',1,'Oscillator']]], + ['resizeoscillogram_22',['ResizeOscillogram',['../classOscillator.html#a9c0951db3050112f1bbcb7196d1760d9',1,'Oscillator']]], + ['retpointer_23',['retpointer',['../classSMonolith.html#a51bbc20cfe4ebed21f6d9f91a86ea0ee',1,'SMonolith::retPointer()'],['../classcovarianceBase.html#abf476818e624c68494372684658081a8',1,'covarianceBase::retPointer()'],['../classOscillator.html#acab40ba6575f37546d0951510404b3c2',1,'Oscillator::retPointer()'],['../classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034',1,'splineFDBase::retPointer()']]], + ['returncherenkovthresholdmomentum_24',['returncherenkovthresholdmomentum',['../Structs_8h.html#a6c6f918bcc5cfc261888be8d8ce2e444',1,'returnCherenkovThresholdMomentum(int PDG):&#160;Structs.cpp'],['../Structs_8cpp.html#a6c6f918bcc5cfc261888be8d8ce2e444',1,'returnCherenkovThresholdMomentum(int PDG):&#160;Structs.cpp']]], + ['returnfinebinningfromcoarsebinnnig_25',['ReturnFineBinningFromCoarseBinnnig',['../classOscillator.html#a29148da885454d97fdc1863b107ad157',1,'Oscillator']]], + ['returnkinematicparameter_26',['returnkinematicparameter',['../classsamplePDFFDBase.html#a40269d6e2aa2b6517ce1dc28b2905028',1,'samplePDFFDBase::ReturnKinematicParameter(std::string KinematicParamter, int iSample, int iEvent)=0'],['../classsamplePDFFDBase.html#a025fead41716023aaf9f12b654df6a9f',1,'samplePDFFDBase::ReturnKinematicParameter(double KinematicVariable, int iSample, int iEvent)=0']]], + ['returnkinematicparameterbinning_27',['ReturnKinematicParameterBinning',['../classsamplePDFFDBase.html#abfbc5e1153ac47c81c0c9307ddbb18f0',1,'samplePDFFDBase']]], + ['returnoscillogramarray_28',['ReturnOscillogramArray',['../classOscillator.html#aaa3ce53c48d538f27b78f26f0e37793d',1,'Oscillator']]], + ['returnprimarybinning_29',['ReturnPrimaryBinning',['../classOscillator.html#ad6af342c820e878ef2194dd7c277f3fe',1,'Oscillator']]], + ['returnprimaryoscillogram_30',['ReturnPrimaryOscillogram',['../classOscillator.html#a49ac59a3d4fc48c7813c834fe67dcf7b',1,'Oscillator']]], + ['returnprob_31',['ReturnProb',['../classOscillator.html#ac8303b7bd52fffbae39da342dba85beb',1,'Oscillator']]], + ['returnproductionheightbinedges_32',['ReturnProductionHeightBinEdges',['../classOscillator.html#a607d40a5329ceef16166ee7136200b58',1,'Oscillator']]], + ['returnsecondaryoscillogram_33',['ReturnSecondaryOscillogram',['../classOscillator.html#a27b5a2541b117cef7454c81fab91bd20',1,'Oscillator']]], + ['returnsecondaryxbinedges_34',['ReturnSecondaryXBinEdges',['../classOscillator.html#a7fd6df316a5ad83e1f2fd96a9cea0c34',1,'Oscillator']]], + ['returnsecondaryybinedges_35',['ReturnSecondaryYBinEdges',['../classOscillator.html#adca90d4885ccce6db146892017fd901f',1,'Oscillator']]], + ['returnunity_36',['ReturnUnity',['../classcovarianceBase.html#a3e2c11c7c0a3557068369b30e7aac17f',1,'covarianceBase']]], + ['reweight_37',['reweight',['../classsamplePDFFDBase.html#a0e8d317f7acc7027870987461194e8ce',1,'samplePDFFDBase::reweight()'],['../classsamplePDFInterface.html#a16fa111f8562bf00bab1f29f3a09b8a1',1,'samplePDFInterface::reweight()']]], + ['reweightprior_38',['reweightprior',['../classMCMCProcessor.html#aba9eef0afbdcff18caee2e496b6047ff',1,'MCMCProcessor::ReweightPrior()'],['../ProcessMCMC_8cpp.html#abbd13994de9f24524b06b19aa901d73f',1,'ReweightPrior():&#160;ProcessMCMC.cpp']]], + ['run_39',['run',['../classPSO.html#af09adc84344d8618a37c900b05fd1bd7',1,'PSO']]], + ['run2dllhscan_40',['Run2DLLHScan',['../classFitterBase.html#ab8b32ca268c20dd643eaf92dae04cd0a',1,'FitterBase']]], + ['rundiagnostic_41',['RunDiagnostic',['../RHat_8cpp.html#a4c5629fb030eb27c32cab42a42c6623b',1,'RHat.cpp']]], + ['runllhscan_42',['RunLLHScan',['../classFitterBase.html#a018e8d09a62bca19840e1321b49df2c0',1,'FitterBase']]], + ['runmcmc_43',['runmcmc',['../classPSO.html#afcd534dbf737430c8ab1e921e8730b81',1,'PSO::runMCMC()'],['../classMinuitFit.html#a8e746fb17d4bc75a9d308398a4a0229e',1,'MinuitFit::runMCMC()'],['../classmcmc.html#a8a9cc0e0aa65c8573fca703a42b2ee31',1,'mcmc::runMCMC()'],['../classLikelihoodFit.html#a97f28cf4797fd2f6e3fac267dcdafb27',1,'LikelihoodFit::runMCMC()'],['../classFitterBase.html#a1a9666dc09f91af804954e8968bc7b24',1,'FitterBase::runMCMC()']]], + ['runstretch_44',['runStretch',['../classstretch.html#a5f32082718c49d9337bfdc83a7630613',1,'stretch']]] +]; diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 00000000..a495a3fb --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,112 @@ +var searchData= +[ + ['samplepdfbase_0',['samplepdfbase',['../classsamplePDFBase.html#a8220847bbd2a30347e25f7a79101c3df',1,'samplePDFBase::samplePDFBase(double pot)'],['../classsamplePDFBase.html#ac45173ad344137f09c84a850f171cb92',1,'samplePDFBase::samplePDFBase()']]], + ['samplepdffdbase_1',['samplepdffdbase',['../classsamplePDFFDBase.html#abb3f41e66e65d7af7640ff1364817303',1,'samplePDFFDBase::samplePDFFDBase()'],['../classsamplePDFFDBase.html#a5d92ac355b68fdf36e9b478b674eeaf4',1,'samplePDFFDBase::samplePDFFDBase(double pot, std::string mc_version, covarianceXsec *xsec_cov)']]], + ['saveadaptivetofile_2',['saveAdaptiveToFile',['../classcovarianceBase.html#ad525c041a8c4a868cf63e8b5edb95903',1,'covarianceBase']]], + ['saveoscillogramstofile_3',['SaveOscillogramsToFile',['../classOscillator.html#a2907b6b25705cd6d4ddbd33b233f9364',1,'Oscillator']]], + ['saveoutput_4',['SaveOutput',['../classFitterBase.html#a418f581b688f035211107ddd83168c08',1,'FitterBase']]], + ['saveparams_5',['SaveParams',['../classOscillator.html#aac14f87f9a43cb976b1c68582b956d96',1,'Oscillator']]], + ['saveresults_6',['SaveResults',['../RHat_8cpp.html#a194d97ca48b57a07a9df018a65f3166e',1,'RHat.cpp']]], + ['savesettings_7',['savesettings',['../classmanager.html#a0990af01a220479a19ead5d0231aaf94',1,'manager::SaveSettings()'],['../classFitterBase.html#a48f38bfa8996fe00d51f35b05dd16b46',1,'FitterBase::SaveSettings()']]], + ['scaninput_8',['ScanInput',['../classMCMCProcessor.html#aeff2174617268c1e55333529459bffb6',1,'MCMCProcessor']]], + ['scanmasterspline_9',['scanmasterspline',['../classSMonolith.html#ad4b810869b043cd500f6d9192c886338',1,'SMonolith::ScanMasterSpline(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline, unsigned int &amp;NEvents, int &amp;MaxPoints, short int &amp;nParams, int &amp;nSplines, unsigned int &amp;nKnots)'],['../classSMonolith.html#adddc3566b9c6b26a236d400386970383',1,'SMonolith::ScanMasterSpline(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline, unsigned int &amp;NEvents, int &amp;MaxPoints, short int &amp;nParams)']]], + ['scanparameterorder_10',['ScanParameterOrder',['../classMCMCProcessor.html#a015cf0d6925d026e5bd9d82aa31083b6',1,'MCMCProcessor']]], + ['set1dbinning_11',['set1dbinning',['../classsamplePDFBase.html#a04e53e3aec02d69a7e59b1d9d2d1414c',1,'samplePDFBase::set1DBinning()'],['../classsamplePDFFDBase.html#ac42b097c93ac7f8fa1afab4d478a4b67',1,'samplePDFFDBase::set1DBinning(int nbins, double *boundaries)'],['../classsamplePDFFDBase.html#a9e9a67249e22644076a2424ccba7b725',1,'samplePDFFDBase::set1DBinning(int nbins, double low, double high)'],['../classsamplePDFFDBase.html#a07ec15fdb35f1f32511d635b9796de79',1,'samplePDFFDBase::set1DBinning(std::vector&lt; double &gt; &amp;XVec)'],['../classsamplePDFBase.html#ada33c26ccd5aa684f3295dcd5f4a6cc7',1,'samplePDFBase::set1DBinning(int nbins, double *boundaries)']]], + ['set2dbinning_12',['set2dbinning',['../classsamplePDFBase.html#a6c5158b37d8c5cf7aa48d3c85006bd85',1,'samplePDFBase::set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)'],['../classsamplePDFBase.html#a5ba2bf80cd619bc219e9817fa429bdc2',1,'samplePDFBase::set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)'],['../classsamplePDFFDBase.html#a90c27639c0c84e113fbb2ba82f30f551',1,'samplePDFFDBase::set2DBinning(int nbins1, double *boundaries1, int nbins2, double *boundaries2)'],['../classsamplePDFFDBase.html#adbc16c33bf6a6e870e3c0cb4f87043ef',1,'samplePDFFDBase::set2DBinning(int nbins1, double low1, double high1, int nbins2, double low2, double high2)'],['../classsamplePDFFDBase.html#a8b30b05e75954450b22f71ca5864f5c7',1,'samplePDFFDBase::set2DBinning(std::vector&lt; double &gt; &amp;XVec, std::vector&lt; double &gt; &amp;YVec)']]], + ['set_5fbest_5fparticle_13',['set_best_particle',['../classPSO.html#ab7aad43d851d0dd8e6a8ea732ad1fa12',1,'PSO']]], + ['set_5fpersonal_5fbest_5fposition_14',['set_personal_best_position',['../classparticle.html#a6e850e2803bff20ebec0038a87429211',1,'particle']]], + ['set_5fpersonal_5fbest_5fvalue_15',['set_personal_best_value',['../classparticle.html#a96e44e615e56a271679b9b1c5e6a6721',1,'particle']]], + ['set_5fplot_5fstyle_16',['set_plot_style',['../PlotLLH_8cpp.html#a2a8e7b0b123a8fa135a9c670bcdfe44c',1,'PlotLLH.cpp']]], + ['set_5fposition_17',['set_position',['../classparticle.html#af0b46439a6cba18c4a7f59a26ea405bf',1,'particle']]], + ['set_5fvalue_18',['set_value',['../classparticle.html#ab0a15a079761b5a4bb1c4bb4ba642411',1,'particle']]], + ['set_5fvelocity_19',['set_velocity',['../classparticle.html#ad0f119b37e53ba1dfe4345cc0ae3fc8a',1,'particle']]], + ['seta_20',['setA',['../classstretch.html#af62d72a369c9035c27f6b1eda04d7d1e',1,'stretch']]], + ['setadaptivethresholds_21',['setAdaptiveThresholds',['../classcovarianceBase.html#a7e2226411d8f584918980d09b9136175',1,'covarianceBase']]], + ['setbranches_22',['setBranches',['../classcovarianceBase.html#a8f1a4cf916aa5dae259c3e34e06aa2e2',1,'covarianceBase']]], + ['setchainlength_23',['setchainlength',['../classmcmc.html#af549f9b0ab4276710bc0d2987ad825a9',1,'mcmc::setChainLength()'],['../classstretch.html#a0c862a7bcd8af16a523dba58999e9ede',1,'stretch::setChainLength()']]], + ['setcovmatrix_24',['setCovMatrix',['../classcovarianceBase.html#a5f28f7294d25cca6334f7033a63596b9',1,'covarianceBase']]], + ['setcredibleinsigmas_25',['SetCredibleInSigmas',['../classMCMCProcessor.html#af6220955fdc72770d6afba01a5020e0f',1,'MCMCProcessor']]], + ['setcredibleintervals_26',['SetCredibleIntervals',['../classMCMCProcessor.html#a58f52da54e000b507744bec5880f6179',1,'MCMCProcessor']]], + ['setcredibleintervalscolours_27',['SetCredibleIntervalsColours',['../classMCMCProcessor.html#ac795824733393f9599c9cf0e21627b80',1,'MCMCProcessor']]], + ['setcredibleregioncolor_28',['SetCredibleRegionColor',['../classMCMCProcessor.html#a7d969b382bc5eb8dea92eb3a46d80457',1,'MCMCProcessor']]], + ['setcredibleregions_29',['SetCredibleRegions',['../classMCMCProcessor.html#a31837b3f19d69004d9ced2ac6c775e10',1,'MCMCProcessor']]], + ['setcredibleregionstyle_30',['SetCredibleRegionStyle',['../classMCMCProcessor.html#aecacea281d7e3bd0c020416903cfaa16',1,'MCMCProcessor']]], + ['setevallikelihood_31',['setEvalLikelihood',['../classcovarianceBase.html#a99aad06ba78ae55fff52c7e1869520f0',1,'covarianceBase']]], + ['setexcludednames_32',['SetExcludedNames',['../classMCMCProcessor.html#a09a6fa6cefcb20c00bee22c1dc5718c5',1,'MCMCProcessor']]], + ['setexcludedtypes_33',['SetExcludedTypes',['../classMCMCProcessor.html#a4364a8ab084906c8925c9db9dc110485',1,'MCMCProcessor']]], + ['setextrabranches_34',['setExtraBranches',['../classcovarianceOsc.html#a7af8971978ed3d76fe10b79667f6b4bd',1,'covarianceOsc']]], + ['setfancynames_35',['SetFancyNames',['../classMCMCProcessor.html#a7f61cf0a51670f24f16dd7d77b7f5ae4',1,'MCMCProcessor']]], + ['setfillhistograms_36',['SetFillHistograms',['../classOscillator.html#abb78c2da195b908c3807c7fd60daa0c9',1,'Oscillator']]], + ['setflipbeta_37',['setFlipBeta',['../classcovarianceOsc.html#a440aaba5f6c2c5fd1eda8fc92031a9a1',1,'covarianceOsc']]], + ['setflipdeltam23_38',['setFlipDeltaM23',['../classcovarianceOsc.html#aad7ee2764232f61af5a6deab075ee142',1,'covarianceOsc']]], + ['setfluxonlyparameters_39',['setFluxOnlyParameters',['../classcovarianceXsec.html#a01820560f38e287d382d8788ad5a6fd4',1,'covarianceXsec']]], + ['setfunc_40',['setfunc',['../classXSecStruct.html#a794cf6aa9ded997a4a938673119f0e66',1,'XSecStruct::SetFunc()'],['../classTF1__red.html#aaa7b0ac2a485d07b5010e92bd42a5853',1,'TF1_red::SetFunc()'],['../classTSpline3__red.html#a789a27762c70468a17c77dd6de42efcb',1,'TSpline3_red::SetFunc()']]], + ['setgpufit_41',['setGpuFit',['../classstretch.html#a13138997e14c00c56a8af51729b3ade3',1,'stretch']]], + ['setindivstepscale_42',['setindivstepscale',['../classcovarianceBase.html#ad650c2641b5e5ec56fde1af5ef322e4b',1,'covarianceBase::setIndivStepScale(int ParameterIndex, double StepScale)'],['../classcovarianceBase.html#a706b62253b0c42461f94dd5bdf7bf2e7',1,'covarianceBase::setIndivStepScale(std::vector&lt; double &gt; stepscale)']]], + ['setinitialstepnumber_43',['setInitialStepNumber',['../classmcmc.html#a7129ef21a4b2abab4bf142653d558535',1,'mcmc']]], + ['setmach3loggerformat_44',['SetMaCh3LoggerFormat',['../MaCh3Logger_8h.html#aa603c55ea73cd86d1994901227883e1e',1,'MaCh3Logger.h']]], + ['setmcmcbranches_45',['setMCMCBranches',['../classsamplePDFBase.html#a552c3759ff50549d3ba813d94e58b636',1,'samplePDFBase']]], + ['setmcthrow_46',['setMCthrow',['../classsamplePDFBase.html#aa4e659c358b432ef07b4ddd7d599593d',1,'samplePDFBase']]], + ['setname_47',['setName',['../classcovarianceBase.html#a609455bfeaf5cd0a9682a7ee4268a169',1,'covarianceBase']]], + ['setnbatches_48',['SetnBatches',['../classMCMCProcessor.html#a5b13f1879f84d13b7d139432a9b993c6',1,'MCMCProcessor']]], + ['setnlags_49',['SetnLags',['../classMCMCProcessor.html#a173d37d528ff201e66db8f92c156e3bb',1,'MCMCProcessor']]], + ['setnumberofsteps_50',['setNumberOfSteps',['../classcovarianceBase.html#a1e5aec8c073799ac9d40e65c0996b2c1',1,'covarianceBase']]], + ['setoscillator_51',['SetOscillator',['../classsamplePDFFDBase.html#ac64e16f80271fe3ab35dd6f9d28f1e10',1,'samplePDFFDBase']]], + ['setoscillatorconfig_52',['SetOscillatorConfig',['../classOscillator.html#a1c62a21da34f5f7faabe146024020cdb',1,'Oscillator']]], + ['setosconly_53',['setOscOnly',['../classstretch.html#afca2346083510dfd508d3d4ac8a2c341',1,'stretch']]], + ['setoutputsuffix_54',['SetOutputSuffix',['../classMCMCProcessor.html#a2f4bf14c95b830c457a73be5399403ad',1,'MCMCProcessor']]], + ['setpar_55',['setPar',['../classcovarianceBase.html#aae3b226cbd6a4c03f291620ebd018bc9',1,'covarianceBase']]], + ['setparameter_56',['SetParameter',['../classTF1__red.html#ae8d4053f0492305b0e85db0972a06f96',1,'TF1_red']]], + ['setparameters_57',['setParameters',['../classcovarianceBase.html#a3a33714da2415ef1d670573aa98f5551',1,'covarianceBase']]], + ['setparameters_5fpca_58',['setParameters_PCA',['../classcovarianceBase.html#af1759a59096c55711908bdaad51f1fd1',1,'covarianceBase']]], + ['setparcurr_5fpca_59',['setParCurr_PCA',['../classcovarianceBase.html#a593457c3ae0a2d1892846b484833274f',1,'covarianceBase']]], + ['setparcurrprop_60',['setParCurrProp',['../classcovarianceBase.html#a14e381a0af219c8bd2b13c6b1eb355a9',1,'covarianceBase']]], + ['setparname_61',['setParName',['../classcovarianceBase.html#acea84497d008ea2b1d1a4d956a64a890',1,'covarianceBase']]], + ['setparprop_62',['setParProp',['../classcovarianceBase.html#a19c4b271874224da9188623b249a669c',1,'covarianceBase']]], + ['setparprop_5fpca_63',['setParProp_PCA',['../classcovarianceBase.html#a7c9b2ae1b4144448385b47a576e4d07d',1,'covarianceBase']]], + ['setplotbinvalue_64',['SetPlotBinValue',['../classMCMCProcessor.html#aed120fafdfe97615f4c2a30aedde03dd',1,'MCMCProcessor']]], + ['setploterrorforflatprior_65',['SetPlotErrorForFlatPrior',['../classMCMCProcessor.html#adbe0ec06ce30447cb1c03a961364b929',1,'MCMCProcessor']]], + ['setplotrelativetoprior_66',['SetPlotRelativeToPrior',['../classMCMCProcessor.html#a6ea549289949ac19d2fc768d82c8f1c9',1,'MCMCProcessor']]], + ['setpost2dplotthreshold_67',['SetPost2DPlotThreshold',['../classMCMCProcessor.html#ab605f4d7bf4e2b24b4c0b1c5853b479f',1,'MCMCProcessor']]], + ['setposterior1dcut_68',['SetPosterior1DCut',['../classMCMCProcessor.html#a641da7f5e018d48d480638fbad6406a4',1,'MCMCProcessor']]], + ['setprintlength_69',['setPrintLength',['../classcovarianceBase.html#a340fbee1b5d97897431f2b0222f85337',1,'covarianceBase']]], + ['setprinttopdf_70',['SetPrintToPDF',['../classMCMCProcessor.html#a9db87211d9f066011daed18af7f4631e',1,'MCMCProcessor']]], + ['setproductionheightarray_71',['SetProductionHeightArray',['../classOscillator.html#ae63a18646bdc533c04d16e4c2512ba5f',1,'Oscillator']]], + ['setproductionheightbinedges_72',['SetProductionHeightBinEdges',['../classOscillator.html#af1b15d3a1e3920d4321fc5ecba2589ad',1,'Oscillator']]], + ['setseed_73',['SetSeed',['../classThrowParms.html#a3582e901ae8c3e45585c84f8e4c95c5b',1,'ThrowParms']]], + ['setsingleparameter_74',['setSingleParameter',['../classcovarianceBase.html#a978483dabf04239f1c475516b5cdab7f',1,'covarianceBase']]], + ['setsize_75',['SetSize',['../classTF1__red.html#a00ed2b99d9fe75bfb822ed7470fb5ae8',1,'TF1_red']]], + ['setsmoothing_76',['SetSmoothing',['../classMCMCProcessor.html#a4bec41cdc9af977a51b269e2a07fe961',1,'MCMCProcessor']]], + ['setsplinenumber_77',['SetSplineNumber',['../classXSecStruct.html#a76881a9b8931d8a5b092b62795b7b663',1,'XSecStruct']]], + ['setsplinepointers_78',['setSplinePointers',['../classSMonolith.html#a40f6b9256a18fa59009e5961aec776ff',1,'SMonolith']]], + ['setstepcut_79',['setstepcut',['../classMCMCProcessor.html#a16f653dcb6358f2a8e393e3946a7e6d2',1,'MCMCProcessor::SetStepCut(const int Cuts)'],['../classMCMCProcessor.html#a69cc9eeaf22bfeb08b1172ec723db605',1,'MCMCProcessor::SetStepCut(std::string Cuts)']]], + ['setstepscale_80',['setStepScale',['../classcovarianceBase.html#a1c78ffa8fed878eedba686a9d9ec44a9',1,'covarianceBase']]], + ['setteststatistic_81',['SetTestStatistic',['../classsamplePDFBase.html#a839bdbfebdafc9866e634a4ef4753f97',1,'samplePDFBase']]], + ['setth1style_82',['setTH1Style',['../GetPostfitParamPlots_8cpp.html#af8675c0ad8ab5f45bf66a34642c0cbf2',1,'GetPostfitParamPlots.cpp']]], + ['setthrowmatrix_83',['setThrowMatrix',['../classcovarianceBase.html#af30ca7861452e1446e55700f4b49b608',1,'covarianceBase']]], + ['setuncertainty_84',['SetUncertainty',['../classBaseFuncPar.html#a114a593572870ff1db906046d6d555f8',1,'BaseFuncPar']]], + ['setup_85',['setup',['../classBaseFuncPar.html#a2b2eebac000335b5f9b91ecb4089bf19',1,'BaseFuncPar']]], + ['setupfuncparameters_86',['SetupFuncParameters',['../classsamplePDFFDBase.html#a9c9de54c4228dc54aa1b538ae10c558b',1,'samplePDFFDBase']]], + ['setupnormparameters_87',['SetupNormParameters',['../classsamplePDFFDBase.html#a9bda6382715dc3b7d265bd7b79d206fa',1,'samplePDFFDBase']]], + ['setupnormpars_88',['SetupNormPars',['../classcovarianceXsec.html#ae5b060ac997dfd8ffad0a5acdf871b8c',1,'covarianceXsec']]], + ['setuposccalc_89',['SetupOscCalc',['../classsamplePDFFDBase.html#ad2052c9178b220901224a29b474afaad',1,'samplePDFFDBase']]], + ['setupoutput_90',['SetupOutput',['../classMCMCProcessor.html#aa4761be1345f1be3defe162b278a9d8e',1,'MCMCProcessor']]], + ['setupsplines_91',['setupsplines',['../classsplineBase.html#a46a6327b716e8f69aa8bd5f216e2eeee',1,'splineBase::setupSplines()'],['../classsplineFDBase.html#a91521064517b5e4f0232570e6746bdf7',1,'splineFDBase::SetupSplines(int BinningOpt)'],['../classsplineFDBase.html#a281be56a824e5057044e4ab1b073bc9d',1,'splineFDBase::SetupSplines()'],['../classsamplePDFFDBase.html#aa145eb7b1e14c10339c288959dad3d65',1,'samplePDFFDBase::setupSplines()'],['../classsplineInterface.html#a83f15de1b33f89e659c06120234b14b7',1,'splineInterface::setupSplines()']]], + ['setupweightpointers_92',['SetupWeightPointers',['../classsamplePDFFDBase.html#af58169bdc4b4a7e98c1f315dac96418e',1,'samplePDFFDBase']]], + ['setxseccov_93',['SetXsecCov',['../classsamplePDFFDBase.html#a2da3da30c6de171d67ad2c346c36f160',1,'samplePDFFDBase']]], + ['setxseconlyparameters_94',['setXsecOnlyParameters',['../classcovarianceXsec.html#afc512105a141dcf30bc5f478970aafa2',1,'covarianceXsec']]], + ['setxsecparnames_95',['setXsecParNames',['../classcovarianceXsec.html#a1a8b7172077a72a532bc77a0da4ac56c',1,'covarianceXsec']]], + ['smonolith_96',['smonolith',['../classSMonolith.html#a59ef52d97c185955534e8af69ba31f29',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TF1 * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a59a63f3b0eb101f871e84d0730960b67',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TF1_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#ac622c355f630c12438b547bbb9fe212c',1,'SMonolith::SMonolith(std::string FileName)'],['../classSMonolith.html#add144325f3dbacbd11d1596cf1639b17',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TSpline3_red * &gt; &gt; &amp;MasterSpline)'],['../classSMonolith.html#a20ae764ad15b91319da76c8eb8ba73d9',1,'SMonolith::SMonolith(std::vector&lt; std::vector&lt; TSpline3 * &gt; &gt; &amp;MasterSpline)']]], + ['spline_97',['spline',['../classspline.html#a7c7a04cae16a741ee6b2fb8661b5deaf',1,'spline']]], + ['splinebase_98',['splineBase',['../classsplineBase.html#afcf238a7e106ddd4c1a03042e2df188e',1,'splineBase']]], + ['splinefdbase_99',['splineFDBase',['../classsplineFDBase.html#a089883fce1a3f4180e3156215fb9c38a',1,'splineFDBase']]], + ['splineinterpolation_5ftostring_100',['SplineInterpolation_ToString',['../Structs_8h.html#a268ee830ae5952cc560dc518fcd52486',1,'Structs.h']]], + ['stdnormrand_101',['StdNormRand',['../classThrowParms.html#af90305cda175280adc36cf76d9ac2148',1,'ThrowParms']]], + ['str2int_102',['str2int',['../Structs_8h.html#ab29c200876205c3add1d71f053195658',1,'Structs.h']]], + ['stretch_103',['stretch',['../classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8',1,'stretch::stretch(bool verbose=false)'],['../classstretch.html#adf2d2378f0ecbec1ae19be241daf8932',1,'stretch::stretch(const char *name=&quot;output.root&quot;, int nwalkers=100, bool verbose=false)']]], + ['stringtoyaml_104',['stringtoyaml',['../YamlHelper_8cpp.html#a3ff1f2154c0a70ad5a145fcc5891e7ec',1,'STRINGtoYAML(const std::string &amp;yaml_string):&#160;YamlHelper.cpp'],['../YamlHelper_8h.html#a3ff1f2154c0a70ad5a145fcc5891e7ec',1,'STRINGtoYAML(const std::string &amp;yaml_string):&#160;YamlHelper.cpp']]], + ['stripduplicatedmodes_105',['StripDuplicatedModes',['../classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d',1,'splineFDBase']]], + ['swarmiterate_106',['swarmIterate',['../classPSO.html#af7b07ec9013e1d6859d7ffa8e54086c7',1,'PSO']]], + ['switchtocudaprobtype_107',['SwitchToCUDAProbType',['../classsamplePDFFDBase.html#aaf8912a330835d6a7879c42d54d71387',1,'samplePDFFDBase']]], + ['synchronisememtransfer_108',['SynchroniseMemTransfer',['../classSMonolith.html#a68e18d73ed1ac524ceaea79d2a5460ce',1,'SMonolith']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 00000000..ffb6cf0d --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 20 19" + height="19" + width="20" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <circle + r="3.5" + cy="8.5" + cx="5.5" + id="path4611" + style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4630" + d="m 8.1085854,11.109059 2.7823556,2.782356" + style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> +</svg> diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 00000000..4122773f --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + viewBox="0 0 20 19" + height="19" + width="20" + id="svg2" + version="1.1"> + <defs + id="defs6" /> + <circle + r="3.5" + cy="8.5" + cx="5.5" + id="path4611" + style="fill:#000000;fill-opacity:0;stroke:#C5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /> + <path + id="path4630" + d="m 8.1085854,11.109059 2.7823556,2.782356" + style="fill:none;stroke:#C5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> +</svg> diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 00000000..553dba87 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + version="1.1" + id="svg2" + width="20" + height="19" + viewBox="0 0 20 19" + > + <defs + id="defs6" /> + <circle + style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + id="path4611" + cx="5.5" + cy="8.5" + r="3.5" /> + <path + style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 11,7 13.5,10 16,7 Z" + id="path4609" + /> + <path + style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.1085854,11.109059 2.7823556,2.782356" + id="path4630" + /> +</svg> diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 00000000..c906f84c --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg + xmlns="http://www.w3.org/2000/svg" + version="1.1" + id="svg2" + width="20" + height="19" + viewBox="0 0 20 19" + > + <defs + id="defs6" /> + <circle + style="fill:#000000;fill-opacity:0;stroke:#c5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + id="path4611" + cx="5.5" + cy="8.5" + r="3.5" /> + <path + style="fill:#c5C5C5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 11,7 13.5,10 16,7 Z" + id="path4609" + /> + <path + style="fill:none;stroke:#c5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 8.1085854,11.109059 2.7823556,2.782356" + id="path4630" + /> +</svg> diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 00000000..7a6b72a8 --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mach3utils_0',['MaCh3Utils',['../namespaceMaCh3Utils.html',1,'']]] +]; diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 00000000..7f77e2fb --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 00000000..63272ebf --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['align_20center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['alt_20mach3_20align_20center_20width_20100_1',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 00000000..3d62e577 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['code_20to_20mach3_1',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['contribute_20code_20to_20mach3_2',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]] +]; diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 00000000..fcfdf5a3 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['documentation_1',['MaCh3 Reference Documentation',['../index.html',1,'']]] +]; diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 00000000..311c1f05 --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['how_20to_20contribute_20code_20to_20mach3_0',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]] +]; diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 00000000..5b7a75a4 --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['img_20src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_6.js b/search/pages_6.js new file mode 100644 index 00000000..243f5710 --- /dev/null +++ b/search/pages_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['mach3_0',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]], + ['mach3_20img_20src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_1',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]], + ['mach3_20reference_20documentation_2',['MaCh3 Reference Documentation',['../index.html',1,'']]], + ['mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_3',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_7.js b/search/pages_7.js new file mode 100644 index 00000000..b81e450d --- /dev/null +++ b/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['png_20alt_20mach3_20align_20center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_8.js b/search/pages_8.js new file mode 100644 index 00000000..bbbcc4f4 --- /dev/null +++ b/search/pages_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reference_20documentation_0',['MaCh3 Reference Documentation',['../index.html',1,'']]] +]; diff --git a/search/pages_9.js b/search/pages_9.js new file mode 100644 index 00000000..94572dd9 --- /dev/null +++ b/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['src_20doc_20mach3logo_20png_20alt_20mach3_20align_20center_20width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/pages_a.js b/search/pages_a.js new file mode 100644 index 00000000..55d25bcb --- /dev/null +++ b/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['to_20contribute_20code_20to_20mach3_0',['How to Contribute Code to MaCh3',['../md__2github_2workspace_2CONTRIBUTING.html',1,'']]] +]; diff --git a/search/pages_b.js b/search/pages_b.js new file mode 100644 index 00000000..c93ab197 --- /dev/null +++ b/search/pages_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['width_20100_0',['MaCh3 &lt;img src=&quot;Doc/mach3logo.png&quot; alt=&quot;MaCh3&quot; align=&quot;center&quot; width=&quot;100&quot;/&gt;',['../md__2github_2workspace_2README.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..19f76f9d --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This <li> object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..6fd40c67 --- /dev/null +++ b/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i<search.length;i++) + { + var c = search.charAt(i); + var cn = c.charCodeAt(0); + if (c.match(/[a-z0-9\u0080-\uFFFF]/)) + { + result+=c; + } + else if (cn<16) + { + result+="_0"+cn.toString(16); + } + else + { + result+="_"+cn.toString(16); + } + } + return result; +} + +function getXPos(item) +{ + var x = 0; + if (item.offsetWidth) + { + while (item && item!=document.body) + { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; +} + +function getYPos(item) +{ + var y = 0; + if (item.offsetWidth) + { + while (item && item!=document.body) + { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; +} + +var searchResults = new SearchResults("searchResults"); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) +{ + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = function() + { return document.getElementById("MSearchField"); } + + this.DOMSearchSelect = function() + { return document.getElementById("MSearchSelect"); } + + this.DOMSearchSelectWindow = function() + { return document.getElementById("MSearchSelectWindow"); } + + this.DOMPopupSearchResults = function() + { return document.getElementById("MSearchResults"); } + + this.DOMPopupSearchResultsWindow = function() + { return document.getElementById("MSearchResultsWindow"); } + + this.DOMSearchClose = function() + { return document.getElementById("MSearchClose"); } + + this.DOMSearchBox = function() + { return document.getElementById("MSearchBox"); } + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) + { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() + { + var searchSelectWindow = this.DOMSearchSelectWindow(); + var searchField = this.DOMSearchSelect(); + + var left = getXPos(searchField); + var top = getYPos(searchField); + top += searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) + { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() + { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) + { + if (this.keyTimeout) // kill running timer + { + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) + { + if (e.shiftKey==1) + { + this.OnSearchSelectShow(); + var win=this.DOMSearchSelectWindow(); + for (i=0;i<win.childNodes.length;i++) + { + var child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') + { + child.focus(); + return; + } + } + return; + } + else + { + var elem = searchResults.NavNext(0); + if (elem) elem.focus(); + } + } + else if (e.keyCode==27) // Escape out of the search field + { + e.stopPropagation(); + this.DOMSearchField().blur(); + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.lastSearchValue = ''; + this.Activate(false); + return; + } + + // strip whitespaces + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + + if (searchValue != this.lastSearchValue) // search value has changed + { + if (searchValue != "") // non-empty search + { + // set timer for search update + this.keyTimeout = setTimeout(this.Search.bind(this), + this.keyTimeoutLength); + } + else // empty search field + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.lastSearchValue = ''; + } + } + } + + this.SelectItemCount = function(id) + { + var count=0; + var win=this.DOMSearchSelectWindow(); + for (i=0;i<win.childNodes.length;i++) + { + var child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') + { + count++; + } + } + return count; + } + + this.SelectItemSet = function(id) + { + var i,j=0; + var win=this.DOMSearchSelectWindow(); + for (i=0;i<win.childNodes.length;i++) + { + var child = win.childNodes[i]; // get span within a + if (child.className=='SelectItem') + { + var node = child.firstChild; + if (j==id) + { + node.innerHTML='&#8226;'; + } + else + { + node.innerHTML='&#160;'; + } + j++; + } + } + } + + // Called when an search filter selection is made. + // set item with index id as the active item + this.OnSelectItem = function(id) + { + this.searchIndex = id; + this.SelectItemSet(id); + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) // something was found -> do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down + { + this.searchIndex++; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==38 && this.searchIndex>0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of <Search()>. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e<searchData.length; e++) + { + var id = searchData[e][0]; + var srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + var srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + var srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+e); + setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = searchData[e][1][0]; + srEntry.appendChild(srLink); + if (searchData[e][1].length==2) // single result + { + srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (searchData[e][1][1][1]) + { + srLink.setAttribute('target','_parent'); + } + else + { + srLink.setAttribute('target','_blank'); + } + var srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = searchData[e][1][1][2]; + srEntry.appendChild(srScope); + } + else // multiple results + { + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + var srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (var c=0; c<searchData[e][1].length-1; c++) + { + var srChild = document.createElement('a'); + srChild.setAttribute('id','Item'+e+'_c'+c); + setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')'); + setClassAttr(srChild,'SRScope'); + srChild.setAttribute('href',resultsPath+searchData[e][1][c+1][0]); + srChild.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (searchData[e][1][c+1][1]) + { + srChild.setAttribute('target','_parent'); + } + else + { + srChild.setAttribute('target','_blank'); + } + srChild.innerHTML = searchData[e][1][c+1][2]; + srChildren.appendChild(srChild); + } + srEntry.appendChild(srChildren); + } + srResult.appendChild(srEntry); + results.appendChild(srResult); + } +} + +function init_search() +{ + var results = document.getElementById("MSearchSelectWindow"); + results.tabIndex=0; + for (var key in indexSectionLabels) + { + var link = document.createElement('a'); + link.setAttribute('class','SelectItem'); + link.setAttribute('onclick','searchBox.OnSelectItem('+key+')'); + link.href='javascript:void(0)'; + link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key]; + results.appendChild(link); + } + searchBox.OnSelectItem(0); + + var input = document.getElementById("MSearchSelect"); + var searchSelectWindow = document.getElementById("MSearchSelectWindow"); + input.tabIndex=0; + input.addEventListener("keydown", function(event) { + if (event.keyCode==13 || event.keyCode==40) { + event.preventDefault(); + if (searchSelectWindow.style.display == 'block') { + searchBox.CloseSelectionWindow(); + } else { + searchBox.OnSearchSelectShow(); + searchBox.DOMSearchSelectWindow().focus(); + } + } + }); +} +/* @license-end */ diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 00000000..9764547a --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,45 @@ +var indexSectionsWithContent = +{ + 0: "1_abcdefghiklmnoprstuvwxy~", + 1: "bcefilmopstx", + 2: "m", + 3: "cdfgiklmoprsty", + 4: "abcdefgiklmnoprstuvwxy~", + 5: "_abcdefghiklmnoprstuvwxy", + 6: "f", + 7: "cnpst", + 8: "ekmt", + 9: "_cmu", + 10: "1acdhimprstw" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "enums", + 8: "enumvalues", + 9: "defines", + 10: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Typedefs", + 7: "Enumerations", + 8: "Enumerator", + 9: "Macros", + 10: "Pages" +}; + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 00000000..b4fdcbcb --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['float_5ft_0',['FLOAT_T',['../OscClass__CUDAProb3_8h.html#ae859fcc828db5cc21dc6bd9611634949',1,'OscClass_CUDAProb3.h']]] +]; diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..9a46c86e --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['_5fdata_0',['_data',['../classsamplePDFFDBase.html#a83316d361e204b2a326689a11e88719b',1,'samplePDFFDBase']]], + ['_5ffcurrval_1',['_fCurrVal',['../classcovarianceBase.html#ae70f51df3976975b2dc78fd3bfc28b65',1,'covarianceBase']]], + ['_5ffdetid_2',['_fDetID',['../classcovarianceXsec.html#a183f01056fc0e9b42db202e944021332',1,'covarianceXsec']]], + ['_5fferror_3',['_fError',['../classcovarianceBase.html#a34f877fc160b4a93a3aab1b3a8977858',1,'covarianceBase']]], + ['_5fffancynames_4',['_fFancyNames',['../classcovarianceBase.html#a973671386a2f8ea924f25f8f5404654c',1,'covarianceBase']]], + ['_5fffdsplinemodes_5',['_fFDSplineModes',['../classcovarianceXsec.html#a14ee84d9aab2ee0d3fbf9d060fb4ac78',1,'covarianceXsec']]], + ['_5fffdsplinenames_6',['_fFDSplineNames',['../classcovarianceXsec.html#a89cadb30d92261eb691eac44c558ea09',1,'covarianceXsec']]], + ['_5ffflatprior_7',['_fFlatPrior',['../classcovarianceBase.html#ad9c47deb7009bff81210f666e80012eb',1,'covarianceBase']]], + ['_5ffgenerated_8',['_fGenerated',['../classcovarianceBase.html#a9b753f52711600a9f8d648531d95b044',1,'covarianceBase']]], + ['_5ffglobalstepscale_9',['_fGlobalStepScale',['../classcovarianceBase.html#a0088413d6a15d12cd34ec06166302f5c',1,'covarianceBase']]], + ['_5ffindivstepscale_10',['_fIndivStepScale',['../classcovarianceBase.html#a3cda39026e336a49cef482efd4062561',1,'covarianceBase']]], + ['_5ffkinematicbounds_11',['_fKinematicBounds',['../classcovarianceXsec.html#a46247d1477e2a37e9185f497b02f644e',1,'covarianceXsec']]], + ['_5ffkinematicpars_12',['_fKinematicPars',['../classcovarianceXsec.html#a4fb160b71cb97868cfc86922a431b03e',1,'covarianceXsec']]], + ['_5fflowbound_13',['_fLowBound',['../classcovarianceBase.html#a8f1d94838f188cc85c4f82557c0b0b66',1,'covarianceBase']]], + ['_5ffnames_14',['_fNames',['../classcovarianceBase.html#a3e502d80fd2c30a7da4fe75a3e05b0da',1,'covarianceBase']]], + ['_5ffndsplinenames_15',['_fNDSplineNames',['../classcovarianceXsec.html#aafdd7bae08e33f599e906d4c775efb38',1,'covarianceXsec']]], + ['_5ffneutrinoflavour_16',['_fNeutrinoFlavour',['../classcovarianceXsec.html#a60b37c1f5551cb99b22656d434d2b9a1',1,'covarianceXsec']]], + ['_5ffneutrinoflavourunosc_17',['_fNeutrinoFlavourUnosc',['../classcovarianceXsec.html#aee4d745b2268018a38631b72a97410f0',1,'covarianceXsec']]], + ['_5ffnormmodes_18',['_fNormModes',['../classcovarianceXsec.html#acf3c890f9b918168030a7372306c3227',1,'covarianceXsec']]], + ['_5ffnumpar_19',['_fNumPar',['../classcovarianceBase.html#ac5d922f1a4163b38ebc7a3ef21eec376',1,'covarianceBase']]], + ['_5ffparamtype_20',['_fParamType',['../classcovarianceXsec.html#ae74d3752f5659e2fa85c65783fbbfc85',1,'covarianceXsec']]], + ['_5ffprefitvalue_21',['_fPreFitValue',['../classcovarianceBase.html#a7578a2cc2e8e9100fad88310a824cb1c',1,'covarianceBase']]], + ['_5ffpropval_22',['_fPropVal',['../classcovarianceBase.html#a12f0eb31a5ef48b014baa11d4ab919e9',1,'covarianceBase']]], + ['_5ffsplineinterpolationtype_23',['_fSplineInterpolationType',['../classcovarianceXsec.html#a1b3ee82de052638e1fed78d480136533',1,'covarianceXsec']]], + ['_5fftargetnuclei_24',['_fTargetNuclei',['../classcovarianceXsec.html#a9616020e3255baa6076b85cd92567e23',1,'covarianceXsec']]], + ['_5ffupbound_25',['_fUpBound',['../classcovarianceBase.html#a31e636cb6de871bd0c2c8e7e299df9e7',1,'covarianceBase']]], + ['_5ffyamldoc_26',['_fYAMLDoc',['../classcovarianceBase.html#a933ff3dc0af99629ba3582a5d9d89d23',1,'covarianceBase']]], + ['_5fhpdf1d_27',['_hPDF1D',['../classsamplePDFBase.html#ae324bd76a337efa43fedfd2052029e47',1,'samplePDFBase']]], + ['_5fhpdf2d_28',['_hPDF2D',['../classsamplePDFBase.html#a603fb2d4f93751de60475ed65fc08245',1,'samplePDFBase']]], + ['_5fmax_5fknots_29',['_max_knots',['../classSMonolith.html#ac0d1df54649909e4cee3385f68132799',1,'SMonolith']]], + ['_5fsamplefile_30',['_sampleFile',['../classsamplePDFFDBase.html#af8657285a97796f840dc191a16e34b16',1,'samplePDFFDBase']]] +]; diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 00000000..c613c06a --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['a_0',['a',['../classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533',1,'stretch']]], + ['acccount_1',['accCount',['../classFitterBase.html#a2774f3a0047c4347ee0db05406425f79',1,'FitterBase']]], + ['accprob_2',['accprob',['../classFitterBase.html#a6319d2ea50984860475bbc6c708b0d90',1,'FitterBase::accProb'],['../classstretch.html#a3bdd76ceeddae7e33f4cc99f3f11623e',1,'stretch::accProb']]], + ['accprobbatchedaverages_3',['AccProbBatchedAverages',['../classMCMCProcessor.html#a523a223a4754c133121796f4591c7be3',1,'MCMCProcessor']]], + ['accprobvalues_4',['AccProbValues',['../classMCMCProcessor.html#a88cab29770fd6098a674a0ab3628a251',1,'MCMCProcessor']]], + ['adaptivecovariance_5',['adaptiveCovariance',['../classcovarianceBase.html#a4c5b25b0be2459922b53f990f2a63c71',1,'covarianceBase']]], + ['anneal_6',['anneal',['../classmcmc.html#a4da3776296d4f06268f240df5eb0bbcc',1,'mcmc']]], + ['annealtemp_7',['AnnealTemp',['../classmcmc.html#a3052c9e38107c0070c885a5a3bbbc302',1,'mcmc']]], + ['applysmoothing_8',['ApplySmoothing',['../classMCMCProcessor.html#a682c1c47626542f5820d633ba2bc010c',1,'MCMCProcessor']]], + ['arrayconfig_9',['ArrayConfig',['../classOscillator.html#a37f2cfa9d511b92ebbed589f1338a2a8',1,'Oscillator']]], + ['auto_5fsave_10',['auto_save',['../classFitterBase.html#ad955982e63066918cba9c53381608d09',1,'FitterBase::auto_save'],['../classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236',1,'stretch::auto_save']]], + ['autocorrlag_11',['AutoCorrLag',['../classMCMCProcessor.html#a6156bba72e1f076e66f0356e48506a36',1,'MCMCProcessor']]] +]; diff --git a/search/variables_10.js b/search/variables_10.js new file mode 100644 index 00000000..f867b748 --- /dev/null +++ b/search/variables_10.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['rand_0',['rand',['../classThrowParms.html#a8b3eb1cc7dde3218efb198f529ecda9d',1,'ThrowParms']]], + ['random_1',['random',['../classFitterBase.html#a2d3be9c591eaf8454e2eb5b4e12c6e67',1,'FitterBase::random'],['../classstretch.html#a67a0480d7414ee187f52299e1c0ff514',1,'stretch::random']]], + ['random_5fnumber_2',['random_number',['../classcovarianceBase.html#a60dcca091a79ccddd3ad5b414ccd809b',1,'covarianceBase']]], + ['randparams_3',['randParams',['../classcovarianceBase.html#a705e648220c06083cd1acc5fba4f2ef7',1,'covarianceBase']]], + ['ranges_5fmax_4',['ranges_max',['../classPSO.html#a1c5454d8b4000375138447cada8a46a2',1,'PSO']]], + ['ranges_5fmin_5',['ranges_min',['../classPSO.html#ad9824964649e96ac13d89d47bd5a5174',1,'PSO']]], + ['ratiolabelscaling_6',['ratioLabelScaling',['../PlotLLH_8cpp.html#a152bc19a7768c2022e7195771f385521',1,'PlotLLH.cpp']]], + ['ratioplotsplit_7',['ratioPlotSplit',['../PlotLLH_8cpp.html#a45cc23dd922ece737b1306d357671417',1,'PlotLLH.cpp']]], + ['reactorprior_8',['reactorPrior',['../classcovarianceOsc.html#aab556103dbe70cb584f06c27b81f21ac',1,'covarianceOsc']]], + ['rebinmode_9',['RebinMode',['../classOscillator.html#abe1a1c3f7c4082bf86e7575f13517fde',1,'Oscillator']]], + ['reject_10',['reject',['../classmcmc.html#a537f7c2411a6a8e65fdf57b81ce6fe4a',1,'mcmc']]], + ['rhat_11',['RHat',['../RHat_8cpp.html#ab5cfb5e8741283e8d8252aae184004e4',1,'RHat.cpp']]], + ['rhatfolded_12',['RHatFolded',['../RHat_8cpp.html#a754fbe6088f05d880121693722fe6b99',1,'RHat.cpp']]], + ['rnd_13',['rnd',['../classsamplePDFBase.html#a06fd2c9575c0b9e56aaaf78b5be59b44',1,'samplePDFBase']]], + ['rw_5fetru_14',['rw_etru',['../structfdmc__base.html#aa37a1a1ba95c3cadb92fd135c845a3cf',1,'fdmc_base']]], + ['rw_5flower_5flower_5fxbinedge_15',['rw_lower_lower_xbinedge',['../structfdmc__base.html#aa7c93fcdf1ecb44af5fb60d9906884b3',1,'fdmc_base']]], + ['rw_5flower_5fxbinedge_16',['rw_lower_xbinedge',['../structfdmc__base.html#ac21589725161539db7389ca71cc9d469',1,'fdmc_base']]], + ['rw_5ftruecz_17',['rw_truecz',['../structfdmc__base.html#a4db46c63bde006773ccc31054c74d213',1,'fdmc_base']]], + ['rw_5fupper_5fupper_5fxbinedge_18',['rw_upper_upper_xbinedge',['../structfdmc__base.html#a914879f08bef429544c23de3547f5485',1,'fdmc_base']]], + ['rw_5fupper_5fxbinedge_19',['rw_upper_xbinedge',['../structfdmc__base.html#af4abad4b5dc2004648207976d38048d5',1,'fdmc_base']]] +]; diff --git a/search/variables_11.js b/search/variables_11.js new file mode 100644 index 00000000..da3a025d --- /dev/null +++ b/search/variables_11.js @@ -0,0 +1,61 @@ +var searchData= +[ + ['sameaxis_0',['sameAxis',['../PlotLLH_8cpp.html#a0c4fa08819fe8fd375f7d521dfe2b63a',1,'PlotLLH.cpp']]], + ['sample_5fllh_1',['sample_llh',['../classstretch.html#a1754d48c9da8f327c5d37b577d2f291c',1,'stretch::sample_llh'],['../classFitterBase.html#a7ca9ba6e8948f247fbff90f77b2f3091',1,'FitterBase::sample_llh']]], + ['sampledetid_2',['sampledetid',['../structfdmc__base.html#abef728b31edac3c34700325150cba861',1,'fdmc_base::SampleDetID'],['../classsamplePDFFDBase.html#a32b0465b0b8a2f7ae6b35da5fa6ef9cc',1,'samplePDFFDBase::SampleDetID']]], + ['samplelabelthreshold_3',['sampleLabelThreshold',['../PlotLLH_8cpp.html#a4a39ce5b09913469be1a966a5d99a88b',1,'PlotLLH.cpp']]], + ['samplename_4',['samplename',['../classsamplePDFFDBase.html#ae1c9d87b302042e4e2347aa787a947cd',1,'samplePDFFDBase::samplename'],['../classsamplePDFBase.html#a4f42dca382c09d8827b8d136a77d1b29',1,'samplePDFBase::SampleName']]], + ['samplename_5fv_5',['SampleName_v',['../classMCMCProcessor.html#a3660e404a6631cfa913a815481730a9b',1,'MCMCProcessor']]], + ['samplenames_6',['SampleNames',['../classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208',1,'splineFDBase']]], + ['samplepdffd_5farray_7',['samplePDFFD_array',['../classsamplePDFFDBase.html#a057d66f6ba12cdd55ea90b6efcdb8f62',1,'samplePDFFDBase']]], + ['samplepdffd_5farray_5fw2_8',['samplePDFFD_array_w2',['../classsamplePDFFDBase.html#a687d1ffb99beff86a7903258ae29e53e',1,'samplePDFFDBase']]], + ['samplepdffd_5fdata_9',['samplePDFFD_data',['../classsamplePDFFDBase.html#a409599f48f580c86ff4c774aea81986e',1,'samplePDFFDBase']]], + ['samples_10',['samples',['../classFitterBase.html#afac0dcceb1df194159c07945e8dc0069',1,'FitterBase::samples'],['../classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2',1,'stretch::samples']]], + ['samplevalues_11',['SampleValues',['../classMCMCProcessor.html#a28e89498420221149ec97c353c430bf8',1,'MCMCProcessor']]], + ['save_5fnominal_12',['save_nominal',['../classFitterBase.html#aedd882d8e4d0da0f89cf94e3a008affe',1,'FitterBase::save_nominal'],['../classstretch.html#a39ad43665c1bf8b872e200bf984bf860',1,'stretch::save_nominal']]], + ['savename_13',['SaveName',['../GetPostfitParamPlots_8cpp.html#a78b45c4d250d7b2113925577bbce2dad',1,'GetPostfitParamPlots.cpp']]], + ['savesplinefile_14',['SaveSplineFile',['../classSMonolith.html#ab5692081772ca14bd012eb125e2ccfd4',1,'SMonolith']]], + ['scaleuncertainty_15',['ScaleUncertainty',['../classBaseFuncPar.html#a7ee224dc59380c3063d237b190c1732c',1,'BaseFuncPar']]], + ['scandirpath_16',['scanDirPath',['../PlotLLH_8cpp.html#a450192254924dae4470465acfd87401f',1,'PlotLLH.cpp']]], + ['scandirprefix_17',['scanDirPrefix',['../PlotLLH_8cpp.html#a39a5fb670b2433471c95d766fd692b89',1,'PlotLLH.cpp']]], + ['secondarybinningtemplatename_18',['SecondaryBinningTemplateName',['../classOscillator.html#a9488f28c888577110a2f47819bfbbe68',1,'Oscillator']]], + ['secondaryhistkey_19',['SecondaryHistKey',['../classOscillator.html#a0a1d14a50549dfad09c5f01255dbfde3',1,'Oscillator']]], + ['secondaryxbinedges_20',['SecondaryXBinEdges',['../classOscillator.html#af12aac0dce1198390ceaa8a32326eb81',1,'Oscillator']]], + ['secondaryxbinevalpoints_21',['SecondaryXBinEvalPoints',['../classOscillator.html#a2ce88122d08bd8ffde4ceb84748fa92c',1,'Oscillator']]], + ['secondaryybinedges_22',['SecondaryYBinEdges',['../classOscillator.html#a9968789998df1f14ee02de9f82867911',1,'Oscillator']]], + ['secondaryybinevalpoints_23',['SecondaryYBinEvalPoints',['../classOscillator.html#ad970795233f7696499a1753981eb6086',1,'Oscillator']]], + ['segments_24',['segments',['../classSMonolith.html#a53ab5b2235fd697f27556f1a1a7a5354',1,'SMonolith']]], + ['selection_25',['selection',['../classXsecNorms4.html#a1723c13b5d04cff5ce48718cae5b6e14',1,'XsecNorms4::Selection'],['../classsamplePDFFDBase.html#aafa0e8f399c5c22d9234e55a7289f8ed',1,'samplePDFFDBase::Selection']]], + ['selectionbounds_26',['SelectionBounds',['../classsamplePDFFDBase.html#a01553c17343ed6db1391750d7846b203',1,'samplePDFFDBase']]], + ['selectionstr_27',['SelectionStr',['../classsamplePDFFDBase.html#a8bc9dac849f31e1281a3af0261d1b952',1,'samplePDFFDBase']]], + ['settingssaved_28',['SettingsSaved',['../classFitterBase.html#a588678c71d816f48ba3c140543dbe916',1,'FitterBase']]], + ['signal_29',['signal',['../structfdmc__base.html#ae94a6b0203acb2effc73bd37d799d4b3',1,'fdmc_base']]], + ['size_30',['size',['../classcovarianceBase.html#a7d3922fb843ba65990c44cac324b9ccb',1,'covarianceBase::size'],['../GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82',1,'size:&#160;GetPenaltyTerm.cpp']]], + ['skdet_5fpointer_31',['skdet_pointer',['../structfdmc__base.html#a1222d10ff4ba2f6a2b2018a81c8ffdae',1,'fdmc_base']]], + ['splinebinning_32',['SplineBinning',['../classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70',1,'splineFDBase']]], + ['splinefile_33',['splinefile',['../structfdmc__base.html#afbf315b6d43b5e0de283fc9df180068f',1,'fdmc_base::splineFile'],['../classsplineBase.html#a7aa7a4675807a004408113a0c2bd2e95',1,'splineBase::splinefile'],['../classsamplePDFFDBase.html#ac7c59494c502991294fa1be8624d47a6',1,'samplePDFFDBase::splineFile']]], + ['splinefileparprefixnames_34',['SplineFileParPrefixNames',['../classsplineFDBase.html#a5619363447e607cd835c46d601b10675',1,'splineFDBase']]], + ['splineinfoarray_35',['SplineInfoArray',['../classSMonolith.html#a50a4ad58aebffdb820626f855bae6821',1,'SMonolith']]], + ['splinemodevecs_36',['SplineModeVecs',['../classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b',1,'splineFDBase']]], + ['splineparsindex_37',['SplineParsIndex',['../classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d',1,'splineFDBase']]], + ['splineparspointer_38',['splineparspointer',['../structFastSplineInfo.html#a768e33415a2a6b50e9019d6a74fa5509',1,'FastSplineInfo::splineParsPointer'],['../classSMonolith.html#afa782652b0b3da923c5b20bb1319aadd',1,'SMonolith::splineParsPointer']]], + ['splinevec_5fmonolith_39',['splinevec_Monolith',['../classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d',1,'splineFDBase']]], + ['splitbysample_40',['splitBySample',['../PlotLLH_8cpp.html#ad9712ac69381fb82f518409a0b617fb0',1,'PlotLLH.cpp']]], + ['standarddeviation_41',['StandardDeviation',['../RHat_8cpp.html#a5bdfaf60cce582e30db6bd3001de9935',1,'RHat.cpp']]], + ['standarddeviationfolded_42',['StandardDeviationFolded',['../RHat_8cpp.html#a85509f675b977490fa59bdf037d38ba2',1,'RHat.cpp']]], + ['standarddeviationglobal_43',['StandardDeviationGlobal',['../RHat_8cpp.html#a64de0e32daa60ec4f40e0e741d927334',1,'RHat.cpp']]], + ['standarddeviationglobalfolded_44',['StandardDeviationGlobalFolded',['../RHat_8cpp.html#a255f6a2b0ce0d9e0aee2c06645008b0c',1,'RHat.cpp']]], + ['step_45',['step',['../classstretch.html#ad48ef9156f514130a9433bf53086853d',1,'stretch::step'],['../classFitterBase.html#a50df1bd75b20a953f81ab9c2bab6b42c',1,'FitterBase::step']]], + ['stepclock_46',['stepClock',['../classFitterBase.html#a1e47b6114574f59c10ad01567ae92198',1,'FitterBase']]], + ['stepcut_47',['StepCut',['../classMCMCProcessor.html#a576f0eb874afaf7e31ff5c86b9e5b8f9',1,'MCMCProcessor']]], + ['stepnumber_48',['StepNumber',['../classMCMCProcessor.html#a07549f3b67ca5409218d80c679f6e69e',1,'MCMCProcessor']]], + ['stepstart_49',['stepStart',['../classmcmc.html#a41ce4f96a562ea3f8e750feaae4d24c4',1,'mcmc']]], + ['steptime_50',['stepTime',['../classFitterBase.html#a8354e9a7a9cc534277ff76ab37c9a763',1,'FitterBase']]], + ['storedselection_51',['StoredSelection',['../classsamplePDFFDBase.html#a185c166f11a096fc75eb1b76a4a31ac3',1,'samplePDFFDBase']]], + ['syst_5fllh_52',['syst_llh',['../classstretch.html#a694a121d39b68416211df1e9e8292ebe',1,'stretch::syst_llh'],['../classFitterBase.html#ac948767a356e169c719a88315f8d1f47',1,'FitterBase::syst_llh']]], + ['syst_5fpos_53',['syst_pos',['../classBaseFuncPar.html#a2f57b0db18e57419c89efc823d40d27c',1,'BaseFuncPar']]], + ['system_54',['system',['../classPSO.html#ac17850adb6f660f8aded97456f52b140',1,'PSO']]], + ['systematics_55',['systematics',['../classFitterBase.html#a3a15d2348b7bf0a639aaab52b9294bbf',1,'FitterBase::systematics'],['../classstretch.html#ab7122273c4f81fe47dac2a6f18355e06',1,'stretch::systematics']]], + ['systname_5fv_56',['SystName_v',['../classMCMCProcessor.html#acb1871575fdd3ae156aed4bf7c7a0a73',1,'MCMCProcessor']]], + ['systvalues_57',['SystValues',['../classMCMCProcessor.html#a4eb2748c81b0aef9bd7e14785559e301',1,'MCMCProcessor']]] +]; diff --git a/search/variables_12.js b/search/variables_12.js new file mode 100644 index 00000000..d40d85af --- /dev/null +++ b/search/variables_12.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['target_0',['Target',['../structfdmc__base.html#aff6f0d938f770de0c192d256e8da8dce',1,'fdmc_base']]], + ['targetcompression_1',['targetCompression',['../CombineMaCh3Chains_8cpp.html#a8ea7adaa7c7b0783e5562e9e8673fbe1',1,'CombineMaCh3Chains.cpp']]], + ['targets_2',['targets',['../classXsecNorms4.html#a0f6b21994200f446f21c42ec1cebf9bb',1,'XsecNorms4']]], + ['templateinputfilename_3',['TemplateInputFileName',['../classOscillator.html#a9799d325b7b716ae42aa65a7be383b73',1,'Oscillator']]], + ['test_4',['test',['../classEnergyScale.html#a273f63de62586b798ee17592d5776257',1,'EnergyScale']]], + ['throwmatrix_5',['throwMatrix',['../classcovarianceBase.html#a6cb3d0b4096fbb55b040f70cd5b6e32b',1,'covarianceBase']]], + ['throwmatrix_5fcholdecomp_6',['throwMatrix_CholDecomp',['../classcovarianceBase.html#ab95f5e066c2dfb1d20d120bc6c85dda2',1,'covarianceBase']]], + ['throwmatrixcholdecomp_7',['throwMatrixCholDecomp',['../classcovarianceBase.html#aca17e48a5fa8e353317d58c205fb89df',1,'covarianceBase']]], + ['titlenames_8',['TitleNames',['../ProcessMCMC_8cpp.html#a2bff863f66d44b865ce21762802730c8',1,'ProcessMCMC.cpp']]], + ['total_5fsteps_9',['total_steps',['../classcovarianceBase.html#afa85fb6668931ef7494c4af511a7111c',1,'covarianceBase']]], + ['total_5fw_10',['total_w',['../structfdmc__base.html#a4c4783b6eb014adbaf180f10e94e7d96',1,'fdmc_base']]], + ['total_5fweight_5fpointers_11',['total_weight_pointers',['../structfdmc__base.html#a4a17a196cb46bc85da5e7865b83d0f93',1,'fdmc_base']]], + ['totalonsplitplots_12',['totalOnSplitPlots',['../PlotLLH_8cpp.html#a6446498097144fc5f704c241f009d44d',1,'PlotLLH.cpp']]], + ['transfermat_13',['TransferMat',['../classcovarianceBase.html#a5e94f6afb5077daab30815b3ee5269c1',1,'covarianceBase']]], + ['transfermatt_14',['TransferMatT',['../classcovarianceBase.html#a5c1a531cb84c2b7e320f6c3f8f2e3126',1,'covarianceBase']]], + ['tune_5ffile_15',['tune_file',['../classtune.html#a264f9e35481137d8f4ce75bc517578b8',1,'tune']]], + ['tune_5fpars_16',['tune_pars',['../classtune.html#a44a0787326d639fcacd1a43373883feb',1,'tune']]] +]; diff --git a/search/variables_13.js b/search/variables_13.js new file mode 100644 index 00000000..8b74bf75 --- /dev/null +++ b/search/variables_13.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['uncertainties_0',['uncertainties',['../classPSO.html#ad525975ef87127a49f78484366f264df',1,'PSO']]], + ['uniquecoeffindices_1',['uniquecoeffindices',['../classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c',1,'splineFDBase']]], + ['uniquesplinevec_5fmonolith_2',['uniquesplinevec_Monolith',['../classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781',1,'splineFDBase']]], + ['uniquesystcurrsegment_3',['UniqueSystCurrSegment',['../classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036',1,'splineFDBase']]], + ['uniquesystindices_4',['UniqueSystIndices',['../classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6',1,'splineFDBase']]], + ['uniquesystnames_5',['UniqueSystNames',['../classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd',1,'splineFDBase']]], + ['uniquesystnknots_6',['UniqueSystNKnots',['../classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8',1,'splineFDBase']]], + ['uniquesystxpts_7',['UniqueSystXPts',['../classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed',1,'splineFDBase']]], + ['unity_8',['unity',['../structfdmc__base.html#a12e69ee22f800b6399bda527c173c455',1,'fdmc_base::Unity'],['../classcovarianceBase.html#a7682c3de33ae5b23b23e070dc0a3f778',1,'covarianceBase::Unity']]], + ['upper_5fadapt_9',['upper_adapt',['../classcovarianceBase.html#a1d9cc6bc2f278cfa6a9923fb9475e01d',1,'covarianceBase']]], + ['ur_10',['UR',['../structBox.html#a91e3a5bc435593fa2bab7389e47bf0fd',1,'Box']]], + ['use_5fadaptive_11',['use_adaptive',['../classcovarianceBase.html#a838731abd6716940043b484b2b266f86',1,'covarianceBase']]], + ['usebinningtemplates_12',['UseBinningTemplates',['../classOscillator.html#aade9aad48cdcaf0b0d684352a8c3d651',1,'Oscillator']]], + ['usechemicalcomposition_13',['UseChemicalComposition',['../classOscillator.html#acc125fd3575ec825a8cd65659a3ca186',1,'Oscillator']]], + ['usefinebinsperbin_14',['useFineBinsPerBin',['../classOscillator.html#ad2aad55aa2cd4ff56b03890d0aa49abe',1,'Oscillator']]], + ['useproductionheightaveraging_15',['UseProductionHeightAveraging',['../classOscillator.html#a3d695f97e6e54b49ed4879b04f78f92a',1,'Oscillator']]] +]; diff --git a/search/variables_14.js b/search/variables_14.js new file mode 100644 index 00000000..ff6bd461 --- /dev/null +++ b/search/variables_14.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['validpar_0',['ValidPar',['../RHat_8cpp.html#a5217beba3b3cb82269e95bf52c3d62c5',1,'RHat.cpp']]], + ['vals_1',['vals',['../classSMonolith.html#aa2a793b82a6c650a6fad52510e49b6b0',1,'SMonolith']]], + ['vel_2',['vel',['../classPSO.html#ac361ae70f9487058ff1e02f2a6334998',1,'PSO']]], + ['velocity_3',['velocity',['../classparticle.html#a7c7a70f520cbcd91e49e17f7b9406044',1,'particle']]], + ['verbose_4',['VERBOSE',['../RHat_8cpp.html#af99838407de1f00344ce35d8675e41a7',1,'RHat.cpp']]], + ['violin_5',['Violin',['../GetPostfitParamPlots_8cpp.html#a92251598dc4d11508ddb63e3ff2ba4cb',1,'GetPostfitParamPlots.cpp']]], + ['violin2_6',['Violin2',['../GetPostfitParamPlots_8cpp.html#abb13e28854ba4a299e5ac10ab1ac3c99',1,'GetPostfitParamPlots.cpp']]], + ['violinpre_7',['ViolinPre',['../GetPostfitParamPlots_8cpp.html#a458a0e952db082d150759dc07985394a',1,'GetPostfitParamPlots.cpp']]] +]; diff --git a/search/variables_15.js b/search/variables_15.js new file mode 100644 index 00000000..c6debcc0 --- /dev/null +++ b/search/variables_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weightvec_5fmonolith_0',['weightvec_Monolith',['../classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a',1,'splineFDBase']]] +]; diff --git a/search/variables_16.js b/search/variables_16.js new file mode 100644 index 00000000..bd5ff83d --- /dev/null +++ b/search/variables_16.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['x_0',['x',['../structCorner.html#a91d5d3774672bb879c8938a7e8eacdbd',1,'Corner']]], + ['x_5fvar_1',['x_var',['../structfdmc__base.html#a4f3b63575284bea13073812fd0bfbc5b',1,'fdmc_base']]], + ['xbin_2',['XBin',['../structfdmc__base.html#a8df8a4cead4cdefa450ba754b9e9dece',1,'fdmc_base']]], + ['xbinedges_3',['XBinEdges',['../classsamplePDFFDBase.html#a9a9e5d66ac2216095af25108118bab49',1,'samplePDFFDBase']]], + ['xcoeff_5farr_4',['xcoeff_arr',['../classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb',1,'splineFDBase']]], + ['xpos_5',['XPos',['../classTSpline3__red.html#aa5aa178094edfe4babf554f6cc96853a',1,'TSpline3_red']]], + ['xpts_6',['xPts',['../structFastSplineInfo.html#a1e1456bf7caf11ea7ddac0047afb4dd1',1,'FastSplineInfo']]], + ['xsec_7',['xsec',['../classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153',1,'splineFDBase']]], + ['xsec_5fnorm_5fpointers_8',['xsec_norm_pointers',['../structfdmc__base.html#a7421ef3bf4d8d431ae6f0b833cc787cd',1,'fdmc_base']]], + ['xsec_5fnorms_9',['xsec_norms',['../classsamplePDFFDBase.html#ab83151b9062747f96a7c9629a63e05ed',1,'samplePDFFDBase']]], + ['xsec_5fnorms_5fbins_10',['xsec_norms_bins',['../structfdmc__base.html#a8410052c18d9a77efe7b706463262f27',1,'fdmc_base']]], + ['xsec_5fspline_5fpointers_11',['xsec_spline_pointers',['../structfdmc__base.html#a15da813f6be7afe4011a8380667fc2fb',1,'fdmc_base']]], + ['xsec_5fw_12',['xsec_w',['../structfdmc__base.html#a31f571addd744817766ffe4c879a0377',1,'fdmc_base']]], + ['xseccov_13',['XsecCov',['../classsamplePDFFDBase.html#a5648add33f6787cde8f4e3d461a17ce7',1,'samplePDFFDBase']]], + ['xsecsplines_14',['xsecsplines',['../classsamplePDFBase.html#a333405326522241288286a1d0907dc2e',1,'samplePDFBase']]], + ['xsecstartingpos_15',['XsecStartingPos',['../GetPostfitParamPlots_8cpp.html#a3bb8bb8766f5ea15aa9ac31a1c9127e8',1,'GetPostfitParamPlots.cpp']]], + ['xvararray_16',['xVarArray',['../classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5',1,'splineFDBase']]] +]; diff --git a/search/variables_17.js b/search/variables_17.js new file mode 100644 index 00000000..d230205f --- /dev/null +++ b/search/variables_17.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['y_0',['y',['../structCorner.html#a48b049580abddb5475f8595660129128',1,'Corner']]], + ['y_5fvar_1',['y_var',['../structfdmc__base.html#ac4587979647952a6ea2cf6180dcc32ee',1,'fdmc_base']]], + ['ybin_2',['YBin',['../structfdmc__base.html#aad146de365062f4891a23018f9b2a035',1,'fdmc_base']]], + ['ybinedges_3',['YBinEdges',['../classsamplePDFFDBase.html#a43b9afb5ac13ecad23750acb24b29da6',1,'samplePDFFDBase']]], + ['yresp_4',['YResp',['../classTSpline3__red.html#ada790a4b72314766f464c62e575a4140',1,'TSpline3_red']]], + ['ytitleoffset_5',['yTitleOffset',['../PlotLLH_8cpp.html#a90e133c14aaf43c18c855db7a949cb3d',1,'PlotLLH.cpp']]] +]; diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 00000000..11392b2c --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['batchedaverages_0',['BatchedAverages',['../classMCMCProcessor.html#ab3f590b501162fc2ee5b78ce75689771',1,'MCMCProcessor']]], + ['best_5fparticle_1',['best_particle',['../classPSO.html#aaf8a31e5604b900ce5702910d7e12c15',1,'PSO']]], + ['betweenchainvariance_2',['BetweenChainVariance',['../RHat_8cpp.html#a52dcf07f8f740636605516f6c2ab3e40',1,'RHat.cpp']]], + ['betweenchainvariancefolded_3',['BetweenChainVarianceFolded',['../RHat_8cpp.html#a3a65452412d9dd00c1a9e93d0bab1a26',1,'RHat.cpp']]], + ['binningopt_4',['BinningOpt',['../classsamplePDFFDBase.html#a80096759ee2bc96bf5e461aca567e7a8',1,'samplePDFFDBase']]], + ['binningopts_5',['BinningOpts',['../classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e',1,'splineFDBase']]], + ['bl_6',['BL',['../structBox.html#a9d51cc0b4c543af5ab222b431e0206ad',1,'Box']]], + ['blah_7',['blah',['../classBaseFuncPar.html#a62cf6a2156bab8ece0011c5434ea902c',1,'BaseFuncPar']]], + ['branchnames_8',['branchnames',['../classMCMCProcessor.html#ad043b6b2c885f47ab9967831bc8d0f5a',1,'MCMCProcessor::BranchNames'],['../GetPenaltyTerm_8cpp.html#a871d6466cea2597401bdb203293f4033',1,'BranchNames:&#160;GetPenaltyTerm.cpp'],['../RHat_8cpp.html#a871d6466cea2597401bdb203293f4033',1,'BranchNames:&#160;RHat.cpp']]], + ['burnincut_9',['BurnInCut',['../classMCMCProcessor.html#a22f82dadceccbe87dd8c5b7daa8432e8',1,'MCMCProcessor']]] +]; diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 00000000..87636c65 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['cachemcmc_0',['CacheMCMC',['../classMCMCProcessor.html#aea84f0315695aa05ec41fcf965b1b031',1,'MCMCProcessor']]], + ['canv_1',['canv',['../GetPostfitParamPlots_8cpp.html#aec2fb4e7af6c83a8ccbdfcfcb7b76a83',1,'GetPostfitParamPlots.cpp']]], + ['canvasname_2',['CanvasName',['../classMCMCProcessor.html#ab5aec3dc293919701d31e6ae705601dd',1,'MCMCProcessor']]], + ['central_5fvalue_3',['Central_Value',['../classMCMCProcessor.html#aad661c6d53f9f891e18ff8ccdbd08479',1,'MCMCProcessor']]], + ['chain_4',['chain',['../classMCMCProcessor.html#a6be3bbebd4a79fe9814a3da09b3bb820',1,'MCMCProcessor::Chain'],['../RHat_8cpp.html#ae3b2f036ab47bd4692ba318d81a4cc1e',1,'Chain:&#160;RHat.cpp']]], + ['chainlength_5',['chainlength',['../classmcmc.html#a2b9a5344ea8074fcecdc1ae2f3cfc62a',1,'mcmc::chainLength'],['../classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47',1,'stretch::chainLength']]], + ['chel_5fdec_6',['chel_dec',['../classThrowParms.html#aa0e556aabe6cefd70cdbd6dbf941f4f0',1,'ThrowParms']]], + ['chemicalcomposition_5fnom_7',['chemicalComposition_Nom',['../classOscillator.html#a898f7d71b9e265c4b75af10aba106443',1,'Oscillator']]], + ['clock_8',['clock',['../classFitterBase.html#aafacee3aada764cd6f7720d1eaeed3cb',1,'FitterBase::clock'],['../classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5',1,'stretch::clock']]], + ['coeffindex_9',['CoeffIndex',['../classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2',1,'splineFDBase']]], + ['coeffindexvec_10',['coeffindexvec',['../classsplineFDBase.html#af63885ddb6731f77808d029372e6b187',1,'splineFDBase']]], + ['config_11',['config',['../classmanager.html#a7519c9ab5670ae939d18485d31057b46',1,'manager::config'],['../GetPostfitParamPlots_8cpp.html#a01d92a800904faa16b8c1c1372c40fb3',1,'config:&#160;GetPostfitParamPlots.cpp'],['../ProcessMCMC_8cpp.html#a13056efd080ab16304b6f7be0ebf0a61',1,'config:&#160;ProcessMCMC.cpp']]], + ['corr_5fthrow_12',['corr_throw',['../classcovarianceBase.html#a7b70de3f098aae1d537d80bac5969d88',1,'covarianceBase']]], + ['correlation_13',['Correlation',['../classMCMCProcessor.html#a03f28431158777cdd81d058b6632a92f',1,'MCMCProcessor']]], + ['covar_14',['covar',['../classThrowParms.html#af27bd2c5ae4323a41bf696f91673ed54',1,'ThrowParms']]], + ['covariance_15',['Covariance',['../classMCMCProcessor.html#af9a40632e2d7f1266d69a74d5b5f2244',1,'MCMCProcessor']]], + ['covfolder_16',['CovFolder',['../classFitterBase.html#aacc46437245ba8a9817f2ed2e86a96e0',1,'FitterBase']]], + ['covmatrix_17',['covMatrix',['../classcovarianceBase.html#a6c3fe8db34c06299fd1633951ac00937',1,'covarianceBase']]], + ['covpos_18',['CovPos',['../classMCMCProcessor.html#a7c6afb0ed75207fd02c28e408f0592d4',1,'MCMCProcessor']]], + ['cpu_5fcoeff_5fmany_19',['cpu_coeff_many',['../classSMonolith.html#a40b079264ca625f263c6016826a8a3d3',1,'SMonolith']]], + ['cpu_5fcoeff_5fx_20',['cpu_coeff_x',['../classSMonolith.html#aef5fe64b8717e8e336acf95b79d3007e',1,'SMonolith']]], + ['cpu_5fnknots_5farr_21',['cpu_nKnots_arr',['../classSMonolith.html#a81d1bc991ef8d4739174b8d6abe26635',1,'SMonolith']]], + ['cpu_5fnparamperevent_22',['cpu_nParamPerEvent',['../classSMonolith.html#a0a6599372d1e3d38105478a68308d9a6',1,'SMonolith']]], + ['cpu_5fnpoints_5farr_23',['cpu_nPoints_arr',['../classSMonolith.html#a14b9c21186a53196f49c8d8d3555fbf2',1,'SMonolith']]], + ['cpu_5fparamno_5farr_24',['cpu_paramNo_arr',['../classSMonolith.html#a2ff1205fce2c0f5a8066fa531c49615c',1,'SMonolith']]], + ['cpu_5ftotal_5fweights_25',['cpu_total_weights',['../classSMonolith.html#ab572dd7e0a46caf44eb925a89cbfb0cf',1,'SMonolith']]], + ['cpu_5fweights_26',['cpu_weights',['../classSMonolith.html#a8614e8ef07431d99f62ab88d9ebdad16',1,'SMonolith']]], + ['cpu_5fweights_5fvar_27',['cpu_weights_var',['../classSMonolith.html#ab6a29f13d8e6efb380f2b9d59cfa88fc',1,'SMonolith']]], + ['credible_5fintervals_28',['Credible_Intervals',['../classMCMCProcessor.html#ab1231047a76d04f03e59321a98141b0b',1,'MCMCProcessor']]], + ['credible_5fintervalscolours_29',['Credible_IntervalsColours',['../classMCMCProcessor.html#ab7e79733be57f51881ad955ff2b335da',1,'MCMCProcessor']]], + ['credible_5fregioncolor_30',['Credible_RegionColor',['../classMCMCProcessor.html#ac9193caf706ba2bd3043707ebf4e71e4',1,'MCMCProcessor']]], + ['credible_5fregions_31',['Credible_Regions',['../classMCMCProcessor.html#a43df0eb7bf5a65e211fbfed5c2d9ea82',1,'MCMCProcessor']]], + ['credible_5fregionstyle_32',['Credible_RegionStyle',['../classMCMCProcessor.html#a1b6c96873ab28f7b129ad038e8673acc',1,'MCMCProcessor']]], + ['credibleinsigmas_33',['CredibleInSigmas',['../classMCMCProcessor.html#a316a8a42437c4f3f583dfba27a833830',1,'MCMCProcessor']]], + ['crosssectionparameters_34',['CrossSectionParameters',['../GetPostfitParamPlots_8cpp.html#a5307771642312031f0050189b493a621',1,'GetPostfitParamPlots.cpp']]], + ['curr_5fvalue_35',['curr_value',['../classparticle.html#a3fa66bc070aa43b66389b8e0b9754f32',1,'particle']]], + ['currentpar_36',['currentpar',['../classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe',1,'stretch']]], + ['currsegment_37',['CurrSegment',['../structFastSplineInfo.html#aeff9dcbf8e31e0e5e105d065f4d72958',1,'FastSplineInfo']]] +]; diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 00000000..5b531289 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['datasample_0',['dataSample',['../classsamplePDFBase.html#a71bbe44b4ed168c91db0db7abedc96a6',1,'samplePDFBase']]], + ['datasample2d_1',['dataSample2D',['../classsamplePDFBase.html#a7d673377a3d5a9a4d7c7c59b09896354',1,'samplePDFBase']]], + ['dathist_2',['dathist',['../classsamplePDFBase.html#a695ac7419652443240feb046f14ba1bb',1,'samplePDFBase']]], + ['dathist2d_3',['dathist2d',['../classsamplePDFBase.html#a22cd9b0e8664b6e0859e34a51731fadc',1,'samplePDFBase']]], + ['debug_4',['debug',['../classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5',1,'stretch']]], + ['debugfile_5',['debugFile',['../classstretch.html#ade09543f90fc59fd752b13ab48266aec',1,'stretch']]], + ['debuginterval_6',['debugInterval',['../classstretch.html#accdccd0cf0ee25c613b779233ccc1e26',1,'stretch']]], + ['density_7',['density',['../classcovarianceOsc.html#af5be9ae714e460c7353dc53b9c08dc52',1,'covarianceOsc']]], + ['detids_8',['DetIDs',['../classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15',1,'splineFDBase']]], + ['dimensions_9',['Dimensions',['../classsplineFDBase.html#a6c28400605049bdee229885c46463dcd',1,'splineFDBase']]], + ['dodiagmcmc_10',['doDiagMCMC',['../classMCMCProcessor.html#adf449e50cf358f737fe4a2b65d9668e9',1,'MCMCProcessor']]], + ['doubled_5fangle_11',['doubled_angle',['../classsamplePDFFDBase.html#a2c50c633784af24832bb20a4fca42af5',1,'samplePDFFDBase']]], + ['drawgrid_12',['drawGrid',['../PlotLLH_8cpp.html#a2e96eb214ac8a38fee799342bada8f1f',1,'PlotLLH.cpp']]], + ['drawrange_13',['DrawRange',['../classMCMCProcessor.html#a4abe633b264acd9b0459c7b8ccd8b9df',1,'MCMCProcessor']]], + ['draws_14',['Draws',['../RHat_8cpp.html#a9adc829d645affbb93eff1775ab7c0c6',1,'RHat.cpp']]], + ['drawsfolded_15',['DrawsFolded',['../RHat_8cpp.html#a7e7fe290fda4362be54b8cf5d56fea51',1,'RHat.cpp']]] +]; diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 00000000..144863f8 --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['earthdensityfile_0',['EarthDensityFile',['../classOscillator.html#aa9aa88f2ed604fd8f10441e35004d16b',1,'Oscillator']]], + ['ebins_1',['ebins',['../classXsecNorms4.html#aa88f48b1879b3f629389b2acdca43c03',1,'XsecNorms4']]], + ['effectivesamplesize_2',['EffectiveSampleSize',['../RHat_8cpp.html#ae673254e98992bd483de55c6c1d1dcaf',1,'RHat.cpp']]], + ['effectivesamplesizefolded_3',['EffectiveSampleSizeFolded',['../RHat_8cpp.html#a39a08e7110f564d00239beccded97be8',1,'RHat.cpp']]], + ['eigen_5fthreshold_4',['eigen_threshold',['../classcovarianceBase.html#add54ab1ba46b723fa23d7c95dfad671a',1,'covarianceBase']]], + ['eigen_5fvalues_5',['eigen_values',['../classcovarianceBase.html#ad4980d328fc0689fd0b4147574b5caa9',1,'covarianceBase']]], + ['eigen_5fvalues_5fmaster_6',['eigen_values_master',['../classcovarianceBase.html#aeb4d5757fb7c531bb415ca9564f48c81',1,'covarianceBase']]], + ['eigen_5fvectors_7',['eigen_vectors',['../classcovarianceBase.html#ac58cd28e2261429e597a8c4eb9d1c53d',1,'covarianceBase']]], + ['errors_8',['Errors',['../classMCMCProcessor.html#a5174aaa900edf16ddc6e841ea4adae83',1,'MCMCProcessor']]], + ['errors_5fgauss_9',['Errors_Gauss',['../classMCMCProcessor.html#aa78b7ed1bb9966f84f4eaf8cedf5e688',1,'MCMCProcessor']]], + ['errors_5fhpd_10',['Errors_HPD',['../classMCMCProcessor.html#abb5c6ad85c89227bbb9bc5de2eb71272',1,'MCMCProcessor']]], + ['errors_5fhpd_5fnegative_11',['Errors_HPD_Negative',['../classMCMCProcessor.html#a7b85df39f22390dac24f4d66a89518e5',1,'MCMCProcessor']]], + ['errors_5fhpd_5fpositive_12',['Errors_HPD_Positive',['../classMCMCProcessor.html#af96664fa8cc51c49ad1385da07a343b8',1,'MCMCProcessor']]], + ['escale_5fpointer_13',['EScale_pointer',['../structfdmc__base.html#a266ecead35a0e2a5f08e89d9989dac50',1,'fdmc_base']]], + ['excludednames_14',['ExcludedNames',['../classMCMCProcessor.html#a7425f7802e50bcb5ff4b38e20157c423',1,'MCMCProcessor']]], + ['excludedtypes_15',['ExcludedTypes',['../classMCMCProcessor.html#aada4aadea10661586b46c1013a9d018f',1,'MCMCProcessor']]], + ['extradrawoptions_16',['extraDrawOptions',['../PlotLLH_8cpp.html#a2f7bc9077820e9591c96209a0c522cfe',1,'PlotLLH.cpp']]], + ['extrafilenames_17',['ExtraFileNames',['../PlotLLH_8cpp.html#a90b6d10f4967493c73efc11132db7732',1,'PlotLLH.cpp']]] +]; diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 00000000..b93d19e5 --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,56 @@ +var searchData= +[ + ['fancyplotnames_0',['FancyPlotNames',['../classMCMCProcessor.html#ad25fe818c94163b0c4a8fcdfd387c148',1,'MCMCProcessor']]], + ['fb_1',['fB',['../classspline.html#a7b23a13caa6d68159b035db9155b425b',1,'spline']]], + ['fbestvalue_2',['fBestValue',['../classPSO.html#ad28ca8bc8c7864a753b1cfa72733c148',1,'PSO']]], + ['fbinning_3',['fBinning',['../classOscillator.html#a2b6c52f04c6aeeccb0cd4f6ec4259f96',1,'Oscillator']]], + ['fc_4',['fC',['../classspline.html#a53ce91618f1c479d2f444af31855c90c',1,'spline']]], + ['fconstriction_5',['fConstriction',['../classPSO.html#a1c7ca23e5dcdf35cd6812b85221c0d4b',1,'PSO']]], + ['fconvergence_6',['fConvergence',['../classPSO.html#ac9884499d5945597cb33ef0518f6f61e',1,'PSO']]], + ['fd_7',['fD',['../classspline.html#a68559ca14ce7c89d2595681c2605dd63',1,'spline']]], + ['fdelta_8',['fDelta',['../classspline.html#a301682848b329bcef441bb13bfe33f46',1,'spline']]], + ['fdim_9',['fDim',['../classPSO.html#ae6c1bc89308fd18ffa8b043319029836',1,'PSO']]], + ['fdparameters_10',['FDParameters',['../GetPostfitParamPlots_8cpp.html#a15657a5f07a9fde98fc9210b7ae80f9e',1,'GetPostfitParamPlots.cpp']]], + ['fdparametersstartingpos_11',['FDParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#a6dfe886b2ff4881ee2434479a9028985',1,'GetPostfitParamPlots.cpp']]], + ['ffillhistograms_12',['fFillHistograms',['../classOscillator.html#a1eddbd950e06f52470bf1228464351f6',1,'Oscillator']]], + ['filelabel_13',['FileLabel',['../GetPostfitParamPlots_8cpp.html#aea3f7a89a2ddbe5b596363aced9e1139',1,'GetPostfitParamPlots.cpp']]], + ['filelabels_14',['FileLabels',['../PlotLLH_8cpp.html#a750b9a367a2a6297f041bc0e464351f9',1,'PlotLLH.cpp']]], + ['filelabels_5fdefault_15',['FileLabels_default',['../PlotLLH_8cpp.html#ade75aeda707b3d798ee6b0f8ac44a92e',1,'PlotLLH.cpp']]], + ['filename_16',['FileName',['../classmanager.html#a1004958d1431ff607c08fa795b5953b7',1,'manager']]], + ['filenames_17',['filenames',['../GetPostfitParamPlots_8cpp.html#a8e90c1478f4be185364988cac765a163',1,'FileNames:&#160;GetPostfitParamPlots.cpp'],['../ProcessMCMC_8cpp.html#a8e90c1478f4be185364988cac765a163',1,'FileNames:&#160;ProcessMCMC.cpp']]], + ['filesaved_18',['FileSaved',['../classFitterBase.html#a699abe6a2c89706b54544212152d613a',1,'FitterBase']]], + ['finecoarseratiocosz_19',['fineCoarseRatioCosz',['../classOscillator.html#a45686c104c1adae1ebe0f0b2c7c464ae',1,'Oscillator']]], + ['finecoarseratioenergy_20',['fineCoarseRatioEnergy',['../classOscillator.html#a03a5e7210a6023a96273f04c7489ae88',1,'Oscillator']]], + ['finertia_21',['fInertia',['../classPSO.html#a9b3d14a97a9d838a9f009f9cc54968d3',1,'PSO']]], + ['firstpcadpar_22',['FirstPCAdpar',['../classcovarianceBase.html#abba75182305d556818c76974a054a17d',1,'covarianceBase']]], + ['fiterations_23',['fIterations',['../classPSO.html#aa2adb0a6985424439c44b8d0c7afec08',1,'PSO']]], + ['fitman_24',['fitMan',['../classFitterBase.html#a4fceb68f242feeb04a0ddf42a5a37095',1,'FitterBase']]], + ['fixed_25',['fixed',['../classPSO.html#a90cf855167748b488851c559de49283c',1,'PSO']]], + ['fkstep_26',['fKstep',['../classspline.html#a610b9b9c320613aad0c99cebe021a278',1,'spline']]], + ['flavourname_27',['flavourName',['../structfdmc__base.html#a0469374786ae2e3e11ddd59bd08fc42a',1,'fdmc_base']]], + ['flipbeta_28',['flipBeta',['../classcovarianceOsc.html#a2a431f804dd4d0f49dbb56c7d3c0d58e',1,'covarianceOsc']]], + ['flipdelm_29',['flipdelM',['../classcovarianceOsc.html#a9a36ac8acc5baad4b41ff0fe53958100',1,'covarianceOsc']]], + ['flux_5fw_30',['flux_w',['../structfdmc__base.html#a377d4784d0f20005a0cfa2dd671d7b5d',1,'fdmc_base']]], + ['fluxparameters_31',['FluxParameters',['../GetPostfitParamPlots_8cpp.html#adf4147e2ac31f2cb321121a90cb8c853',1,'GetPostfitParamPlots.cpp']]], + ['fmirroring_32',['fMirroring',['../classLikelihoodFit.html#ae1e5d13b373bf73e1b1003f7f9d65f00',1,'LikelihoodFit']]], + ['fnp_33',['fNp',['../classspline.html#a322ac057718bfb06996dc7c3e518ef55',1,'spline']]], + ['fone_34',['fOne',['../classPSO.html#aa02f509433bb6c25126a180ab27b8277',1,'PSO']]], + ['forceoverwrite_35',['forceOverwrite',['../CombineMaCh3Chains_8cpp.html#a3adafbbaf60d2c0038ff083b1b17722d',1,'CombineMaCh3Chains.cpp']]], + ['foscpar_36',['foscpar',['../classOscillator.html#adda4bce3f5465f96a5600ca903404ef3',1,'Oscillator']]], + ['fparcurr_5fpca_37',['fParCurr_PCA',['../classcovarianceBase.html#aa96f87ab90dc26fc1b5e157149b9dfd3',1,'covarianceBase']]], + ['fparprop_5fpca_38',['fParProp_PCA',['../classcovarianceBase.html#a2e101b6b7028c82a02e617c90212e4cc',1,'covarianceBase']]], + ['fparsigma_5fpca_39',['fParSigma_PCA',['../classcovarianceBase.html#a7b83a17de68cc7838b93de242d91d9a0',1,'covarianceBase']]], + ['fparticles_40',['fParticles',['../classPSO.html#a9e9da89144237a7f3369b9b3739e73ad',1,'PSO']]], + ['fprodh_41',['fprodH',['../classOscillator.html#a8b02a285592d83a89bf1b0b220ef22c0',1,'Oscillator']]], + ['ftestlikelihood_42',['fTestLikelihood',['../classFitterBase.html#ada898e35bab22af470f2cd1e28af609b',1,'FitterBase']]], + ['fteststatistic_43',['fTestStatistic',['../classsamplePDFBase.html#adc5cd0002708ad049ba4fb5e3c62075d',1,'samplePDFBase']]], + ['ftwo_44',['fTwo',['../classPSO.html#a56539eb264d11e1c37674ad55504d454',1,'PSO']]], + ['func_45',['Func',['../classXSecStruct.html#a9334a6ce9789e80e9b52409f45efc71c',1,'XSecStruct']]], + ['funcparsindex_46',['funcParsIndex',['../classsamplePDFFDBase.html#af0ab9ed944f1db59fa156837d80e8d78',1,'samplePDFFDBase']]], + ['funcparsnames_47',['funcParsNames',['../classsamplePDFFDBase.html#a9708eeeaddb815efbe81ede6fc773900',1,'samplePDFFDBase']]], + ['fx_48',['fX',['../classspline.html#af545ed0bb9307de3fd9a47b72d2afa72',1,'spline']]], + ['fxmax_49',['fXmax',['../classspline.html#ada4bae351e736ef0cefd36ef971b2a46',1,'spline']]], + ['fxmin_50',['fXmin',['../classspline.html#a7b84491491e316cce7a160ef61d79eb5',1,'spline']]], + ['fy_51',['fY',['../classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2',1,'spline']]], + ['fyp_5fval_52',['fYp_Val',['../classOscillator.html#a371ac3f841d37c5370d2d06518e9e5ab',1,'Oscillator']]] +]; diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 00000000..25bc9ca2 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['gauss_0',['Gauss',['../classMCMCProcessor.html#a92c1d9b0ebdf90951221cdaf2ac4cc2c',1,'MCMCProcessor']]], + ['gpu_5fcoeff_5fmany_1',['gpu_coeff_many',['../classSMonolith.html#ad48ce38bdd62d27df5405fdbf7dbc0c7',1,'SMonolith']]], + ['gpu_5fcoeff_5fx_2',['gpu_coeff_x',['../classSMonolith.html#a3eb59435b695f7f9653f027e49e4b33f',1,'SMonolith']]], + ['gpu_5ffit_3',['gpu_fit',['../classstretch.html#a7ca4fdf6398add1bdc629c103d52de94',1,'stretch']]], + ['gpu_5fnknots_5farr_4',['gpu_nKnots_arr',['../classSMonolith.html#a0ff9a70ffa877c13f6aa53a44e447e39',1,'SMonolith']]], + ['gpu_5fnparamperevent_5',['gpu_nParamPerEvent',['../classSMonolith.html#ac6656d53aaefa0db75f4cf57aa517dbf',1,'SMonolith']]], + ['gpu_5fnpoints_5farr_6',['gpu_nPoints_arr',['../classSMonolith.html#a2e36f546602e0d375dcbacd8771369c7',1,'SMonolith']]], + ['gpu_5fparamno_5farr_7',['gpu_paramNo_arr',['../classSMonolith.html#a6aaa90b9158e01743235a465fd80caaf',1,'SMonolith']]], + ['gpu_5ftotal_5fweights_8',['gpu_total_weights',['../classSMonolith.html#a43ffa53dafb6006e7bd23597a402e8b4',1,'SMonolith']]], + ['gpu_5fweights_9',['gpu_weights',['../classSMonolith.html#a1317bac1e66e5400c59bc4dd9ff3cdd9',1,'SMonolith']]] +]; diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 00000000..58d9fc59 --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['haskinbounds_0',['hasKinBounds',['../classXsecNorms4.html#ab5d815107d57b4f7ae22ccb3f2ae318b',1,'XsecNorms4']]], + ['hcoarsecosz_1',['hCoarseCosz',['../classOscillator.html#aa2f13d53fcfc4b0b7446088bb83d0d12',1,'Oscillator']]], + ['hcoarseenergy_2',['hCoarseEnergy',['../classOscillator.html#a26d4b8cdeec29ce802a8534ec0bbe9e0',1,'Oscillator']]], + ['hfinecosz_3',['hFineCosz',['../classOscillator.html#a7ca8c31e42729185d7a86d213ed4e080',1,'Oscillator']]], + ['hfineenergy_4',['hFineEnergy',['../classOscillator.html#a57c4971f8da63332a6a7d9561670ca7b',1,'Oscillator']]], + ['histogramsinitialised_5',['HistogramsInitialised',['../classOscillator.html#a3627014bbf95f278475a9975fa38d157',1,'Oscillator']]], + ['horncurrents_6',['horncurrents',['../classXsecNorms4.html#ad9b663a9fe71c5b3feb844179bba8822',1,'XsecNorms4']]], + ['hpost_7',['hpost',['../classMCMCProcessor.html#aa3c928a09df7d6fc431c0b879d5c40e4',1,'MCMCProcessor']]], + ['hpost2d_8',['hpost2D',['../classMCMCProcessor.html#a0ddcfa4ba1e4dcdea366d88decc64391',1,'MCMCProcessor']]], + ['hprimarybinning_9',['hPrimaryBinning',['../classOscillator.html#ad7da187ecbc0c6c2f39d16fe4221d97a',1,'Oscillator']]], + ['hprimarycounter_5farr_10',['hPrimaryCounter_Arr',['../classOscillator.html#aadb940b81b39594edd3c0ef4fc7b943a',1,'Oscillator']]], + ['hprimaryoscillogram_11',['hPrimaryOscillogram',['../classOscillator.html#a2da4a6d4f1659c0566bda4f6dcab0390',1,'Oscillator']]], + ['hprimaryoscillogram_5farr_12',['hPrimaryOscillogram_Arr',['../classOscillator.html#a65fa5131e8c51f25c7ffd28fd7ef0dcf',1,'Oscillator']]], + ['hproductionheightrange_13',['hProductionHeightRange',['../classOscillator.html#a82944052f3d795cd89114c053404237a',1,'Oscillator']]], + ['hsecondarybinning_14',['hSecondaryBinning',['../classOscillator.html#a731b6fe605f49fbf9c2e5e11296bfb2e',1,'Oscillator']]], + ['hsecondaryoscillogram_15',['hSecondaryOscillogram',['../classOscillator.html#aca9d73d11eeabaef515547d3dd3cd2ae',1,'Oscillator']]], + ['hviolin_16',['hviolin',['../classMCMCProcessor.html#a556988f03b24e3af33e9a29b23d2b1e2',1,'MCMCProcessor']]], + ['hviolin_5fprior_17',['hviolin_prior',['../classMCMCProcessor.html#a25d79f451d5d584c3e7ef0e1423e5e8e',1,'MCMCProcessor']]] +]; diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 00000000..65a2658d --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['iamvaried_0',['IamVaried',['../classMCMCProcessor.html#a95fa49737432818bc830a44898d0d850',1,'MCMCProcessor']]], + ['index_1',['index',['../classXsecNorms4.html#a6c45244b8c559ada13c1c886dea37cc2',1,'XsecNorms4']]], + ['index_5fcpu_2',['index_cpu',['../classSMonolith.html#ae9fa50f60f717558f517faea6a38d251',1,'SMonolith']]], + ['indexvec_3',['indexvec',['../classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12',1,'splineFDBase']]], + ['inpfilelist_4',['inpFileList',['../CombineMaCh3Chains_8cpp.html#a92bfb809a0500604336ae74b5198373b',1,'CombineMaCh3Chains.cpp']]], + ['inputfile_5',['inputFile',['../classcovarianceBase.html#a5451d4189a9fb7591c8ce728852ba82e',1,'covarianceBase']]], + ['inputfilename_6',['InputFileName',['../classOscillator.html#a67231919b021341e75959e7284692d07',1,'Oscillator']]], + ['invcovmatrix_7',['invcovmatrix',['../classcovarianceBase.html#a35c7dc7817eaf4058e9775b6bc792ebc',1,'covarianceBase::invCovMatrix'],['../GetPenaltyTerm_8cpp.html#a3fd4dd88b1fa6119298781296ea761c5',1,'invCovMatrix:&#160;GetPenaltyTerm.cpp']]], + ['invertcovmatrix_8',['InvertCovMatrix',['../classcovarianceBase.html#a49a8341eb8e997fb090749117320edf9',1,'covarianceBase']]], + ['isbound_9',['isbound',['../structfdmc__base.html#ac4988faabe298f55534aba070186d0b5',1,'fdmc_base']]], + ['isdecomposed_5fpca_10',['isDecomposed_PCA',['../classcovarianceBase.html#ae9f3cb2a310874b86965903714ef2bd8',1,'covarianceBase']]], + ['isflat_11',['isFlat',['../GetPenaltyTerm_8cpp.html#ae7c3a438d4508eba7ac26e26135b2c17',1,'GetPenaltyTerm.cpp']]], + ['isflatarray_12',['isflatarray',['../classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3',1,'splineFDBase']]], + ['isflux_13',['isFlux',['../classcovarianceXsec.html#a76a3fd06dd9cbe2eb6ccf560a435bf76',1,'covarianceXsec']]], + ['islinear_14',['IsLinear',['../classOscillator.html#a646a52ceae668dc0b4cc58245d9f0939',1,'Oscillator']]], + ['isnc_15',['isNC',['../structfdmc__base.html#a3b50812cc57ead329ccf495012cf906e',1,'fdmc_base']]], + ['isrhc_16',['IsRHC',['../classsamplePDFFDBase.html#aba47d043236ede872ad74c26c906998a',1,'samplePDFFDBase']]], + ['isxsec_17',['IsXsec',['../classMCMCProcessor.html#a2c06d64020e9246e720cc131a9f4986d',1,'MCMCProcessor']]] +]; diff --git a/search/variables_a.js b/search/variables_a.js new file mode 100644 index 00000000..1a830714 --- /dev/null +++ b/search/variables_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['kbeta_0',['kBeta',['../classcovarianceOsc.html#aabdb0f6c6bad4b4c425dd5da57df766c',1,'covarianceOsc']]], + ['kdeltacp_1',['kDeltaCP',['../classcovarianceOsc.html#ac4068139be51a4426706d4ddf4bf930d',1,'covarianceOsc']]], + ['kdeltam23_2',['kDeltaM23',['../classcovarianceOsc.html#a5f554c455622a351015fa782e9933801',1,'covarianceOsc']]], + ['kinematicvarstr_3',['KinematicVarStr',['../classXsecNorms4.html#a67a1d237f1fdb41a0c11898fada0f00c',1,'XsecNorms4']]], + ['kmaxparticles_4',['kMaxParticles',['../classPSO.html#a0c6dc51dae4c926cf236eb482d000384',1,'PSO']]], + ['knowndetidsmap_5',['KnownDetIDsMap',['../namespaceMaCh3Utils.html#ab58c07d7176a31b58fe4c1fb0c81fd10',1,'MaCh3Utils']]], + ['ksintheta23_6',['kSinTheta23',['../classcovarianceOsc.html#ae065d9a3c633bfcef6915b2b86d3e209',1,'covarianceOsc']]] +]; diff --git a/search/variables_b.js b/search/variables_b.js new file mode 100644 index 00000000..28d1c6d1 --- /dev/null +++ b/search/variables_b.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['l_0',['L',['../classcovarianceOsc.html#a6325f8cf5f93b542d7e6199ec0a3facb',1,'covarianceOsc']]], + ['lagl_1',['LagL',['../classMCMCProcessor.html#a499cdae3bf94643d76648058c9160913',1,'MCMCProcessor']]], + ['lastpcadpar_2',['LastPCAdpar',['../classcovarianceBase.html#a5ebdc744b733656972a15f1657915a3f',1,'covarianceBase']]], + ['lcoarsecosz_3',['lCoarseCosz',['../classOscillator.html#a3e3942ecafb657261686d12d85319d0e',1,'Oscillator']]], + ['lcoarseenergy_4',['lCoarseEnergy',['../classOscillator.html#a2c910ee2cce15ceadce370ef6dd37e36',1,'Oscillator']]], + ['length_5',['length',['../classTF1__red.html#afb6f71c68561d1f4da22054197fd495d',1,'TF1_red']]], + ['lfinecosz_6',['lFineCosz',['../classOscillator.html#a8abef911d6715101e5134c6810f718d8',1,'Oscillator']]], + ['lfineenergy_7',['lFineEnergy',['../classOscillator.html#af7b7a22de9ada05bfde0a3c94c5a89ea',1,'Oscillator']]], + ['linewidth_8',['lineWidth',['../PlotLLH_8cpp.html#a7740e2371b2eb3a71ca8660b26a842e4',1,'PlotLLH.cpp']]], + ['loglcurr_9',['loglcurr',['../classFitterBase.html#abfb6f10720764d8bbbe43754fd5cd976',1,'FitterBase::logLCurr'],['../classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb',1,'stretch::logLCurr']]], + ['loglprop_10',['loglprop',['../classFitterBase.html#a187dd22c17f9e96e5a7e2fb2371abace',1,'FitterBase::logLProp'],['../classstretch.html#a5b2b99948404ef0fd2f6892c471c7682',1,'stretch::logLProp']]], + ['lower_5fadapt_11',['lower_adapt',['../classcovarianceBase.html#a1b5d0d1b92c39512e29a5d8ec8fdd857',1,'covarianceBase']]], + ['lproductionheightrange_12',['lProductionHeightRange',['../classOscillator.html#a3bd67bd51070a45ea5976f0655a48b5d',1,'Oscillator']]] +]; diff --git a/search/variables_c.js b/search/variables_c.js new file mode 100644 index 00000000..a33a235e --- /dev/null +++ b/search/variables_c.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['mach3llhfilename_0',['Mach3LLHFileName',['../PlotLLH_8cpp.html#a6d439ed7ab6a5217ffd29ebaf72f3fcd',1,'PlotLLH.cpp']]], + ['madepostfit_1',['MadePostfit',['../classMCMCProcessor.html#aecc35d4ea7d2c7e020e50388ba0ffb64',1,'MCMCProcessor']]], + ['makecorr_2',['MakeCorr',['../classMCMCProcessor.html#a6960c878948006c40534fc4a1a3d3857',1,'MCMCProcessor']]], + ['manycoeff_5farr_3',['manycoeff_arr',['../classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d',1,'splineFDBase']]], + ['marginalposteriorvariance_4',['MarginalPosteriorVariance',['../RHat_8cpp.html#a68813385f1240d1264e139391b12bf05',1,'RHat.cpp']]], + ['marginalposteriorvariancefolded_5',['MarginalPosteriorVarianceFolded',['../RHat_8cpp.html#af4fae3d323e2f5220b3506386304f8f4',1,'RHat.cpp']]], + ['matrixname_6',['matrixName',['../classcovarianceBase.html#a47cf443e7de1d83bd979ccc8d35b8599',1,'covarianceBase']]], + ['mc_5fstat_5fllh_7',['mc_stat_llh',['../classmanager.html#aa7619b235f224c34e77f8d09f42a5911',1,'manager']]], + ['mcmcfile_8',['mcmcfile',['../classMCMCProcessor.html#a6d212d77a818304a8674a7b9b18d43b8',1,'MCMCProcessor::MCMCFile'],['../RHat_8cpp.html#aa19a5e341d34dce5448ee490dedba8ef',1,'MCMCFile:&#160;RHat.cpp']]], + ['mcsamples_9',['MCSamples',['../classsamplePDFFDBase.html#a673b2d4958424e158107652339518a13',1,'samplePDFFDBase']]], + ['mcthrow_10',['MCthrow',['../classsamplePDFBase.html#a364f1bb62fbe78e5dc0cfe635ca10838',1,'samplePDFBase']]], + ['mean_11',['Mean',['../RHat_8cpp.html#ab7d224b5fffa9367046f2976bb4972d1',1,'RHat.cpp']]], + ['meanfolded_12',['MeanFolded',['../RHat_8cpp.html#a458eb859b19f20edc7607814bd68d449',1,'RHat.cpp']]], + ['meanglobal_13',['MeanGlobal',['../RHat_8cpp.html#a4526fa4abfccd1173c87267a0beb6977',1,'RHat.cpp']]], + ['meanglobalfolded_14',['MeanGlobalFolded',['../RHat_8cpp.html#a5afb47112913938579beb8b9f385a574',1,'RHat.cpp']]], + ['means_15',['Means',['../classMCMCProcessor.html#acaf7f239136dfa3506d095b612323d0a',1,'MCMCProcessor']]], + ['means_5fgauss_16',['Means_Gauss',['../classMCMCProcessor.html#a600fc8c39af2750df91fb7a0ff85ac74',1,'MCMCProcessor']]], + ['means_5fhpd_17',['Means_HPD',['../classMCMCProcessor.html#a32657dc39a7fc0d04804f6195a3d8c3e',1,'MCMCProcessor']]], + ['medianarr_18',['MedianArr',['../RHat_8cpp.html#a761fd0b4a970686c00ce3e4daefd7f73',1,'RHat.cpp']]], + ['minuit_19',['minuit',['../classMinuitFit.html#a3f5a1b7de36ce6c55821e262b016cb19',1,'MinuitFit']]], + ['mode_20',['mode',['../structfdmc__base.html#a86b6b78f41e045592074494f960c8128',1,'fdmc_base']]], + ['modes_21',['modes',['../classXsecNorms4.html#ad0632d5a94a37ee5ce297698abadd844',1,'XsecNorms4']]], + ['modestruct_22',['ModeStruct',['../classsamplePDFBase.html#a5e83626a43fa564c2691947dd2045133',1,'samplePDFBase']]], + ['monolithindex_23',['MonolithIndex',['../classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a',1,'splineFDBase']]], + ['monolithsize_24',['MonolithSize',['../classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce',1,'splineFDBase']]] +]; diff --git a/search/variables_d.js b/search/variables_d.js new file mode 100644 index 00000000..5e677ef0 --- /dev/null +++ b/search/variables_d.js @@ -0,0 +1,75 @@ +var searchData= +[ + ['n_0',['N',['../classstretch.html#a8725b8b5a1d794ea4a4549346992d373',1,'stretch']]], + ['n_5fpars_1',['n_pars',['../classtune.html#aabd82286e47540764bdc139c9c2c1bf0',1,'tune']]], + ['name_2',['name',['../classXsecNorms4.html#a848104ff97acc9a0df9861acc8615aa7',1,'XsecNorms4']]], + ['nbatches_3',['nBatches',['../classMCMCProcessor.html#a02c5a3f849cf217705816c650c678d19',1,'MCMCProcessor']]], + ['nbins_4',['nbins',['../GetPostfitParamPlots_8cpp.html#ae4842c1619a902b2761696f3849889a1',1,'nBins:&#160;GetPostfitParamPlots.cpp'],['../classMCMCProcessor.html#a6b74f8195bcbca0979f9e9fe43468bae',1,'MCMCProcessor::nBins']]], + ['nbranches_5',['nBranches',['../classMCMCProcessor.html#af6ba5d9aec5350fafebbf81309e813cb',1,'MCMCProcessor']]], + ['nchains_6',['Nchains',['../RHat_8cpp.html#a231bc179b5599c7e29d5ba28ff2b4b70',1,'RHat.cpp']]], + ['ncoarsecosz_7',['nCoarseCosz',['../classOscillator.html#a3255db661337e56813d6d36b3114a42d',1,'Oscillator']]], + ['ncoarseenergy_8',['nCoarseEnergy',['../classOscillator.html#a44ed039b5273d288cff2e38999eeac2a',1,'Oscillator']]], + ['ndims_9',['nDims',['../classsamplePDFBase.html#a3db37aff026190ff162591361dc5ddd8',1,'samplePDFBase']]], + ['ndparameters_10',['NDParameters',['../GetPostfitParamPlots_8cpp.html#adb4ee3a874472b4ffccc8734da66250e',1,'GetPostfitParamPlots.cpp']]], + ['ndparametersstartingpos_11',['NDParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#aa7bc6e5554391b57acf10c691b6374e0',1,'GetPostfitParamPlots.cpp']]], + ['ndraw_12',['ndraw',['../RHat_8cpp.html#ae2faf756e30936102294777663fae31d',1,'nDraw:&#160;RHat.cpp'],['../classMCMCProcessor.html#aa30545fedb0af2ad9619d6accf42a10d',1,'MCMCProcessor::nDraw']]], + ['ndsamplesbins_13',['ndsamplesbins',['../classMCMCProcessor.html#ae76b02ce85737d30c778698ba127933b',1,'MCMCProcessor::NDSamplesBins'],['../GetPostfitParamPlots_8cpp.html#a828808dfc5081853471b1bf2cf12109f',1,'NDSamplesBins:&#160;GetPostfitParamPlots.cpp']]], + ['ndsamplesnames_14',['ndsamplesnames',['../GetPostfitParamPlots_8cpp.html#af30d1996a67bb4c906afbede1c815e31',1,'NDSamplesNames:&#160;GetPostfitParamPlots.cpp'],['../classMCMCProcessor.html#a27c8a25155baab660fc9658861c433ab',1,'MCMCProcessor::NDSamplesNames']]], + ['nentries_15',['nEntries',['../classMCMCProcessor.html#af3a19b885e9c34e1674aea8cfbe14e1c',1,'MCMCProcessor']]], + ['neutrinotype_16',['NeutrinoType',['../structfdmc__base.html#a68642e2df5ed3df12633de57599f276a',1,'fdmc_base']]], + ['neutrinotypes_17',['NeutrinoTypes',['../classOscillator.html#ae838fed43a46d8a7476a46fc500c7609',1,'Oscillator']]], + ['neutrinotypes_5fnames_18',['NeutrinoTypes_Names',['../classOscillator.html#a3b1d16da8ceb60e74217bb5f42df8210',1,'Oscillator']]], + ['nevents_19',['nevents',['../structfdmc__base.html#abc7c499f714510adc13362187ec541e0',1,'fdmc_base::nEvents'],['../classSMonolith.html#ac86282b04659bae5cccb6073c9edc0a5',1,'SMonolith::NEvents']]], + ['nfiles_20',['nFiles',['../ProcessMCMC_8cpp.html#a6b25bcddaae9b868109dc98a54476e46',1,'ProcessMCMC.cpp']]], + ['nfinalflavours_21',['nFinalFlavours',['../classOscillator.html#a535e02743b317f2400747b824d075ee6',1,'Oscillator']]], + ['nfinecosz_22',['nFineCosz',['../classOscillator.html#a3d1aa5b31722cd5342dfe6d30ee7fa99',1,'Oscillator']]], + ['nfineenergy_23',['nFineEnergy',['../classOscillator.html#a632860953ec6d0a0b1b0436e10c9777e',1,'Oscillator']]], + ['nflux_24',['nFlux',['../classMCMCProcessor.html#acfc681553c5fbba89e133dfda605db3c',1,'MCMCProcessor']]], + ['nfuncparams_25',['nFuncParams',['../classsamplePDFFDBase.html#a87aacca771e43e00c671d68552c4f8b3',1,'samplePDFFDBase']]], + ['ninitialflavours_26',['nInitialFlavours',['../classOscillator.html#a77bf50907a561d490844aa901282c6f2',1,'Oscillator']]], + ['nkeptpcapars_27',['nKeptPCApars',['../classcovarianceBase.html#a36379c39ddfc130b2008944471795b47',1,'covarianceBase']]], + ['nknots_28',['nKnots',['../classSMonolith.html#afc0e3d1eafd575cf7628319a66925d5b',1,'SMonolith']]], + ['nknowndetids_29',['nKnownDetIDs',['../namespaceMaCh3Utils.html#a24bdf4d0354265aecdd2b7e357a3c64b',1,'MaCh3Utils']]], + ['nlayers_30',['nLayers',['../classOscillator.html#a162b06439b1da21a33929c329d1bf5f5',1,'Oscillator']]], + ['nmaxbin_31',['nMaxBin',['../classOscillator.html#a02c589ad1c87cfa2b1f97f0c0cda326c',1,'Oscillator']]], + ['nneutrinosigns_32',['nNeutrinoSigns',['../classOscillator.html#a01dab3bc1c38f47917850b6fb31edbf4',1,'Oscillator']]], + ['nominal_33',['nominal',['../GetPenaltyTerm_8cpp.html#a2c8ba98cfe4ac3d1f09ac3e90319e090',1,'GetPenaltyTerm.cpp']]], + ['nomxbin_34',['NomXBin',['../structfdmc__base.html#ae69617156a70dffc091e5e16efab2067',1,'fdmc_base']]], + ['nomybin_35',['NomYBin',['../structfdmc__base.html#abd8d56f6ab427aa3e657707e6ad805f7',1,'fdmc_base']]], + ['nonsampledirnames_36',['nonSampleDirNames',['../PlotLLH_8cpp.html#a4efd2f2417608fa67730f672cd7a534f',1,'PlotLLH.cpp']]], + ['normparams_37',['NormParams',['../classcovarianceXsec.html#acd6c2346a5b808c6917e4828bbb633f5',1,'covarianceXsec']]], + ['noscchans_38',['nOscChans',['../classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3',1,'splineFDBase']]], + ['noscpars_39',['nOscpars',['../classOscillator.html#a19c25955aac622b8d1783faeed89a1d1',1,'Oscillator']]], + ['not_5ffound_5fstr_40',['NOT_FOUND_STR',['../PlotLLH_8cpp.html#a4f80a1d1e24115848d333d2b59c238af',1,'PlotLLH.cpp']]], + ['nparam_41',['nParam',['../classMCMCProcessor.html#a4200e7cbe1c8f811d3640ebfd648ca85',1,'MCMCProcessor']]], + ['nparams_42',['nparams',['../classXSecStruct.html#a51b6898cd72dc0305745b21547a6ccb9',1,'XSecStruct::nParams'],['../classSMonolith.html#a4606b53f321992377d420a838c76ab3b',1,'SMonolith::nParams']]], + ['npars_43',['npars',['../classThrowParms.html#a0a29faa43eb964a982d8da7e1511f4af',1,'ThrowParms::npars'],['../classcovarianceBase.html#ac98c384a7063e12d4aa538d111b0cf80',1,'covarianceBase::npars'],['../classLikelihoodFit.html#ac779acfe140500d06e42a1d4ace25385',1,'LikelihoodFit::NPars']]], + ['nparspca_44',['NParsPCA',['../classLikelihoodFit.html#a0b50b7b607751e80b6c85e9db98631af',1,'LikelihoodFit']]], + ['npoints_45',['nPoints',['../classTSpline3__red.html#a30f59091bb5e5fb23850e45edb3bc654',1,'TSpline3_red']]], + ['nprimarybins_46',['nPrimaryBins',['../classOscillator.html#a893046dc7a3a4f9a47a67279b367eb3a',1,'Oscillator']]], + ['nprimarybinsx_47',['nPrimaryBinsX',['../classOscillator.html#a49d6df7e692434f1e72c225ddb3fa6f0',1,'Oscillator']]], + ['nprimarybinsy_48',['nPrimaryBinsY',['../classOscillator.html#a0a298ed536659720b790dd0e5725edec',1,'Oscillator']]], + ['nprimaryhists_49',['nPrimaryHists',['../classOscillator.html#a5998c82def4497c12a0927502cd12045',1,'Oscillator']]], + ['nproductionheightaveragingbins_50',['nProductionHeightAveragingBins',['../classOscillator.html#a26b4bd8fb0b02641b56e9cb0b1eaf05a',1,'Oscillator']]], + ['npts_51',['nPts',['../structFastSplineInfo.html#a3588208caca5261000da06f24f908b37',1,'FastSplineInfo']]], + ['nsamples_52',['nsamples',['../classMCMCProcessor.html#a419d3669dbb54a55a635e35691134cc1',1,'MCMCProcessor::nSamples'],['../classsamplePDFBase.html#a29be51dc086edd7e068a5dff082b7ac3',1,'samplePDFBase::nSamples']]], + ['nsecondarybins_53',['nSecondaryBins',['../classOscillator.html#af940f9e3168802e453b786ba74ad2322',1,'Oscillator']]], + ['nsecondarybinsx_54',['nSecondaryBinsX',['../classOscillator.html#a62d4013f31fbad6545971e5ca0c59496',1,'Oscillator']]], + ['nsecondarybinsy_55',['nSecondaryBinsY',['../classOscillator.html#a3998a232197e0448b15f9073a056bf27',1,'Oscillator']]], + ['nselections_56',['NSelections',['../classsamplePDFFDBase.html#a2e76b60ca2d2369b7ac798c6d1963077',1,'samplePDFFDBase']]], + ['nsplineparams_57',['nSplineParams',['../classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40',1,'splineFDBase']]], + ['nsplines_5ftotal_58',['NSplines_total',['../classSMonolith.html#a419c7eb29dfa7187b52d18c430763721',1,'SMonolith']]], + ['nsplines_5ftotal_5flarge_59',['NSplines_total_large',['../classSMonolith.html#aee3c18513f8209f1ac940b492cd3ed68',1,'SMonolith']]], + ['nsplines_5fvalid_60',['NSplines_valid',['../classSMonolith.html#ab72795333d6f632565b0f7eb0ca8a658',1,'SMonolith']]], + ['nsteps_61',['nSteps',['../classMCMCProcessor.html#aae0016a4e1d105d5d65243438c622a97',1,'MCMCProcessor']]], + ['nsysts_62',['nSysts',['../classMCMCProcessor.html#adf518be96278f1d3901404cfbe767b67',1,'MCMCProcessor']]], + ['ntotal_5fweight_5fpointers_63',['ntotal_weight_pointers',['../structfdmc__base.html#a12160f1e50ecedf3ffaeacd833f31708',1,'fdmc_base']]], + ['ntoys_64',['Ntoys',['../RHat_8cpp.html#afa110f35953074d3cc7ad452d003fd7a',1,'RHat.cpp']]], + ['nuniquesysts_65',['nUniqueSysts',['../classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af',1,'splineFDBase']]], + ['nupdg_66',['nupdg',['../structfdmc__base.html#ad17fa8ac568b25cf995d3ee317e339a9',1,'fdmc_base']]], + ['nupdgunosc_67',['nupdgUnosc',['../structfdmc__base.html#a222ac569ed5f4037392caa0bb0be85aa',1,'fdmc_base']]], + ['nutype_68',['nutype',['../structfdmc__base.html#a4e92a2591643f90cbba9b86243f43310',1,'fdmc_base::nutype'],['../classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b',1,'splineBase::nutype']]], + ['nwalk_69',['nwalk',['../classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e',1,'stretch']]], + ['nxsec_5fnorm_5fpointers_70',['nxsec_norm_pointers',['../structfdmc__base.html#ad8f9b7898527027d84a0278ab8325561',1,'fdmc_base']]], + ['nxsec_5fspline_5fpointers_71',['nxsec_spline_pointers',['../structfdmc__base.html#a773bd0b1e143d015dd1631fd3b4a5733',1,'fdmc_base']]] +]; diff --git a/search/variables_e.js b/search/variables_e.js new file mode 100644 index 00000000..4b8438b8 --- /dev/null +++ b/search/variables_e.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['osc_0',['osc',['../classstretch.html#abcfd2f7460a63de15654eb99400942c9',1,'stretch::osc'],['../classsamplePDFFDBase.html#a3edf869b1304fd3316d92ea1eaeb0045',1,'samplePDFFDBase::Osc'],['../classFitterBase.html#a0c3179f05d6846f5b796ba4c04899634',1,'FitterBase::osc']]], + ['osc2_1',['osc2',['../classFitterBase.html#a248ca37a92c46ddd944a31d348b8c7bb',1,'FitterBase']]], + ['osc_5fbinned_2',['osc_binned',['../classsamplePDFFDBase.html#a37591029c5d56c09083f1f094ae11836',1,'samplePDFFDBase']]], + ['osc_5fbinned_5faxis_3',['osc_binned_axis',['../classsamplePDFFDBase.html#a3b25870ec0ac85196ddaf09fd65c9828',1,'samplePDFFDBase']]], + ['osc_5fllh_4',['osc_llh',['../classFitterBase.html#ac7a4c5b2a90aba0e4bf6600b7af05168',1,'FitterBase::osc_llh'],['../classstretch.html#a57c45d6fc50aebcad403605cee37c9bc',1,'stretch::osc_llh']]], + ['osc_5fonly_5',['osc_only',['../classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3',1,'stretch']]], + ['osc_5fw_6',['osc_w',['../structfdmc__base.html#a22d2671171c494171edc77cd6d2b93ac',1,'fdmc_base']]], + ['osc_5fw_5fpointer_7',['osc_w_pointer',['../structfdmc__base.html#ab7a414bc0959c7114aa6cb7be7684948',1,'fdmc_base']]], + ['oscbar_8',['oscbar',['../classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67',1,'stretch']]], + ['oscchannels_9',['OscChannels',['../classOscillator.html#a18dfed5e9805e92d67d554f056e6a63b',1,'Oscillator']]], + ['oscchannels_5fnames_10',['OscChannels_Names',['../classOscillator.html#aadf0505e741083bbde8845f1077c2f82',1,'Oscillator']]], + ['oscillator_11',['Oscillator',['../structfdmc__base.html#a9bdecfa8f4ffd15989d9b9dda3236ab9',1,'fdmc_base']]], + ['oscnutype_12',['oscnutype',['../structfdmc__base.html#a8bdce59edb6430b7c865832cb264b39e',1,'fdmc_base']]], + ['oscparameters_13',['OscParameters',['../GetPostfitParamPlots_8cpp.html#a5aedbc0849506477d31e20d345c967eb',1,'GetPostfitParamPlots.cpp']]], + ['oscparametersstartingpos_14',['OscParametersStartingPos',['../GetPostfitParamPlots_8cpp.html#a3ec8e00c5c17bd6768473b08156f6c1c',1,'GetPostfitParamPlots.cpp']]], + ['oscpars1_15',['oscpars1',['../classcovarianceOsc.html#ad93cd8b3f255a865b56b008a9e867634',1,'covarianceOsc']]], + ['outfilename_16',['OutFileName',['../CombineMaCh3Chains_8cpp.html#a021f9f978660c299af0d70b8d3b3d74c',1,'CombineMaCh3Chains.cpp']]], + ['outputfile_17',['outputfile',['../classMCMCProcessor.html#a62035b99df4617ab334cd1abd6ed0346',1,'MCMCProcessor::OutputFile'],['../classFitterBase.html#a4260b312e3f35cf01fc73b02239f8990',1,'FitterBase::outputFile'],['../classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d',1,'stretch::outputFile']]], + ['outputname_18',['OutputName',['../classMCMCProcessor.html#a3d17c1720b91d6d0361da0b5dabfbbff',1,'MCMCProcessor']]], + ['outputprepared_19',['OutputPrepared',['../classFitterBase.html#a3bfd8f69df891d03bae0587cd1a1e1b7',1,'FitterBase']]], + ['outputsuffix_20',['OutputSuffix',['../classMCMCProcessor.html#aa34b50ce33fb2cb7d9e9ef2d9f2f67c1',1,'MCMCProcessor']]], + ['outtree_21',['outtree',['../classFitterBase.html#aed2032b9c4a4f2248abe548f54f8dcc8',1,'FitterBase::outTree'],['../classstretch.html#aaf0ddc53f573e673ad700418a2735d3c',1,'stretch::outTree']]] +]; diff --git a/search/variables_f.js b/search/variables_f.js new file mode 100644 index 00000000..5aeffc9c --- /dev/null +++ b/search/variables_f.js @@ -0,0 +1,63 @@ +var searchData= +[ + ['p1_0',['p1',['../GetPostfitParamPlots_8cpp.html#af4718de299aea80f595dd6c21509a5eb',1,'GetPostfitParamPlots.cpp']]], + ['p2_1',['p2',['../GetPostfitParamPlots_8cpp.html#afcf736152a1c6e4f65d2d41b7335136c',1,'GetPostfitParamPlots.cpp']]], + ['p3_2',['p3',['../GetPostfitParamPlots_8cpp.html#a814cbca1b36d9e3f622031e0e9634ce0',1,'GetPostfitParamPlots.cpp']]], + ['p4_3',['p4',['../GetPostfitParamPlots_8cpp.html#ac577141e2ab46a432ac74c34d18d0739',1,'GetPostfitParamPlots.cpp']]], + ['par_4',['par',['../classTF1__red.html#a223eb22d6e86b41e257d79128a01ad26',1,'TF1_red::Par'],['../classPSO.html#ae5eff2b0193e0d7c9c221edbc14118bd',1,'PSO::par'],['../classTSpline3__red.html#a396d3fc28e8c05dae4f1d410eb83c179',1,'TSpline3_red::Par']]], + ['par_5fmeans_5',['par_means',['../classcovarianceBase.html#aa8efafa871a79bd578bc687796b118a5',1,'covarianceBase']]], + ['par_5fmeans_5fprev_6',['par_means_prev',['../classcovarianceBase.html#a0faf72534a82c33db752d42d234b6322',1,'covarianceBase']]], + ['par_5fnames_7',['par_names',['../classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0',1,'tune']]], + ['param_5fpos_8',['Param_pos',['../classBaseFuncPar.html#a852005983ca8e7d16274079245471bb5',1,'BaseFuncPar']]], + ['paramcentral_9',['ParamCentral',['../classMCMCProcessor.html#a3a6614826ae320e462211e38e96d9d02',1,'MCMCProcessor']]], + ['paramerrors_10',['ParamErrors',['../classMCMCProcessor.html#a3a97e3cb4be3ceb9eb721eac51d82d60',1,'MCMCProcessor']]], + ['paramflat_11',['ParamFlat',['../classMCMCProcessor.html#a4be1eedb743e4ea410009a4fa45720f7',1,'MCMCProcessor']]], + ['paramlist_12',['paramlist',['../classPSO.html#ab8f404ef249b9c4b385e08c483e8b38f',1,'PSO']]], + ['paramnames_13',['paramnames',['../GetPenaltyTerm_8cpp.html#a7428f3d1db32b479cffb2572cba8725c',1,'ParamNames:&#160;GetPenaltyTerm.cpp'],['../classMCMCProcessor.html#adecc55689f7d37b9412f8886fe3480dc',1,'MCMCProcessor::ParamNames']]], + ['paramno_14',['paramno',['../classTSpline3__red.html#a0fe6165b847cf17c45f307256a0fc336',1,'TSpline3_red::ParamNo'],['../classTF1__red.html#aee5a2c3539b21417a7fc71cd2af093c9',1,'TF1_red::ParamNo']]], + ['paramnom_15',['ParamNom',['../classMCMCProcessor.html#a4c4c6aa4827a2fe54ce37defbb3d0475',1,'MCMCProcessor']]], + ['paramsums_16',['ParamSums',['../classMCMCProcessor.html#a7db98c7cf390b050f1acb927b4f55cab',1,'MCMCProcessor']]], + ['paramtype_17',['ParamType',['../classMCMCProcessor.html#aaa903949bde8f1a69800c71fe1eb538e',1,'MCMCProcessor']]], + ['paramtypestartpos_18',['ParamTypeStartPos',['../classMCMCProcessor.html#aeab63979ff36256072c046a15d981875',1,'MCMCProcessor']]], + ['parstep_19',['ParStep',['../classMCMCProcessor.html#a087dca88a306acdc28afea7213e3623c',1,'MCMCProcessor']]], + ['pca_20',['pca',['../classcovarianceBase.html#ab4b7f96d3e977a0b3307ceecbd0baeb4',1,'covarianceBase']]], + ['pdfname_21',['PDFName',['../PlotLLH_8cpp.html#aacfbb7016eac3cab724a43e114986100',1,'PlotLLH.cpp']]], + ['pdgs_22',['pdgs',['../classXsecNorms4.html#afed4b95759559016df72bfed03763b6e',1,'XsecNorms4']]], + ['performbetastudy_23',['PerformBetaStudy',['../classcovarianceOsc.html#acf71a8dc42b231bedf3c68ced84cb379',1,'covarianceOsc']]], + ['personal_5fbest_5fposition_24',['personal_best_position',['../classparticle.html#a8b36e78ddaa8737f8d1d3d1b39e6924f',1,'particle']]], + ['personal_5fbest_5fvalue_25',['personal_best_value',['../classparticle.html#ad45e229bdf80e2eaadeb9e9ae216277b',1,'particle']]], + ['plotbinvalue_26',['plotBinValue',['../classMCMCProcessor.html#aa7611f55ac3c0ea70607761d037fbd91',1,'MCMCProcessor']]], + ['plotcolor_27',['PlotColor',['../GetPostfitParamPlots_8cpp.html#ab2b28d9b5fd61ee45bbdfa307b969241',1,'GetPostfitParamPlots.cpp']]], + ['plotdet_28',['PlotDet',['../classMCMCProcessor.html#a8b6f73288e20d82d74d119eabeae3e8d',1,'MCMCProcessor']]], + ['plotflatprior_29',['PlotFlatPrior',['../classMCMCProcessor.html#ad24411a2556504c440ff0af045e8e7aa',1,'MCMCProcessor']]], + ['plotjarlskog_30',['PlotJarlskog',['../classMCMCProcessor.html#af1392c6cff68e9f0a27e2c9a4e52cf4c',1,'MCMCProcessor']]], + ['plotratios_31',['plotRatios',['../PlotLLH_8cpp.html#a03962c21a0e20503b01149a1252076ab',1,'PlotLLH.cpp']]], + ['plotrelativetoprior_32',['plotRelativeToPrior',['../classMCMCProcessor.html#afbac2a114c15ca7db4abe71dd549504c',1,'MCMCProcessor']]], + ['plottype_33',['plotType',['../GetPostfitParamPlots_8cpp.html#aee5c9d8d7ad14d8728dffad47b8d4efe',1,'GetPostfitParamPlots.cpp']]], + ['plotxsec_34',['PlotXSec',['../classMCMCProcessor.html#ad8a1aa692e8494ad58fd604e127a656d',1,'MCMCProcessor']]], + ['position_35',['position',['../classparticle.html#a16f312fadb1c50e0a45a840f9e393eae',1,'particle']]], + ['post2dplotthreshold_36',['Post2DPlotThreshold',['../classMCMCProcessor.html#a25e4685b6299181021b02ac0e0b74681',1,'MCMCProcessor']]], + ['posterior_37',['Posterior',['../classMCMCProcessor.html#a82e6cfef1ba6fcfc8ac8f61acb5bf931',1,'MCMCProcessor']]], + ['posterior1dcut_38',['Posterior1DCut',['../classMCMCProcessor.html#a85917e25c4f5b5b966c50cccd9ddd6a0',1,'MCMCProcessor']]], + ['postfithistvec_39',['PostfitHistVec',['../GetPostfitParamPlots_8cpp.html#adf27e2a8c89392ebe0a2d6d7a65dab9e',1,'GetPostfitParamPlots.cpp']]], + ['prefit_40',['Prefit',['../GetPostfitParamPlots_8cpp.html#a3622d45d00f446252f0ea513d7f1f6cb',1,'GetPostfitParamPlots.cpp']]], + ['preoscpdgs_41',['preoscpdgs',['../classXsecNorms4.html#ac2e3b749d0c629e425861d2f6ecf82b0',1,'XsecNorms4']]], + ['primarybincontrib_5fbin_42',['PrimaryBinContrib_Bin',['../classOscillator.html#a5b3bc3a5c63f2ebc05c961827592fca3',1,'Oscillator']]], + ['primarybincontrib_5fweight_43',['PrimaryBinContrib_Weight',['../classOscillator.html#a6bcf9bfe8d38e9767bb3707f9fe04af4',1,'Oscillator']]], + ['primarybinningtemplatename_44',['PrimaryBinningTemplateName',['../classOscillator.html#aeb6ec9d266e710bec0702d40a6e442f0',1,'Oscillator']]], + ['primaryhistkey_45',['PrimaryHistKey',['../classOscillator.html#afde6d140da0e7ff8408c6e297e385b89',1,'Oscillator']]], + ['primaryxbinedges_46',['PrimaryXBinEdges',['../classOscillator.html#a1f754af9c94d6e8ae6e93876bdb83703',1,'Oscillator']]], + ['primaryxbinevalpoints_47',['PrimaryXBinEvalPoints',['../classOscillator.html#a3beffa339394086ff08d4692cae6ba1e',1,'Oscillator']]], + ['primaryybinedges_48',['PrimaryYBinEdges',['../classOscillator.html#a4dec754478a49bbfa651ce7c64f6b274',1,'Oscillator']]], + ['primaryybinevalpoints_49',['PrimaryYBinEvalPoints',['../classOscillator.html#a530c9cb1765518de3b19735fa3c0d79d',1,'Oscillator']]], + ['printlength_50',['PrintLength',['../classcovarianceBase.html#a9f6180397b0e20f0eefe129638a1f10e',1,'covarianceBase']]], + ['printtopdf_51',['printToPDF',['../classMCMCProcessor.html#ad73755714ae3d6dc951158d5513c6eee',1,'MCMCProcessor']]], + ['prior_52',['prior',['../classPSO.html#afac1699007d3838da90d466bf4b69b31',1,'PSO']]], + ['problist_53',['ProbList',['../classOscillator.html#ad9b440231a49b187427519296141edd9',1,'Oscillator']]], + ['probtype_54',['ProbType',['../structfdmc__base.html#a1dd06648b45adb3a7f36fdf3f5620e4e',1,'fdmc_base']]], + ['productionheightbinedges_55',['ProductionHeightBinEdges',['../classOscillator.html#a93b575c6ed29c79382b59e27ce978e0d',1,'Oscillator']]], + ['productionheightfilename_56',['ProductionHeightFileName',['../classOscillator.html#ab72d1515e84960103c1f54142f1f04f3',1,'Oscillator']]], + ['propagator_57',['propagator',['../classOscillator.html#a22e72322d2ee2eacb522424b819a5d9c',1,'Oscillator']]], + ['proposedpar_58',['proposedpar',['../classstretch.html#a3527e1352b2abab12acb5aaf646addfc',1,'stretch']]], + ['pvals_59',['pvals',['../classThrowParms.html#a761c7ef866ef034f452f85fb9a5f9dba',1,'ThrowParms']]] +]; diff --git a/splineBase_8cpp.html b/splineBase_8cpp.html new file mode 100644 index 00000000..392f81b8 --- /dev/null +++ b/splineBase_8cpp.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineBase.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineBase.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &quot;<a class="el" href="splineBase_8h_source.html">splineBase.h</a>&quot;</code><br /> +</div> +<p><a href="splineBase_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineBase_8cpp_source.html b/splineBase_8cpp_source.html new file mode 100644 index 00000000..4786ed5b --- /dev/null +++ b/splineBase_8cpp_source.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineBase.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineBase.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="splineBase_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &quot;<a class="code" href="splineBase_8h.html">splineBase.h</a>&quot;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="foldopen" id="foldopen00005" data-start="{" data-end="}"> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"><a class="line" href="classsplineBase.html#afcf238a7e106ddd4c1a03042e2df188e"> 5</a></span><a class="code hl_function" href="classsplineBase.html#afcf238a7e106ddd4c1a03042e2df188e">splineBase::splineBase</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ntype</a>)</div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span>{</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> <span class="comment">//splinefile = new TFile(name, &quot;READ&quot;);</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <a class="code hl_variable" href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b">nutype</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ntype</a>;</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// setupSplines();</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span>}</div> +</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="foldopen" id="foldopen00013" data-start="{" data-end="}"> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16"> 13</a></span><a class="code hl_function" href="classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16">splineBase::~splineBase</a>()</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>{</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span>}</div> +</div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasssplineBase_html_a1477c56ad1595577a7b8496b5af33a16"><div class="ttname"><a href="classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16">splineBase::~splineBase</a></div><div class="ttdeci">virtual ~splineBase()</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8cpp_source.html#l00013">splineBase.cpp:13</a></div></div> +<div class="ttc" id="aclasssplineBase_html_aba8b62ac0e3b1fbaa77da335194b161b"><div class="ttname"><a href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b">splineBase::nutype</a></div><div class="ttdeci">int nutype</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00015">splineBase.h:15</a></div></div> +<div class="ttc" id="aclasssplineBase_html_afcf238a7e106ddd4c1a03042e2df188e"><div class="ttname"><a href="classsplineBase.html#afcf238a7e106ddd4c1a03042e2df188e">splineBase::splineBase</a></div><div class="ttdeci">splineBase(const char *spline, int nutype)</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8cpp_source.html#l00005">splineBase.cpp:5</a></div></div> +<div class="ttc" id="asplineBase_8h_html"><div class="ttname"><a href="splineBase_8h.html">splineBase.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineBase_8h.html b/splineBase_8h.html new file mode 100644 index 00000000..b7db66f8 --- /dev/null +++ b/splineBase_8h.html @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineBase.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">splineBase.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="splineInterface_8h_source.html">splineInterface.h</a>&quot;</code><br /> +<code>#include &lt;cstdlib&gt;</code><br /> +</div> +<p><a href="splineBase_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsplineBase.html">splineBase</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineBase_8h_source.html b/splineBase_8h_source.html new file mode 100644 index 00000000..18e2b232 --- /dev/null +++ b/splineBase_8h_source.html @@ -0,0 +1,124 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineBase.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineBase.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="splineBase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef _splineBase_h_</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define _splineBase_h_</span></div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;<a class="code" href="splineInterface_8h.html">splineInterface.h</a>&quot;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;cstdlib&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="foldopen" id="foldopen00007" data-start="{" data-end="};"> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"><a class="line" href="classsplineBase.html"> 7</a></span><span class="keyword">class </span><a class="code hl_class" href="classsplineBase.html">splineBase</a> : <span class="keyword">public</span> <a class="code hl_class" href="classsplineInterface.html">splineInterface</a></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span>{</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <a class="code hl_class" href="classsplineBase.html">splineBase</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code hl_class" href="classspline.html">spline</a>, <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b">nutype</a>);</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16">~splineBase</a>();</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classsplineBase.html#a46a6327b716e8f69aa8bd5f216e2eeee"> 12</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineBase.html#a46a6327b716e8f69aa8bd5f216e2eeee">setupSplines</a>(){};</div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b"> 15</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b">nutype</a>; <span class="comment">// 2 = numu/signue | -2 = numub | 1 = nue | -1 = nueb</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="classsplineBase.html#a7aa7a4675807a004408113a0c2bd2e95"> 16</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_variable" href="classsplineBase.html#a7aa7a4675807a004408113a0c2bd2e95">splinefile</a>;</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// setupSpline(char *spline);</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span>};</div> +</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#endif</span></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasssplineBase_html"><div class="ttname"><a href="classsplineBase.html">splineBase</a></div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00007">splineBase.h:8</a></div></div> +<div class="ttc" id="aclasssplineBase_html_a1477c56ad1595577a7b8496b5af33a16"><div class="ttname"><a href="classsplineBase.html#a1477c56ad1595577a7b8496b5af33a16">splineBase::~splineBase</a></div><div class="ttdeci">virtual ~splineBase()</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8cpp_source.html#l00013">splineBase.cpp:13</a></div></div> +<div class="ttc" id="aclasssplineBase_html_a46a6327b716e8f69aa8bd5f216e2eeee"><div class="ttname"><a href="classsplineBase.html#a46a6327b716e8f69aa8bd5f216e2eeee">splineBase::setupSplines</a></div><div class="ttdeci">virtual void setupSplines()</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00012">splineBase.h:12</a></div></div> +<div class="ttc" id="aclasssplineBase_html_a7aa7a4675807a004408113a0c2bd2e95"><div class="ttname"><a href="classsplineBase.html#a7aa7a4675807a004408113a0c2bd2e95">splineBase::splinefile</a></div><div class="ttdeci">TFile * splinefile</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00016">splineBase.h:16</a></div></div> +<div class="ttc" id="aclasssplineBase_html_aba8b62ac0e3b1fbaa77da335194b161b"><div class="ttname"><a href="classsplineBase.html#aba8b62ac0e3b1fbaa77da335194b161b">splineBase::nutype</a></div><div class="ttdeci">int nutype</div><div class="ttdef"><b>Definition</b> <a href="splineBase_8h_source.html#l00015">splineBase.h:15</a></div></div> +<div class="ttc" id="aclasssplineInterface_html"><div class="ttname"><a href="classsplineInterface.html">splineInterface</a></div><div class="ttdef"><b>Definition</b> <a href="splineInterface_8h_source.html#l00008">splineInterface.h:9</a></div></div> +<div class="ttc" id="aclassspline_html"><div class="ttname"><a href="classspline.html">spline</a></div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00010">spline.h:11</a></div></div> +<div class="ttc" id="asplineInterface_8h_html"><div class="ttname"><a href="splineInterface_8h.html">splineInterface.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineFDBase_8cpp.html b/splineFDBase_8cpp.html new file mode 100644 index 00000000..49effb15 --- /dev/null +++ b/splineFDBase_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineFDBase.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineFDBase.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="splineFDBase_8h_source.html">splineFDBase.h</a>&quot;</code><br /> +</div> +<p><a href="splineFDBase_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineFDBase_8cpp_source.html b/splineFDBase_8cpp_source.html new file mode 100644 index 00000000..5bb1f8ac --- /dev/null +++ b/splineFDBase_8cpp_source.html @@ -0,0 +1,1213 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineFDBase.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineFDBase.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="splineFDBase_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="splineFDBase_8h.html">splineFDBase.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00004" data-start="{" data-end="}"> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a089883fce1a3f4180e3156215fb9c38a"> 4</a></span><a class="code hl_function" href="classsplineFDBase.html#a089883fce1a3f4180e3156215fb9c38a">splineFDBase::splineFDBase</a>(<a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_</a>) {</div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">//</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_</a> == <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>) {</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to create splineSKBase with NULL covariance object&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> }</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_</a>;</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// Keep these in class scope, important for using 1 monolith/sample!</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <a class="code hl_variable" href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">MonolithIndex</a>=0; <span class="comment">//Keeps track of the monolith index we&#39;re on when filling arrays (declared here so we can have multiple FillSampleArray calls)</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_variable" href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">CoeffIndex</a>=0; <span class="comment">//Keeps track of our indexing the coefficient arrays [x, ybcd]</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span>}</div> +</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00019" data-start="{" data-end="}"> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4"> 19</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4">splineFDBase::AddSample</a>(std::string SampleName, <span class="keywordtype">int</span> BinningOpt, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>, std::vector&lt;std::string&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>)</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">//Adds samples to the large array</span></div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span>{</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>.push_back(SampleName);</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_variable" href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">BinningOpts</a>.push_back(BinningOpt);</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>.push_back(<a class="code hl_function" href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb">getNDim</a>(BinningOpt));</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <a class="code hl_variable" href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15">DetIDs</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>);</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nSplineParam</a> = <a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a9b94545b5fa89c27a07c03f856ebcf60">GetNumSplineParamsFromDetID</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>);</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> std::cout &lt;&lt; <span class="stringliteral">&quot;FOund &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nSplineParam</a> &lt;&lt; <span class="stringliteral">&quot; spline parameters&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_variable" href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">nSplineParams</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nSplineParam</a>);</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Filling with GetSplineParsIndexFromDetID&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> std::vector&lt;int&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineParsIndex_Sample</a> = <a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a512a1a48b171fc65bdbccd7460171e51">GetSplineParsIndexFromDetID</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>);</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <a class="code hl_variable" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">SplineParsIndex</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineParsIndex_Sample</a>);</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Filling with GetFDSplineFileParsNamesFromDetID&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> std::vector&lt;std::string&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineFileParPrefixNames_Sample</a> = <a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a8196b6329ce89e607e90de8d472b5bb6">GetFDSplineFileParsNamesFromDetID</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>);</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineFileParPrefixNames_Sample</a>);</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> std::vector&lt;std::vector&lt;int&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineModeVecs_Sample</a> = <a class="code hl_function" href="classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d">StripDuplicatedModes</a>(<a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>-&gt;<a class="code hl_function" href="classcovarianceXsec.html#a59925cec0677ed7da99532ae5e320a30">GetSplineModeVecFromDetID</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>));</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_variable" href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b">SplineModeVecs</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SplineModeVecs_Sample</a>);</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChan</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>.size();</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChan</a>);</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_function" href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90">PrintSampleDetails</a>(SampleName);</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> std::vector&lt;std::vector&lt;TAxis *&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleBinning</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChan</a>);</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChan</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> {</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleBinning</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>] = <a class="code hl_function" href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b">FindSplineBinning</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>], SampleName);</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleBinning</a>);</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_function" href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704">BuildSampleIndexingArray</a>(SampleName);</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_function" href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc">PrintArrayDetails</a>(SampleName);</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_function" href="classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f">FillSampleArray</a>(SampleName, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span>}</div> +</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00068" data-start="{" data-end="}"> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8"> 68</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8">splineFDBase::TransferToMonolith</a>()</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>{</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> std::cout &lt;&lt; <span class="stringliteral">&quot;TRANSFERING TO MONOLITH!!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//FindUniqueModes();</span></div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_function" href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28">PrepForReweight</a>(); </div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a> = <a class="code hl_function" href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed">CountNumberOfLoadedSplines</a>();</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a>!=<a class="code hl_variable" href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">MonolithIndex</a>){</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;Something&#39;s gone wrong when we tried to get the size of your monolith&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> std::cout &lt;&lt; <span class="stringliteral">&quot;MonolishSize is &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> std::cout &lt;&lt; <span class="stringliteral">&quot;MonolithIndex is &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">MonolithIndex</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> }</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_variable" href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">uniquesplinevec_Monolith</a>.reserve(<a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a>);</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_variable" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">weightvec_Monolith</a>.reserve(<a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a>);</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_variable" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">isflatarray</a> = <span class="keyword">new</span> <span class="keywordtype">bool</span>[<a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a>];</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_variable" href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">xcoeff_arr</a> = <span class="keyword">new</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>[<a class="code hl_variable" href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">CoeffIndex</a>];</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a> = <span class="keyword">new</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>[<a class="code hl_variable" href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">CoeffIndex</a>*4];</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> { <span class="comment">// Loop over sample</span></div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> { <span class="comment">// Loop over oscillation channels</span></div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>++)</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> { <span class="comment">// Loop over modes</span></div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>++)</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> { <span class="comment">// Loop over first dimension</span></div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>++)</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> { <span class="comment">// Loop over second dimension</span></div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>++)</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> {</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>=<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>];</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_variable" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">weightvec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] = 1.0;</div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">foundUniqueSpline</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>++)</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> {</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>] == <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>])</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> {</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_variable" href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">uniquesplinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>;</div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">foundUniqueSpline</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> }<span class="comment">//unique syst loop end</span></div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">foundUniqueSpline</a>)</div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> {</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Unique spline index not found&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> }</div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineKnots</a>;</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]!=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>){</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">//std::cout &lt;&lt; &quot;Looking at splineindex &quot; &lt;&lt; splineindex &lt;&lt; &quot;and found a non-flat spline (wahoo!)&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_variable" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">isflatarray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineKnots</a>=<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]-&gt;GetNp();</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">//Now to fill up our coefficient arrayss</span></div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpXCoeffArr</a> = <span class="keyword">new</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineKnots</a>];</div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a> = <span class="keyword">new</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineKnots</a>*4];</div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a>=<a class="code hl_variable" href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187">coeffindexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>];</div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_function" href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae">getSplineCoeff_SepMany</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpXCoeffArr</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>);</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span><span class="preprocessor"> #pragma omp parallel for</span></div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineKnots</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++){</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpXCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]==-999){</div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;ERROR : looks like we&#39;ve got a bad X, index = &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_variable" href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">xcoeff_arr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpXCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>];</div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;4; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++){</div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]==-999){</div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;Bad ybcd, index : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> std::cerr&lt;&lt;<span class="stringliteral">&quot;Param Values : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+1]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+2]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+3]&lt;&lt;std::endl;</div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>[(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)*4+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>];</div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> }</div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpXCoeffArr</a>;</div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tmpManyCoeffArr</a>;</div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_variable" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">isflatarray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }<span class="comment">//3d loop end</span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }<span class="comment">//2d loop end</span></div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }<span class="comment">//1d loop end</span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }<span class="comment">//mode loop end</span></div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }<span class="comment">//syst2 loop end</span></div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }<span class="comment">//osc loop end</span></div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }<span class="comment">//syst1 loop end</span></div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span>;</div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>}</div> +</div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00178" data-start="{" data-end="}"> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273"> 178</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">splineFDBase::FindSplineSegment</a>()</div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span>{</div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="comment">//HI okay let&#39;s try this, we delete+refill a new array which we&#39;ll fill with x-s for our segment</span></div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor"> #pragma omp parallel </span><span class="comment">//for schedule(dynamic)</span></div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> {</div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">int</span> nPoints = <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>];</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> std::vector&lt;__float__&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a> = <a class="code hl_variable" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">UniqueSystXPts</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>];</div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// Get the variation for this reconfigure for the ith parameter</span></div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GlobalIndex</a> = <a class="code hl_variable" href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6">UniqueSystIndices</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>];</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>=<a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(<a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>-&gt;<a class="code hl_function" href="classcovarianceBase.html#a17fd81a6df482370d8a66098a257b756">calcReWeight</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GlobalIndex</a>));</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_variable" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">xVarArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>]=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>;</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="comment">//Rather than starting from 0 everytime, let&#39;s use what we know! </span></div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> = <a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>];</div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHigh</a> = nPoints - 1;</div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// If the variation is below the lowest saved spline point</span></div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment&lt;nPoints-1 &amp;&amp; segment&gt;</a>=0 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>&gt;=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>+1]) <span class="comment">//We&#39;re still in the same place!</span></div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> {</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> }</div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">//Now check to see if it&#39;s the segment below it</span></div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> &gt;= 1 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment&lt;=nPoints &amp;&amp; xvar&gt;</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>-1] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>])</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> {</div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>--;</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="comment">//Okay what if we&#39;re above it</span></div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment &lt;= nPoints-2 &amp;&amp; segment&gt;</a>=0 &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>&gt;=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>+1] &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>+2])</div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>++;</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> }</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a> &lt;= <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[0])</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> {</div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>=0;</div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// If the variation is above the highest saved spline point</span></div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a> &gt;= <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[nPoints - 1])</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> {</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// Yes, the -2 is indeed correct, see TSpline.cxx:814 and //see: https://savannah.cern.ch/bugs/?71651</span></div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHigh</a>;</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// If the variation is between the maximum and minimum, perform a binary search</span></div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="comment">//Now we resort to binary search!</span></div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> {</div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>=0;</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// The top point we&#39;ve got</span></div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHalf</a> = 0;</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// While there is still a difference in the points (we haven&#39;t yet found the segment)</span></div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// This is a binary search, incrementing segment and decrementing kHalf until we&#39;ve found the segment</span></div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">while</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHigh</a> - <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> &gt; 1)</div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> {</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// Increment the half-step</span></div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHalf</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHigh</a>) / 2;</div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// If our variation is above the kHalf, set the segment to kHalf</span></div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a> &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHalf</a>])</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> {</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHalf</a>;</div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// Else move kHigh down</span></div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> }</div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> {</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHigh</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">kHalf</a>;</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> } <span class="comment">// End the while: we&#39;ve now done our binary search</span></div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> } <span class="comment">// End the else: we&#39;ve now found our point</span></div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> &gt;= nPoints - 1 &amp;&amp; nPoints &gt; 1){</div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a> = nPoints - 2;}</div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="comment">// Save the segment for the ith parameter</span></div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segment</a>;</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// std::cout &lt;&lt; &quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span>}</div> +</div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00258" data-start="{" data-end="}"> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba"> 258</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">splineFDBase::calcWeights</a>()</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span>{</div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="preprocessor"> #ifdef MULTITHREAD</span></div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="preprocessor"> #pragma omp parallel for</span><span class="comment">// schedule(dynamic)</span></div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><span class="preprocessor"> #endif</span></div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c">uniquecoeffindices</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a>++)</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> {</div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a> = <a class="code hl_variable" href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c">uniquecoeffindices</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iCoeff</a>];</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">uniqueIndex</a>=<a class="code hl_variable" href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">uniquesplinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>];</div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">currentsegment</a>=<a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">uniqueIndex</a>];</div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a> = <a class="code hl_variable" href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187">coeffindexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">currentsegment</a>;</div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// These are what we can extract from the TSpline3</span></div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> x = <a class="code hl_variable" href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">xcoeff_arr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a>];</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> y = <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>[(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a>)*4+<a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be">kCoeffY</a>];</div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a> = <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>[(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a>)*4+<a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc">kCoeffB</a>];</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a> = <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>[(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a>)*4+<a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e">kCoeffC</a>];</div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a> = <a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>[(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">segCoeff</a>)*4+<a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0">kCoeffD</a>];</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// Get the variation for this reconfigure for the ith parameter</span></div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a> = <a class="code hl_variable" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">xVarArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">uniqueIndex</a>];</div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// The Delta(x)</span></div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xvar</a> - x;</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="comment">//Speedy 1% time boost https://en.cppreference.com/w/c/numeric/math/fma (see ND code!)</span></div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">weight</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fmaf</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fmaf</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fmaf</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a>), <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>), y); </div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="comment">//This is the speedy version of writing dx^3+b*dx^2+c*dx+d</span></div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">weight</a>&lt;0){<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">weight</a>=0;} <span class="comment">//Stops is getting negative weights</span></div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <a class="code hl_variable" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">weightvec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">weight</a>);</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> }</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span>}</div> +</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00297" data-start="{" data-end="}"> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704"> 297</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704">splineFDBase::BuildSampleIndexingArray</a>(std::string SampleName)</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><span class="comment">//Creates an array to be filled with monolith indexes for each sample (allows for indexing between 7D binning and 1D Vector)</span></div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="comment">//Only need 1 indexing array everything else interfaces with this to get binning properties</span></div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span>{ </div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = <a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(SampleName);</div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nSplineSysts</a> = <a class="code hl_variable" href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">nSplineParams</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>];</div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChannels</a> = <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>];</div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt;&gt;&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_OscChan</a>;</div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nOscChannels</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> { <span class="comment">// Loop over oscillation channels</span></div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;int &gt;&gt;&gt;&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Syst</a>;</div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nSplineSysts</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> std::vector&lt;std::vector&lt;std::vector&lt;std::vector&lt;int &gt;&gt;&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Mode</a>;</div> +<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nModesInSyst</a> = <a class="code hl_variable" href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b">SplineModeVecs</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size();</div> +<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nModesInSyst</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>++)</div> +<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> { <span class="comment">// Loop over modes</span></div> +<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> std::vector&lt;std::vector&lt;std::vector&lt;int &gt;&gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var1</a>;</div> +<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt; (<a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][0])-&gt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetNbins</a>(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>++)</div> +<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> { <span class="comment">// Loop over first dimension</span></div> +<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> std::vector&lt;std::vector&lt;int &gt;&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var2</a>;</div> +<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt; (<a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][1])-&gt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetNbins</a>(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>++)</div> +<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> { <span class="comment">// Loop over second dimension</span></div> +<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> std::vector&lt;int&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var3</a>;</div> +<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt; (<a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][2])-&gt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetNbins</a>(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>++)</div> +<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> { <span class="comment">// Loop over third dimension</span></div> +<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var3</a>.push_back(0); <span class="comment">//Don&#39;t start counting yet!</span></div> +<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> } <span class="comment">// end iVar3 loop</span></div> +<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var2</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var3</a>);</div> +<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> } <span class="comment">// end iVar2 loop</span></div> +<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var1</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var2</a>);</div> +<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> } <span class="comment">// end iVar1 loop</span></div> +<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Mode</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Var1</a>);</div> +<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> } <span class="comment">// end of iMode loop</span></div> +<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Syst</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Mode</a>);</div> +<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> } <span class="comment">// end of iOscChan loop</span></div> +<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_OscChan</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_Syst</a>);</div> +<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> } <span class="comment">// end of iSyst loop</span></div> +<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">indexvec_OscChan</a>);</div> +<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span>}</div> +</div> +<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div> +<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00340" data-start="{" data-end="}"> +<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b"> 340</a></span>std::vector&lt;TAxis *&gt; <a class="code hl_function" href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b">splineFDBase::FindSplineBinning</a>(std::string FileName, std::string SampleName)</div> +<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>{</div> +<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> std::vector&lt;TAxis *&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>;</div> +<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=<a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(SampleName);</div> +<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div> +<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>(FileName.c_str());</div> +<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a> || <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a>-&gt;IsZombie())</div> +<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> {</div> +<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;File &quot;</span> &lt;&lt; FileName &lt;&lt; <span class="stringliteral">&quot; not found&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;This is caused by something here! &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> }</div> +<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div> +<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Finding binning for:&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> std::cout &lt;&lt; FileName &lt;&lt; std::endl;</div> +<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div> +<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist3D</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div> +<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2F</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist2D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH3F</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div> +<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObject</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Obj</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a>-&gt;Get(<span class="stringliteral">&quot;dev_tmp_0_0&quot;</span>);</div> +<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Obj</a>)</div> +<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> {</div> +<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Error: could not find dev_tmp_0_0 in spline file. Spline binning will not be set!&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;FileName: &quot;</span> &lt;&lt; FileName &lt;&lt; std::endl;</div> +<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;0_0, I&#39;m here! &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> }</div> +<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div> +<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Obj</a>-&gt;IsA() == TH2F::Class())</div> +<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> {</div> +<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div> +<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Obj</a>-&gt;IsA() == TH3F::Class())</div> +<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> {</div> +<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist3D</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> }</div> +<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> </div> +<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a> &amp;&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist3D</a>)</div> +<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> {</div> +<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Object inherits from both TH2D and TH3D - Odd&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> }</div> +<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a> &amp;&amp; !<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist3D</a>)</div> +<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> {</div> +<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Object doesn&#39;t inherit from either TH2D and TH3D - Odd A&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> }</div> +<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div> +<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a>)</div> +<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> {</div> +<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] != 2)</div> +<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> {</div> +<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to load a 2D spline template when nDim=&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> }</div> +<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist2D</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH2F</a> *)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a>-&gt;Get(<span class="stringliteral">&quot;dev_tmp_0_0&quot;</span>);</div> +<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> }</div> +<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist3D</a>)</div> +<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> {</div> +<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] != 3)</div> +<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> {</div> +<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Trying to load a 3D spline template when nDim=&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> }</div> +<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TH3F</a> *)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a>-&gt;Get(<span class="stringliteral">&quot;dev_tmp_0_0&quot;</span>);</div> +<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> }</div> +<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> </div> +<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nDummyBins</a> = 1;</div> +<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyEdges</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[2];</div> +<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyEdges</a>[0] = -1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e15</a>;</div> +<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyEdges</a>[1] = 1<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">e15</a>;</div> +<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyAxis</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nDummyBins</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyEdges</a>);</div> +<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div> +<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] == 2)</div> +<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> {</div> +<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist2D</a>-&gt;GetXaxis())-&gt;Clone());</div> +<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist2D</a>-&gt;GetYaxis())-&gt;Clone());</div> +<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyAxis</a>)-&gt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Clone</a>());</div> +<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> }</div> +<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] == 3)</div> +<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> {</div> +<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a>-&gt;GetXaxis())-&gt;Clone());</div> +<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a>-&gt;GetYaxis())-&gt;Clone());</div> +<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.push_back((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a>-&gt;GetZaxis())-&gt;Clone());</div> +<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> }</div> +<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> {</div> +<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Number of dimensions not valid! Given:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> }</div> +<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> </div> +<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a>++)</div> +<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> {</div> +<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Stored Var &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a> &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; <a class="code hl_function" href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2">getDimLabel</a>(<a class="code hl_variable" href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">BinningOpts</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>], <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a>) &lt;&lt; <span class="stringliteral">&quot;) Spline Binning for sample &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <a class="code hl_function" href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593">PrintBinning</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iAxis</a>]);</div> +<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> }</div> +<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div> +<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">//This could be NULL if 2D</span></div> +<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isHist2D</a>){</div> +<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist2D</a>;</div> +<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> } <span class="keywordflow">else</span> {</div> +<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Hist3D</a>;</div> +<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> }</div> +<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div> +<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">File</a>-&gt;Close();</div> +<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DummyAxis</a>;</div> +<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVec</a>;</div> +<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span>}</div> +</div> +<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div> +<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div> +<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div> +<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00461" data-start="{" data-end="}"> +<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed"> 461</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed">splineFDBase::CountNumberOfLoadedSplines</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NonFlat</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Verbosity</a>)</div> +<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span>{</div> +<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_NonFlat</a> = 0;</div> +<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_All</a> = 0;</div> +<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_NonFlat</a> = 0;</div> +<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_All</a> = 0;</div> +<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> </div> +<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_NonFlat</a> = 0;</div> +<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_All</a> = 0;</div> +<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> std::string SampleName = <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>];</div> +<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> { <span class="comment">// Loop over oscillation channels</span></div> +<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>++)</div> +<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> { <span class="comment">// Loop over modes</span></div> +<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>++)</div> +<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> { <span class="comment">// Loop over first dimension</span></div> +<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>++)</div> +<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> { <span class="comment">// Loop over second dimension</span></div> +<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>++)</div> +<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> { <span class="comment">// Loop over third dimension</span></div> +<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b">isValidSplineIndex</a>(SampleName, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>))</div> +<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> {</div> +<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a> = <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>];</div> +<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>)</div> +<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> {</div> +<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_NonFlat</a> += 1;</div> +<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> }</div> +<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_All</a> += 1;</div> +<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> }</div> +<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> }</div> +<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div> +<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> }</div> +<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> }</div> +<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> }</div> +<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> }</div> +<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Verbosity</a> &gt; 0)</div> +<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> {</div> +<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> std::cout &lt;&lt; std::setw(10) &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; <span class="stringliteral">&quot; has &quot;</span> &lt;&lt; std::setw(10) &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_All</a> &lt;&lt; <span class="stringliteral">&quot; splines, of which &quot;</span> &lt;&lt; std::setw(10) &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_NonFlat</a> &lt;&lt; <span class="stringliteral">&quot; are not flat&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div> +<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> </div> +<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_NonFlat</a> += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_NonFlat</a>;</div> +<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_All</a> += <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleCounter_All</a>;</div> +<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> }</div> +<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div> +<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Verbosity</a> &gt; 0)</div> +<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> {</div> +<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Total number of splines loaded:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_All</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Total number of non-flat splines loaded:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_NonFlat</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> }</div> +<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> </div> +<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NonFlat</a>)</div> +<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> {</div> +<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_NonFlat</a>;</div> +<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> }</div> +<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> {</div> +<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FullCounter_All</a>;</div> +<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> }</div> +<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span>}</div> +</div> +<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div> +<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00527" data-start="{" data-end="}"> +<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28"> 527</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28">splineFDBase::PrepForReweight</a>()</div> +<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span>{</div> +<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> </div> +<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> std::vector&lt;TSpline3_red *&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">UniqueSystSplines</a>;</div> +<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div> +<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="comment">// DB Find all the Unique systs across each sample and oscillation channel</span></div> +<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="comment">// This assumes that each occurence of the same systematic spline has the same knot spacing</span></div> +<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="comment">// Which is a reasonable assumption for the current implementation of spline evaluations</span></div> +<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][0].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SystName</a> = <a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>];</div> +<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundSyst</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> </div> +<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="comment">//ETA - this always seems to be empty to begin with??</span></div> +<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="comment">//so this loop never gets used?</span></div> +<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iFoundSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iFoundSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iFoundSyst</a>++)</div> +<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> {</div> +<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SystName</a> == <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iFoundSyst</a>])</div> +<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> {</div> +<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundSyst</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> }</div> +<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> }</div> +<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundSyst</a>)</div> +<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> {</div> +<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SystName</a>);</div> +<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> </div> +<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="comment">//This is all basically to check that you have some resposne from a spline</span></div> +<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="comment">//systematic somewhere</span></div> +<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> { <span class="comment">// Loop over oscillation channels</span></div> +<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>++)</div> +<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> { <span class="comment">// Loop over modes</span></div> +<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>++)</div> +<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> { <span class="comment">// Loop over first dimension</span></div> +<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>++)</div> +<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> { <span class="comment">// Loop over second dimension</span></div> +<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>++)</div> +<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> { <span class="comment">// Loop over third dimension</span></div> +<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>=<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>];</div> +<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>)</div> +<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> {</div> +<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">UniqueSystSplines</a>.push_back(<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]);</div> +<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <a class="code hl_variable" href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6">UniqueSystIndices</a>.push_back(<a class="code hl_variable" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">SplineParsIndex</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>]);</div> +<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> }</div> +<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> {</div> +<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> }</div> +<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> }<span class="comment">//3D loop end</span></div> +<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> {</div> +<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> }</div> +<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> }<span class="comment">//2D loop end</span></div> +<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> {</div> +<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> }</div> +<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> }<span class="comment">//1D loop end</span></div> +<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> {</div> +<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> }</div> +<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> }<span class="comment">//mode loop end</span></div> +<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> {</div> +<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> }</div> +<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> }<span class="comment">//osc loop end</span></div> +<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div> +<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">FoundNonFlatSpline</a>)</div> +<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> {</div> +<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SystName</a> &lt;&lt; <span class="stringliteral">&quot; syst has no response in sample &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Whilst this isn&#39;t neccessarily a problem, it seems odd&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">continue</span>;</div> +<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> }</div> +<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> }</div> +<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> }<span class="comment">//Syst loop end</span></div> +<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> }</div> +<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div> +<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> </div> +<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">UniqueSystSplines</a>.size();</div> +<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> </div> +<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="comment">// DB Find the number of splines knots which assumes each instance of the syst has the same number of knots</span></div> +<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>.resize(<a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>);</div> +<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>.resize(<a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>);</div> +<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <a class="code hl_variable" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">UniqueSystXPts</a>.resize(<a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>);</div> +<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <a class="code hl_variable" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">xVarArray</a>=<span class="keyword">new</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>[<a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>];</div> +<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> </div> +<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>++)</div> +<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> {</div> +<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">UniqueSystSplines</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]-&gt;GetNp();</div> +<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <a class="code hl_variable" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">UniqueSystXPts</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>].resize(<a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]);</div> +<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKnot</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKnot</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKnot</a>++)</div> +<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> {</div> +<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xPoint</a> = -999;</div> +<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yPoint</a> = -999;</div> +<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">UniqueSystSplines</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]-&gt;GetKnot(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKnot</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xPoint</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yPoint</a>);</div> +<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xPoint</a> == -999 || <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yPoint</a> == -999)</div> +<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> {</div> +<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Something has gone wrong in the knot finding&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> }</div> +<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <a class="code hl_variable" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">UniqueSystXPts</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iKnot</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xPoint</a>;</div> +<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div> +<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>] = -999;</div> +<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <a class="code hl_variable" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">xVarArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSpline</a>]=0;</div> +<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> }</div> +<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div> +<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> </div> +<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> std::cout &lt;&lt; <span class="stringliteral">&quot;nUniqueSysts:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a> &lt;&lt; <span class="stringliteral">&quot; -----------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> </div> +<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> std::cout &lt;&lt; std::setw(15) &lt;&lt; <span class="stringliteral">&quot;Spline Index&quot;</span></div> +<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> &lt;&lt; <span class="stringliteral">&quot; | &quot;</span> &lt;&lt; std::setw(20) &lt;&lt; <span class="stringliteral">&quot;Syst Name&quot;</span></div> +<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> &lt;&lt; <span class="stringliteral">&quot; | &quot;</span> &lt;&lt; std::setw(6) &lt;&lt; <span class="stringliteral">&quot;nKnots&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> std::cout &lt;&lt; <span class="stringliteral">&quot;-----------------------------------------------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>++)</div> +<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> {</div> +<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> std::cout &lt;&lt; std::setw(15) &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a> &lt;&lt; <span class="stringliteral">&quot; | &quot;</span> &lt;&lt; std::setw(20) &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>] &lt;&lt; <span class="stringliteral">&quot; | &quot;</span> &lt;&lt; std::setw(6) &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iUniqueSyst</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> }</div> +<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> </div> +<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> </div> +<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> </div> +<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="comment">//ETA</span></div> +<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="comment">//Isn&#39;t this just doing what CountNumberOfLoadedSplines() does?</span></div> +<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_FlatSplines</a> = 0;</div> +<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_All</a> = 0;</div> +<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="comment">// DB Now actually loop over splines to determine which are all NULL</span></div> +<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> { <span class="comment">// Loop over oscillation channels</span></div> +<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> { <span class="comment">// Loop over systematics</span></div> +<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>++)</div> +<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> { <span class="comment">// Loop over modes</span></div> +<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> <span class="comment">//bool isFlat = false;</span></div> +<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>++)</div> +<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> { <span class="comment">// Loop over first dimension</span></div> +<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>++)</div> +<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> { <span class="comment">// Loop over second dimension</span></div> +<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>++)</div> +<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> { <span class="comment">// Loop over third dimension</span></div> +<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>=<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>];</div> +<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] != <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>)</div> +<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> {</div> +<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_All</a> += 1;</div> +<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> } <span class="keywordflow">else</span>{</div> +<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_FlatSplines</a> += 1;</div> +<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_All</a> += 1;</div> +<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> }</div> +<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> }</div> +<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> }</div> +<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> }</div> +<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> }</div> +<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> }</div> +<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> }</div> +<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> }</div> +<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// We need to grab the maximum number of knots</span></div> +<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> </div> +<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Number of combinations of Sample, OscChan, Syst and Mode which have entirely flat response:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_FlatSplines</a> &lt;&lt; <span class="stringliteral">&quot; / &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nCombinations_All</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span>}</div> +</div> +<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> </div> +<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span><span class="comment">// Rather work with spline coefficients in the splines, let&#39;s copy ND and use coefficient arrays</span></div> +<div class="foldopen" id="foldopen00700" data-start="{" data-end="}"> +<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae"> 700</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae">splineFDBase::getSplineCoeff_SepMany</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>, <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>* &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>, <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>* &amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>){</div> +<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div> +<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <span class="comment">// Initialise all arrays to 1.0</span></div> +<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordtype">int</span> nPoints;</div> +<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="comment">//No point evalutating a flat spline</span></div> +<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> </div> +<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> nPoints = <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]-&gt;GetNp();</div> +<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div> +<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; nPoints; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++) {</div> +<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = 1.0;</div> +<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; 4; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++) {</div> +<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = 1.0;</div> +<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> }</div> +<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> }</div> +<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div> +<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;nPoints; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++){</div> +<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <span class="comment">// Spline coefficients to be</span></div> +<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> x = -999.99;</div> +<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> y = -999.99;</div> +<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a> = -999.99;</div> +<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a> = -999.99;</div> +<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a> = -999.99;</div> +<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>]-&gt;GetCoeff(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>, x, y, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a>);</div> +<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="comment">//Let&#39;s save some memory and store them as floats! (It&#39;s a surprise tool that will help with GPU later)</span></div> +<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]=<a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(x); </div> +<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> </div> +<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="comment">//Might as well copy ND here and </span></div> +<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(x);</div> +<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4] = <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(y); <span class="comment">// 4 because manyArray stores y,b,c,d</span></div> +<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+1] = <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>);</div> +<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+2] = <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a>);</div> +<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+3] = <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a>);</div> +<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> </div> +<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">if</span>((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] == -999) | (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4] == -999) | (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+1] == -999) | (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+2] == -999) | (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+3] == -999)){</div> +<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;*********** Bad params in getSplineCoeff_SepMany() ************&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;pre cast to __float__ (x, y, b, c, d) = &quot;</span>&lt;&lt;x&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;y&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">b</a>&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c</a>&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">d</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;post cast to float (x, y, b, c, d) = &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+1]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+2]&lt;&lt;<span class="stringliteral">&quot;, &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>*4+3]&lt;&lt;std::endl;</div> +<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> std::cerr&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot;::&quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;***************************************************************&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> }</div> +<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> }</div> +<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="comment">//We now clean up the splines!</span></div> +<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keyword">delete</span> <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>];</div> +<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span>}</div> +</div> +<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> </div> +<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00748" data-start="{" data-end="}"> +<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb"> 748</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb">splineFDBase::getNDim</a>(<span class="keywordtype">int</span> BinningOpt)</div> +<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span>{</div> +<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = -1;</div> +<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div> +<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">switch</span> (BinningOpt)</div> +<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> {</div> +<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">case</span> 0:</div> +<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = 2;</div> +<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">case</span> 1:</div> +<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">case</span> 2:</div> +<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">case</span> 3:</div> +<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">case</span> 4:</div> +<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = 3;</div> +<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Unrecognised BinningOpt = &quot;</span> &lt;&lt; BinningOpt &lt;&lt; std::endl;</div> +<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> }</div> +<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> </div> +<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a>;</div> +<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span>}</div> +</div> +<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> </div> +<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span><span class="comment">//ETA - this may need to be virtual and then we can define this in the experiment.</span></div> +<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span><span class="comment">//Equally though could just use KinematicVariable to map back</span></div> +<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00775" data-start="{" data-end="}"> +<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2"> 775</a></span><a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a> <a class="code hl_function" href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2">splineFDBase::getDimLabel</a>(<span class="keywordtype">int</span> BinningOpt, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>)</div> +<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span>{</div> +<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis &lt; 0 || Axis &gt;</a>= 3)</div> +<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> {</div> +<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Invalid axis:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> }</div> +<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> </div> +<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a>;</div> +<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">switch</span> (BinningOpt)</div> +<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> {</div> +<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">case</span> 0:</div> +<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 0)</div> +<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;ETrue&quot;</span>;</div> +<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 1)</div> +<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Erec&quot;</span>;</div> +<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 2)</div> +<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Dummy&quot;</span>;</div> +<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">case</span> 1:</div> +<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 0)</div> +<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;ETrue&quot;</span>;</div> +<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 1)</div> +<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Momentum&quot;</span>;</div> +<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 2)</div> +<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Theta&quot;</span>;</div> +<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">case</span> 2:</div> +<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 0)</div> +<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;ETrue&quot;</span>;</div> +<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 1)</div> +<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Erec&quot;</span>;</div> +<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 2)</div> +<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Theta&quot;</span>;</div> +<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">case</span> 3:</div> +<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 0)</div> +<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;ETrue&quot;</span>;</div> +<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 1)</div> +<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Erec&quot;</span>;</div> +<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 2)</div> +<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Q2&quot;</span>;</div> +<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">case</span> 4:</div> +<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 0)</div> +<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;ETrue&quot;</span>;</div> +<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 1)</div> +<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;Momentum&quot;</span>;</div> +<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a> == 2)</div> +<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a> = <span class="stringliteral">&quot;CosineZenith&quot;</span>;</div> +<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">default</span>:</div> +<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Unrecognised BinningOpt = &quot;</span> &lt;&lt; BinningOpt &lt;&lt; std::endl;</div> +<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> }</div> +<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> </div> +<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ReturnVal</a>;</div> +<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span>}</div> +</div> +<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> </div> +<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span><span class="comment">//Returns sample index in </span></div> +<div class="foldopen" id="foldopen00836" data-start="{" data-end="}"> +<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca"> 836</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">splineFDBase::getSampleIndex</a>(std::string SampleName){</div> +<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleIndex</a> = -1;</div> +<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> {</div> +<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">if</span> (SampleName == <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>])</div> +<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> {</div> +<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleIndex</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>;</div> +<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> }</div> +<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> }</div> +<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleIndex</a> == -1)</div> +<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> {</div> +<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Sample name not found : &quot;</span>&lt;&lt;SampleName &lt;&lt; std::endl;</div> +<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> std::cerr &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> }</div> +<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="keywordflow">return</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">SampleIndex</a>;</div> +<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span>}</div> +</div> +<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> </div> +<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00855" data-start="{" data-end="}"> +<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90"> 855</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90">splineFDBase::PrintSampleDetails</a>(std::string SampleName)</div> +<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span>{</div> +<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> </div> +<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = <a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(SampleName);</div> +<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> </div> +<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Details about sample: &quot;</span> &lt;&lt; std::setw(20) &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; std::setw(35) &lt;&lt; <span class="stringliteral">&quot;Binning Option&quot;</span></div> +<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">BinningOpts</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; std::setw(35) &lt;&lt; <span class="stringliteral">&quot;Dimension&quot;</span></div> +<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; std::setw(35) &lt;&lt; <span class="stringliteral">&quot;DetID&quot;</span></div> +<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15">DetIDs</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; std::setw(35) &lt;&lt; <span class="stringliteral">&quot;Number of Spline Params&quot;</span></div> +<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">nSplineParams</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; std::setw(35) &lt;&lt; <span class="stringliteral">&quot;Number of Oscillation Channels&quot;</span></div> +<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span>}</div> +</div> +<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> </div> +<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00875" data-start="{" data-end="}"> +<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc"> 875</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc">splineFDBase::PrintArrayDetails</a>(std::string SampleName)</div> +<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span>{</div> +<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = <a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(SampleName);</div> +<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a> = <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size();</div> +<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Sample &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt;&lt; <span class="stringliteral">&quot; has &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a> &lt;&lt; <span class="stringliteral">&quot; oscillation channels&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> </div> +<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> {</div> +<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keywordtype">int</span> nSysts = <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size();</div> +<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Oscillation channel &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt;&lt; <span class="stringliteral">&quot; has &quot;</span> &lt;&lt; nSysts &lt;&lt; <span class="stringliteral">&quot; systematics&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div> +<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span>}</div> +</div> +<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> </div> +<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00890" data-start="{" data-end="}"> +<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81"> 890</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81">splineFDBase::PrintArrayDimension</a>()</div> +<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span>{</div> +<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Array dimensions..&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> </div> +<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> std::cout &lt;&lt; std::setw(20) &lt;&lt; <span class="stringliteral">&quot;nSamples:&quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> </div> +<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> std::cout &lt;&lt; std::setw(20) &lt;&lt; <span class="stringliteral">&quot;nOscChans:&quot;</span>;</div> +<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> {</div> +<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> std::cout &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div> +<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> }</div> +<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> </div> +<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> std::cout &lt;&lt; std::setw(20) &lt;&lt; <span class="stringliteral">&quot;nSysts:&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> {</div> +<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span></div> +<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> &lt;&lt; <span class="stringliteral">&quot;Sample:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;</div> +<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> {</div> +<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> std::cout &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div> +<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> }</div> +<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> }</div> +<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> </div> +<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> std::cout &lt;&lt; std::setw(20) &lt;&lt; <span class="stringliteral">&quot;nModes:&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>++)</div> +<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> {</div> +<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span></div> +<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> &lt;&lt; <span class="stringliteral">&quot;Sample:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span></div> +<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> &lt;&lt; <span class="stringliteral">&quot;--------------------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>++)</div> +<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> {</div> +<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t\t&quot;</span></div> +<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> &lt;&lt; <span class="stringliteral">&quot;OscChan:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;</div> +<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>++)</div> +<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> {</div> +<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> std::cout &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div> +<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> }</div> +<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> }</div> +<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> }</div> +<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> std::cout &lt;&lt; <span class="stringliteral">&quot;#----------------------------------------------------------------------------------------------------------------------------------#&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span>}</div> +</div> +<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div> +<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen00943" data-start="{" data-end="}"> +<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b"> 943</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b">splineFDBase::isValidSplineIndex</a>(std::string SampleName, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>)</div> +<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span>{</div> +<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> </div> +<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>=<a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(SampleName);</div> +<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> </div> +<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample &lt; 0 || iSample &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size())</div> +<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> {</div> +<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Sample index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> }</div> +<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> </div> +<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan &lt; 0 || iOscChan &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> {</div> +<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;OscChan index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> }</div> +<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> </div> +<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst &lt; 0 || iSyst &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> {</div> +<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Syst index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> }</div> +<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> </div> +<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode &lt; 0 || iMode &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> {</div> +<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Mode index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> }</div> +<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> </div> +<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1 &lt; 0 || iVar1 &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> {</div> +<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Var1 index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> }</div> +<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> </div> +<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2 &lt; 0 || iVar2 &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> {</div> +<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Var2 index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> }</div> +<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> </div> +<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3 &lt; 0 || iVar3 &gt;</a>= (<span class="keywordtype">int</span>)<a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>())</div> +<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> {</div> +<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Var3 index is invalid! 0 &lt;= Index &lt; &quot;</span> &lt;&lt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>].size() &lt;&lt; std::endl;</div> +<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a> = <span class="keyword">false</span>;</div> +<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> }</div> +<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> </div> +<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isValid</a>)</div> +<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> {</div> +<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iSample:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSample</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iOscChan:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iSyst:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iMode:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iVar1:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iVar2:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Given iVar3:&quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> std::cerr &lt;&lt; <span class="stringliteral">&quot;Come visit me at : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__FILE__</a>&lt;&lt;<span class="stringliteral">&quot; : &quot;</span>&lt;&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">__LINE__</a>&lt;&lt;std::endl;</div> +<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">throw</span>;</div> +<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> }</div> +<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> </div> +<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span>}</div> +</div> +<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> </div> +<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span><span class="comment">//****************************************</span></div> +<div class="foldopen" id="foldopen01009" data-start="{" data-end="}"> +<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593"> 1009</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593">splineFDBase::PrintBinning</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>)</div> +<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span><span class="comment">//****************************************</span></div> +<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span>{</div> +<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NBins</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>-&gt;GetNbins();</div> +<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BinEdges</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>-&gt;GetXbins()-&gt;GetArray();</div> +<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> </div> +<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;</div> +<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a> &lt; (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NBins</a> + 1); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>++)</div> +<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> {</div> +<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> std::cout &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">BinEdges</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iBin</a>] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div> +<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> }</div> +<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> std::cout &lt;&lt; std::endl;</div> +<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span>}</div> +</div> +<div class="ttc" id="aGetPenaltyTerm_8cpp_html_a439227feff9d7f55384e8780cfc2eb82"><div class="ttname"><a href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a></div><div class="ttdeci">int size</div><div class="ttdef"><b>Definition</b> <a href="GetPenaltyTerm_8cpp_source.html#l00041">GetPenaltyTerm.cpp:41</a></div></div> +<div class="ttc" id="aStructs_8h_html_a89c686bb1b76a3447db0c4a52e1eab0c"><div class="ttname"><a href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a></div><div class="ttdeci">#define __float__</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l00013">Structs.h:13</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html_a17fd81a6df482370d8a66098a257b756"><div class="ttname"><a href="classcovarianceBase.html#a17fd81a6df482370d8a66098a257b756">covarianceBase::calcReWeight</a></div><div class="ttdeci">double calcReWeight(const int bin)</div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00116">covarianceBase.h:116</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html"><div class="ttname"><a href="classcovarianceXsec.html">covarianceXsec</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8h_source.html#l00016">covarianceXsec.h:16</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a512a1a48b171fc65bdbccd7460171e51"><div class="ttname"><a href="classcovarianceXsec.html#a512a1a48b171fc65bdbccd7460171e51">covarianceXsec::GetSplineParsIndexFromDetID</a></div><div class="ttdeci">const std::vector&lt; int &gt; GetSplineParsIndexFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00317">covarianceXsec.cpp:317</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a59925cec0677ed7da99532ae5e320a30"><div class="ttname"><a href="classcovarianceXsec.html#a59925cec0677ed7da99532ae5e320a30">covarianceXsec::GetSplineModeVecFromDetID</a></div><div class="ttdeci">const std::vector&lt; std::vector&lt; int &gt; &gt; GetSplineModeVecFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00296">covarianceXsec.cpp:296</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a8196b6329ce89e607e90de8d472b5bb6"><div class="ttname"><a href="classcovarianceXsec.html#a8196b6329ce89e607e90de8d472b5bb6">covarianceXsec::GetFDSplineFileParsNamesFromDetID</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; GetFDSplineFileParsNamesFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00226">covarianceXsec.cpp:226</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html_a9b94545b5fa89c27a07c03f856ebcf60"><div class="ttname"><a href="classcovarianceXsec.html#a9b94545b5fa89c27a07c03f856ebcf60">covarianceXsec::GetNumSplineParamsFromDetID</a></div><div class="ttdeci">int GetNumSplineParamsFromDetID(int DetID)</div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8cpp_source.html#l00179">covarianceXsec.cpp:179</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a00c0e93b4c4799ffacaa58578e5dcf6b"><div class="ttname"><a href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b">splineFDBase::FindSplineBinning</a></div><div class="ttdeci">std::vector&lt; TAxis * &gt; FindSplineBinning(std::string FileName, std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00340">splineFDBase.cpp:340</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a03ae6acb97cd3e9b335dce7fbebbf7d2"><div class="ttname"><a href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2">splineFDBase::getDimLabel</a></div><div class="ttdeci">TString getDimLabel(int BinningOpt, int Axis)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00775">splineFDBase.cpp:775</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0570b0b59ff6ba13af94c64c7271202d"><div class="ttname"><a href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">splineFDBase::SplineParsIndex</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; SplineParsIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00091">splineFDBase.h:91</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a089883fce1a3f4180e3156215fb9c38a"><div class="ttname"><a href="classsplineFDBase.html#a089883fce1a3f4180e3156215fb9c38a">splineFDBase::splineFDBase</a></div><div class="ttdeci">splineFDBase(covarianceXsec *xsec_=NULL)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00004">splineFDBase.cpp:4</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a09320defd042ffffb7bacda58133f12a"><div class="ttname"><a href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">splineFDBase::weightvec_Monolith</a></div><div class="ttdeci">std::vector&lt; double &gt; weightvec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00123">splineFDBase.h:123</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0bfc616fab953333e6e938de52ce3bed"><div class="ttname"><a href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed">splineFDBase::CountNumberOfLoadedSplines</a></div><div class="ttdeci">int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00461">splineFDBase.cpp:461</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0d42cbfc22f21906264af285fd57b1af"><div class="ttname"><a href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">splineFDBase::nUniqueSysts</a></div><div class="ttdeci">int nUniqueSysts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00099">splineFDBase.h:99</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a122a0e5ffd3519ba6b2ffa07987e7273"><div class="ttname"><a href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">splineFDBase::FindSplineSegment</a></div><div class="ttdeci">void FindSplineSegment()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00178">splineFDBase.cpp:178</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0">splineFDBase::kCoeffD</a></div><div class="ttdeci">@ kCoeffD</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e">splineFDBase::kCoeffC</a></div><div class="ttdeci">@ kCoeffC</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc">splineFDBase::kCoeffB</a></div><div class="ttdeci">@ kCoeffB</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be">splineFDBase::kCoeffY</a></div><div class="ttdeci">@ kCoeffY</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a16c36cced85ea629f01b05cf811a417d"><div class="ttname"><a href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">splineFDBase::manycoeff_arr</a></div><div class="ttdeci">__float__ * manycoeff_arr</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00121">splineFDBase.h:121</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a176d42bb137d3c8c3771eb1a4a8440c8"><div class="ttname"><a href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">splineFDBase::UniqueSystNKnots</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystNKnots</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00102">splineFDBase.h:102</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a2d19b4bd235644d4c6a1ca6d589be6ca"><div class="ttname"><a href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">splineFDBase::getSampleIndex</a></div><div class="ttdeci">int getSampleIndex(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00836">splineFDBase.cpp:836</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a2eb495f4d63c9e4ee10b97c47e982b28"><div class="ttname"><a href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28">splineFDBase::PrepForReweight</a></div><div class="ttdeci">void PrepForReweight()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00527">splineFDBase.cpp:527</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3b821b95c2db6063a9baa244b28aeaa6"><div class="ttname"><a href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6">splineFDBase::UniqueSystIndices</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystIndices</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00101">splineFDBase.h:101</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3f0b0ed4777802fa8ebc0bc9205cb8ed"><div class="ttname"><a href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">splineFDBase::UniqueSystXPts</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; __float__ &gt; &gt; UniqueSystXPts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00104">splineFDBase.h:104</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a4a39bce3ca988abd9e14d67120121fbb"><div class="ttname"><a href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">splineFDBase::xcoeff_arr</a></div><div class="ttdeci">__float__ * xcoeff_arr</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00120">splineFDBase.h:120</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a5619363447e607cd835c46d601b10675"><div class="ttname"><a href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">splineFDBase::SplineFileParPrefixNames</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::string &gt; &gt; SplineFileParPrefixNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00093">splineFDBase.h:93</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a62f37395f7b1eb73c3ad0a1204bb3c2d"><div class="ttname"><a href="classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d">splineFDBase::StripDuplicatedModes</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; int &gt; &gt; StripDuplicatedModes(std::vector&lt; std::vector&lt; int &gt; &gt; InputVector)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6b7aeec6d03dad01975582226b39632b"><div class="ttname"><a href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b">splineFDBase::SplineModeVecs</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; int &gt; &gt; &gt; SplineModeVecs</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00097">splineFDBase.h:97</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6c28400605049bdee229885c46463dcd"><div class="ttname"><a href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">splineFDBase::Dimensions</a></div><div class="ttdeci">std::vector&lt; int &gt; Dimensions</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00086">splineFDBase.h:86</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6d1872fe4be72c735bd55fa00e1674b8"><div class="ttname"><a href="classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8">splineFDBase::TransferToMonolith</a></div><div class="ttdeci">void TransferToMonolith()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00068">splineFDBase.cpp:68</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a78508c5d0d4ef09457beb723dc796208"><div class="ttname"><a href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">splineFDBase::SampleNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SampleNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00084">splineFDBase.h:84</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7a564f5748f16d97ebf1e1c300a1cc5c"><div class="ttname"><a href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c">splineFDBase::uniquecoeffindices</a></div><div class="ttdeci">std::vector&lt; int &gt; uniquecoeffindices</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00109">splineFDBase.h:109</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7f5b16b65dc7da748f20bdc803b7e593"><div class="ttname"><a href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593">splineFDBase::PrintBinning</a></div><div class="ttdeci">void PrintBinning(TAxis *Axis)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l01009">splineFDBase.cpp:1009</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7ff003d3c05fe8a6f9723557910b7a90"><div class="ttname"><a href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90">splineFDBase::PrintSampleDetails</a></div><div class="ttdeci">void PrintSampleDetails(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00855">splineFDBase.cpp:855</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a84ec9ea208503053b9735b1cb1bc417d"><div class="ttname"><a href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splineFDBase::splinevec_Monolith</a></div><div class="ttdeci">std::vector&lt; TSpline3_red * &gt; splinevec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00111">splineFDBase.h:111</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a891de87b873e079f6bbdb1355a9ff153"><div class="ttname"><a href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">splineFDBase::xsec</a></div><div class="ttdeci">covarianceXsec * xsec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00081">splineFDBase.h:81</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a9cf50f41f23cb14055170d9f1a0d55ae"><div class="ttname"><a href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae">splineFDBase::getSplineCoeff_SepMany</a></div><div class="ttdeci">void getSplineCoeff_SepMany(int splineindex, __float__ *&amp;xArray, __float__ *&amp;manyArray)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00700">splineFDBase.cpp:700</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa10670a64bbdef3ffd69f4b8f102fff3"><div class="ttname"><a href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">splineFDBase::nOscChans</a></div><div class="ttdeci">std::vector&lt; int &gt; nOscChans</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00089">splineFDBase.h:89</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa36e6889d054ad0f86f33a53dd3fe036"><div class="ttname"><a href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">splineFDBase::UniqueSystCurrSegment</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystCurrSegment</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00103">splineFDBase.h:103</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa37a0f892b96f6b0e3b6b7aa847e94cb"><div class="ttname"><a href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb">splineFDBase::getNDim</a></div><div class="ttdeci">int getNDim(int BinningOpt)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00748">splineFDBase.cpp:748</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa8a204355df78af3f79bf8f2815258d3"><div class="ttname"><a href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">splineFDBase::isflatarray</a></div><div class="ttdeci">bool * isflatarray</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00119">splineFDBase.h:119</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aaa699bd90abc662ce3af907733b3b704"><div class="ttname"><a href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704">splineFDBase::BuildSampleIndexingArray</a></div><div class="ttdeci">void BuildSampleIndexingArray(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00297">splineFDBase.cpp:297</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aaa6e9d15540bb20938f43d37f29c4fd4"><div class="ttname"><a href="classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4">splineFDBase::AddSample</a></div><div class="ttdeci">bool AddSample(std::string SampleName, int BinningOpt, int DetID, std::vector&lt; std::string &gt; OscChanFileNames)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00019">splineFDBase.cpp:19</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aacf850f4ec22e4f7338f243999ecc7dd"><div class="ttname"><a href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">splineFDBase::UniqueSystNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; UniqueSystNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00100">splineFDBase.h:100</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aad64c7c63db8ea676f86eb2279f04d40"><div class="ttname"><a href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">splineFDBase::nSplineParams</a></div><div class="ttdeci">std::vector&lt; int &gt; nSplineParams</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00088">splineFDBase.h:88</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ab1f9479d702cfee2d0e5ea7edd2aca81"><div class="ttname"><a href="classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81">splineFDBase::PrintArrayDimension</a></div><div class="ttdeci">void PrintArrayDimension()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00890">splineFDBase.cpp:890</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ab3a4e79bfe675a4070597557e6226e12"><div class="ttname"><a href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">splineFDBase::indexvec</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; int &gt; &gt; &gt; &gt; &gt; &gt; &gt; indexvec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00107">splineFDBase.h:107</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_abcff04fee3e6790a099a0df9dbee74c2"><div class="ttname"><a href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">splineFDBase::CoeffIndex</a></div><div class="ttdeci">int CoeffIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00115">splineFDBase.h:115</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ac5f4c7bfc06ab3bcc769be433ad4708e"><div class="ttname"><a href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">splineFDBase::BinningOpts</a></div><div class="ttdeci">std::vector&lt; int &gt; BinningOpts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00085">splineFDBase.h:85</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ad1fefa7f796f2a28a69f5336f5777bce"><div class="ttname"><a href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">splineFDBase::MonolithSize</a></div><div class="ttdeci">int MonolithSize</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00113">splineFDBase.h:113</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_addabdf30ee85c6975422c0ccf3f1844f"><div class="ttname"><a href="classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f">splineFDBase::FillSampleArray</a></div><div class="ttdeci">virtual void FillSampleArray(std::string SampleName, std::vector&lt; std::string &gt; OscChanFileNames)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_addec38a8493974ccc3ee16931d5b794a"><div class="ttname"><a href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">splineFDBase::MonolithIndex</a></div><div class="ttdeci">int MonolithIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00114">splineFDBase.h:114</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ae237cc1c6d97e35bf4f7f64e369a5781"><div class="ttname"><a href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">splineFDBase::uniquesplinevec_Monolith</a></div><div class="ttdeci">std::vector&lt; int &gt; uniquesplinevec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00124">splineFDBase.h:124</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ae66addf83262b03969d0b3b89737a42b"><div class="ttname"><a href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b">splineFDBase::isValidSplineIndex</a></div><div class="ttdeci">bool isValidSplineIndex(std::string SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00943">splineFDBase.cpp:943</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aeb743760ca4a477771132aaf0e334d15"><div class="ttname"><a href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15">splineFDBase::DetIDs</a></div><div class="ttdeci">std::vector&lt; int &gt; DetIDs</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00087">splineFDBase.h:87</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aee80975a1a2892b61fb27b2044e7c9bc"><div class="ttname"><a href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc">splineFDBase::PrintArrayDetails</a></div><div class="ttdeci">void PrintArrayDetails(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00875">splineFDBase.cpp:875</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af63885ddb6731f77808d029372e6b187"><div class="ttname"><a href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187">splineFDBase::coeffindexvec</a></div><div class="ttdeci">std::vector&lt; int &gt; coeffindexvec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00108">splineFDBase.h:108</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af71b65713518f42e59c543dbad5dab70"><div class="ttname"><a href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">splineFDBase::SplineBinning</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; TAxis * &gt; &gt; &gt; SplineBinning</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00092">splineFDBase.h:92</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af76579b8e880c4724e16888f23b418ba"><div class="ttname"><a href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">splineFDBase::calcWeights</a></div><div class="ttdeci">void calcWeights()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00258">splineFDBase.cpp:258</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af9a31bb05c30667ddd3c6056f742c8e5"><div class="ttname"><a href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">splineFDBase::xVarArray</a></div><div class="ttdeci">__float__ * xVarArray</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00118">splineFDBase.h:118</a></div></div> +<div class="ttc" id="asplineFDBase_8h_html"><div class="ttname"><a href="splineFDBase_8h.html">splineFDBase.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineFDBase_8h.html b/splineFDBase_8h.html new file mode 100644 index 00000000..c14065a2 --- /dev/null +++ b/splineFDBase_8h.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineFDBase.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> &#124; +<a href="#define-members">Macros</a> </div> + <div class="headertitle"><div class="title">splineFDBase.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;TH3F.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceXsec_8h_source.html">covariance/covarianceXsec.h</a>&quot;</code><br /> +</div> +<p><a href="splineFDBase_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsplineFDBase.html">splineFDBase</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:ae03212ae713477b2462720ff4d8abc30" id="r_ae03212ae713477b2462720ff4d8abc30"><td class="memItemLeft" align="right" valign="top">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="splineFDBase_8h.html#ae03212ae713477b2462720ff4d8abc30">__BAD_SPLINE__</a>&#160;&#160;&#160;123456789</td></tr> +<tr class="separator:ae03212ae713477b2462720ff4d8abc30"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Macro Definition Documentation</h2> +<a id="ae03212ae713477b2462720ff4d8abc30" name="ae03212ae713477b2462720ff4d8abc30"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae03212ae713477b2462720ff4d8abc30">&#9670;&#160;</a></span>__BAD_SPLINE__</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a> __BAD_SPLINE__&#160;&#160;&#160;123456789</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="splineFDBase_8h_source.html#l00004">4</a> of file <a class="el" href="splineFDBase_8h_source.html">splineFDBase.h</a>.</p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineFDBase_8h_source.html b/splineFDBase_8h_source.html new file mode 100644 index 00000000..90df27d9 --- /dev/null +++ b/splineFDBase_8h_source.html @@ -0,0 +1,292 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineFDBase.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineFDBase.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="splineFDBase_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#ifndef __BAD_SPLINE__</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"><a class="line" href="splineFDBase_8h.html#ae03212ae713477b2462720ff4d8abc30"> 4</a></span><span class="preprocessor">#define __BAD_SPLINE__ 123456789</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">//ROOT</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;TH3F.h&quot;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">//MaCh3</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceXsec_8h.html">covariance/covarianceXsec.h</a>&quot;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="foldopen" id="foldopen00013" data-start="{" data-end="};"> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classsplineFDBase.html"> 13</a></span><span class="keyword">class </span><a class="code hl_class" href="classsplineFDBase.html">splineFDBase</a></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>{</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="comment">//ETA - do all of these functions and members actually need to be public?</span></div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="comment">//splineFDBase(const char *spline, int nutype, int nevents, int DetID, covarianceXsec* xsec_cov = NULL); // constructor for etrue-var1 splines</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="comment">//splineFDBase(const char *spline, int nutype, int nevents, double BinningOpt, int DetID, covarianceXsec* xsec_cov = NULL); // constructor for etrue-var1-var2 splines</span></div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_class" href="classsplineFDBase.html">splineFDBase</a>(<a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xsec_</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>);</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aef7692f02d28abdcfc09b6ed6bdcabf2"> 20</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="classsplineFDBase.html#aef7692f02d28abdcfc09b6ed6bdcabf2">~splineFDBase</a>(){};</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a281be56a824e5057044e4ab1b073bc9d"> 21</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a281be56a824e5057044e4ab1b073bc9d">SetupSplines</a>();</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a91521064517b5e4f0232570e6746bdf7"> 22</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a91521064517b5e4f0232570e6746bdf7">SetupSplines</a>(<span class="keywordtype">int</span> BinningOpt);</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a0249bb22856a7a01b64b7828046801aa"> 24</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a0249bb22856a7a01b64b7828046801aa">FindUniqueModes</a>();</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="comment">//Spline Monolith things</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="comment">//Essential methods used externally</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="comment">//Move these to splineFDBase in core</span></div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4">AddSample</a>(std::string SampleName, <span class="keywordtype">int</span> BinningOpt, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">DetID</a>, std::vector&lt;std::string&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>);</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8">TransferToMonolith</a>(); </div> +<div class="foldopen" id="foldopen00031" data-start="{" data-end="}"> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a6e765571776f8affeca355a184fef11a"> 31</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a6e765571776f8affeca355a184fef11a">cleanUpMemory</a>(){</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="comment">//Call once everything&#39;s been allocated in samplePDFSKBase, cleans up junk from memory!</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="comment">//Not a huge saving but it&#39;s better than leaving everything up to the compiler</span></div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> std::cout&lt;&lt;<span class="stringliteral">&quot;Cleaning up spline memory&quot;</span>&lt;&lt;std::endl;</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.clear();</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>.shrink_to_fit();</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>.clear();</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>.shrink_to_fit();</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>.clear();</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>.shrink_to_fit();</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_variable" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">SplineParsIndex</a>.clear();</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_variable" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">SplineParsIndex</a>.shrink_to_fit();</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>.clear();</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>.shrink_to_fit();</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>.clear();</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>.shrink_to_fit();</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">delete</span> <a class="code hl_variable" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">isflatarray</a>;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div> +</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="comment">//Have to define this in your own class </span></div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f"> 52</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f">FillSampleArray</a>(std::string SampleName, std::vector&lt;std::string&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">OscChanFileNames</a>)=0;</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d"> 53</a></span> <span class="keyword">virtual</span> std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code hl_function" href="classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d">StripDuplicatedModes</a>(std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">InputVector</a>)=0;</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca"> 54</a></span> <span class="keyword">virtual</span> std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code hl_function" href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca">GetEventSplines</a>(std::string SampleName, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">EventMode</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Var1Val</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Var2Val</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Var3Val</a>)=0;</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> std::vector&lt;TAxis*&gt; <a class="code hl_function" href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b">FindSplineBinning</a>(std::string FileName, std::string SampleName);</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed">CountNumberOfLoadedSplines</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NonFlat</a>=<span class="keyword">false</span>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Verbosity</a>=0);</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb">getNDim</a>(<span class="keywordtype">int</span> BinningOpt);</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a> <a class="code hl_function" href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2">getDimLabel</a>(<span class="keywordtype">int</span> BinningOpt, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>);</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">getSampleIndex</a>(std::string SampleName);</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b">isValidSplineIndex</a>(std::string SampleName, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iSyst</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iOscChan</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iMode</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar1</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar2</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">iVar3</a>);</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704">BuildSampleIndexingArray</a>(std::string SampleName);</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28">PrepForReweight</a>();</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae">getSplineCoeff_SepMany</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">splineindex</a>, <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">xArray</a>, <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *&amp;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">manyArray</a>);</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593">PrintBinning</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TAxis</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">Axis</a>);</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90">PrintSampleDetails</a>(std::string SampleName);</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc">PrintArrayDetails</a>(std::string SampleName);</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81">PrintArrayDimension</a>();</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">FindSplineSegment</a>();</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">calcWeights</a>();</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div> +<div class="foldopen" id="foldopen00074" data-start="{" data-end="}"> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034"> 74</a></span> <span class="keyword">const</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034">retPointer</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscchan</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">syst</a>, <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var1bin</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var2bin</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var3bin</a>){</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> index = <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">oscchan</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">syst</a>][mode][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var1bin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var2bin</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">var3bin</a>];</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">return</span> &amp;<a class="code hl_variable" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">weightvec_Monolith</a>[index];</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> }</div> +</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153"> 81</a></span> <a class="code hl_class" href="classcovarianceXsec.html">covarianceXsec</a>* <a class="code hl_variable" href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">xsec</a>;</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="comment">//And now the actual member variables </span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208"> 84</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">SampleNames</a>;</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e"> 85</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">BinningOpts</a>;</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd"> 86</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">Dimensions</a>;</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15"> 87</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15">DetIDs</a>;</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40"> 88</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">nSplineParams</a>;</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3"> 89</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">nOscChans</a>;</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d"> 91</a></span> std::vector&lt; std::vector&lt;int&gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">SplineParsIndex</a>;</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70"> 92</a></span> std::vector&lt; std::vector&lt; std::vector&lt;TAxis*&gt; &gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">SplineBinning</a>;</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675"> 93</a></span> std::vector&lt; std::vector&lt;std::string&gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">SplineFileParPrefixNames</a>;</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="comment">//A vector of vectors of the spline modes that a systematic applies to</span></div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//This gets compared against the event mode to figure out if a syst should </span></div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="comment">//apply to an event or not</span></div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b"> 97</a></span> std::vector&lt; std::vector&lt; std::vector&lt;int&gt; &gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b">SplineModeVecs</a>;</div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af"> 99</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">nUniqueSysts</a>;</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd"> 100</a></span> std::vector&lt;std::string&gt; <a class="code hl_variable" href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">UniqueSystNames</a>;</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6"> 101</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6">UniqueSystIndices</a>;</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8"> 102</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">UniqueSystNKnots</a>;</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036"> 103</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">UniqueSystCurrSegment</a>;</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed"> 104</a></span> std::vector&lt; std::vector&lt;__float__&gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">UniqueSystXPts</a>;</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// //DB Variables related to determined which modes have splines and which piggy-back of other modes</span></div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12"> 107</a></span> std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; int &gt; &gt; &gt; &gt; &gt; &gt; &gt; <a class="code hl_variable" href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">indexvec</a>;</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187"> 108</a></span> std::vector&lt;int &gt; <a class="code hl_variable" href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187">coeffindexvec</a>;</div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c"> 109</a></span> std::vector&lt;int&gt;<a class="code hl_variable" href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c">uniquecoeffindices</a>; <span class="comment">//Unique coefficient indices</span></div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d"> 111</a></span> std::vector&lt; TSpline3_red* &gt; <a class="code hl_variable" href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splinevec_Monolith</a>;</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce"> 113</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">MonolithSize</a>;</div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a"> 114</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">MonolithIndex</a>;</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2"> 115</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">CoeffIndex</a>;</div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">//Probably need to clear these arrays up at some point</span></div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5"> 118</a></span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *<a class="code hl_variable" href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">xVarArray</a>;</div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3"> 119</a></span> <span class="keywordtype">bool</span> *<a class="code hl_variable" href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">isflatarray</a>; <span class="comment">// Need to keep track of which splines are flat and which aren&#39;t</span></div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb"> 120</a></span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *<a class="code hl_variable" href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">xcoeff_arr</a>; <span class="comment">//x coefficients for each spline</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d"> 121</a></span> <a class="code hl_define" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *<a class="code hl_variable" href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">manycoeff_arr</a>; <span class="comment">//ybcd coefficients for each spline</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a"> 123</a></span> std::vector&lt;double&gt; <a class="code hl_variable" href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">weightvec_Monolith</a>;</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781"> 124</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">uniquesplinevec_Monolith</a>;</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//Coefficients for grabbing items from manycoeff_arr (rather than having y=manycoeffarray[index+0])</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc"> 127</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8">SplineSegmentCoeffs</a>{<a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be">kCoeffY</a>=0, <a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc">kCoeffB</a>=1, <a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e">kCoeffC</a>=2, <a class="code hl_enumvalue" href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0">kCoeffD</a>=3};</div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>};</div> +</div> +<div class="ttc" id="aStructs_8h_html_a89c686bb1b76a3447db0c4a52e1eab0c"><div class="ttname"><a href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a></div><div class="ttdeci">#define __float__</div><div class="ttdef"><b>Definition</b> <a href="Structs_8h_source.html#l00013">Structs.h:13</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceXsec_html"><div class="ttname"><a href="classcovarianceXsec.html">covarianceXsec</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceXsec_8h_source.html#l00016">covarianceXsec.h:16</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html"><div class="ttname"><a href="classsplineFDBase.html">splineFDBase</a></div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00013">splineFDBase.h:14</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a00c0e93b4c4799ffacaa58578e5dcf6b"><div class="ttname"><a href="classsplineFDBase.html#a00c0e93b4c4799ffacaa58578e5dcf6b">splineFDBase::FindSplineBinning</a></div><div class="ttdeci">std::vector&lt; TAxis * &gt; FindSplineBinning(std::string FileName, std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00340">splineFDBase.cpp:340</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0249bb22856a7a01b64b7828046801aa"><div class="ttname"><a href="classsplineFDBase.html#a0249bb22856a7a01b64b7828046801aa">splineFDBase::FindUniqueModes</a></div><div class="ttdeci">void FindUniqueModes()</div></div> +<div class="ttc" id="aclasssplineFDBase_html_a03ae6acb97cd3e9b335dce7fbebbf7d2"><div class="ttname"><a href="classsplineFDBase.html#a03ae6acb97cd3e9b335dce7fbebbf7d2">splineFDBase::getDimLabel</a></div><div class="ttdeci">TString getDimLabel(int BinningOpt, int Axis)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00775">splineFDBase.cpp:775</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0570b0b59ff6ba13af94c64c7271202d"><div class="ttname"><a href="classsplineFDBase.html#a0570b0b59ff6ba13af94c64c7271202d">splineFDBase::SplineParsIndex</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; SplineParsIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00091">splineFDBase.h:91</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a09320defd042ffffb7bacda58133f12a"><div class="ttname"><a href="classsplineFDBase.html#a09320defd042ffffb7bacda58133f12a">splineFDBase::weightvec_Monolith</a></div><div class="ttdeci">std::vector&lt; double &gt; weightvec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00123">splineFDBase.h:123</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0bfc616fab953333e6e938de52ce3bed"><div class="ttname"><a href="classsplineFDBase.html#a0bfc616fab953333e6e938de52ce3bed">splineFDBase::CountNumberOfLoadedSplines</a></div><div class="ttdeci">int CountNumberOfLoadedSplines(bool NonFlat=false, int Verbosity=0)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00461">splineFDBase.cpp:461</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a0d42cbfc22f21906264af285fd57b1af"><div class="ttname"><a href="classsplineFDBase.html#a0d42cbfc22f21906264af285fd57b1af">splineFDBase::nUniqueSysts</a></div><div class="ttdeci">int nUniqueSysts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00099">splineFDBase.h:99</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a122a0e5ffd3519ba6b2ffa07987e7273"><div class="ttname"><a href="classsplineFDBase.html#a122a0e5ffd3519ba6b2ffa07987e7273">splineFDBase::FindSplineSegment</a></div><div class="ttdeci">void FindSplineSegment()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00178">splineFDBase.cpp:178</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8">splineFDBase::SplineSegmentCoeffs</a></div><div class="ttdeci">SplineSegmentCoeffs</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a261c6011ae9d5c7fed950fa5832c4fc0">splineFDBase::kCoeffD</a></div><div class="ttdeci">@ kCoeffD</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a5f067cfaca32fae0f7d6441c677d8e5e">splineFDBase::kCoeffC</a></div><div class="ttdeci">@ kCoeffC</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8a7d53e795ca825cdb2293b88d930ee6dc">splineFDBase::kCoeffB</a></div><div class="ttdeci">@ kCoeffB</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be"><div class="ttname"><a href="classsplineFDBase.html#a168ea7224f6c84403ef8e4461c9e13b8abe7af606e7871e4cd17f676bebdd91be">splineFDBase::kCoeffY</a></div><div class="ttdeci">@ kCoeffY</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00127">splineFDBase.h:127</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a16c36cced85ea629f01b05cf811a417d"><div class="ttname"><a href="classsplineFDBase.html#a16c36cced85ea629f01b05cf811a417d">splineFDBase::manycoeff_arr</a></div><div class="ttdeci">__float__ * manycoeff_arr</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00121">splineFDBase.h:121</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a176d42bb137d3c8c3771eb1a4a8440c8"><div class="ttname"><a href="classsplineFDBase.html#a176d42bb137d3c8c3771eb1a4a8440c8">splineFDBase::UniqueSystNKnots</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystNKnots</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00102">splineFDBase.h:102</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a281be56a824e5057044e4ab1b073bc9d"><div class="ttname"><a href="classsplineFDBase.html#a281be56a824e5057044e4ab1b073bc9d">splineFDBase::SetupSplines</a></div><div class="ttdeci">void SetupSplines()</div></div> +<div class="ttc" id="aclasssplineFDBase_html_a2d19b4bd235644d4c6a1ca6d589be6ca"><div class="ttname"><a href="classsplineFDBase.html#a2d19b4bd235644d4c6a1ca6d589be6ca">splineFDBase::getSampleIndex</a></div><div class="ttdeci">int getSampleIndex(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00836">splineFDBase.cpp:836</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a2eb495f4d63c9e4ee10b97c47e982b28"><div class="ttname"><a href="classsplineFDBase.html#a2eb495f4d63c9e4ee10b97c47e982b28">splineFDBase::PrepForReweight</a></div><div class="ttdeci">void PrepForReweight()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00527">splineFDBase.cpp:527</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3b821b95c2db6063a9baa244b28aeaa6"><div class="ttname"><a href="classsplineFDBase.html#a3b821b95c2db6063a9baa244b28aeaa6">splineFDBase::UniqueSystIndices</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystIndices</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00101">splineFDBase.h:101</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3eb62214f73ae406c77be2a1e083c034"><div class="ttname"><a href="classsplineFDBase.html#a3eb62214f73ae406c77be2a1e083c034">splineFDBase::retPointer</a></div><div class="ttdeci">const double * retPointer(int sample, int oscchan, int syst, int mode, int var1bin, int var2bin, int var3bin)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00074">splineFDBase.h:74</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a3f0b0ed4777802fa8ebc0bc9205cb8ed"><div class="ttname"><a href="classsplineFDBase.html#a3f0b0ed4777802fa8ebc0bc9205cb8ed">splineFDBase::UniqueSystXPts</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; __float__ &gt; &gt; UniqueSystXPts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00104">splineFDBase.h:104</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a4a39bce3ca988abd9e14d67120121fbb"><div class="ttname"><a href="classsplineFDBase.html#a4a39bce3ca988abd9e14d67120121fbb">splineFDBase::xcoeff_arr</a></div><div class="ttdeci">__float__ * xcoeff_arr</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00120">splineFDBase.h:120</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a5619363447e607cd835c46d601b10675"><div class="ttname"><a href="classsplineFDBase.html#a5619363447e607cd835c46d601b10675">splineFDBase::SplineFileParPrefixNames</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::string &gt; &gt; SplineFileParPrefixNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00093">splineFDBase.h:93</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a62f37395f7b1eb73c3ad0a1204bb3c2d"><div class="ttname"><a href="classsplineFDBase.html#a62f37395f7b1eb73c3ad0a1204bb3c2d">splineFDBase::StripDuplicatedModes</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; int &gt; &gt; StripDuplicatedModes(std::vector&lt; std::vector&lt; int &gt; &gt; InputVector)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6b7aeec6d03dad01975582226b39632b"><div class="ttname"><a href="classsplineFDBase.html#a6b7aeec6d03dad01975582226b39632b">splineFDBase::SplineModeVecs</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; int &gt; &gt; &gt; SplineModeVecs</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00097">splineFDBase.h:97</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6c28400605049bdee229885c46463dcd"><div class="ttname"><a href="classsplineFDBase.html#a6c28400605049bdee229885c46463dcd">splineFDBase::Dimensions</a></div><div class="ttdeci">std::vector&lt; int &gt; Dimensions</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00086">splineFDBase.h:86</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6d1872fe4be72c735bd55fa00e1674b8"><div class="ttname"><a href="classsplineFDBase.html#a6d1872fe4be72c735bd55fa00e1674b8">splineFDBase::TransferToMonolith</a></div><div class="ttdeci">void TransferToMonolith()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00068">splineFDBase.cpp:68</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a6e765571776f8affeca355a184fef11a"><div class="ttname"><a href="classsplineFDBase.html#a6e765571776f8affeca355a184fef11a">splineFDBase::cleanUpMemory</a></div><div class="ttdeci">void cleanUpMemory()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00031">splineFDBase.h:31</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a78508c5d0d4ef09457beb723dc796208"><div class="ttname"><a href="classsplineFDBase.html#a78508c5d0d4ef09457beb723dc796208">splineFDBase::SampleNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; SampleNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00084">splineFDBase.h:84</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7a564f5748f16d97ebf1e1c300a1cc5c"><div class="ttname"><a href="classsplineFDBase.html#a7a564f5748f16d97ebf1e1c300a1cc5c">splineFDBase::uniquecoeffindices</a></div><div class="ttdeci">std::vector&lt; int &gt; uniquecoeffindices</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00109">splineFDBase.h:109</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7f5b16b65dc7da748f20bdc803b7e593"><div class="ttname"><a href="classsplineFDBase.html#a7f5b16b65dc7da748f20bdc803b7e593">splineFDBase::PrintBinning</a></div><div class="ttdeci">void PrintBinning(TAxis *Axis)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l01009">splineFDBase.cpp:1009</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a7ff003d3c05fe8a6f9723557910b7a90"><div class="ttname"><a href="classsplineFDBase.html#a7ff003d3c05fe8a6f9723557910b7a90">splineFDBase::PrintSampleDetails</a></div><div class="ttdeci">void PrintSampleDetails(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00855">splineFDBase.cpp:855</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a84ec9ea208503053b9735b1cb1bc417d"><div class="ttname"><a href="classsplineFDBase.html#a84ec9ea208503053b9735b1cb1bc417d">splineFDBase::splinevec_Monolith</a></div><div class="ttdeci">std::vector&lt; TSpline3_red * &gt; splinevec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00111">splineFDBase.h:111</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a891de87b873e079f6bbdb1355a9ff153"><div class="ttname"><a href="classsplineFDBase.html#a891de87b873e079f6bbdb1355a9ff153">splineFDBase::xsec</a></div><div class="ttdeci">covarianceXsec * xsec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00081">splineFDBase.h:81</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_a91521064517b5e4f0232570e6746bdf7"><div class="ttname"><a href="classsplineFDBase.html#a91521064517b5e4f0232570e6746bdf7">splineFDBase::SetupSplines</a></div><div class="ttdeci">void SetupSplines(int BinningOpt)</div></div> +<div class="ttc" id="aclasssplineFDBase_html_a9cf50f41f23cb14055170d9f1a0d55ae"><div class="ttname"><a href="classsplineFDBase.html#a9cf50f41f23cb14055170d9f1a0d55ae">splineFDBase::getSplineCoeff_SepMany</a></div><div class="ttdeci">void getSplineCoeff_SepMany(int splineindex, __float__ *&amp;xArray, __float__ *&amp;manyArray)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00700">splineFDBase.cpp:700</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa10670a64bbdef3ffd69f4b8f102fff3"><div class="ttname"><a href="classsplineFDBase.html#aa10670a64bbdef3ffd69f4b8f102fff3">splineFDBase::nOscChans</a></div><div class="ttdeci">std::vector&lt; int &gt; nOscChans</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00089">splineFDBase.h:89</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa36e6889d054ad0f86f33a53dd3fe036"><div class="ttname"><a href="classsplineFDBase.html#aa36e6889d054ad0f86f33a53dd3fe036">splineFDBase::UniqueSystCurrSegment</a></div><div class="ttdeci">std::vector&lt; int &gt; UniqueSystCurrSegment</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00103">splineFDBase.h:103</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa37a0f892b96f6b0e3b6b7aa847e94cb"><div class="ttname"><a href="classsplineFDBase.html#aa37a0f892b96f6b0e3b6b7aa847e94cb">splineFDBase::getNDim</a></div><div class="ttdeci">int getNDim(int BinningOpt)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00748">splineFDBase.cpp:748</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa6395bf5a4506f584661b36fbc32b3ca"><div class="ttname"><a href="classsplineFDBase.html#aa6395bf5a4506f584661b36fbc32b3ca">splineFDBase::GetEventSplines</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; int &gt; &gt; GetEventSplines(std::string SampleName, int iOscChan, int EventMode, double Var1Val, double Var2Val, double Var3Val)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_aa8a204355df78af3f79bf8f2815258d3"><div class="ttname"><a href="classsplineFDBase.html#aa8a204355df78af3f79bf8f2815258d3">splineFDBase::isflatarray</a></div><div class="ttdeci">bool * isflatarray</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00119">splineFDBase.h:119</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aaa699bd90abc662ce3af907733b3b704"><div class="ttname"><a href="classsplineFDBase.html#aaa699bd90abc662ce3af907733b3b704">splineFDBase::BuildSampleIndexingArray</a></div><div class="ttdeci">void BuildSampleIndexingArray(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00297">splineFDBase.cpp:297</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aaa6e9d15540bb20938f43d37f29c4fd4"><div class="ttname"><a href="classsplineFDBase.html#aaa6e9d15540bb20938f43d37f29c4fd4">splineFDBase::AddSample</a></div><div class="ttdeci">bool AddSample(std::string SampleName, int BinningOpt, int DetID, std::vector&lt; std::string &gt; OscChanFileNames)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00019">splineFDBase.cpp:19</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aacf850f4ec22e4f7338f243999ecc7dd"><div class="ttname"><a href="classsplineFDBase.html#aacf850f4ec22e4f7338f243999ecc7dd">splineFDBase::UniqueSystNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; UniqueSystNames</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00100">splineFDBase.h:100</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aad64c7c63db8ea676f86eb2279f04d40"><div class="ttname"><a href="classsplineFDBase.html#aad64c7c63db8ea676f86eb2279f04d40">splineFDBase::nSplineParams</a></div><div class="ttdeci">std::vector&lt; int &gt; nSplineParams</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00088">splineFDBase.h:88</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ab1f9479d702cfee2d0e5ea7edd2aca81"><div class="ttname"><a href="classsplineFDBase.html#ab1f9479d702cfee2d0e5ea7edd2aca81">splineFDBase::PrintArrayDimension</a></div><div class="ttdeci">void PrintArrayDimension()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00890">splineFDBase.cpp:890</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ab3a4e79bfe675a4070597557e6226e12"><div class="ttname"><a href="classsplineFDBase.html#ab3a4e79bfe675a4070597557e6226e12">splineFDBase::indexvec</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; std::vector&lt; int &gt; &gt; &gt; &gt; &gt; &gt; &gt; indexvec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00107">splineFDBase.h:107</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_abcff04fee3e6790a099a0df9dbee74c2"><div class="ttname"><a href="classsplineFDBase.html#abcff04fee3e6790a099a0df9dbee74c2">splineFDBase::CoeffIndex</a></div><div class="ttdeci">int CoeffIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00115">splineFDBase.h:115</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ac5f4c7bfc06ab3bcc769be433ad4708e"><div class="ttname"><a href="classsplineFDBase.html#ac5f4c7bfc06ab3bcc769be433ad4708e">splineFDBase::BinningOpts</a></div><div class="ttdeci">std::vector&lt; int &gt; BinningOpts</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00085">splineFDBase.h:85</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ad1fefa7f796f2a28a69f5336f5777bce"><div class="ttname"><a href="classsplineFDBase.html#ad1fefa7f796f2a28a69f5336f5777bce">splineFDBase::MonolithSize</a></div><div class="ttdeci">int MonolithSize</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00113">splineFDBase.h:113</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_addabdf30ee85c6975422c0ccf3f1844f"><div class="ttname"><a href="classsplineFDBase.html#addabdf30ee85c6975422c0ccf3f1844f">splineFDBase::FillSampleArray</a></div><div class="ttdeci">virtual void FillSampleArray(std::string SampleName, std::vector&lt; std::string &gt; OscChanFileNames)=0</div></div> +<div class="ttc" id="aclasssplineFDBase_html_addec38a8493974ccc3ee16931d5b794a"><div class="ttname"><a href="classsplineFDBase.html#addec38a8493974ccc3ee16931d5b794a">splineFDBase::MonolithIndex</a></div><div class="ttdeci">int MonolithIndex</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00114">splineFDBase.h:114</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ae237cc1c6d97e35bf4f7f64e369a5781"><div class="ttname"><a href="classsplineFDBase.html#ae237cc1c6d97e35bf4f7f64e369a5781">splineFDBase::uniquesplinevec_Monolith</a></div><div class="ttdeci">std::vector&lt; int &gt; uniquesplinevec_Monolith</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00124">splineFDBase.h:124</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_ae66addf83262b03969d0b3b89737a42b"><div class="ttname"><a href="classsplineFDBase.html#ae66addf83262b03969d0b3b89737a42b">splineFDBase::isValidSplineIndex</a></div><div class="ttdeci">bool isValidSplineIndex(std::string SampleName, int iSyst, int iOscChan, int iMode, int iVar1, int iVar2, int iVar3)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00943">splineFDBase.cpp:943</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aeb743760ca4a477771132aaf0e334d15"><div class="ttname"><a href="classsplineFDBase.html#aeb743760ca4a477771132aaf0e334d15">splineFDBase::DetIDs</a></div><div class="ttdeci">std::vector&lt; int &gt; DetIDs</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00087">splineFDBase.h:87</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aee80975a1a2892b61fb27b2044e7c9bc"><div class="ttname"><a href="classsplineFDBase.html#aee80975a1a2892b61fb27b2044e7c9bc">splineFDBase::PrintArrayDetails</a></div><div class="ttdeci">void PrintArrayDetails(std::string SampleName)</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00875">splineFDBase.cpp:875</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_aef7692f02d28abdcfc09b6ed6bdcabf2"><div class="ttname"><a href="classsplineFDBase.html#aef7692f02d28abdcfc09b6ed6bdcabf2">splineFDBase::~splineFDBase</a></div><div class="ttdeci">virtual ~splineFDBase()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00020">splineFDBase.h:20</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af63885ddb6731f77808d029372e6b187"><div class="ttname"><a href="classsplineFDBase.html#af63885ddb6731f77808d029372e6b187">splineFDBase::coeffindexvec</a></div><div class="ttdeci">std::vector&lt; int &gt; coeffindexvec</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00108">splineFDBase.h:108</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af71b65713518f42e59c543dbad5dab70"><div class="ttname"><a href="classsplineFDBase.html#af71b65713518f42e59c543dbad5dab70">splineFDBase::SplineBinning</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; TAxis * &gt; &gt; &gt; SplineBinning</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00092">splineFDBase.h:92</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af76579b8e880c4724e16888f23b418ba"><div class="ttname"><a href="classsplineFDBase.html#af76579b8e880c4724e16888f23b418ba">splineFDBase::calcWeights</a></div><div class="ttdeci">void calcWeights()</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8cpp_source.html#l00258">splineFDBase.cpp:258</a></div></div> +<div class="ttc" id="aclasssplineFDBase_html_af9a31bb05c30667ddd3c6056f742c8e5"><div class="ttname"><a href="classsplineFDBase.html#af9a31bb05c30667ddd3c6056f742c8e5">splineFDBase::xVarArray</a></div><div class="ttdeci">__float__ * xVarArray</div><div class="ttdef"><b>Definition</b> <a href="splineFDBase_8h_source.html#l00118">splineFDBase.h:118</a></div></div> +<div class="ttc" id="acovarianceXsec_8h_html"><div class="ttname"><a href="covarianceXsec_8h.html">covarianceXsec.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineInterface_8h.html b/splineInterface_8h.html new file mode 100644 index 00000000..e4b03433 --- /dev/null +++ b/splineInterface_8h.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineInterface.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">splineInterface.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;TFile.h&gt;</code><br /> +<code>#include &lt;TSpline.h&gt;</code><br /> +<code>#include &lt;TAxis.h&gt;</code><br /> +<code>#include &lt;vector&gt;</code><br /> +</div> +<p><a href="splineInterface_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsplineInterface.html">splineInterface</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splineInterface_8h_source.html b/splineInterface_8h_source.html new file mode 100644 index 00000000..223bcce3 --- /dev/null +++ b/splineInterface_8h_source.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/splineInterface.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">splineInterface.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="splineInterface_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;TFile.h&gt;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;TSpline.h&gt;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;TAxis.h&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;vector&gt;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div> +<div class="foldopen" id="foldopen00008" data-start="{" data-end="};"> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"><a class="line" href="classsplineInterface.html"> 8</a></span><span class="keyword">class </span><a class="code hl_class" href="classsplineInterface.html">splineInterface</a></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span>{</div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="comment">//splineInterface(char *spline, int nutype)=0;</span></div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="comment">//virtual ~splineInterface()=0;</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classsplineInterface.html#a83f15de1b33f89e659c06120234b14b7"> 13</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classsplineInterface.html#a83f15de1b33f89e659c06120234b14b7">setupSplines</a>()=0;</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span>};</div> +</div> +<div class="ttc" id="aclasssplineInterface_html"><div class="ttname"><a href="classsplineInterface.html">splineInterface</a></div><div class="ttdef"><b>Definition</b> <a href="splineInterface_8h_source.html#l00008">splineInterface.h:9</a></div></div> +<div class="ttc" id="aclasssplineInterface_html_a83f15de1b33f89e659c06120234b14b7"><div class="ttname"><a href="classsplineInterface.html#a83f15de1b33f89e659c06120234b14b7">splineInterface::setupSplines</a></div><div class="ttdeci">virtual void setupSplines()=0</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/spline_8h.html b/spline_8h.html new file mode 100644 index 00000000..7a3b92dd --- /dev/null +++ b/spline_8h.html @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/spline.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> &#124; +<a href="#define-members">Macros</a> </div> + <div class="headertitle"><div class="title">spline.h File Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><a href="spline_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classspline.html">spline</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a> +Macros</h2></td></tr> +<tr class="memitem:abaa3393ea5f1f52b7fdfde2beec133b7" id="r_abaa3393ea5f1f52b7fdfde2beec133b7"><td class="memItemLeft" align="right" valign="top">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7">CUDA_CALLABLE_MEMBER</a></td></tr> +<tr class="separator:abaa3393ea5f1f52b7fdfde2beec133b7"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<h2 class="groupheader">Macro Definition Documentation</h2> +<a id="abaa3393ea5f1f52b7fdfde2beec133b7" name="abaa3393ea5f1f52b7fdfde2beec133b7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abaa3393ea5f1f52b7fdfde2beec133b7">&#9670;&#160;</a></span>CUDA_CALLABLE_MEMBER</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">#<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">define</a> CUDA_CALLABLE_MEMBER</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="spline_8h_source.html#l00007">7</a> of file <a class="el" href="spline_8h_source.html">spline.h</a>.</p> + +</div> +</div> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/spline_8h_source.html b/spline_8h_source.html new file mode 100644 index 00000000..dffeac10 --- /dev/null +++ b/spline_8h_source.html @@ -0,0 +1,191 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/splines/spline.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_a3857b76c57a33866f3a59ae3b67734b.html">splines</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">spline.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="spline_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifdef __CUDACC__</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#define CUDA_CALLABLE_MEMBER __host__ __device__</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#else</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"><a class="line" href="spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7"> 7</a></span><span class="preprocessor">#define CUDA_CALLABLE_MEMBER</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#endif</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="foldopen" id="foldopen00010" data-start="{" data-end="};"> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"><a class="line" href="classspline.html"> 10</a></span><span class="keyword">class </span><a class="code hl_class" href="classspline.html">spline</a></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span>{</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">public</span>:</div> +<div class="foldopen" id="foldopen00013" data-start="{" data-end="}"> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classspline.html#a7c7a04cae16a741ee6b2fb8661b5deaf"> 13</a></span> <a class="code hl_function" href="classspline.html#a7c7a04cae16a741ee6b2fb8661b5deaf">spline</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfDelta</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfXmin</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfXmax</a>, <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfX</a>[], <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfY</a>[], <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfB</a>[], <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfC</a>[], <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfD</a>[] )</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> {</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a> = N; </div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <a class="code hl_variable" href="classspline.html#a610b9b9c320613aad0c99cebe021a278">fKstep</a> = 0; <span class="comment">// sort this out</span></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_variable" href="classspline.html#a301682848b329bcef441bb13bfe33f46">fDelta</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfDelta</a>;</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_variable" href="classspline.html#a7b84491491e316cce7a160ef61d79eb5">fXmin</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfXmin</a>;</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_variable" href="classspline.html#ada4bae351e736ef0cefd36ef971b2a46">fXmax</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfXmax</a>;</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_variable" href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72">fX</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfX</a>;</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_variable" href="classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2">fY</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfY</a>;</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_variable" href="classspline.html#a7b23a13caa6d68159b035db9155b425b">fB</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfB</a>;</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_variable" href="classspline.html#a53ce91618f1c479d2f444af31855c90c">fC</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfC</a>;</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_variable" href="classspline.html#a68559ca14ce7c89d2595681c2605dd63">fD</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">tfD</a>;</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> };</div> +</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="foldopen" id="foldopen00028" data-start="{" data-end="}"> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classspline.html#a18a8cc5fa2ce196e458b92dec2664c1f"> 28</a></span> <a class="code hl_function" href="classspline.html#a18a8cc5fa2ce196e458b92dec2664c1f">~spline</a>()</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> };</div> +</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div> +<div class="foldopen" id="foldopen00032" data-start="{" data-end="}"> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="classspline.html#a094cc95917c77e4cd0c429941adcdc35"> 32</a></span> <a class="code hl_define" href="spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7">CUDA_CALLABLE_MEMBER</a> <span class="keywordtype">double</span> <a class="code hl_function" href="classspline.html#a094cc95917c77e4cd0c429941adcdc35">Eval</a>(<span class="keywordtype">double</span> x)</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>=0;</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">if</span>(x&lt;=<a class="code hl_variable" href="classspline.html#a7b84491491e316cce7a160ef61d79eb5">fXmin</a>) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>=0;</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x&gt;=<a class="code hl_variable" href="classspline.html#ada4bae351e736ef0cefd36ef971b2a46">fXmax</a>) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>=<a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a>-1;</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classspline.html#a610b9b9c320613aad0c99cebe021a278">fKstep</a>) </div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> {</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// Equidistant knots, use histogramming</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>((x-<a class="code hl_variable" href="classspline.html#a7b84491491e316cce7a160ef61d79eb5">fXmin</a>)/<a class="code hl_variable" href="classspline.html#a301682848b329bcef441bb13bfe33f46">fDelta</a>);</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a> &lt; <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a>-1) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a> = <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a>-1;</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> } </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> {</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khig</a>=<a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a><span class="comment">/*-1*/</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khalf</a>;</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="comment">// Non equidistant knots, binary search</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">while</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khig</a>-<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>&gt;1)</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span>(x&gt;<a class="code hl_variable" href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72">fX</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khalf</a>=(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khig</a>)/2]) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khalf</a>;</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">else</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khig</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">khalf</a>;</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> }</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a> &gt;= <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a>-1) <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a> = <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a> -2;</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// Evaluate now</span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a>=x-<a class="code hl_variable" href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72">fX</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>];</div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> ( <a class="code hl_variable" href="classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2">fY</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>] + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a> * ( <a class="code hl_variable" href="classspline.html#a7b23a13caa6d68159b035db9155b425b">fB</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>] + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a> * ( <a class="code hl_variable" href="classspline.html#a53ce91618f1c479d2f444af31855c90c">fC</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>] + <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">dx</a> * <a class="code hl_variable" href="classspline.html#a68559ca14ce7c89d2595681c2605dd63">fD</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">klow</a>] ) ) );</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> };</div> +</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55"> 62</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">fNp</a>;</div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="classspline.html#a610b9b9c320613aad0c99cebe021a278"> 63</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classspline.html#a610b9b9c320613aad0c99cebe021a278">fKstep</a>;</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classspline.html#a301682848b329bcef441bb13bfe33f46"> 65</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classspline.html#a301682848b329bcef441bb13bfe33f46">fDelta</a>;</div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classspline.html#a7b84491491e316cce7a160ef61d79eb5"> 66</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classspline.html#a7b84491491e316cce7a160ef61d79eb5">fXmin</a>;</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classspline.html#ada4bae351e736ef0cefd36ef971b2a46"> 67</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classspline.html#ada4bae351e736ef0cefd36ef971b2a46">fXmax</a>;</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72"> 69</a></span> <span class="keywordtype">double</span> *<a class="code hl_variable" href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72">fX</a>;</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2"> 70</a></span> <span class="keywordtype">double</span> *<a class="code hl_variable" href="classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2">fY</a>;</div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classspline.html#a7b23a13caa6d68159b035db9155b425b"> 71</a></span> <span class="keywordtype">double</span> *<a class="code hl_variable" href="classspline.html#a7b23a13caa6d68159b035db9155b425b">fB</a>;</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classspline.html#a53ce91618f1c479d2f444af31855c90c"> 72</a></span> <span class="keywordtype">double</span> *<a class="code hl_variable" href="classspline.html#a53ce91618f1c479d2f444af31855c90c">fC</a>;</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="classspline.html#a68559ca14ce7c89d2595681c2605dd63"> 73</a></span> <span class="keywordtype">double</span> *<a class="code hl_variable" href="classspline.html#a68559ca14ce7c89d2595681c2605dd63">fD</a>;</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>};</div> +</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclassspline_html"><div class="ttname"><a href="classspline.html">spline</a></div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00010">spline.h:11</a></div></div> +<div class="ttc" id="aclassspline_html_a094cc95917c77e4cd0c429941adcdc35"><div class="ttname"><a href="classspline.html#a094cc95917c77e4cd0c429941adcdc35">spline::Eval</a></div><div class="ttdeci">CUDA_CALLABLE_MEMBER double Eval(double x)</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00032">spline.h:32</a></div></div> +<div class="ttc" id="aclassspline_html_a18a8cc5fa2ce196e458b92dec2664c1f"><div class="ttname"><a href="classspline.html#a18a8cc5fa2ce196e458b92dec2664c1f">spline::~spline</a></div><div class="ttdeci">~spline()</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00028">spline.h:28</a></div></div> +<div class="ttc" id="aclassspline_html_a245ccd976f83cdbeb794ca95cb7b6df2"><div class="ttname"><a href="classspline.html#a245ccd976f83cdbeb794ca95cb7b6df2">spline::fY</a></div><div class="ttdeci">double * fY</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00070">spline.h:70</a></div></div> +<div class="ttc" id="aclassspline_html_a301682848b329bcef441bb13bfe33f46"><div class="ttname"><a href="classspline.html#a301682848b329bcef441bb13bfe33f46">spline::fDelta</a></div><div class="ttdeci">double fDelta</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00065">spline.h:65</a></div></div> +<div class="ttc" id="aclassspline_html_a322ac057718bfb06996dc7c3e518ef55"><div class="ttname"><a href="classspline.html#a322ac057718bfb06996dc7c3e518ef55">spline::fNp</a></div><div class="ttdeci">int fNp</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00062">spline.h:62</a></div></div> +<div class="ttc" id="aclassspline_html_a53ce91618f1c479d2f444af31855c90c"><div class="ttname"><a href="classspline.html#a53ce91618f1c479d2f444af31855c90c">spline::fC</a></div><div class="ttdeci">double * fC</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00072">spline.h:72</a></div></div> +<div class="ttc" id="aclassspline_html_a610b9b9c320613aad0c99cebe021a278"><div class="ttname"><a href="classspline.html#a610b9b9c320613aad0c99cebe021a278">spline::fKstep</a></div><div class="ttdeci">int fKstep</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00063">spline.h:63</a></div></div> +<div class="ttc" id="aclassspline_html_a68559ca14ce7c89d2595681c2605dd63"><div class="ttname"><a href="classspline.html#a68559ca14ce7c89d2595681c2605dd63">spline::fD</a></div><div class="ttdeci">double * fD</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00073">spline.h:73</a></div></div> +<div class="ttc" id="aclassspline_html_a7b23a13caa6d68159b035db9155b425b"><div class="ttname"><a href="classspline.html#a7b23a13caa6d68159b035db9155b425b">spline::fB</a></div><div class="ttdeci">double * fB</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00071">spline.h:71</a></div></div> +<div class="ttc" id="aclassspline_html_a7b84491491e316cce7a160ef61d79eb5"><div class="ttname"><a href="classspline.html#a7b84491491e316cce7a160ef61d79eb5">spline::fXmin</a></div><div class="ttdeci">double fXmin</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00066">spline.h:66</a></div></div> +<div class="ttc" id="aclassspline_html_a7c7a04cae16a741ee6b2fb8661b5deaf"><div class="ttname"><a href="classspline.html#a7c7a04cae16a741ee6b2fb8661b5deaf">spline::spline</a></div><div class="ttdeci">spline(int N, int tfDelta, int tfXmin, int tfXmax, double tfX[], double tfY[], double tfB[], double tfC[], double tfD[])</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00013">spline.h:13</a></div></div> +<div class="ttc" id="aclassspline_html_ada4bae351e736ef0cefd36ef971b2a46"><div class="ttname"><a href="classspline.html#ada4bae351e736ef0cefd36ef971b2a46">spline::fXmax</a></div><div class="ttdeci">double fXmax</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00067">spline.h:67</a></div></div> +<div class="ttc" id="aclassspline_html_af545ed0bb9307de3fd9a47b72d2afa72"><div class="ttname"><a href="classspline.html#af545ed0bb9307de3fd9a47b72d2afa72">spline::fX</a></div><div class="ttdeci">double * fX</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00069">spline.h:69</a></div></div> +<div class="ttc" id="aspline_8h_html_abaa3393ea5f1f52b7fdfde2beec133b7"><div class="ttname"><a href="spline_8h.html#abaa3393ea5f1f52b7fdfde2beec133b7">CUDA_CALLABLE_MEMBER</a></div><div class="ttdeci">#define CUDA_CALLABLE_MEMBER</div><div class="ttdef"><b>Definition</b> <a href="spline_8h_source.html#l00007">spline.h:7</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jW<lVxsx`Ym~nPnqw$O~`M84{XS6<Mm0<Zit<Tk``D^RashfFq{wG<# zZG2vRxL<$IhkFMSBd@N1`uRtp)t>rYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|E<fHWtM%;-WUJ&>EGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf<Wq_r;B4q1>@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb<d2ww+4sWx@iO~d@7T)Z$L;%F z_Vvfjr-#*_i?>&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/stretch_8cpp.html b/stretch_8cpp.html new file mode 100644 index 00000000..840bdf27 --- /dev/null +++ b/stretch_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/stretch.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">stretch.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="stretch_8h_source.html">stretch.h</a>&quot;</code><br /> +</div> +<p><a href="stretch_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/stretch_8cpp_source.html b/stretch_8cpp_source.html new file mode 100644 index 00000000..fd54b966 --- /dev/null +++ b/stretch_8cpp_source.html @@ -0,0 +1,454 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/stretch.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">stretch.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="stretch_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="stretch_8h.html">stretch.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// uncomment below to turn on multithreading</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">//#define MULTITHREAD</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div> +<div class="foldopen" id="foldopen00006" data-start="{" data-end="}"> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"><a class="line" href="classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8"> 6</a></span><a class="code hl_function" href="classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8">stretch::stretch</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>)</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span>{</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TRandom3</a>(0);</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <a class="code hl_function" href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">init</a>(<span class="stringliteral">&quot;output.root&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>);</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>=100;</div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>}</div> +</div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="foldopen" id="foldopen00015" data-start="{" data-end="}"> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="classstretch.html#adf2d2378f0ecbec1ae19be241daf8932"> 15</a></span><a class="code hl_function" href="classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8">stretch::stretch</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nwalkers</a>, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>)</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span>{</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TRandom3</a>(0);</div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nwalkers</a>;</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_function" href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">init</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>);</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>}</div> +</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="foldopen" id="foldopen00023" data-start="{" data-end="}"> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="classstretch.html#abf351cef5d33603cb6be70749577d9e4"> 23</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">stretch::init</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a>, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>)</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span>{</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_variable" href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">osc_only</a> = <span class="keyword">false</span>; <span class="comment">// default value</span></div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">// accCount = 0;</span></div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_variable" href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">auto_save</a> = 100; <span class="comment">// default to saving every 100 steps</span></div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_variable" href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860">save_nominal</a> = <span class="keyword">true</span>;</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">// init_pos = false; //starting parameters should be thrown </span></div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>=<a class="code hl_variable" href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">oscbar</a>=-1;</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <a class="code hl_variable" href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">N</a>=0;<span class="comment">//zero dimensions</span></div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>=2;<span class="comment">//tuning parameter default value</span></div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// setup output file</span></div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <a class="code hl_variable" href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d">outputFile</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a>.c_str(), <span class="stringliteral">&quot;RECREATE&quot;</span>);</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment">// std::cout &lt;&lt; gDirectory-&gt;pwd() &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="comment">// setup output tree</span></div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a>(<span class="stringliteral">&quot;posteriors&quot;</span>,<span class="stringliteral">&quot;Posterior Distributions&quot;</span>);</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// outputFile-&gt;ls();</span></div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// fit summary and debug info</span></div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>;</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a>)</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a> += <span class="stringliteral">&quot;.log&quot;</span>;</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">//char *logname = &quot;.log&quot;;</span></div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_variable" href="classstretch.html#accdccd0cf0ee25c613b779233ccc1e26">debugInterval</a> = 50;</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="comment">//strncat(outfile, logname, 4);</span></div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_variable" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">debugFile</a>.open(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">outfile</a>.c_str());</div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="comment">//clear samples, systs</span></div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>.clear();</div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.clear();</div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div> +</div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="foldopen" id="foldopen00058" data-start="{" data-end="}"> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4"> 58</a></span><a class="code hl_function" href="classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4">stretch::~stretch</a>()</div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>{</div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a>)</div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_variable" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">debugFile</a>.close();</div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_variable" href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d">outputFile</a>-&gt;Close();</div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>}</div> +</div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div> +<div class="foldopen" id="foldopen00066" data-start="{" data-end="}"> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classstretch.html#a0c862a7bcd8af16a523dba58999e9ede"> 66</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a0c862a7bcd8af16a523dba58999e9ede">stretch::setChainLength</a>(<span class="keywordtype">int</span> L)</div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>{</div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_variable" href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47">chainLength</a> = L;</div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>}</div> +</div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="foldopen" id="foldopen00071" data-start="{" data-end="}"> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classstretch.html#a0509bf2dd3592dc03a547c813065a292"> 71</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a0509bf2dd3592dc03a547c813065a292">stretch::addSamplePDF</a>(<a class="code hl_class" href="classsamplePDFBase.html">samplePDFBase</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>)</div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>{</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>);</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>}</div> +</div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="foldopen" id="foldopen00076" data-start="{" data-end="}"> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="classstretch.html#a5068746af3b9ae197104f5d5f87ab583"> 76</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a5068746af3b9ae197104f5d5f87ab583">stretch::addSystObj</a>(<a class="code hl_class" href="classcovarianceBase.html">covarianceBase</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isOsc</a>)</div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span>{</div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>);</div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_variable" href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">N</a>+=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>-&gt;getSize();</div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860">save_nominal</a>)</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vec</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>-&gt;getNominalArray();</div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vec</a>.size();</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">double</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_vec</a> = <span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>];</div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)</div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> {</div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_vec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">vec</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>];</div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> }</div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorT&lt;double&gt;</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">t_vec</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">n_vec</a>);</div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nameof</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TString</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>-&gt;getName());</div> +<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nameof</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nameof</a>.Append(<span class="stringliteral">&quot;_nom&quot;</span>);</div> +<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">t_vec</a>.Write(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nameof</a>);</div> +<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div> +<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> std::vector&lt; std::vector &lt; double &gt; &gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">walkp</a>;</div> +<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div> +<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>-&gt;getSize(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> {</div> +<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ww</a>;</div> +<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ww</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>-&gt;getParProp(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>));</div> +<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">walkp</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ww</a>);</div> +<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div> +<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div> +<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">walkp</a>);</div> +<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">walkp</a>);</div> +<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div> +<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isOsc</a> &amp;&amp; <a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>==-1)</div> +<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>=<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size()-1;</div> +<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isOsc</a> &amp;&amp; <a class="code hl_variable" href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">oscbar</a>==-1)</div> +<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_variable" href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">oscbar</a>=<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size()-1; </div> +<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div> +<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>}</div> +</div> +<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div> +<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment">// bool stretch::accept()</span></div> +<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment">// {</span></div> +<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div> +<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">// return accept;</span></div> +<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment">// }</span></div> +<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div> +<div class="foldopen" id="foldopen00123" data-start="{" data-end="}"> +<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classstretch.html#a5f32082718c49d9337bfdc83a7630613"> 123</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a5f32082718c49d9337bfdc83a7630613">stretch::runStretch</a>()</div> +<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span>{</div> +<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// some checks</span></div> +<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment">// if(!samples.size())</span></div> +<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="comment">// {std::cerr &lt;&lt; &quot;no samples! Stopping MCMC&quot; &lt;&lt; std::endl; return;}</span></div> +<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div> +<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div> +<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// if(debug)</span></div> +<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// std::cout &lt;&lt; &quot;Passed initial checks &quot; &lt;&lt; osc &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div> +<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// prepare output tree</span></div> +<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> {</div> +<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> {</div> +<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Branch(<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetParName(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>).<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c_str</a>(),<span class="stringliteral">&quot;std::vector&lt;double&gt;&quot;</span>,&amp;<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]);</div> +<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div> +<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div> +<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div> +<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="comment">// outTree-&gt;Branch(&quot;LogL&quot;,&amp;logLCurr,&quot;LogL/D&quot;);</span></div> +<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="comment">// outTree-&gt;Branch(&quot;accProb&quot;, &amp;accProb,&quot;accProb/D&quot;);</span></div> +<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Branch(<span class="stringliteral">&quot;step&quot;</span>, &amp;<a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a>, <span class="stringliteral">&quot;step/I&quot;</span>);</div> +<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Branch(<span class="stringliteral">&quot;LogL&quot;</span>,<span class="stringliteral">&quot;std::vector&lt;double&gt;&quot;</span>,&amp;<a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>);</div> +<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div> +<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// store individual likelihood components</span></div> +<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment">// sample_llh = new float[samples.size()];</span></div> +<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment">// syst_llh = new float[systematics.size()];</span></div> +<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div> +<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="comment">// for (int i =0; i &lt; samples.size(); ++i)</span></div> +<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment">// {</span></div> +<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment">// std::stringstream oss, oss2;</span></div> +<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment">// oss &lt;&lt; &quot;LogL_sample_&quot; &lt;&lt; i;</span></div> +<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment">// oss2 &lt;&lt; oss.str() &lt;&lt; &quot;/F&quot;;</span></div> +<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment">// outTree-&gt;Branch(oss.str().c_str(), &amp;sample_llh[i], oss2.str().c_str());</span></div> +<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div> +<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment">// // For adding sample dependent branches to the posteriors tree</span></div> +<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="comment">// samples[i]-&gt;setMCMCBranches(outTree);</span></div> +<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="comment">// }</span></div> +<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div> +<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="comment">// for (int i = 0; i &lt; systematics.size(); ++i)</span></div> +<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="comment">// {</span></div> +<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment">// std::stringstream oss, oss2;</span></div> +<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment">// oss &lt;&lt; &quot;LogL_systematic_&quot; &lt;&lt; systematics[i]-&gt;getName();</span></div> +<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment">// oss2 &lt;&lt; oss.str() &lt;&lt; &quot;/F&quot;;</span></div> +<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment">// outTree-&gt;Branch(oss.str().c_str(), &amp;syst_llh[i], oss2.str().c_str());</span></div> +<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment">// }</span></div> +<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div> +<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\n---------------------starting MCMC---------------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="comment">// outputFile-&gt;cd();</span></div> +<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="comment">// if(debug)</span></div> +<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment">// {</span></div> +<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment">// printInitialState();</span></div> +<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment">// debugFile &lt;&lt; &quot;-----starting MCMC-----&quot; &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">// }</span></div> +<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div> +<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// initial reweight and likelihood calc</span></div> +<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>;</div> +<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div> +<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div> +<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>&lt;<a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>++)</div> +<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> {</div> +<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> std::cout &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>.push_back(0);</div> +<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div> +<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> {</div> +<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;throwNominal(<span class="keyword">false</span>);</div> +<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">startpar</a> = <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getNominalArray();</div> +<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;setParameters(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">startpar</a>);</div> +<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div> +<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getSize(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>]=<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getParProp(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>);</div> +<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div> +<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;throwNominal();</div> +<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="comment">// systematics[i]-&gt;printPars();</span></div> +<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div> +<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>] += <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetLikelihood();</div> +<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a>)</div> +<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">debugFile</a> &lt;&lt; <span class="stringliteral">&quot;LLH after &quot;</span> &lt;&lt; <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getName() &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div> +<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div> +<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> {</div> +<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>!=-1)</div> +<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> {</div> +<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(((<a class="code hl_class" href="classcovarianceOsc.html">covarianceOsc</a>*)<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>])-&gt;getPropPars());</div> +<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div> +<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {</div> +<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a>);</div> +<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> }</div> +<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div> +<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>] += <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetLikelihood();</div> +<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div> +<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a>)</div> +<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_variable" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">debugFile</a> &lt;&lt; <span class="stringliteral">&quot;LLH after sample &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>] &lt;&lt; std::endl;</div> +<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div> +<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div> +<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>]);</div> +<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>.push_back(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">llh_init</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">k</a>]);</div> +<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div> +<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Fill();</div> +<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div> +<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// begin!</span></div> +<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_variable" href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5">clock</a>.Start();</div> +<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">for</span>(<a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a> = 0; <a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a> &lt; <a class="code hl_variable" href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47">chainLength</a>; <a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a>++)</div> +<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> {</div> +<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a>%10==0)</div> +<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> std::cout &lt;&lt; <span class="stringliteral">&quot;At step: &quot;</span> &lt;&lt; <a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div> +<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>&lt;<a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>++)</div> +<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> {</div> +<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]=0;</div> +<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">done</a>=<span class="keyword">false</span>;</div> +<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ow</a>;</div> +<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">while</span>(!<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">done</a>)</div> +<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div> +<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ow</a>=<a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a>-&gt;Integer(<a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>-1);</div> +<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>!=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ow</a>)</div> +<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">done</a>=<span class="keyword">true</span>;</div> +<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> }</div> +<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">z</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pow</a>((<a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>-1)*<a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a>-&gt;Uniform()+1,2)/<a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>;</div> +<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> {</div> +<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> std::vector&lt;double&gt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pars</a>(<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>].<a class="code hl_variable" href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a>());</div> +<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getSize(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> {</div> +<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>] = <a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ow</a>]+<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">z</a>*(<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]-<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ow</a>]);</div> +<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(!<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;isParameterFixed(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>))</div> +<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pars</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>] = <a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">else</span> </div> +<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pars</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]=<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// May have to put something in here for special cases, e.g. mass hierarchy</span></div> +<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> }</div> +<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;setParameters(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pars</a>);</div> +<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment">// systematics[i]-&gt;printPars();</span></div> +<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>] += <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetLikelihood();</div> +<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> }</div> +<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> {</div> +<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>!=-1)</div> +<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> {</div> +<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(((<a class="code hl_class" href="classcovarianceOsc.html">covarianceOsc</a>*)<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>])-&gt;getPropPars());</div> +<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> }</div> +<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">else</span></div> +<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> {</div> +<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">double</span>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">NULL</a>;</div> +<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;reweight(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">fake</a>);</div> +<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> }</div> +<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div> +<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>] += <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;GetLikelihood();</div> +<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> }</div> +<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">q</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">pow</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">z</a>,<a class="code hl_variable" href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">N</a>-1)*<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">exp</a>(<a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]-<a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]);</div> +<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><span class="comment">// std::cout &lt;&lt; nw &lt;&lt; &quot;,&quot; &lt;&lt; ow &lt;&lt; &quot;: &quot; &lt;&lt; logLCurr[nw] &lt;&lt; &quot;,&quot; &lt;&lt; logLProp[nw] &lt;&lt; &quot;,&quot; &lt;&lt; z &lt;&lt; &quot;,&quot; &lt;&lt; q &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span>(<a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a>-&gt;Uniform(0,1)&gt;<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">q</a>)</div> +<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> {</div> +<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getSize(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]=<a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]=<a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div> +<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div> +<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> }</div> +<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>&lt;<a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>++)</div> +<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> {</div> +<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>.size(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>++)</div> +<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>=0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>&lt;<a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>]-&gt;getSize(); <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>++)</div> +<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]=<a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>][<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>]=<a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nw</a>];</div> +<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> }</div> +<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Fill();</div> +<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div> +<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// auto save </span></div> +<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a> % <a class="code hl_variable" href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">auto_save</a> == <a class="code hl_variable" href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">auto_save</a> - 1)</div> +<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div> +<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="comment">// if (debug)</span></div> +<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span><span class="comment">// std::cout &lt;&lt; &quot;Current Acceptance Rate: &quot; &lt;&lt; step / accept &lt;&lt; std::endl;</span></div> +<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;AutoSave();</div> +<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> }</div> +<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div> +<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="comment">// finished MCMC //////////////////////////////</span></div> +<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div> +<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> std::cout &lt;&lt; <span class="stringliteral">&quot;----------- finished MCMC --------------&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <a class="code hl_variable" href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5">clock</a>.Stop();</div> +<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>-&gt;Write();</div> +<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div> +<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span>}</div> +</div> +<div class="ttc" id="aGetPenaltyTerm_8cpp_html_a439227feff9d7f55384e8780cfc2eb82"><div class="ttname"><a href="GetPenaltyTerm_8cpp.html#a439227feff9d7f55384e8780cfc2eb82">size</a></div><div class="ttdeci">int size</div><div class="ttdef"><b>Definition</b> <a href="GetPenaltyTerm_8cpp_source.html#l00041">GetPenaltyTerm.cpp:41</a></div></div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html"><div class="ttname"><a href="classcovarianceBase.html">covarianceBase</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00032">covarianceBase.h:32</a></div></div> +<div class="ttc" id="aclasscovarianceOsc_html"><div class="ttname"><a href="classcovarianceOsc.html">covarianceOsc</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceOsc_8h_source.html#l00006">covarianceOsc.h:7</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html"><div class="ttname"><a href="classsamplePDFBase.html">samplePDFBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00031">samplePDFBase.h:32</a></div></div> +<div class="ttc" id="aclassstretch_html_a0509bf2dd3592dc03a547c813065a292"><div class="ttname"><a href="classstretch.html#a0509bf2dd3592dc03a547c813065a292">stretch::addSamplePDF</a></div><div class="ttdeci">void addSamplePDF(samplePDFBase *sample)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00071">stretch.cpp:71</a></div></div> +<div class="ttc" id="aclassstretch_html_a06eec6a7dfecac3263d4ca1b7433942e"><div class="ttname"><a href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">stretch::nwalk</a></div><div class="ttdeci">int nwalk</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00056">stretch.h:56</a></div></div> +<div class="ttc" id="aclassstretch_html_a0c862a7bcd8af16a523dba58999e9ede"><div class="ttname"><a href="classstretch.html#a0c862a7bcd8af16a523dba58999e9ede">stretch::setChainLength</a></div><div class="ttdeci">void setChainLength(int chainl)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00066">stretch.cpp:66</a></div></div> +<div class="ttc" id="aclassstretch_html_a11cc8cfe24c57de3f56a5bc825ec23fe"><div class="ttname"><a href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">stretch::currentpar</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; double &gt; &gt; &gt; currentpar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00050">stretch.h:50</a></div></div> +<div class="ttc" id="aclassstretch_html_a14d6cfc847c0282a3bec5633ccb59fe5"><div class="ttname"><a href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">stretch::debug</a></div><div class="ttdeci">bool debug</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00073">stretch.h:73</a></div></div> +<div class="ttc" id="aclassstretch_html_a21ad4e72be43dfb1c51ccccf9120f533"><div class="ttname"><a href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">stretch::a</a></div><div class="ttdeci">double a</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00057">stretch.h:57</a></div></div> +<div class="ttc" id="aclassstretch_html_a3527e1352b2abab12acb5aaf646addfc"><div class="ttname"><a href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">stretch::proposedpar</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; double &gt; &gt; &gt; proposedpar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00051">stretch.h:51</a></div></div> +<div class="ttc" id="aclassstretch_html_a39ad43665c1bf8b872e200bf984bf860"><div class="ttname"><a href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860">stretch::save_nominal</a></div><div class="ttdeci">bool save_nominal</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00084">stretch.h:84</a></div></div> +<div class="ttc" id="aclassstretch_html_a40ccdaab2001c2e83c2cbdc03a5eda7d"><div class="ttname"><a href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d">stretch::outputFile</a></div><div class="ttdeci">TFile * outputFile</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00081">stretch.h:81</a></div></div> +<div class="ttc" id="aclassstretch_html_a5068746af3b9ae197104f5d5f87ab583"><div class="ttname"><a href="classstretch.html#a5068746af3b9ae197104f5d5f87ab583">stretch::addSystObj</a></div><div class="ttdeci">void addSystObj(covarianceBase *cov, bool isOsc=false)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00076">stretch.cpp:76</a></div></div> +<div class="ttc" id="aclassstretch_html_a5b2b99948404ef0fd2f6892c471c7682"><div class="ttname"><a href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">stretch::logLProp</a></div><div class="ttdeci">std::vector&lt; double &gt; logLProp</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00063">stretch.h:63</a></div></div> +<div class="ttc" id="aclassstretch_html_a5f32082718c49d9337bfdc83a7630613"><div class="ttname"><a href="classstretch.html#a5f32082718c49d9337bfdc83a7630613">stretch::runStretch</a></div><div class="ttdeci">void runStretch()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00123">stretch.cpp:123</a></div></div> +<div class="ttc" id="aclassstretch_html_a67a0480d7414ee187f52299e1c0ff514"><div class="ttname"><a href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">stretch::random</a></div><div class="ttdeci">TRandom3 * random</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00078">stretch.h:78</a></div></div> +<div class="ttc" id="aclassstretch_html_a6bbc7d610f4f89bc1b17a76cbf883236"><div class="ttname"><a href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">stretch::auto_save</a></div><div class="ttdeci">int auto_save</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00083">stretch.h:83</a></div></div> +<div class="ttc" id="aclassstretch_html_a6c1f5daca9de1a2f44acc80f3e20becb"><div class="ttname"><a href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">stretch::logLCurr</a></div><div class="ttdeci">std::vector&lt; double &gt; logLCurr</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00062">stretch.h:62</a></div></div> +<div class="ttc" id="aclassstretch_html_a86ed8f9ff015d251fdc13247f91c6b67"><div class="ttname"><a href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">stretch::oscbar</a></div><div class="ttdeci">int oscbar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00053">stretch.h:53</a></div></div> +<div class="ttc" id="aclassstretch_html_a8725b8b5a1d794ea4a4549346992d373"><div class="ttname"><a href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">stretch::N</a></div><div class="ttdeci">int N</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00058">stretch.h:58</a></div></div> +<div class="ttc" id="aclassstretch_html_aa7c6d128c2d7e8c24aac9e7ffe6a14d2"><div class="ttname"><a href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">stretch::samples</a></div><div class="ttdeci">std::vector&lt; samplePDFBase * &gt; samples</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00046">stretch.h:46</a></div></div> +<div class="ttc" id="aclassstretch_html_aadf29fe174a01b360e7dbfc5f6e363e4"><div class="ttname"><a href="classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4">stretch::~stretch</a></div><div class="ttdeci">virtual ~stretch()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00058">stretch.cpp:58</a></div></div> +<div class="ttc" id="aclassstretch_html_aaf0ddc53f573e673ad700418a2735d3c"><div class="ttname"><a href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">stretch::outTree</a></div><div class="ttdeci">TTree * outTree</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00082">stretch.h:82</a></div></div> +<div class="ttc" id="aclassstretch_html_ab7122273c4f81fe47dac2a6f18355e06"><div class="ttname"><a href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">stretch::systematics</a></div><div class="ttdeci">std::vector&lt; covarianceBase * &gt; systematics</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00049">stretch.h:49</a></div></div> +<div class="ttc" id="aclassstretch_html_abcfd2f7460a63de15654eb99400942c9"><div class="ttname"><a href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">stretch::osc</a></div><div class="ttdeci">int osc</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00053">stretch.h:53</a></div></div> +<div class="ttc" id="aclassstretch_html_abf351cef5d33603cb6be70749577d9e4"><div class="ttname"><a href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">stretch::init</a></div><div class="ttdeci">void init(std::string name, bool verbose)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00023">stretch.cpp:23</a></div></div> +<div class="ttc" id="aclassstretch_html_accdccd0cf0ee25c613b779233ccc1e26"><div class="ttname"><a href="classstretch.html#accdccd0cf0ee25c613b779233ccc1e26">stretch::debugInterval</a></div><div class="ttdeci">int debugInterval</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00074">stretch.h:74</a></div></div> +<div class="ttc" id="aclassstretch_html_ad48ef9156f514130a9433bf53086853d"><div class="ttname"><a href="classstretch.html#ad48ef9156f514130a9433bf53086853d">stretch::step</a></div><div class="ttdeci">int step</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00061">stretch.h:61</a></div></div> +<div class="ttc" id="aclassstretch_html_ade09543f90fc59fd752b13ab48266aec"><div class="ttname"><a href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">stretch::debugFile</a></div><div class="ttdeci">ofstream debugFile</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00075">stretch.h:75</a></div></div> +<div class="ttc" id="aclassstretch_html_ade67f1a3c409ea6471500b1746cf6ab8"><div class="ttname"><a href="classstretch.html#ade67f1a3c409ea6471500b1746cf6ab8">stretch::stretch</a></div><div class="ttdeci">stretch(bool verbose=false)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00006">stretch.cpp:6</a></div></div> +<div class="ttc" id="aclassstretch_html_ae65ed4f3b8d8fbcc23a1e8c8835d79d3"><div class="ttname"><a href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">stretch::osc_only</a></div><div class="ttdeci">bool osc_only</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00087">stretch.h:87</a></div></div> +<div class="ttc" id="aclassstretch_html_aea59dfdbcc4c32b3e382a34c4f61dbc5"><div class="ttname"><a href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5">stretch::clock</a></div><div class="ttdeci">TStopwatch clock</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00072">stretch.h:72</a></div></div> +<div class="ttc" id="aclassstretch_html_aee7b4c7638fa838e17c80a526f5ffc47"><div class="ttname"><a href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47">stretch::chainLength</a></div><div class="ttdeci">int chainLength</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00055">stretch.h:55</a></div></div> +<div class="ttc" id="astretch_8h_html"><div class="ttname"><a href="stretch_8h.html">stretch.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/stretch_8h.html b/stretch_8h.html new file mode 100644 index 00000000..abf47db6 --- /dev/null +++ b/stretch_8h.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/stretch.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">stretch.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &lt;fstream&gt;</code><br /> +<code>#include &lt;sstream&gt;</code><br /> +<code>#include &quot;TStopwatch.h&quot;</code><br /> +<code>#include &quot;TTree.h&quot;</code><br /> +<code>#include &quot;TString.h&quot;</code><br /> +<code>#include &quot;TRandom.h&quot;</code><br /> +<code>#include &lt;map&gt;</code><br /> +<code>#include &quot;<a class="el" href="samplePDFBase_8h_source.html">samplePDF/samplePDFBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceBase_8h_source.html">covariance/covarianceBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceOsc_8h_source.html">covariance/covarianceOsc.h</a>&quot;</code><br /> +</div> +<p><a href="stretch_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classstretch.html">stretch</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/stretch_8h_source.html b/stretch_8h_source.html new file mode 100644 index 00000000..98eb291d --- /dev/null +++ b/stretch_8h_source.html @@ -0,0 +1,233 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/stretch.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">stretch.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="stretch_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;fstream&gt;</span></div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;sstream&gt;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &quot;TStopwatch.h&quot;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;TTree.h&quot;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;TString.h&quot;</span></div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;TRandom.h&quot;</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;map&gt;</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;<a class="code" href="samplePDFBase_8h.html">samplePDF/samplePDFBase.h</a>&quot;</span></div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceBase_8h.html">covariance/covarianceBase.h</a>&quot;</span></div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceOsc_8h.html">covariance/covarianceOsc.h</a>&quot;</span></div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div> +<div class="foldopen" id="foldopen00017" data-start="{" data-end="};"> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classstretch.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classstretch.html">stretch</a></div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span>{</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classstretch.html">stretch</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a> = <span class="keyword">false</span>);</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_class" href="classstretch.html">stretch</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name = <span class="stringliteral">&quot;output.root&quot;</span>, <span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">nwalkers</a>=100, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a> = <span class="keyword">false</span>);</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4">~stretch</a>();</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a0509bf2dd3592dc03a547c813065a292">addSamplePDF</a>(<a class="code hl_class" href="classsamplePDFBase.html">samplePDFBase</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sample</a>);</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a5068746af3b9ae197104f5d5f87ab583">addSystObj</a>(<a class="code hl_class" href="classcovarianceBase.html">covarianceBase</a>* <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>,<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">isOsc</a>=<span class="keyword">false</span>);</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a5f32082718c49d9337bfdc83a7630613">runStretch</a>();</div> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a0c862a7bcd8af16a523dba58999e9ede">setChainLength</a>(<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">chainl</a>);</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classstretch.html#a9fcfc6d50759b76dfcef3b5086f4167b"> 31</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a9fcfc6d50759b76dfcef3b5086f4167b">printInitialState</a>();</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="classstretch.html#afca2346083510dfd508d3d4ac8a2c341"> 33</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#afca2346083510dfd508d3d4ac8a2c341">setOscOnly</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yes</a>){<a class="code hl_variable" href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">osc_only</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yes</a>;};</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classstretch.html#a706dbc8b21269ee4cc7546058a70be51"> 34</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classstretch.html#a706dbc8b21269ee4cc7546058a70be51">getOscOnly</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">osc_only</a>;};</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="classstretch.html#a13138997e14c00c56a8af51729b3ade3"> 36</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#a13138997e14c00c56a8af51729b3ade3">setGpuFit</a>(<span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yes</a>){<a class="code hl_variable" href="classstretch.html#a7ca4fdf6398add1bdc629c103d52de94">gpu_fit</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">yes</a>;};</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="classstretch.html#a42647e00bf6768e3bac3eecf73f78a00"> 37</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classstretch.html#a42647e00bf6768e3bac3eecf73f78a00">getGpuFit</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classstretch.html#a7ca4fdf6398add1bdc629c103d52de94">gpu_fit</a>;};</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classstretch.html#af62d72a369c9035c27f6b1eda04d7d1e"> 39</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#af62d72a369c9035c27f6b1eda04d7d1e">setA</a>(<span class="keywordtype">double</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>){<a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>=<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">A</a>;}</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classstretch.html#a265ce3bf25c97637ae88da1cbc572e75"> 40</a></span> <span class="keywordtype">double</span> <a class="code hl_function" href="classstretch.html#a265ce3bf25c97637ae88da1cbc572e75">getA</a>(){<span class="keywordflow">return</span> <a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>;}</div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">protected</span>:</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">init</a>(std::string name, <span class="keywordtype">bool</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">verbose</a>);</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// sample holder</span></div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2"> 46</a></span> std::vector&lt;samplePDFBase*&gt; <a class="code hl_variable" href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">samples</a>;</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//systematic holder</span></div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06"> 49</a></span> std::vector&lt;covarianceBase*&gt; <a class="code hl_variable" href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">systematics</a>;</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe"> 50</a></span> std::vector&lt; std::vector &lt; std::vector &lt;double &gt; &gt; &gt; <a class="code hl_variable" href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">currentpar</a>; <span class="comment">//first index is cov matrix, second is parameter, third is walker</span></div> +<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc"> 51</a></span> std::vector&lt; std::vector &lt; std::vector &lt;double &gt; &gt; &gt; <a class="code hl_variable" href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">proposedpar</a>;</div> +<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div> +<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9"> 53</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">osc</a>, <a class="code hl_variable" href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">oscbar</a>;</div> +<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47"> 55</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47">chainLength</a>; <span class="comment">// number of steps in chain</span></div> +<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e"> 56</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">nwalk</a>; <span class="comment">//number of walkers </span></div> +<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533"> 57</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">a</a>; <span class="comment">//tuning parameter</span></div> +<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373"> 58</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">N</a>; <span class="comment">//dimensionality;</span></div> +<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div> +<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// current state</span></div> +<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="classstretch.html#ad48ef9156f514130a9433bf53086853d"> 61</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#ad48ef9156f514130a9433bf53086853d">step</a>; <span class="comment">// current step</span></div> +<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb"> 62</a></span> std::vector&lt; double &gt; <a class="code hl_variable" href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">logLCurr</a>; <span class="comment">// current likelihood</span></div> +<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682"> 63</a></span> std::vector&lt; double &gt; <a class="code hl_variable" href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">logLProp</a>; <span class="comment">// proposed likelihood</span></div> +<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div> +<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classstretch.html#a57c45d6fc50aebcad403605cee37c9bc"> 65</a></span> <span class="keywordtype">float</span> <a class="code hl_variable" href="classstretch.html#a57c45d6fc50aebcad403605cee37c9bc">osc_llh</a>; <span class="comment">// oscillation covariance llh</span></div> +<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classstretch.html#a1754d48c9da8f327c5d37b577d2f291c"> 66</a></span> <span class="keywordtype">float</span> *<a class="code hl_variable" href="classstretch.html#a1754d48c9da8f327c5d37b577d2f291c">sample_llh</a>; <span class="comment">// store the llh breakdowns</span></div> +<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classstretch.html#a694a121d39b68416211df1e9e8292ebe"> 67</a></span> <span class="keywordtype">float</span> *<a class="code hl_variable" href="classstretch.html#a694a121d39b68416211df1e9e8292ebe">syst_llh</a>; <span class="comment">// systematic llh breakdowns</span></div> +<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="classstretch.html#a3bdd76ceeddae7e33f4cc99f3f11623e"> 69</a></span> <span class="keywordtype">double</span> <a class="code hl_variable" href="classstretch.html#a3bdd76ceeddae7e33f4cc99f3f11623e">accProb</a>; <span class="comment">// current acceptance prob</span></div> +<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// benchmarking, file IO, debugging etc</span></div> +<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5"> 72</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TStopwatch</a> <a class="code hl_variable" href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5">clock</a>;</div> +<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5"> 73</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">debug</a>;</div> +<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="classstretch.html#accdccd0cf0ee25c613b779233ccc1e26"> 74</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#accdccd0cf0ee25c613b779233ccc1e26">debugInterval</a>; <span class="comment">// how many steps to print to debug file</span></div> +<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec"> 75</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ofstream</a> <a class="code hl_variable" href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">debugFile</a>;</div> +<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div> +<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="comment">//random number</span></div> +<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514"> 78</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TRandom3</a>* <a class="code hl_variable" href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">random</a>; </div> +<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div> +<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// output</span></div> +<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d"> 81</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_variable" href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d">outputFile</a>;</div> +<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c"> 82</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TTree</a> *<a class="code hl_variable" href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">outTree</a>;</div> +<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236"> 83</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">auto_save</a>; <span class="comment">// auto save every N steps</span></div> +<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860"> 84</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860">save_nominal</a>;</div> +<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// fit types</span></div> +<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3"> 87</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">osc_only</a>; <span class="comment">// don&#39;t fit nuisance parameters</span></div> +<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="classstretch.html#a7ca4fdf6398add1bdc629c103d52de94"> 88</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="classstretch.html#a7ca4fdf6398add1bdc629c103d52de94">gpu_fit</a>; <span class="comment">// use the GPU where applicable</span></div> +<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div> +<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>};</div> +</div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html"><div class="ttname"><a href="classcovarianceBase.html">covarianceBase</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00032">covarianceBase.h:32</a></div></div> +<div class="ttc" id="aclasssamplePDFBase_html"><div class="ttname"><a href="classsamplePDFBase.html">samplePDFBase</a></div><div class="ttdef"><b>Definition</b> <a href="samplePDFBase_8h_source.html#l00031">samplePDFBase.h:32</a></div></div> +<div class="ttc" id="aclassstretch_html"><div class="ttname"><a href="classstretch.html">stretch</a></div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00017">stretch.h:18</a></div></div> +<div class="ttc" id="aclassstretch_html_a0509bf2dd3592dc03a547c813065a292"><div class="ttname"><a href="classstretch.html#a0509bf2dd3592dc03a547c813065a292">stretch::addSamplePDF</a></div><div class="ttdeci">void addSamplePDF(samplePDFBase *sample)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00071">stretch.cpp:71</a></div></div> +<div class="ttc" id="aclassstretch_html_a06eec6a7dfecac3263d4ca1b7433942e"><div class="ttname"><a href="classstretch.html#a06eec6a7dfecac3263d4ca1b7433942e">stretch::nwalk</a></div><div class="ttdeci">int nwalk</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00056">stretch.h:56</a></div></div> +<div class="ttc" id="aclassstretch_html_a0c862a7bcd8af16a523dba58999e9ede"><div class="ttname"><a href="classstretch.html#a0c862a7bcd8af16a523dba58999e9ede">stretch::setChainLength</a></div><div class="ttdeci">void setChainLength(int chainl)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00066">stretch.cpp:66</a></div></div> +<div class="ttc" id="aclassstretch_html_a11cc8cfe24c57de3f56a5bc825ec23fe"><div class="ttname"><a href="classstretch.html#a11cc8cfe24c57de3f56a5bc825ec23fe">stretch::currentpar</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; double &gt; &gt; &gt; currentpar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00050">stretch.h:50</a></div></div> +<div class="ttc" id="aclassstretch_html_a13138997e14c00c56a8af51729b3ade3"><div class="ttname"><a href="classstretch.html#a13138997e14c00c56a8af51729b3ade3">stretch::setGpuFit</a></div><div class="ttdeci">void setGpuFit(bool yes)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00036">stretch.h:36</a></div></div> +<div class="ttc" id="aclassstretch_html_a14d6cfc847c0282a3bec5633ccb59fe5"><div class="ttname"><a href="classstretch.html#a14d6cfc847c0282a3bec5633ccb59fe5">stretch::debug</a></div><div class="ttdeci">bool debug</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00073">stretch.h:73</a></div></div> +<div class="ttc" id="aclassstretch_html_a1754d48c9da8f327c5d37b577d2f291c"><div class="ttname"><a href="classstretch.html#a1754d48c9da8f327c5d37b577d2f291c">stretch::sample_llh</a></div><div class="ttdeci">float * sample_llh</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00066">stretch.h:66</a></div></div> +<div class="ttc" id="aclassstretch_html_a21ad4e72be43dfb1c51ccccf9120f533"><div class="ttname"><a href="classstretch.html#a21ad4e72be43dfb1c51ccccf9120f533">stretch::a</a></div><div class="ttdeci">double a</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00057">stretch.h:57</a></div></div> +<div class="ttc" id="aclassstretch_html_a265ce3bf25c97637ae88da1cbc572e75"><div class="ttname"><a href="classstretch.html#a265ce3bf25c97637ae88da1cbc572e75">stretch::getA</a></div><div class="ttdeci">double getA()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00040">stretch.h:40</a></div></div> +<div class="ttc" id="aclassstretch_html_a3527e1352b2abab12acb5aaf646addfc"><div class="ttname"><a href="classstretch.html#a3527e1352b2abab12acb5aaf646addfc">stretch::proposedpar</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; std::vector&lt; double &gt; &gt; &gt; proposedpar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00051">stretch.h:51</a></div></div> +<div class="ttc" id="aclassstretch_html_a39ad43665c1bf8b872e200bf984bf860"><div class="ttname"><a href="classstretch.html#a39ad43665c1bf8b872e200bf984bf860">stretch::save_nominal</a></div><div class="ttdeci">bool save_nominal</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00084">stretch.h:84</a></div></div> +<div class="ttc" id="aclassstretch_html_a3bdd76ceeddae7e33f4cc99f3f11623e"><div class="ttname"><a href="classstretch.html#a3bdd76ceeddae7e33f4cc99f3f11623e">stretch::accProb</a></div><div class="ttdeci">double accProb</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00069">stretch.h:69</a></div></div> +<div class="ttc" id="aclassstretch_html_a40ccdaab2001c2e83c2cbdc03a5eda7d"><div class="ttname"><a href="classstretch.html#a40ccdaab2001c2e83c2cbdc03a5eda7d">stretch::outputFile</a></div><div class="ttdeci">TFile * outputFile</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00081">stretch.h:81</a></div></div> +<div class="ttc" id="aclassstretch_html_a42647e00bf6768e3bac3eecf73f78a00"><div class="ttname"><a href="classstretch.html#a42647e00bf6768e3bac3eecf73f78a00">stretch::getGpuFit</a></div><div class="ttdeci">bool getGpuFit()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00037">stretch.h:37</a></div></div> +<div class="ttc" id="aclassstretch_html_a5068746af3b9ae197104f5d5f87ab583"><div class="ttname"><a href="classstretch.html#a5068746af3b9ae197104f5d5f87ab583">stretch::addSystObj</a></div><div class="ttdeci">void addSystObj(covarianceBase *cov, bool isOsc=false)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00076">stretch.cpp:76</a></div></div> +<div class="ttc" id="aclassstretch_html_a57c45d6fc50aebcad403605cee37c9bc"><div class="ttname"><a href="classstretch.html#a57c45d6fc50aebcad403605cee37c9bc">stretch::osc_llh</a></div><div class="ttdeci">float osc_llh</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00065">stretch.h:65</a></div></div> +<div class="ttc" id="aclassstretch_html_a5b2b99948404ef0fd2f6892c471c7682"><div class="ttname"><a href="classstretch.html#a5b2b99948404ef0fd2f6892c471c7682">stretch::logLProp</a></div><div class="ttdeci">std::vector&lt; double &gt; logLProp</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00063">stretch.h:63</a></div></div> +<div class="ttc" id="aclassstretch_html_a5f32082718c49d9337bfdc83a7630613"><div class="ttname"><a href="classstretch.html#a5f32082718c49d9337bfdc83a7630613">stretch::runStretch</a></div><div class="ttdeci">void runStretch()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00123">stretch.cpp:123</a></div></div> +<div class="ttc" id="aclassstretch_html_a67a0480d7414ee187f52299e1c0ff514"><div class="ttname"><a href="classstretch.html#a67a0480d7414ee187f52299e1c0ff514">stretch::random</a></div><div class="ttdeci">TRandom3 * random</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00078">stretch.h:78</a></div></div> +<div class="ttc" id="aclassstretch_html_a694a121d39b68416211df1e9e8292ebe"><div class="ttname"><a href="classstretch.html#a694a121d39b68416211df1e9e8292ebe">stretch::syst_llh</a></div><div class="ttdeci">float * syst_llh</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00067">stretch.h:67</a></div></div> +<div class="ttc" id="aclassstretch_html_a6bbc7d610f4f89bc1b17a76cbf883236"><div class="ttname"><a href="classstretch.html#a6bbc7d610f4f89bc1b17a76cbf883236">stretch::auto_save</a></div><div class="ttdeci">int auto_save</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00083">stretch.h:83</a></div></div> +<div class="ttc" id="aclassstretch_html_a6c1f5daca9de1a2f44acc80f3e20becb"><div class="ttname"><a href="classstretch.html#a6c1f5daca9de1a2f44acc80f3e20becb">stretch::logLCurr</a></div><div class="ttdeci">std::vector&lt; double &gt; logLCurr</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00062">stretch.h:62</a></div></div> +<div class="ttc" id="aclassstretch_html_a706dbc8b21269ee4cc7546058a70be51"><div class="ttname"><a href="classstretch.html#a706dbc8b21269ee4cc7546058a70be51">stretch::getOscOnly</a></div><div class="ttdeci">bool getOscOnly()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00034">stretch.h:34</a></div></div> +<div class="ttc" id="aclassstretch_html_a7ca4fdf6398add1bdc629c103d52de94"><div class="ttname"><a href="classstretch.html#a7ca4fdf6398add1bdc629c103d52de94">stretch::gpu_fit</a></div><div class="ttdeci">bool gpu_fit</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00088">stretch.h:88</a></div></div> +<div class="ttc" id="aclassstretch_html_a86ed8f9ff015d251fdc13247f91c6b67"><div class="ttname"><a href="classstretch.html#a86ed8f9ff015d251fdc13247f91c6b67">stretch::oscbar</a></div><div class="ttdeci">int oscbar</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00053">stretch.h:53</a></div></div> +<div class="ttc" id="aclassstretch_html_a8725b8b5a1d794ea4a4549346992d373"><div class="ttname"><a href="classstretch.html#a8725b8b5a1d794ea4a4549346992d373">stretch::N</a></div><div class="ttdeci">int N</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00058">stretch.h:58</a></div></div> +<div class="ttc" id="aclassstretch_html_a9fcfc6d50759b76dfcef3b5086f4167b"><div class="ttname"><a href="classstretch.html#a9fcfc6d50759b76dfcef3b5086f4167b">stretch::printInitialState</a></div><div class="ttdeci">void printInitialState()</div></div> +<div class="ttc" id="aclassstretch_html_aa7c6d128c2d7e8c24aac9e7ffe6a14d2"><div class="ttname"><a href="classstretch.html#aa7c6d128c2d7e8c24aac9e7ffe6a14d2">stretch::samples</a></div><div class="ttdeci">std::vector&lt; samplePDFBase * &gt; samples</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00046">stretch.h:46</a></div></div> +<div class="ttc" id="aclassstretch_html_aadf29fe174a01b360e7dbfc5f6e363e4"><div class="ttname"><a href="classstretch.html#aadf29fe174a01b360e7dbfc5f6e363e4">stretch::~stretch</a></div><div class="ttdeci">virtual ~stretch()</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00058">stretch.cpp:58</a></div></div> +<div class="ttc" id="aclassstretch_html_aaf0ddc53f573e673ad700418a2735d3c"><div class="ttname"><a href="classstretch.html#aaf0ddc53f573e673ad700418a2735d3c">stretch::outTree</a></div><div class="ttdeci">TTree * outTree</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00082">stretch.h:82</a></div></div> +<div class="ttc" id="aclassstretch_html_ab7122273c4f81fe47dac2a6f18355e06"><div class="ttname"><a href="classstretch.html#ab7122273c4f81fe47dac2a6f18355e06">stretch::systematics</a></div><div class="ttdeci">std::vector&lt; covarianceBase * &gt; systematics</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00049">stretch.h:49</a></div></div> +<div class="ttc" id="aclassstretch_html_abcfd2f7460a63de15654eb99400942c9"><div class="ttname"><a href="classstretch.html#abcfd2f7460a63de15654eb99400942c9">stretch::osc</a></div><div class="ttdeci">int osc</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00053">stretch.h:53</a></div></div> +<div class="ttc" id="aclassstretch_html_abf351cef5d33603cb6be70749577d9e4"><div class="ttname"><a href="classstretch.html#abf351cef5d33603cb6be70749577d9e4">stretch::init</a></div><div class="ttdeci">void init(std::string name, bool verbose)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8cpp_source.html#l00023">stretch.cpp:23</a></div></div> +<div class="ttc" id="aclassstretch_html_accdccd0cf0ee25c613b779233ccc1e26"><div class="ttname"><a href="classstretch.html#accdccd0cf0ee25c613b779233ccc1e26">stretch::debugInterval</a></div><div class="ttdeci">int debugInterval</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00074">stretch.h:74</a></div></div> +<div class="ttc" id="aclassstretch_html_ad48ef9156f514130a9433bf53086853d"><div class="ttname"><a href="classstretch.html#ad48ef9156f514130a9433bf53086853d">stretch::step</a></div><div class="ttdeci">int step</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00061">stretch.h:61</a></div></div> +<div class="ttc" id="aclassstretch_html_ade09543f90fc59fd752b13ab48266aec"><div class="ttname"><a href="classstretch.html#ade09543f90fc59fd752b13ab48266aec">stretch::debugFile</a></div><div class="ttdeci">ofstream debugFile</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00075">stretch.h:75</a></div></div> +<div class="ttc" id="aclassstretch_html_ae65ed4f3b8d8fbcc23a1e8c8835d79d3"><div class="ttname"><a href="classstretch.html#ae65ed4f3b8d8fbcc23a1e8c8835d79d3">stretch::osc_only</a></div><div class="ttdeci">bool osc_only</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00087">stretch.h:87</a></div></div> +<div class="ttc" id="aclassstretch_html_aea59dfdbcc4c32b3e382a34c4f61dbc5"><div class="ttname"><a href="classstretch.html#aea59dfdbcc4c32b3e382a34c4f61dbc5">stretch::clock</a></div><div class="ttdeci">TStopwatch clock</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00072">stretch.h:72</a></div></div> +<div class="ttc" id="aclassstretch_html_aee7b4c7638fa838e17c80a526f5ffc47"><div class="ttname"><a href="classstretch.html#aee7b4c7638fa838e17c80a526f5ffc47">stretch::chainLength</a></div><div class="ttdeci">int chainLength</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00055">stretch.h:55</a></div></div> +<div class="ttc" id="aclassstretch_html_af62d72a369c9035c27f6b1eda04d7d1e"><div class="ttname"><a href="classstretch.html#af62d72a369c9035c27f6b1eda04d7d1e">stretch::setA</a></div><div class="ttdeci">void setA(double A)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00039">stretch.h:39</a></div></div> +<div class="ttc" id="aclassstretch_html_afca2346083510dfd508d3d4ac8a2c341"><div class="ttname"><a href="classstretch.html#afca2346083510dfd508d3d4ac8a2c341">stretch::setOscOnly</a></div><div class="ttdeci">void setOscOnly(bool yes)</div><div class="ttdef"><b>Definition</b> <a href="stretch_8h_source.html#l00033">stretch.h:33</a></div></div> +<div class="ttc" id="acovarianceBase_8h_html"><div class="ttname"><a href="covarianceBase_8h.html">covarianceBase.h</a></div></div> +<div class="ttc" id="acovarianceOsc_8h_html"><div class="ttname"><a href="covarianceOsc_8h.html">covarianceOsc.h</a></div></div> +<div class="ttc" id="asamplePDFBase_8h_html"><div class="ttname"><a href="samplePDFBase_8h.html">samplePDFBase.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structBox-members.html b/structBox-members.html new file mode 100644 index 00000000..c4238e75 --- /dev/null +++ b/structBox-members.html @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">Box Member List</div></div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="structBox.html">Box</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structBox.html#a9d51cc0b4c543af5ab222b431e0206ad">BL</a></td><td class="entry"><a class="el" href="structBox.html">Box</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structBox.html#a91e3a5bc435593fa2bab7389e47bf0fd">UR</a></td><td class="entry"><a class="el" href="structBox.html">Box</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structBox.html b/structBox.html new file mode 100644 index 00000000..e1cb581d --- /dev/null +++ b/structBox.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Box Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Public Attributes</a> &#124; +<a href="structBox-members.html">List of all members</a> </div> + <div class="headertitle"><div class="title">Box Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Public Attributes</h2></td></tr> +<tr class="memitem:a9d51cc0b4c543af5ab222b431e0206ad" id="r_a9d51cc0b4c543af5ab222b431e0206ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structCorner.html">Corner</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structBox.html#a9d51cc0b4c543af5ab222b431e0206ad">BL</a></td></tr> +<tr class="separator:a9d51cc0b4c543af5ab222b431e0206ad"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a91e3a5bc435593fa2bab7389e47bf0fd" id="r_a91e3a5bc435593fa2bab7389e47bf0fd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structCorner.html">Corner</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structBox.html#a91e3a5bc435593fa2bab7389e47bf0fd">UR</a></td></tr> +<tr class="separator:a91e3a5bc435593fa2bab7389e47bf0fd"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"> +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00033">33</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> +</div><h2 class="groupheader">Member Data Documentation</h2> +<a id="a9d51cc0b4c543af5ab222b431e0206ad" name="a9d51cc0b4c543af5ab222b431e0206ad"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9d51cc0b4c543af5ab222b431e0206ad">&#9670;&#160;</a></span>BL</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="structCorner.html">Corner</a> Box::BL</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00034">34</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> + +</div> +</div> +<a id="a91e3a5bc435593fa2bab7389e47bf0fd" name="a91e3a5bc435593fa2bab7389e47bf0fd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a91e3a5bc435593fa2bab7389e47bf0fd">&#9670;&#160;</a></span>UR</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="structCorner.html">Corner</a> Box::UR</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00035">35</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>/github/workspace/OscClass/<a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structCorner-members.html b/structCorner-members.html new file mode 100644 index 00000000..d95e0ae1 --- /dev/null +++ b/structCorner-members.html @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">Corner Member List</div></div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="structCorner.html">Corner</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structCorner.html#a91d5d3774672bb879c8938a7e8eacdbd">x</a></td><td class="entry"><a class="el" href="structCorner.html">Corner</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structCorner.html#a48b049580abddb5475f8595660129128">y</a></td><td class="entry"><a class="el" href="structCorner.html">Corner</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structCorner.html b/structCorner.html new file mode 100644 index 00000000..90ba4f85 --- /dev/null +++ b/structCorner.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Corner Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Public Attributes</a> &#124; +<a href="structCorner-members.html">List of all members</a> </div> + <div class="headertitle"><div class="title">Corner Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Public Attributes</h2></td></tr> +<tr class="memitem:a91d5d3774672bb879c8938a7e8eacdbd" id="r_a91d5d3774672bb879c8938a7e8eacdbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCorner.html#a91d5d3774672bb879c8938a7e8eacdbd">x</a></td></tr> +<tr class="separator:a91d5d3774672bb879c8938a7e8eacdbd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a48b049580abddb5475f8595660129128" id="r_a48b049580abddb5475f8595660129128"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCorner.html#a48b049580abddb5475f8595660129128">y</a></td></tr> +<tr class="separator:a48b049580abddb5475f8595660129128"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"> +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00028">28</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> +</div><h2 class="groupheader">Member Data Documentation</h2> +<a id="a91d5d3774672bb879c8938a7e8eacdbd" name="a91d5d3774672bb879c8938a7e8eacdbd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a91d5d3774672bb879c8938a7e8eacdbd">&#9670;&#160;</a></span>x</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> Corner::x</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00029">29</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> + +</div> +</div> +<a id="a48b049580abddb5475f8595660129128" name="a48b049580abddb5475f8595660129128"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a48b049580abddb5475f8595660129128">&#9670;&#160;</a></span>y</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> Corner::y</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="OscClass__CUDAProb3_8h_source.html#l00030">30</a> of file <a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a>.</p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>/github/workspace/OscClass/<a class="el" href="OscClass__CUDAProb3_8h_source.html">OscClass_CUDAProb3.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structFastSplineInfo-members.html b/structFastSplineInfo-members.html new file mode 100644 index 00000000..1083e706 --- /dev/null +++ b/structFastSplineInfo-members.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">FastSplineInfo Member List</div></div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="structFastSplineInfo.html">FastSplineInfo</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structFastSplineInfo.html#aeff9dcbf8e31e0e5e105d065f4d72958">CurrSegment</a></td><td class="entry"><a class="el" href="structFastSplineInfo.html">FastSplineInfo</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structFastSplineInfo.html#a3588208caca5261000da06f24f908b37">nPts</a></td><td class="entry"><a class="el" href="structFastSplineInfo.html">FastSplineInfo</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structFastSplineInfo.html#a768e33415a2a6b50e9019d6a74fa5509">splineParsPointer</a></td><td class="entry"><a class="el" href="structFastSplineInfo.html">FastSplineInfo</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structFastSplineInfo.html#a1e1456bf7caf11ea7ddac0047afb4dd1">xPts</a></td><td class="entry"><a class="el" href="structFastSplineInfo.html">FastSplineInfo</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structFastSplineInfo.html b/structFastSplineInfo.html new file mode 100644 index 00000000..998b01e9 --- /dev/null +++ b/structFastSplineInfo.html @@ -0,0 +1,171 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: FastSplineInfo Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Public Attributes</a> &#124; +<a href="structFastSplineInfo-members.html">List of all members</a> </div> + <div class="headertitle"><div class="title">FastSplineInfo Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="Structs_8h_source.html">Structs.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Public Attributes</h2></td></tr> +<tr class="memitem:a3588208caca5261000da06f24f908b37" id="r_a3588208caca5261000da06f24f908b37"><td class="memItemLeft" align="right" valign="top"><a class="el" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFastSplineInfo.html#a3588208caca5261000da06f24f908b37">nPts</a></td></tr> +<tr class="separator:a3588208caca5261000da06f24f908b37"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1e1456bf7caf11ea7ddac0047afb4dd1" id="r_a1e1456bf7caf11ea7ddac0047afb4dd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFastSplineInfo.html#a1e1456bf7caf11ea7ddac0047afb4dd1">xPts</a></td></tr> +<tr class="separator:a1e1456bf7caf11ea7ddac0047afb4dd1"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aeff9dcbf8e31e0e5e105d065f4d72958" id="r_aeff9dcbf8e31e0e5e105d065f4d72958"><td class="memItemLeft" align="right" valign="top"><a class="el" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFastSplineInfo.html#aeff9dcbf8e31e0e5e105d065f4d72958">CurrSegment</a></td></tr> +<tr class="separator:aeff9dcbf8e31e0e5e105d065f4d72958"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a768e33415a2a6b50e9019d6a74fa5509" id="r_a768e33415a2a6b50e9019d6a74fa5509"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFastSplineInfo.html#a768e33415a2a6b50e9019d6a74fa5509">splineParsPointer</a></td></tr> +<tr class="separator:a768e33415a2a6b50e9019d6a74fa5509"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"> +<p class="definition">Definition at line <a class="el" href="Structs_8h_source.html#l00107">107</a> of file <a class="el" href="Structs_8h_source.html">Structs.h</a>.</p> +</div><h2 class="groupheader">Member Data Documentation</h2> +<a id="aeff9dcbf8e31e0e5e105d065f4d72958" name="aeff9dcbf8e31e0e5e105d065f4d72958"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aeff9dcbf8e31e0e5e105d065f4d72958">&#9670;&#160;</a></span>CurrSegment</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a> FastSplineInfo::CurrSegment</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8h_source.html#l00117">117</a> of file <a class="el" href="Structs_8h_source.html">Structs.h</a>.</p> + +</div> +</div> +<a id="a3588208caca5261000da06f24f908b37" name="a3588208caca5261000da06f24f908b37"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3588208caca5261000da06f24f908b37">&#9670;&#160;</a></span>nPts</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="Structs_8h.html#a749fe24f7987a931553ada4bccfc5fb3">__int__</a> FastSplineInfo::nPts</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8h_source.html#l00110">110</a> of file <a class="el" href="Structs_8h_source.html">Structs.h</a>.</p> + +</div> +</div> +<a id="a768e33415a2a6b50e9019d6a74fa5509" name="a768e33415a2a6b50e9019d6a74fa5509"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a768e33415a2a6b50e9019d6a74fa5509">&#9670;&#160;</a></span>splineParsPointer</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* FastSplineInfo::splineParsPointer</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8h_source.html#l00120">120</a> of file <a class="el" href="Structs_8h_source.html">Structs.h</a>.</p> + +</div> +</div> +<a id="a1e1456bf7caf11ea7ddac0047afb4dd1" name="a1e1456bf7caf11ea7ddac0047afb4dd1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1e1456bf7caf11ea7ddac0047afb4dd1">&#9670;&#160;</a></span>xPts</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="Structs_8h.html#a89c686bb1b76a3447db0c4a52e1eab0c">__float__</a>* FastSplineInfo::xPts</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="Structs_8h_source.html#l00113">113</a> of file <a class="el" href="Structs_8h_source.html">Structs.h</a>.</p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>/github/workspace/samplePDF/<a class="el" href="Structs_8h_source.html">Structs.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structfdmc__base-members.html b/structfdmc__base-members.html new file mode 100644 index 00000000..c665ba19 --- /dev/null +++ b/structfdmc__base-members.html @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">fdmc_base Member List</div></div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="structfdmc__base.html">fdmc_base</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a266ecead35a0e2a5f08e89d9989dac50">EScale_pointer</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a0469374786ae2e3e11ddd59bd08fc42a">flavourName</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a377d4784d0f20005a0cfa2dd671d7b5d">flux_w</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#ac4988faabe298f55534aba070186d0b5">isbound</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a3b50812cc57ead329ccf495012cf906e">isNC</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a86b6b78f41e045592074494f960c8128">mode</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a68642e2df5ed3df12633de57599f276a">NeutrinoType</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#abc7c499f714510adc13362187ec541e0">nEvents</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#ae69617156a70dffc091e5e16efab2067">NomXBin</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#abd8d56f6ab427aa3e657707e6ad805f7">NomYBin</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a12160f1e50ecedf3ffaeacd833f31708">ntotal_weight_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#ad17fa8ac568b25cf995d3ee317e339a9">nupdg</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a222ac569ed5f4037392caa0bb0be85aa">nupdgUnosc</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a4e92a2591643f90cbba9b86243f43310">nutype</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#ad8f9b7898527027d84a0278ab8325561">nxsec_norm_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a773bd0b1e143d015dd1631fd3b4a5733">nxsec_spline_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a22d2671171c494171edc77cd6d2b93ac">osc_w</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#ab7a414bc0959c7114aa6cb7be7684948">osc_w_pointer</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a9bdecfa8f4ffd15989d9b9dda3236ab9">Oscillator</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a8bdce59edb6430b7c865832cb264b39e">oscnutype</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a1dd06648b45adb3a7f36fdf3f5620e4e">ProbType</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#aa37a1a1ba95c3cadb92fd135c845a3cf">rw_etru</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#aa7c93fcdf1ecb44af5fb60d9906884b3">rw_lower_lower_xbinedge</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#ac21589725161539db7389ca71cc9d469">rw_lower_xbinedge</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a4db46c63bde006773ccc31054c74d213">rw_truecz</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a914879f08bef429544c23de3547f5485">rw_upper_upper_xbinedge</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#af4abad4b5dc2004648207976d38048d5">rw_upper_xbinedge</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#abef728b31edac3c34700325150cba861">SampleDetID</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#ae94a6b0203acb2effc73bd37d799d4b3">signal</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a1222d10ff4ba2f6a2b2018a81c8ffdae">skdet_pointer</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#afbf315b6d43b5e0de283fc9df180068f">splineFile</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#aff6f0d938f770de0c192d256e8da8dce">Target</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a4c4783b6eb014adbaf180f10e94e7d96">total_w</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a4a17a196cb46bc85da5e7865b83d0f93">total_weight_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a12e69ee22f800b6399bda527c173c455">Unity</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a4f3b63575284bea13073812fd0bfbc5b">x_var</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a8df8a4cead4cdefa450ba754b9e9dece">XBin</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a7421ef3bf4d8d431ae6f0b833cc787cd">xsec_norm_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a8410052c18d9a77efe7b706463262f27">xsec_norms_bins</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#a15da813f6be7afe4011a8380667fc2fb">xsec_spline_pointers</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#a31f571addd744817766ffe4c879a0377">xsec_w</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="odd"><td class="entry"><a class="el" href="structfdmc__base.html#ac4587979647952a6ea2cf6180dcc32ee">y_var</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="structfdmc__base.html#aad146de365062f4891a23018f9b2a035">YBin</a></td><td class="entry"><a class="el" href="structfdmc__base.html">fdmc_base</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/structfdmc__base.html b/structfdmc__base.html new file mode 100644 index 00000000..10765bfd --- /dev/null +++ b/structfdmc__base.html @@ -0,0 +1,873 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: fdmc_base Struct Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#pub-attribs">Public Attributes</a> &#124; +<a href="structfdmc__base-members.html">List of all members</a> </div> + <div class="headertitle"><div class="title">fdmc_base Struct Reference</div></div> +</div><!--header--> +<div class="contents"> + +<p><code>#include &lt;<a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>&gt;</code></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> +Public Attributes</h2></td></tr> +<tr class="memitem:a4e92a2591643f90cbba9b86243f43310" id="r_a4e92a2591643f90cbba9b86243f43310"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a4e92a2591643f90cbba9b86243f43310">nutype</a></td></tr> +<tr class="separator:a4e92a2591643f90cbba9b86243f43310"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8bdce59edb6430b7c865832cb264b39e" id="r_a8bdce59edb6430b7c865832cb264b39e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a8bdce59edb6430b7c865832cb264b39e">oscnutype</a></td></tr> +<tr class="separator:a8bdce59edb6430b7c865832cb264b39e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad17fa8ac568b25cf995d3ee317e339a9" id="r_ad17fa8ac568b25cf995d3ee317e339a9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ad17fa8ac568b25cf995d3ee317e339a9">nupdg</a></td></tr> +<tr class="separator:ad17fa8ac568b25cf995d3ee317e339a9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a222ac569ed5f4037392caa0bb0be85aa" id="r_a222ac569ed5f4037392caa0bb0be85aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a222ac569ed5f4037392caa0bb0be85aa">nupdgUnosc</a></td></tr> +<tr class="separator:a222ac569ed5f4037392caa0bb0be85aa"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae94a6b0203acb2effc73bd37d799d4b3" id="r_ae94a6b0203acb2effc73bd37d799d4b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ae94a6b0203acb2effc73bd37d799d4b3">signal</a></td></tr> +<tr class="separator:ae94a6b0203acb2effc73bd37d799d4b3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abc7c499f714510adc13362187ec541e0" id="r_abc7c499f714510adc13362187ec541e0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#abc7c499f714510adc13362187ec541e0">nEvents</a></td></tr> +<tr class="separator:abc7c499f714510adc13362187ec541e0"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a0469374786ae2e3e11ddd59bd08fc42a" id="r_a0469374786ae2e3e11ddd59bd08fc42a"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a0469374786ae2e3e11ddd59bd08fc42a">flavourName</a></td></tr> +<tr class="separator:a0469374786ae2e3e11ddd59bd08fc42a"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac4988faabe298f55534aba070186d0b5" id="r_ac4988faabe298f55534aba070186d0b5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ac4988faabe298f55534aba070186d0b5">isbound</a></td></tr> +<tr class="separator:ac4988faabe298f55534aba070186d0b5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aff6f0d938f770de0c192d256e8da8dce" id="r_aff6f0d938f770de0c192d256e8da8dce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#aff6f0d938f770de0c192d256e8da8dce">Target</a></td></tr> +<tr class="separator:aff6f0d938f770de0c192d256e8da8dce"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abef728b31edac3c34700325150cba861" id="r_abef728b31edac3c34700325150cba861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#abef728b31edac3c34700325150cba861">SampleDetID</a></td></tr> +<tr class="separator:abef728b31edac3c34700325150cba861"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4f3b63575284bea13073812fd0bfbc5b" id="r_a4f3b63575284bea13073812fd0bfbc5b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a4f3b63575284bea13073812fd0bfbc5b">x_var</a></td></tr> +<tr class="separator:a4f3b63575284bea13073812fd0bfbc5b"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac4587979647952a6ea2cf6180dcc32ee" id="r_ac4587979647952a6ea2cf6180dcc32ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ac4587979647952a6ea2cf6180dcc32ee">y_var</a></td></tr> +<tr class="separator:ac4587979647952a6ea2cf6180dcc32ee"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa37a1a1ba95c3cadb92fd135c845a3cf" id="r_aa37a1a1ba95c3cadb92fd135c845a3cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#aa37a1a1ba95c3cadb92fd135c845a3cf">rw_etru</a></td></tr> +<tr class="separator:aa37a1a1ba95c3cadb92fd135c845a3cf"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8410052c18d9a77efe7b706463262f27" id="r_a8410052c18d9a77efe7b706463262f27"><td class="memItemLeft" align="right" valign="top">std::list&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> &gt; *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a8410052c18d9a77efe7b706463262f27">xsec_norms_bins</a></td></tr> +<tr class="separator:a8410052c18d9a77efe7b706463262f27"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a12e69ee22f800b6399bda527c173c455" id="r_a12e69ee22f800b6399bda527c173c455"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a12e69ee22f800b6399bda527c173c455">Unity</a></td></tr> +<tr class="separator:a12e69ee22f800b6399bda527c173c455"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ad8f9b7898527027d84a0278ab8325561" id="r_ad8f9b7898527027d84a0278ab8325561"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ad8f9b7898527027d84a0278ab8325561">nxsec_norm_pointers</a></td></tr> +<tr class="separator:ad8f9b7898527027d84a0278ab8325561"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a7421ef3bf4d8d431ae6f0b833cc787cd" id="r_a7421ef3bf4d8d431ae6f0b833cc787cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> ***&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a7421ef3bf4d8d431ae6f0b833cc787cd">xsec_norm_pointers</a></td></tr> +<tr class="separator:a7421ef3bf4d8d431ae6f0b833cc787cd"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a773bd0b1e143d015dd1631fd3b4a5733" id="r_a773bd0b1e143d015dd1631fd3b4a5733"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a773bd0b1e143d015dd1631fd3b4a5733">nxsec_spline_pointers</a></td></tr> +<tr class="separator:a773bd0b1e143d015dd1631fd3b4a5733"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a15da813f6be7afe4011a8380667fc2fb" id="r_a15da813f6be7afe4011a8380667fc2fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> ***&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a15da813f6be7afe4011a8380667fc2fb">xsec_spline_pointers</a></td></tr> +<tr class="separator:a15da813f6be7afe4011a8380667fc2fb"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1222d10ff4ba2f6a2b2018a81c8ffdae" id="r_a1222d10ff4ba2f6a2b2018a81c8ffdae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a1222d10ff4ba2f6a2b2018a81c8ffdae">skdet_pointer</a></td></tr> +<tr class="separator:a1222d10ff4ba2f6a2b2018a81c8ffdae"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a266ecead35a0e2a5f08e89d9989dac50" id="r_a266ecead35a0e2a5f08e89d9989dac50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a266ecead35a0e2a5f08e89d9989dac50">EScale_pointer</a></td></tr> +<tr class="separator:a266ecead35a0e2a5f08e89d9989dac50"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a12160f1e50ecedf3ffaeacd833f31708" id="r_a12160f1e50ecedf3ffaeacd833f31708"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a12160f1e50ecedf3ffaeacd833f31708">ntotal_weight_pointers</a></td></tr> +<tr class="separator:a12160f1e50ecedf3ffaeacd833f31708"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4a17a196cb46bc85da5e7865b83d0f93" id="r_a4a17a196cb46bc85da5e7865b83d0f93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> ***&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a4a17a196cb46bc85da5e7865b83d0f93">total_weight_pointers</a></td></tr> +<tr class="separator:a4a17a196cb46bc85da5e7865b83d0f93"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4c4783b6eb014adbaf180f10e94e7d96" id="r_a4c4783b6eb014adbaf180f10e94e7d96"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a4c4783b6eb014adbaf180f10e94e7d96">total_w</a></td></tr> +<tr class="separator:a4c4783b6eb014adbaf180f10e94e7d96"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a8df8a4cead4cdefa450ba754b9e9dece" id="r_a8df8a4cead4cdefa450ba754b9e9dece"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a8df8a4cead4cdefa450ba754b9e9dece">XBin</a></td></tr> +<tr class="separator:a8df8a4cead4cdefa450ba754b9e9dece"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aad146de365062f4891a23018f9b2a035" id="r_aad146de365062f4891a23018f9b2a035"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#aad146de365062f4891a23018f9b2a035">YBin</a></td></tr> +<tr class="separator:aad146de365062f4891a23018f9b2a035"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ae69617156a70dffc091e5e16efab2067" id="r_ae69617156a70dffc091e5e16efab2067"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ae69617156a70dffc091e5e16efab2067">NomXBin</a></td></tr> +<tr class="separator:ae69617156a70dffc091e5e16efab2067"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:abd8d56f6ab427aa3e657707e6ad805f7" id="r_abd8d56f6ab427aa3e657707e6ad805f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#abd8d56f6ab427aa3e657707e6ad805f7">NomYBin</a></td></tr> +<tr class="separator:abd8d56f6ab427aa3e657707e6ad805f7"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a3b50812cc57ead329ccf495012cf906e" id="r_a3b50812cc57ead329ccf495012cf906e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bool</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a3b50812cc57ead329ccf495012cf906e">isNC</a></td></tr> +<tr class="separator:a3b50812cc57ead329ccf495012cf906e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ac21589725161539db7389ca71cc9d469" id="r_ac21589725161539db7389ca71cc9d469"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ac21589725161539db7389ca71cc9d469">rw_lower_xbinedge</a></td></tr> +<tr class="separator:ac21589725161539db7389ca71cc9d469"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:aa7c93fcdf1ecb44af5fb60d9906884b3" id="r_aa7c93fcdf1ecb44af5fb60d9906884b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#aa7c93fcdf1ecb44af5fb60d9906884b3">rw_lower_lower_xbinedge</a></td></tr> +<tr class="separator:aa7c93fcdf1ecb44af5fb60d9906884b3"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:af4abad4b5dc2004648207976d38048d5" id="r_af4abad4b5dc2004648207976d38048d5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#af4abad4b5dc2004648207976d38048d5">rw_upper_xbinedge</a></td></tr> +<tr class="separator:af4abad4b5dc2004648207976d38048d5"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a914879f08bef429544c23de3547f5485" id="r_a914879f08bef429544c23de3547f5485"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a914879f08bef429544c23de3547f5485">rw_upper_upper_xbinedge</a></td></tr> +<tr class="separator:a914879f08bef429544c23de3547f5485"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a86b6b78f41e045592074494f960c8128" id="r_a86b6b78f41e045592074494f960c8128"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a86b6b78f41e045592074494f960c8128">mode</a></td></tr> +<tr class="separator:a86b6b78f41e045592074494f960c8128"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:ab7a414bc0959c7114aa6cb7be7684948" id="r_ab7a414bc0959c7114aa6cb7be7684948"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#ab7a414bc0959c7114aa6cb7be7684948">osc_w_pointer</a></td></tr> +<tr class="separator:ab7a414bc0959c7114aa6cb7be7684948"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a4db46c63bde006773ccc31054c74d213" id="r_a4db46c63bde006773ccc31054c74d213"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a4db46c63bde006773ccc31054c74d213">rw_truecz</a></td></tr> +<tr class="separator:a4db46c63bde006773ccc31054c74d213"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a22d2671171c494171edc77cd6d2b93ac" id="r_a22d2671171c494171edc77cd6d2b93ac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a22d2671171c494171edc77cd6d2b93ac">osc_w</a></td></tr> +<tr class="separator:a22d2671171c494171edc77cd6d2b93ac"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a377d4784d0f20005a0cfa2dd671d7b5d" id="r_a377d4784d0f20005a0cfa2dd671d7b5d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a377d4784d0f20005a0cfa2dd671d7b5d">flux_w</a></td></tr> +<tr class="separator:a377d4784d0f20005a0cfa2dd671d7b5d"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a31f571addd744817766ffe4c879a0377" id="r_a31f571addd744817766ffe4c879a0377"><td class="memItemLeft" align="right" valign="top"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a31f571addd744817766ffe4c879a0377">xsec_w</a></td></tr> +<tr class="separator:a31f571addd744817766ffe4c879a0377"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:afbf315b6d43b5e0de283fc9df180068f" id="r_afbf315b6d43b5e0de283fc9df180068f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsplineFDBase.html">splineFDBase</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#afbf315b6d43b5e0de283fc9df180068f">splineFile</a></td></tr> +<tr class="separator:afbf315b6d43b5e0de283fc9df180068f"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a9bdecfa8f4ffd15989d9b9dda3236ab9" id="r_a9bdecfa8f4ffd15989d9b9dda3236ab9"><td class="memItemLeft" align="right" valign="top">cudaprob3::Propagator&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> &gt; *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a9bdecfa8f4ffd15989d9b9dda3236ab9">Oscillator</a></td></tr> +<tr class="separator:a9bdecfa8f4ffd15989d9b9dda3236ab9"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a1dd06648b45adb3a7f36fdf3f5620e4e" id="r_a1dd06648b45adb3a7f36fdf3f5620e4e"><td class="memItemLeft" align="right" valign="top">cudaprob3::ProbType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a1dd06648b45adb3a7f36fdf3f5620e4e">ProbType</a></td></tr> +<tr class="separator:a1dd06648b45adb3a7f36fdf3f5620e4e"><td class="memSeparator" colspan="2">&#160;</td></tr> +<tr class="memitem:a68642e2df5ed3df12633de57599f276a" id="r_a68642e2df5ed3df12633de57599f276a"><td class="memItemLeft" align="right" valign="top">cudaprob3::NeutrinoType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfdmc__base.html#a68642e2df5ed3df12633de57599f276a">NeutrinoType</a></td></tr> +<tr class="separator:a68642e2df5ed3df12633de57599f276a"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"> +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00005">5</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> +</div><h2 class="groupheader">Member Data Documentation</h2> +<a id="a266ecead35a0e2a5f08e89d9989dac50" name="a266ecead35a0e2a5f08e89d9989dac50"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a266ecead35a0e2a5f08e89d9989dac50">&#9670;&#160;</a></span>EScale_pointer</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::EScale_pointer</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00036">36</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a0469374786ae2e3e11ddd59bd08fc42a" name="a0469374786ae2e3e11ddd59bd08fc42a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0469374786ae2e3e11ddd59bd08fc42a">&#9670;&#160;</a></span>flavourName</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">std::string fdmc_base::flavourName</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00012">12</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a377d4784d0f20005a0cfa2dd671d7b5d" name="a377d4784d0f20005a0cfa2dd671d7b5d"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a377d4784d0f20005a0cfa2dd671d7b5d">&#9670;&#160;</a></span>flux_w</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::flux_w</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00062">62</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ac4988faabe298f55534aba070186d0b5" name="ac4988faabe298f55534aba070186d0b5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac4988faabe298f55534aba070186d0b5">&#9670;&#160;</a></span>isbound</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::isbound</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00013">13</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a3b50812cc57ead329ccf495012cf906e" name="a3b50812cc57ead329ccf495012cf906e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a3b50812cc57ead329ccf495012cf906e">&#9670;&#160;</a></span>isNC</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bool</a>* fdmc_base::isNC</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00047">47</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a86b6b78f41e045592074494f960c8128" name="a86b6b78f41e045592074494f960c8128"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a86b6b78f41e045592074494f960c8128">&#9670;&#160;</a></span>mode</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>** fdmc_base::mode</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00055">55</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a68642e2df5ed3df12633de57599f276a" name="a68642e2df5ed3df12633de57599f276a"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a68642e2df5ed3df12633de57599f276a">&#9670;&#160;</a></span>NeutrinoType</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">cudaprob3::NeutrinoType fdmc_base::NeutrinoType</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00072">72</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="abc7c499f714510adc13362187ec541e0" name="abc7c499f714510adc13362187ec541e0"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abc7c499f714510adc13362187ec541e0">&#9670;&#160;</a></span>nEvents</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::nEvents</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00011">11</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ae69617156a70dffc091e5e16efab2067" name="ae69617156a70dffc091e5e16efab2067"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae69617156a70dffc091e5e16efab2067">&#9670;&#160;</a></span>NomXBin</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::NomXBin</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00044">44</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="abd8d56f6ab427aa3e657707e6ad805f7" name="abd8d56f6ab427aa3e657707e6ad805f7"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abd8d56f6ab427aa3e657707e6ad805f7">&#9670;&#160;</a></span>NomYBin</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::NomYBin</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00045">45</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a12160f1e50ecedf3ffaeacd833f31708" name="a12160f1e50ecedf3ffaeacd833f31708"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a12160f1e50ecedf3ffaeacd833f31708">&#9670;&#160;</a></span>ntotal_weight_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::ntotal_weight_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00038">38</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ad17fa8ac568b25cf995d3ee317e339a9" name="ad17fa8ac568b25cf995d3ee317e339a9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad17fa8ac568b25cf995d3ee317e339a9">&#9670;&#160;</a></span>nupdg</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::nupdg</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00008">8</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a222ac569ed5f4037392caa0bb0be85aa" name="a222ac569ed5f4037392caa0bb0be85aa"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a222ac569ed5f4037392caa0bb0be85aa">&#9670;&#160;</a></span>nupdgUnosc</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::nupdgUnosc</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00009">9</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a4e92a2591643f90cbba9b86243f43310" name="a4e92a2591643f90cbba9b86243f43310"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4e92a2591643f90cbba9b86243f43310">&#9670;&#160;</a></span>nutype</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::nutype</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00006">6</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ad8f9b7898527027d84a0278ab8325561" name="ad8f9b7898527027d84a0278ab8325561"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad8f9b7898527027d84a0278ab8325561">&#9670;&#160;</a></span>nxsec_norm_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::nxsec_norm_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00029">29</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a773bd0b1e143d015dd1631fd3b4a5733" name="a773bd0b1e143d015dd1631fd3b4a5733"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a773bd0b1e143d015dd1631fd3b4a5733">&#9670;&#160;</a></span>nxsec_spline_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::nxsec_spline_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00032">32</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a22d2671171c494171edc77cd6d2b93ac" name="a22d2671171c494171edc77cd6d2b93ac"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a22d2671171c494171edc77cd6d2b93ac">&#9670;&#160;</a></span>osc_w</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::osc_w</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00061">61</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ab7a414bc0959c7114aa6cb7be7684948" name="ab7a414bc0959c7114aa6cb7be7684948"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab7a414bc0959c7114aa6cb7be7684948">&#9670;&#160;</a></span>osc_w_pointer</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>** fdmc_base::osc_w_pointer</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00058">58</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a9bdecfa8f4ffd15989d9b9dda3236ab9" name="a9bdecfa8f4ffd15989d9b9dda3236ab9"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9bdecfa8f4ffd15989d9b9dda3236ab9">&#9670;&#160;</a></span>Oscillator</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">cudaprob3::Propagator&lt;<a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>&gt;* fdmc_base::Oscillator</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00070">70</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a8bdce59edb6430b7c865832cb264b39e" name="a8bdce59edb6430b7c865832cb264b39e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8bdce59edb6430b7c865832cb264b39e">&#9670;&#160;</a></span>oscnutype</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::oscnutype</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00007">7</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a1dd06648b45adb3a7f36fdf3f5620e4e" name="a1dd06648b45adb3a7f36fdf3f5620e4e"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1dd06648b45adb3a7f36fdf3f5620e4e">&#9670;&#160;</a></span>ProbType</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">cudaprob3::ProbType fdmc_base::ProbType</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00071">71</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="aa37a1a1ba95c3cadb92fd135c845a3cf" name="aa37a1a1ba95c3cadb92fd135c845a3cf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa37a1a1ba95c3cadb92fd135c845a3cf">&#9670;&#160;</a></span>rw_etru</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>** fdmc_base::rw_etru</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00021">21</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="aa7c93fcdf1ecb44af5fb60d9906884b3" name="aa7c93fcdf1ecb44af5fb60d9906884b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aa7c93fcdf1ecb44af5fb60d9906884b3">&#9670;&#160;</a></span>rw_lower_lower_xbinedge</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::rw_lower_lower_xbinedge</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00051">51</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ac21589725161539db7389ca71cc9d469" name="ac21589725161539db7389ca71cc9d469"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac21589725161539db7389ca71cc9d469">&#9670;&#160;</a></span>rw_lower_xbinedge</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::rw_lower_xbinedge</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00050">50</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a4db46c63bde006773ccc31054c74d213" name="a4db46c63bde006773ccc31054c74d213"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4db46c63bde006773ccc31054c74d213">&#9670;&#160;</a></span>rw_truecz</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::rw_truecz</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00059">59</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a914879f08bef429544c23de3547f5485" name="a914879f08bef429544c23de3547f5485"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a914879f08bef429544c23de3547f5485">&#9670;&#160;</a></span>rw_upper_upper_xbinedge</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::rw_upper_upper_xbinedge</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00053">53</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="af4abad4b5dc2004648207976d38048d5" name="af4abad4b5dc2004648207976d38048d5"></a> +<h2 class="memtitle"><span class="permalink"><a href="#af4abad4b5dc2004648207976d38048d5">&#9670;&#160;</a></span>rw_upper_xbinedge</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::rw_upper_xbinedge</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00052">52</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="abef728b31edac3c34700325150cba861" name="abef728b31edac3c34700325150cba861"></a> +<h2 class="memtitle"><span class="permalink"><a href="#abef728b31edac3c34700325150cba861">&#9670;&#160;</a></span>SampleDetID</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> fdmc_base::SampleDetID</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00016">16</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ae94a6b0203acb2effc73bd37d799d4b3" name="ae94a6b0203acb2effc73bd37d799d4b3"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ae94a6b0203acb2effc73bd37d799d4b3">&#9670;&#160;</a></span>signal</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">bool</a> fdmc_base::signal</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00010">10</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a1222d10ff4ba2f6a2b2018a81c8ffdae" name="a1222d10ff4ba2f6a2b2018a81c8ffdae"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a1222d10ff4ba2f6a2b2018a81c8ffdae">&#9670;&#160;</a></span>skdet_pointer</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>** fdmc_base::skdet_pointer</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00035">35</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="afbf315b6d43b5e0de283fc9df180068f" name="afbf315b6d43b5e0de283fc9df180068f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#afbf315b6d43b5e0de283fc9df180068f">&#9670;&#160;</a></span>splineFile</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="classsplineFDBase.html">splineFDBase</a>* fdmc_base::splineFile</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00065">65</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="aff6f0d938f770de0c192d256e8da8dce" name="aff6f0d938f770de0c192d256e8da8dce"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aff6f0d938f770de0c192d256e8da8dce">&#9670;&#160;</a></span>Target</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>** fdmc_base::Target</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00014">14</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a4c4783b6eb014adbaf180f10e94e7d96" name="a4c4783b6eb014adbaf180f10e94e7d96"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4c4783b6eb014adbaf180f10e94e7d96">&#9670;&#160;</a></span>total_w</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::total_w</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00040">40</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a4a17a196cb46bc85da5e7865b83d0f93" name="a4a17a196cb46bc85da5e7865b83d0f93"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4a17a196cb46bc85da5e7865b83d0f93">&#9670;&#160;</a></span>total_weight_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>*** fdmc_base::total_weight_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00039">39</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a12e69ee22f800b6399bda527c173c455" name="a12e69ee22f800b6399bda527c173c455"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a12e69ee22f800b6399bda527c173c455">&#9670;&#160;</a></span>Unity</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a> fdmc_base::Unity</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00027">27</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a4f3b63575284bea13073812fd0bfbc5b" name="a4f3b63575284bea13073812fd0bfbc5b"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a4f3b63575284bea13073812fd0bfbc5b">&#9670;&#160;</a></span>x_var</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>** fdmc_base::x_var</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00019">19</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a8df8a4cead4cdefa450ba754b9e9dece" name="a8df8a4cead4cdefa450ba754b9e9dece"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8df8a4cead4cdefa450ba754b9e9dece">&#9670;&#160;</a></span>XBin</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::XBin</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00042">42</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a7421ef3bf4d8d431ae6f0b833cc787cd" name="a7421ef3bf4d8d431ae6f0b833cc787cd"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7421ef3bf4d8d431ae6f0b833cc787cd">&#9670;&#160;</a></span>xsec_norm_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>*** fdmc_base::xsec_norm_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00030">30</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a8410052c18d9a77efe7b706463262f27" name="a8410052c18d9a77efe7b706463262f27"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a8410052c18d9a77efe7b706463262f27">&#9670;&#160;</a></span>xsec_norms_bins</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname">std::list&lt; <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a> &gt;* fdmc_base::xsec_norms_bins</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00024">24</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a15da813f6be7afe4011a8380667fc2fb" name="a15da813f6be7afe4011a8380667fc2fb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a15da813f6be7afe4011a8380667fc2fb">&#9670;&#160;</a></span>xsec_spline_pointers</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">const</a> <a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>*** fdmc_base::xsec_spline_pointers</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00033">33</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="a31f571addd744817766ffe4c879a0377" name="a31f571addd744817766ffe4c879a0377"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a31f571addd744817766ffe4c879a0377">&#9670;&#160;</a></span>xsec_w</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>* fdmc_base::xsec_w</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00063">63</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="ac4587979647952a6ea2cf6180dcc32ee" name="ac4587979647952a6ea2cf6180dcc32ee"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ac4587979647952a6ea2cf6180dcc32ee">&#9670;&#160;</a></span>y_var</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">double</a>** fdmc_base::y_var</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00020">20</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<a id="aad146de365062f4891a23018f9b2a035" name="aad146de365062f4891a23018f9b2a035"></a> +<h2 class="memtitle"><span class="permalink"><a href="#aad146de365062f4891a23018f9b2a035">&#9670;&#160;</a></span>YBin</h2> + +<div class="memitem"> +<div class="memproto"> + <table class="memname"> + <tr> + <td class="memname"><a class="el" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">int</a>* fdmc_base::YBin</td> + </tr> + </table> +</div><div class="memdoc"> + +<p class="definition">Definition at line <a class="el" href="FDMCStruct_8h_source.html#l00043">43</a> of file <a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a>.</p> + +</div> +</div> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li>/github/workspace/samplePDF/<a class="el" href="FDMCStruct_8h_source.html">FDMCStruct.h</a></li> +</ul> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009VNkl<ZcmeI* zOK4PA7{KxW<S|JmGnqI|rb(KahDirA+8B+gVk8A)%pe9yF;+3L5iKZG7xuBS&@L(k z33MTXOIxMHjirbWgs8M;qhM?(_-v^nS(KzU#%Ih_`hB-^XYSm&39)2*I6vmhow@fr z=iKj{vvuv-e;!~uA+biR6pf-n<cdGVuox5<#BBg4c>oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO<q-Bsh$IuZaopT|9E z-75alp&U9s%(|8uI^NA(#AD;nc=%{ivdZX(QFJ7~-yf%_Adjk`W@NhjJTyZ8*;|!n z9=K#TJuZz+={YZ#>8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sT<tBHx6XfOFDx2(ijpMiR>xLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009NNkl<ZcmeI* zUr1D09KiAKIOC-Ar)j4&EoU~y1|7@QCTmeCsMH~fFw#|0OWK8m>Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I<ojWskx{8*sm){4kXJ+p2oO6HY zoL5W7@h*VL_(ZL!7GaSmtl}SWU-XD;q7T4~4ZuW>_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F<o_Z}1zllSWC8!Z+rkFN>={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$M<u9&-IHqnYs=DL+lbi3lG2ysF!p!_2H=p zj-g89hmThki^;JHknVE4V`@zS$(ZbTd?1=dsrXLRiJbUBq7weAmVjEk@rP>j4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6<r_{TVK| literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn<f<Rf3mJ=+uzfrOMlc%s`x4TZtnrR|B~W{ zyZP0m7vvtXV80W5^J2vvp97)4WrPK1-P<H^B$Ll|TGvzm;+92|BpdT89$b1Qf7x5g UZ&RH}7SL`6Pgg&ebxsLQ0A}n&iU0rr literal 0 HcmV?d00001 diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 0000000000000000000000000000000000000000..91c25249869ffe5269c24f8c441e3f1bf75df400 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QYD@)jv*C{Z|_EP9WoGMxiEXC z*+er<&!~9SeFB;qdWZkM*Qnb6=Y<v@&*3w2PyYNmP%60gwdFMP&wo;^^nBV|3(M2* z*jxC7^WBy{T+w*t)CB)8J1;C}`Wg1Eu&qNNCxPc5OM{{Il5M+!8{(pt&)hOwq4#ZF XiX*3<piHC_(0&F_S3j3^P6<r_`0_!v literal 0 HcmV?d00001 diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5cb705488e60fcf30f56fcc951dee74f3b095b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QWc&qjv*C{Z}0jF9dr<AdpNI7 zaOs_6=O($9b?lc?Qk=SJVv5%FA{O^TY1^*qJ@<p}E}!uH_1eoPJ&tpVl={bg{Skd2 zp1FO|;|R90%G3WYZM5AU=A4%H?3qaQhHt%H9G|xYJ)ff*|MmI*zD3`*Z|LP?7d&26 cn!ZiLK0QM$CeyB_80ZEDPgg&ebxsLQ0C?O;!~g&Q literal 0 HcmV?d00001 diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..2489273d4ce1d11d3f7557335244c02b9959351b GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq`U=jv*C{Z|8b*9dZzG*}eKq zLz7a+10_jMu|=F8x0f5va$Ursw|7c<-`q2fuRgxI>y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796<RKfbH6P<&Zg{jpvTk5 g<odruKTrK<y!3{DoqTGTH_#ajp00i_>zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`<jkg7 oB>4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..71c8a470 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/tune_8cpp.html b/tune_8cpp.html new file mode 100644 index 00000000..517b63ec --- /dev/null +++ b/tune_8cpp.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/tune.cpp File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">tune.cpp File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &quot;<a class="el" href="tune_8h_source.html">tune.h</a>&quot;</code><br /> +</div> +<p><a href="tune_8cpp_source.html">Go to the source code of this file.</a></p> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/tune_8cpp_source.html b/tune_8cpp_source.html new file mode 100644 index 00000000..57f5dffd --- /dev/null +++ b/tune_8cpp_source.html @@ -0,0 +1,158 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/tune.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">tune.cpp</div></div> +</div><!--header--> +<div class="contents"> +<a href="tune_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;<a class="code" href="tune_8h.html">tune.h</a>&quot;</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="foldopen" id="foldopen00003" data-start="{" data-end="}"> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"><a class="line" href="classtune.html#afdd12b403a8c6535a58c5499d15bf354"> 3</a></span><a class="code hl_function" href="classtune.html#afdd12b403a8c6535a58c5499d15bf354">tune::tune</a>(std::string name)</div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ff</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a>(name.c_str(), <span class="stringliteral">&quot;READ&quot;</span>);</div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> <a class="code hl_function" href="classtune.html#a38d17743a856c100ed0726bc2e8e0300">init</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ff</a>);</div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">delete</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">ff</a>;</div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span>}</div> +</div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"><a class="line" href="classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d"> 10</a></span><a class="code hl_function" href="classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d">tune::~tune</a>(){}</div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="foldopen" id="foldopen00012" data-start="{" data-end="}"> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classtune.html#a38d17743a856c100ed0726bc2e8e0300"> 12</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classtune.html#a38d17743a856c100ed0726bc2e8e0300">tune::init</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>)</div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span>{</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorF</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">_tune_pars</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TVectorF</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>-&gt;Get(<span class="stringliteral">&quot;step_size&quot;</span>);</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObjArray</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">_par_names</a> = (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObjArray</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>-&gt;Get(<span class="stringliteral">&quot;par_names&quot;</span>);</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a> = <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">_tune_pars</a>-&gt;GetNrows();</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_variable" href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune_pars</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>];</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_variable" href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">par_names</a> = <span class="keyword">new</span> std::string[<a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>];</div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> {</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_variable" href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune_pars</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = (*_tune_pars)(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>);</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_variable" href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">par_names</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>] = std::string(((<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TObjString</a>*)<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">_par_names</a>-&gt;At(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>))-&gt;GetName());</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> }</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span>}</div> +</div> +<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="foldopen" id="foldopen00028" data-start="{" data-end="}"> +<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4"> 28</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4">tune::tuneParameters</a>(<a class="code hl_class" href="classcovarianceBase.html">covarianceBase</a>&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>, <span class="keywordtype">char</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">prefix</a>)</div> +<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>{</div> +<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a> &lt; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov</a>.getSize(); ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>)</div> +<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {</div> +<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">char</span> name[64];</div> +<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">sprintf</a>(name, <span class="stringliteral">&quot;%s%i&quot;</span>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">prefix</a>, <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">i</a>);</div> +<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> = 0; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> &lt; <a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>; ++<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>)</div> +<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {</div> +<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">strcmp</a>(name, <a class="code hl_variable" href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">par_names</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>].<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">c_str</a>()) == 0)</div> +<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> {</div> +<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TF1</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">p</a> = <span class="keyword">new</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TF1</a>(name,<span class="stringliteral">&quot;TMath::Gaus(x,[0],[1])&quot;</span>,-10,10);</div> +<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">p</a>-&gt;SetParameters(0, <a class="code hl_variable" href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune_pars</a>[<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a>]);</div> +<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="comment">//cov.setPropFunct(i, p);</span></div> +<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> std::cout &lt;&lt; <span class="stringliteral">&quot;- Set &quot;</span> &lt;&lt; name &lt;&lt; <span class="stringliteral">&quot; tuning&quot;</span> &lt;&lt; std::endl;</div> +<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">break</span>;</div> +<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> }</div> +<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">j</a> == <a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>-1)</div> +<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {</div> +<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> std::cout &lt;&lt; <span class="stringliteral">&quot;- couldn&#39;t find custom tuning for &quot;</span> &lt;&lt; name &lt;&lt; std::endl;</div> +<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> }</div> +<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> }</div> +<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div> +<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>}</div> +</div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html"><div class="ttname"><a href="classcovarianceBase.html">covarianceBase</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00032">covarianceBase.h:32</a></div></div> +<div class="ttc" id="aclasstune_html_a0f7df63eb1814345ee9fc7f5b65e6da4"><div class="ttname"><a href="classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4">tune::tuneParameters</a></div><div class="ttdeci">void tuneParameters(covarianceBase &amp;cov_obj, char *prefix)</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00028">tune.cpp:28</a></div></div> +<div class="ttc" id="aclasstune_html_a38d17743a856c100ed0726bc2e8e0300"><div class="ttname"><a href="classtune.html#a38d17743a856c100ed0726bc2e8e0300">tune::init</a></div><div class="ttdeci">void init(TFile *file)</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00012">tune.cpp:12</a></div></div> +<div class="ttc" id="aclasstune_html_a44a0787326d639fcacd1a43373883feb"><div class="ttname"><a href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune::tune_pars</a></div><div class="ttdeci">float * tune_pars</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00023">tune.h:23</a></div></div> +<div class="ttc" id="aclasstune_html_a498f43deb4d5c79c58ff7ba0042e6e6d"><div class="ttname"><a href="classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d">tune::~tune</a></div><div class="ttdeci">virtual ~tune()</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00010">tune.cpp:10</a></div></div> +<div class="ttc" id="aclasstune_html_a99baf02eac91c2b6cbdf16556c0a86f0"><div class="ttname"><a href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">tune::par_names</a></div><div class="ttdeci">std::string * par_names</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00024">tune.h:24</a></div></div> +<div class="ttc" id="aclasstune_html_aabd82286e47540764bdc139c9c2c1bf0"><div class="ttname"><a href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">tune::n_pars</a></div><div class="ttdeci">int n_pars</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00025">tune.h:25</a></div></div> +<div class="ttc" id="aclasstune_html_afdd12b403a8c6535a58c5499d15bf354"><div class="ttname"><a href="classtune.html#afdd12b403a8c6535a58c5499d15bf354">tune::tune</a></div><div class="ttdeci">tune(std::string file)</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00003">tune.cpp:3</a></div></div> +<div class="ttc" id="atune_8h_html"><div class="ttname"><a href="tune_8h.html">tune.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/tune_8h.html b/tune_8h.html new file mode 100644 index 00000000..744f5515 --- /dev/null +++ b/tune_8h.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/tune.h File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> </div> + <div class="headertitle"><div class="title">tune.h File Reference</div></div> +</div><!--header--> +<div class="contents"> +<div class="textblock"><code>#include &lt;iostream&gt;</code><br /> +<code>#include &quot;TFile.h&quot;</code><br /> +<code>#include &quot;TVectorF.h&quot;</code><br /> +<code>#include &quot;TObjArray.h&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceBase_8h_source.html">covariance/covarianceBase.h</a>&quot;</code><br /> +<code>#include &quot;<a class="el" href="covarianceOsc_8h_source.html">covariance/covarianceOsc.h</a>&quot;</code><br /> +</div> +<p><a href="tune_8h_source.html">Go to the source code of this file.</a></p> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtune.html">tune</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html> diff --git a/tune_8h_source.html b/tune_8h_source.html new file mode 100644 index 00000000..e3e174e0 --- /dev/null +++ b/tune_8h_source.html @@ -0,0 +1,132 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=11"/> +<meta name="generator" content="Doxygen 1.9.8"/> +<meta name="viewport" content="width=device-width, initial-scale=1"/> +<title>MaCh3: /github/workspace/mcmc/tune.h Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr id="projectrow"> + <td id="projectlogo"><img alt="Logo" src="mach3logo.png"/></td> + <td id="projectalign"> + <div id="projectname">MaCh3<span id="projectnumber">&#160;1.1.0</span> + </div> + <div id="projectbrief">Reference Guide</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.9.8 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +var searchBox = new SearchBox("searchBox", "search/",'.html'); +/* @license-end */ +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +/* @license-end */ +</script> +<div id="main-nav"></div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ +$(document).ready(function() { init_codefold(0); }); +/* @license-end */ +</script> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<div id="MSearchResults"> +<div class="SRPage"> +<div id="SRIndex"> +<div id="SRResults"></div> +<div class="SRStatus" id="Loading">Loading...</div> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +</div> +</div> +</div> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_9d1483aea13a0d690c9337bf5d7dafcd.html">mcmc</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"><div class="title">tune.h</div></div> +</div><!--header--> +<div class="contents"> +<a href="tune_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#pragma once</span></div> +<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div> +<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;iostream&gt;</span></div> +<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div> +<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;TFile.h&quot;</span></div> +<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &quot;TVectorF.h&quot;</span></div> +<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;TObjArray.h&quot;</span></div> +<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div> +<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceBase_8h.html">covariance/covarianceBase.h</a>&quot;</span></div> +<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;<a class="code" href="covarianceOsc_8h.html">covariance/covarianceOsc.h</a>&quot;</span></div> +<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="foldopen" id="foldopen00012" data-start="{" data-end="};"> +<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classtune.html"> 12</a></span><span class="keyword">class </span><a class="code hl_class" href="classtune.html">tune</a> </div> +<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span>{</div> +<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">public</span>:</div> +<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_class" href="classtune.html">tune</a>(std::string <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">virtual</span> <a class="code hl_function" href="classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d">~tune</a>();</div> +<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div> +<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4">tuneParameters</a>(<a class="code hl_class" href="classcovarianceBase.html">covarianceBase</a>&amp; <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">cov_obj</a>, <span class="keywordtype">char</span> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">prefix</a>);</div> +<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div> +<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">private</span>:</div> +<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classtune.html#a38d17743a856c100ed0726bc2e8e0300">init</a>(<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">file</a>);</div> +<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classtune.html#a264f9e35481137d8f4ce75bc517578b8"> 22</a></span> <a class="code hl_function" href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">TFile</a> *<a class="code hl_variable" href="classtune.html#a264f9e35481137d8f4ce75bc517578b8">tune_file</a>;</div> +<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="classtune.html#a44a0787326d639fcacd1a43373883feb"> 23</a></span> <span class="keywordtype">float</span> *<a class="code hl_variable" href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune_pars</a>;</div> +<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0"> 24</a></span> std::string *<a class="code hl_variable" href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">par_names</a>;</div> +<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0"> 25</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">n_pars</a>;</div> +<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span>};</div> +</div> +<div class="ttc" id="aYamlHelper_8h_html_a1a6adcb8b24bfbdcb936ced6812e1b0c"><div class="ttname"><a href="YamlHelper_8h.html#a1a6adcb8b24bfbdcb936ced6812e1b0c">GetFromManager</a></div><div class="ttdeci">Type GetFromManager(const YAML::Node &amp;node, Type defval)</div><div class="ttdef"><b>Definition</b> <a href="YamlHelper_8h_source.html#l00014">YamlHelper.h:14</a></div></div> +<div class="ttc" id="aclasscovarianceBase_html"><div class="ttname"><a href="classcovarianceBase.html">covarianceBase</a></div><div class="ttdef"><b>Definition</b> <a href="covarianceBase_8h_source.html#l00032">covarianceBase.h:32</a></div></div> +<div class="ttc" id="aclasstune_html"><div class="ttname"><a href="classtune.html">tune</a></div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00012">tune.h:13</a></div></div> +<div class="ttc" id="aclasstune_html_a0f7df63eb1814345ee9fc7f5b65e6da4"><div class="ttname"><a href="classtune.html#a0f7df63eb1814345ee9fc7f5b65e6da4">tune::tuneParameters</a></div><div class="ttdeci">void tuneParameters(covarianceBase &amp;cov_obj, char *prefix)</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00028">tune.cpp:28</a></div></div> +<div class="ttc" id="aclasstune_html_a264f9e35481137d8f4ce75bc517578b8"><div class="ttname"><a href="classtune.html#a264f9e35481137d8f4ce75bc517578b8">tune::tune_file</a></div><div class="ttdeci">TFile * tune_file</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00022">tune.h:22</a></div></div> +<div class="ttc" id="aclasstune_html_a38d17743a856c100ed0726bc2e8e0300"><div class="ttname"><a href="classtune.html#a38d17743a856c100ed0726bc2e8e0300">tune::init</a></div><div class="ttdeci">void init(TFile *file)</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00012">tune.cpp:12</a></div></div> +<div class="ttc" id="aclasstune_html_a44a0787326d639fcacd1a43373883feb"><div class="ttname"><a href="classtune.html#a44a0787326d639fcacd1a43373883feb">tune::tune_pars</a></div><div class="ttdeci">float * tune_pars</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00023">tune.h:23</a></div></div> +<div class="ttc" id="aclasstune_html_a498f43deb4d5c79c58ff7ba0042e6e6d"><div class="ttname"><a href="classtune.html#a498f43deb4d5c79c58ff7ba0042e6e6d">tune::~tune</a></div><div class="ttdeci">virtual ~tune()</div><div class="ttdef"><b>Definition</b> <a href="tune_8cpp_source.html#l00010">tune.cpp:10</a></div></div> +<div class="ttc" id="aclasstune_html_a99baf02eac91c2b6cbdf16556c0a86f0"><div class="ttname"><a href="classtune.html#a99baf02eac91c2b6cbdf16556c0a86f0">tune::par_names</a></div><div class="ttdeci">std::string * par_names</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00024">tune.h:24</a></div></div> +<div class="ttc" id="aclasstune_html_aabd82286e47540764bdc139c9c2c1bf0"><div class="ttname"><a href="classtune.html#aabd82286e47540764bdc139c9c2c1bf0">tune::n_pars</a></div><div class="ttdeci">int n_pars</div><div class="ttdef"><b>Definition</b> <a href="tune_8h_source.html#l00025">tune.h:25</a></div></div> +<div class="ttc" id="acovarianceBase_8h_html"><div class="ttname"><a href="covarianceBase_8h.html">covarianceBase.h</a></div></div> +<div class="ttc" id="acovarianceOsc_8h_html"><div class="ttname"><a href="covarianceOsc_8h.html">covarianceOsc.h</a></div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8 +</small></address> +</body> +</html>