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