File indexing completed on 2025-12-16 09:18:02
0001 #include <iostream>
0002 #include <string>
0003 #include <vector>
0004 #include <TChain.h>
0005 #include <TTree.h>
0006 #include <TH1F.h>
0007 #include <TFile.h>
0008 #include <TMath.h>
0009 #include <TProfile.h>
0010
0011 void Pt_reso_vspt()
0012 {
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 TFile *infile = TFile::Open("/mnt/e/sphenix/INTT-EMCAL/InttSeedingTrackDev/ML4Reco/combine2_gate/outputFile/pt_relative_error_combined.root");
0025
0026
0027
0028
0029
0030 TH2D *h2 = (TH2D *)infile->Get("h2_pt_vs_relerr_0.0_10.0");
0031 if (!h2)
0032 {
0033 std::cerr << "Error: Cannot find h2_ptreso!" << std::endl;
0034 infile->Close();
0035 return;
0036 }
0037
0038
0039
0040
0041
0042
0043
0044 TFile *outfile = new TFile("../output/ML/projected_e_ptreso_ML_Combined.root", "RECREATE");
0045
0046
0047 int nxbins = h2->GetNbinsX();
0048 int group_size = 1;
0049 int n_groups = 100 / group_size;
0050 if (nxbins % group_size != 0) n_groups += 1;
0051
0052
0053 std::vector<double> vec_pt_center;
0054 std::vector<double> vec_mean, vec_mean_err;
0055 std::vector<double> vec_sigma, vec_sigma_err;
0056
0057 for (int i = 5; i < n_groups; ++i)
0058 {
0059 int first_bin = i * group_size + 1;
0060 int last_bin = std::min((i + 1) * group_size, nxbins);
0061
0062
0063 TString proj_name = Form("proj_y_binGroup%d", i);
0064 TString proj_title = Form("Phi_truth - Phi_reco %d to %d GeV", i, i+1);
0065 TH1D *proj = h2->ProjectionY(proj_name, first_bin, last_bin);
0066 proj->SetTitle(proj_title);
0067
0068
0069 int peak_bin = proj->GetMaximumBin();
0070 double peak_center = proj->GetBinCenter(peak_bin);
0071
0072
0073 int nBins = proj->GetNbinsX();
0074 std::vector<std::pair<double,int>> bins;
0075 bins.reserve(nBins);
0076
0077 for (int i = 1; i <= nBins; ++i) {
0078 bins.emplace_back(proj->GetBinContent(i), i);
0079 }
0080
0081
0082 std::sort(bins.begin(), bins.end(),
0083 [](auto &a, auto &b){ return a.first > b.first; });
0084
0085
0086 int nPeaks = 3;
0087 double sumCenters = 0;
0088 for (int i = 0; i < nPeaks && i < (int)bins.size(); ++i) {
0089 int bin = bins[i].second;
0090 sumCenters += proj->GetBinCenter(bin);
0091 }
0092
0093
0094 double peak_center_avg = sumCenters / nPeaks;
0095
0096
0097
0098 TF1 *fit_func = new TF1(Form("gaus_fit_%d", i), "gaus", peak_center_avg - 0.10, peak_center_avg + 0.10);
0099 proj->Fit(fit_func, "RQ");
0100
0101
0102 double fit_mean = fit_func->GetParameter(1);
0103 double fit_mean_err = fit_func->GetParError(1);
0104 double fit_sigma = fit_func->GetParameter(2);
0105 double fit_sigma_err = fit_func->GetParError(2);
0106
0107
0108 double pt_low = h2->GetXaxis()->GetBinLowEdge(first_bin);
0109 double pt_high = h2->GetXaxis()->GetBinUpEdge(last_bin);
0110 double pt_center = 0.5 * (pt_low + pt_high);
0111
0112
0113 vec_pt_center.push_back(pt_center);
0114 vec_mean.push_back(fit_mean);
0115 vec_mean_err.push_back(fit_mean_err);
0116 vec_sigma.push_back(fit_sigma);
0117 vec_sigma_err.push_back(fit_sigma_err);
0118
0119
0120 proj->Write();
0121
0122 }
0123
0124
0125 int npoints = vec_pt_center.size();
0126 TGraphErrors *gr_mean = new TGraphErrors(npoints);
0127 TGraphErrors *gr_sigma = new TGraphErrors(npoints);
0128
0129 for (int i = 0; i < npoints; ++i)
0130 {
0131 gr_mean->SetPoint(i, vec_pt_center[i], vec_mean[i]);
0132 gr_mean->SetPointError(i, 0.0, vec_mean_err[i]);
0133
0134 gr_sigma->SetPoint(i, vec_pt_center[i], vec_sigma[i]);
0135 gr_sigma->SetPointError(i, 0.0, vec_sigma_err[i]);
0136 }
0137
0138 gr_mean->SetTitle("Peak value vs Pt;Pt (GeV);Peak Mean");
0139 gr_mean->SetMarkerStyle(20);
0140 gr_mean->SetMarkerColor(kBlue);
0141
0142 gr_sigma->SetMinimum(0.0);
0143 gr_sigma->SetMaximum(0.2);
0144 gr_sigma->SetTitle("Resolution (Sigma) vs Pt;Pt (GeV);Sigma");
0145 gr_sigma->SetMarkerStyle(21);
0146 gr_sigma->SetMarkerColor(kRed);
0147
0148
0149 gr_mean->Write("gr_mean_vs_pt");
0150 gr_sigma->Write("gr_sigma_vs_pt");
0151
0152
0153 TCanvas *c1 = new TCanvas("c1", "Peak Mean vs Pt", 800, 600);
0154 gr_mean->Draw("AP");
0155 c1->SaveAs("../output/mean_vs_pt.pdf");
0156
0157 TCanvas *c2 = new TCanvas("c2", "Sigma vs Pt", 800, 600);
0158 gr_sigma->Draw("AP");
0159 c2->SaveAs("../output/sigma_vs_pt.pdf");
0160
0161
0162 outfile->Close();
0163 infile->Close();
0164
0165 std::cout << "Done. Projected TH1D saved to root file" << std::endl;
0166 }