File indexing completed on 2025-12-17 09:18:15
0001 #include <TSystem.h>
0002 #include <TStopwatch.h>
0003 #include <iostream>
0004 #include <vector>
0005
0006 #include "PtCalculator.h" // SiCaloPt::PtCalculator & friends
0007
0008
0009 struct DemoPaths
0010 {
0011 std::string emd_onnx = "/sphenix/user/jzhang1/testcode4all/INTT-EMCAL/InttSeedingTrackDev/ML4Reco/Implement/ML_Weight_Scaler/model_MLEMD.onnx";
0012 std::string emd_scaler_json = "";
0013
0014 std::string eproj_onnx = "/sphenix/user/jzhang1/testcode4all/INTT-EMCAL/InttSeedingTrackDev/ML4Reco/Implement/ML_Weight_Scaler/model_MLEproj.onnx";
0015 std::string eproj_scaler_json = "/sphenix/user/jzhang1/testcode4all/INTT-EMCAL/InttSeedingTrackDev/ML4Reco/Implement/ML_Weight_Scaler/scaler_MLEproj.json";
0016
0017 std::string combined_onnx = "/sphenix/user/jzhang1/testcode4all/INTT-EMCAL/InttSeedingTrackDev/ML4Reco/Implement/ML_Weight_Scaler/model_MLCombined.onnx";
0018 std::string combined_scaler_json = "";
0019 };
0020
0021
0022 template<typename Opt>
0023 Opt make_opt(const std::string& s)
0024 {
0025 if (s.empty()) return std::nullopt;
0026 return s;
0027 }
0028
0029
0030 void PtCalcMLTutorial()
0031 {
0032
0033 gSystem->Load("libPtCalc.so");
0034
0035
0036
0037 DemoPaths WS_Path;
0038
0039
0040 SiCaloPt::PtCalculatorConfig cfg;
0041 cfg.mlEMD_model_path = make_opt<decltype(cfg.mlEMD_model_path)>(WS_Path.emd_onnx);
0042 cfg.mlEMD_scaler_json = make_opt<decltype(cfg.mlEMD_scaler_json)>(WS_Path.emd_scaler_json);
0043 cfg.mlEproj_model_path = make_opt<decltype(cfg.mlEproj_model_path)>(WS_Path.eproj_onnx);
0044 cfg.mlEproj_scaler_json = make_opt<decltype(cfg.mlEproj_scaler_json)>(WS_Path.eproj_scaler_json);
0045 cfg.mlCombined_model_path = make_opt<decltype(cfg.mlCombined_model_path)>(WS_Path.combined_onnx);
0046 cfg.mlCombined_scaler_json = make_opt<decltype(cfg.mlCombined_scaler_json)>(WS_Path.combined_scaler_json);
0047
0048
0049 SiCaloPt::PtCalculator calcTutorial(cfg);
0050
0051
0052 std::string err;
0053 if (!calcTutorial.init(&err))
0054 {
0055 std::cout << "[init] failed: " << err << std::endl;
0056 return;
0057 }
0058 std::cout << "[init] OK\n";
0059
0060
0061 {
0062 SiCaloPt::InputEMD in;
0063 in.EMD_Angle = 0.025;
0064 in.EMD_Eta = 0.00;
0065 in.EMD_Radius = 93.5;
0066
0067 calcTutorial.setParCeta(0.2);
0068 calcTutorial.setParPower(-1.0);
0069
0070 auto r = calcTutorial.ComputePt(SiCaloPt::Method::MethodEMD, SiCaloPt::AnyInput{in});
0071 std::cout << "[EMD-analytic] ok=" << r.ok
0072 << " pt=" << r.pt_reco
0073 << " err=\"" << r.err << "\"\n";
0074 }
0075
0076
0077 {
0078 SiCaloPt::InputEproj in;
0079 in.Energy_Calo = 1.8;
0080 in.Radius_Calo = 93.5;
0081 in.Z_Calo = 0.0;
0082 in.Radius_vertex = 0.0;
0083 in.Z_vertex = 0.0;
0084
0085 auto r = calcTutorial.ComputePt(SiCaloPt::Method::MethodEproj, SiCaloPt::AnyInput{in});
0086 std::cout << "[Eproj-analytic] ok=" << r.ok
0087 << " pt=" << r.pt_reco
0088 << " err=\"" << r.err << "\"\n";
0089 }
0090
0091
0092 {
0093
0094 std::vector<float> featsMLEMD = {15, 0};
0095
0096 SiCaloPt::InputMLEMD in{featsMLEMD};
0097 auto r = calcTutorial.ComputePt(SiCaloPt::Method::MethodMLEMD, SiCaloPt::AnyInput{in});
0098 std::cout << "[MLEMD-2D] ok=" << r.ok
0099 << " pt=" << r.pt_reco
0100 << " err=\"" << r.err << "\"\n";
0101 }
0102
0103
0104 {
0105
0106 std::vector<float> featsMLEproj = { 10.0, 5.0,
0107 15.0, 7.5,
0108 100.0, 50.0, 8.0 };
0109
0110 SiCaloPt::InputMLEproj in{featsMLEproj};
0111 auto r = calcTutorial.ComputePt(SiCaloPt::Method::MethodMLEproj, SiCaloPt::AnyInput{in});
0112 std::cout << "[MLEproj-7D] ok=" << r.ok
0113 << " pt=" << r.pt_reco
0114 << " err=\"" << r.err << "\"\n";
0115 }
0116
0117
0118 {
0119
0120 std::vector<float> featsMLCombined = {8.0, 9.5};
0121
0122 SiCaloPt::InputMLCombined in{featsMLCombined};
0123 auto r = calcTutorial.ComputePt(SiCaloPt::Method::MethodMLCombined, SiCaloPt::AnyInput{in});
0124 std::cout << "[MLCombined] ok=" << r.ok
0125 << " pt=" << r.pt_reco
0126 << " err=\"" << r.err << "\"\n";
0127 }
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153 }