File indexing completed on 2025-12-18 09:16:47
0001 #include <string>
0002 #include <TString.h>
0003 #include <TFile.h>
0004 #include <TH2F.h>
0005 #include <TH1F.h>
0006 #include <TF1.h>
0007 #include <TCanvas.h>
0008 #include <TGraphAsymmErrors.h>
0009 #include <TProfile.h>
0010 #include <TLine.h>
0011
0012 float ErrorAdd(float x, float y)
0013 {
0014 return sqrt(x*x+y*y);
0015 }
0016
0017 float ErrTimes(float x, float y, float dx, float dy)
0018 {
0019 return x*y*ErrorAdd(dx/x,dy/y);
0020 }
0021
0022 float ErrDiv(float x, float y, float dx, float dy)
0023 {
0024 return x/y*ErrorAdd(dx/x,dy/y);
0025 }
0026
0027 void extractLevelingEnergyLinearity()
0028 {
0029 string input_5GeV = "/sphenix/user/xusun/TestBeam/ShowerCalibAna/Proto4ShowerInfoRAW_1087.root";
0030 TFile *File_5GeV = TFile::Open(input_5GeV.c_str());
0031
0032 TH2F *h_mAsymmEnergy_pion_5GeV = (TH2F*)File_5GeV->Get("h_mAsymmEnergy_pion_leveling");
0033 TH1F *h_mEnergy_pion_5GeV = (TH1F*)h_mAsymmEnergy_pion_5GeV->ProjectionY()->Clone();
0034
0035 string input_8GeV = "/sphenix/user/xusun/TestBeam/ShowerCalibAna/Proto4ShowerInfoRAW_0422.root";
0036 TFile *File_8GeV = TFile::Open(input_8GeV.c_str());
0037
0038 TH2F *h_mAsymmEnergy_pion_8GeV = (TH2F*)File_8GeV->Get("h_mAsymmEnergy_pion_leveling");
0039 TH1F *h_mEnergy_pion_8GeV = (TH1F*)h_mAsymmEnergy_pion_8GeV->ProjectionY()->Clone();
0040
0041 string input_12GeV = "/sphenix/user/xusun/TestBeam/ShowerCalibAna/Proto4ShowerInfoRAW_0571.root";
0042 TFile *File_12GeV = TFile::Open(input_12GeV.c_str());
0043
0044 TH2F *h_mAsymmEnergy_pion_12GeV = (TH2F*)File_12GeV->Get("h_mAsymmEnergy_pion_leveling");
0045 TH1F *h_mEnergy_pion_12GeV = (TH1F*)h_mAsymmEnergy_pion_12GeV->ProjectionY()->Clone();
0046
0047 string input_60GeV = "/sphenix/user/xusun/TestBeam/ShowerCalibAna/Proto4ShowerInfoRAW_0821.root";
0048 TFile *File_60GeV = TFile::Open(input_60GeV.c_str());
0049
0050 TH2F *h_mAsymmEnergy_pion_60GeV = (TH2F*)File_60GeV->Get("h_mAsymmEnergy_pion");
0051 TH1F *h_mEnergy_pion_60GeV = (TH1F*)h_mAsymmEnergy_pion_60GeV->ProjectionY()->Clone();
0052
0053 TCanvas *c_AsymmEnergy = new TCanvas("c_AsymmEnergy","c_AsymmEnergy",1600,400);
0054 c_AsymmEnergy->Divide(4,1);
0055 for(int i_pad = 0; i_pad < 4; ++i_pad)
0056 {
0057 c_AsymmEnergy->cd(i_pad+1);
0058 c_AsymmEnergy->cd(i_pad+1)->SetLeftMargin(0.15);
0059 c_AsymmEnergy->cd(i_pad+1)->SetBottomMargin(0.15);
0060 c_AsymmEnergy->cd(i_pad+1)->SetTicks(1,1);
0061 c_AsymmEnergy->cd(i_pad+1)->SetGrid(0,0);
0062 }
0063 c_AsymmEnergy->cd(1);
0064 h_mAsymmEnergy_pion_5GeV->Draw("colz");
0065 h_mAsymmEnergy_pion_5GeV->ProfileX("p_mAsymmEnergy_pion_5GeV",1,-1,"i");
0066 p_mAsymmEnergy_pion_5GeV->SetMarkerStyle(20);
0067 p_mAsymmEnergy_pion_5GeV->SetMarkerColor(1);
0068 p_mAsymmEnergy_pion_5GeV->SetMarkerSize(1.0);
0069 p_mAsymmEnergy_pion_5GeV->Draw("pE same");
0070
0071 c_AsymmEnergy->cd(2);
0072 h_mAsymmEnergy_pion_8GeV->Draw("colz");
0073 h_mAsymmEnergy_pion_8GeV->ProfileX("p_mAsymmEnergy_pion_8GeV",1,-1,"i");
0074 p_mAsymmEnergy_pion_8GeV->SetMarkerStyle(20);
0075 p_mAsymmEnergy_pion_8GeV->SetMarkerColor(1);
0076 p_mAsymmEnergy_pion_8GeV->SetMarkerSize(1.0);
0077 p_mAsymmEnergy_pion_8GeV->Draw("pE same");
0078
0079 c_AsymmEnergy->cd(3);
0080 h_mAsymmEnergy_pion_12GeV->Draw("colz");
0081 h_mAsymmEnergy_pion_12GeV->ProfileX("p_mAsymmEnergy_pion_12GeV",1,-1,"i");
0082 p_mAsymmEnergy_pion_12GeV->SetMarkerStyle(20);
0083 p_mAsymmEnergy_pion_12GeV->SetMarkerColor(1);
0084 p_mAsymmEnergy_pion_12GeV->SetMarkerSize(1.0);
0085 p_mAsymmEnergy_pion_12GeV->Draw("pE same");
0086
0087 c_AsymmEnergy->cd(4);
0088 h_mAsymmEnergy_pion_60GeV->Draw("colz");
0089 h_mAsymmEnergy_pion_60GeV->ProfileX("p_mAsymmEnergy_pion_60GeV",1,-1,"i");
0090 p_mAsymmEnergy_pion_60GeV->SetMarkerStyle(20);
0091 p_mAsymmEnergy_pion_60GeV->SetMarkerColor(1);
0092 p_mAsymmEnergy_pion_60GeV->SetMarkerSize(1.0);
0093 p_mAsymmEnergy_pion_60GeV->Draw("pE same");
0094
0095 float mean_energy[4] = {5.0,8.0,12.0,60.0};
0096 float val_mean[4];
0097 float err_mean[4];
0098 float val_sigma[3];
0099 float err_sigma[3];
0100 float val_resolution[3];
0101 float err_resolution[3];
0102
0103 TCanvas *c_Energy = new TCanvas("c_Energy","c_Energy",1600,400);
0104 c_Energy->Divide(4,1);
0105 for(int i_pad = 0; i_pad < 4; ++i_pad)
0106 {
0107 c_Energy->cd(i_pad+1);
0108 c_Energy->cd(i_pad+1)->SetLeftMargin(0.15);
0109 c_Energy->cd(i_pad+1)->SetBottomMargin(0.15);
0110 c_Energy->cd(i_pad+1)->SetTicks(1,1);
0111 c_Energy->cd(i_pad+1)->SetGrid(0,0);
0112 }
0113 c_Energy->cd(1);
0114 h_mEnergy_pion_5GeV->Draw("hE");
0115 TF1 *f_gaus_5GeV = new TF1("f_gaus_5GeV","gaus",0,100);
0116 f_gaus_5GeV->SetParameter(0,1.0);
0117 f_gaus_5GeV->SetParameter(1,h_mEnergy_pion_5GeV->GetMean());
0118 f_gaus_5GeV->SetParameter(2,1.0);
0119 f_gaus_5GeV->SetRange(1.2,2.8);
0120 h_mEnergy_pion_5GeV->Fit(f_gaus_5GeV,"NR");
0121 f_gaus_5GeV->SetLineColor(2);
0122 f_gaus_5GeV->SetLineStyle(2);
0123 f_gaus_5GeV->SetLineWidth(2);
0124 f_gaus_5GeV->Draw("l same");
0125 val_mean[0] = f_gaus_5GeV->GetParameter(1);
0126 err_mean[0] = f_gaus_5GeV->GetParError(1);
0127 val_sigma[0] = f_gaus_5GeV->GetParameter(2);
0128 err_sigma[0] = f_gaus_5GeV->GetParError(2);
0129 val_resolution[0] = val_sigma[0]/val_mean[0];
0130 err_resolution[0] = ErrDiv(val_sigma[0],val_mean[0],err_sigma[0],err_mean[0]);
0131
0132 c_Energy->cd(2);
0133 h_mEnergy_pion_8GeV->Draw("hE");
0134 TF1 *f_gaus_8GeV = new TF1("f_gaus_8GeV","gaus",0,100);
0135 f_gaus_8GeV->SetParameter(0,1.0);
0136 f_gaus_8GeV->SetParameter(1,h_mEnergy_pion_8GeV->GetMean());
0137 f_gaus_8GeV->SetParameter(2,1.0);
0138 f_gaus_8GeV->SetRange(1.0,4.2);
0139 h_mEnergy_pion_8GeV->Fit(f_gaus_8GeV,"NR");
0140 f_gaus_8GeV->SetLineColor(2);
0141 f_gaus_8GeV->SetLineStyle(2);
0142 f_gaus_8GeV->SetLineWidth(2);
0143 f_gaus_8GeV->Draw("l same");
0144 val_mean[1] = f_gaus_8GeV->GetParameter(1);
0145 err_mean[1] = f_gaus_8GeV->GetParError(1);
0146 val_sigma[1] = f_gaus_8GeV->GetParameter(2);
0147 err_sigma[1] = f_gaus_8GeV->GetParError(2);
0148 val_resolution[1] = val_sigma[1]/val_mean[1];
0149 err_resolution[1] = ErrDiv(val_sigma[1],val_mean[1],err_sigma[1],err_mean[1]);
0150
0151 c_Energy->cd(3);
0152 h_mEnergy_pion_12GeV->Draw("hE");
0153 TF1 *f_gaus_12GeV = new TF1("f_gaus_12GeV","gaus",0,100);
0154 f_gaus_12GeV->SetParameter(0,1.0);
0155 f_gaus_12GeV->SetParameter(1,h_mEnergy_pion_12GeV->GetMean());
0156 f_gaus_12GeV->SetParameter(2,1.0);
0157 f_gaus_12GeV->SetRange(1.5,7.0);
0158 h_mEnergy_pion_12GeV->Fit(f_gaus_12GeV,"NR");
0159 f_gaus_12GeV->SetLineColor(2);
0160 f_gaus_12GeV->SetLineStyle(2);
0161 f_gaus_12GeV->SetLineWidth(2);
0162 f_gaus_12GeV->Draw("l same");
0163 val_mean[2] = f_gaus_12GeV->GetParameter(1);
0164 err_mean[2] = f_gaus_12GeV->GetParError(1);
0165 val_sigma[2] = f_gaus_12GeV->GetParameter(2);
0166 err_sigma[2] = f_gaus_12GeV->GetParError(2);
0167 val_resolution[2] = val_sigma[2]/val_mean[2];
0168 err_resolution[2] = ErrDiv(val_sigma[2],val_mean[2],err_sigma[2],err_mean[2]);
0169
0170 c_Energy->cd(4);
0171 h_mEnergy_pion_60GeV->Draw("hE");
0172 TF1 *f_gaus_60GeV = new TF1("f_gaus_60GeV","gaus",0,100);
0173 f_gaus_60GeV->SetParameter(0,1.0);
0174 f_gaus_60GeV->SetParameter(1,h_mEnergy_pion_60GeV->GetMean());
0175 f_gaus_60GeV->SetParameter(2,1.0);
0176 f_gaus_60GeV->SetRange(10.2,30.2);
0177 h_mEnergy_pion_60GeV->Fit(f_gaus_60GeV,"NR");
0178 f_gaus_60GeV->SetLineColor(2);
0179 f_gaus_60GeV->SetLineStyle(2);
0180 f_gaus_60GeV->SetLineWidth(2);
0181 f_gaus_60GeV->Draw("l same");
0182 val_mean[3] = f_gaus_60GeV->GetParameter(1);
0183 err_mean[3] = f_gaus_60GeV->GetParError(1);
0184
0185 c_Energy->SaveAs("../figures/HCAL_ShowerCalib/c_Energy_LevelingCorr.eps");
0186
0187 TGraphAsymmErrors *g_lieanrity = new TGraphAsymmErrors();
0188 TGraphAsymmErrors *g_resolution = new TGraphAsymmErrors();
0189 for(int i_point = 0; i_point < 4; ++i_point)
0190 {
0191 g_lieanrity->SetPoint(i_point,mean_energy[i_point],val_mean[i_point]);
0192 g_lieanrity->SetPointError(i_point,0.0,0.0,err_mean[i_point],err_mean[i_point]);
0193
0194 g_resolution->SetPoint(i_point,mean_energy[i_point],val_resolution[i_point]);
0195 g_resolution->SetPointError(i_point,0.0,0.0,err_resolution[i_point],err_resolution[i_point]);
0196 }
0197
0198 TCanvas *c_Linearity = new TCanvas("c_Linearity","c_Linearity",10,10,800,800);
0199 c_Linearity->cd();
0200 c_Linearity->cd()->SetLeftMargin(0.15);
0201 c_Linearity->cd()->SetBottomMargin(0.15);
0202 c_Linearity->cd()->SetTicks(1,1);
0203 c_Linearity->cd()->SetGrid(0,0);
0204
0205 TH1F *h_play = new TH1F("h_play","h_play",100,0.0,100.0);
0206 for(int i_bin = 0; i_bin < 100; ++i_bin)
0207 {
0208 h_play->SetBinContent(i_bin+1,-10.0);
0209 h_play->SetBinError(i_bin+1,1.0);
0210 }
0211 h_play->SetTitle("");
0212 h_play->SetStats(0);
0213 h_play->GetXaxis()->SetTitle("input Energy (GeV)");
0214 h_play->GetXaxis()->CenterTitle();
0215 h_play->GetXaxis()->SetNdivisions(505);
0216 h_play->GetXaxis()->SetRangeUser(0.0,80.0);
0217
0218 h_play->GetYaxis()->SetTitle("Tower Calibrated Energy (GeV)");
0219 h_play->GetYaxis()->CenterTitle();
0220 h_play->GetYaxis()->SetRangeUser(0.0,40.0);
0221 h_play->DrawCopy("pE");
0222
0223 g_lieanrity->SetMarkerStyle(24);
0224 g_lieanrity->SetMarkerColor(2);
0225 g_lieanrity->SetMarkerSize(1.2);
0226 g_lieanrity->Draw("PE same");
0227
0228 TF1 *f_pol = new TF1("f_pol","pol1",0.0,20.0);
0229 f_pol->SetParameter(0,0.0);
0230 f_pol->SetParameter(1,1.0);
0231 f_pol->SetRange(0.0,80.0);
0232 g_lieanrity->Fit(f_pol,"NR");
0233 f_pol->SetLineColor(2);
0234 f_pol->SetLineStyle(2);
0235 f_pol->SetLineWidth(2);
0236 f_pol->Draw("l same");
0237
0238 c_Linearity->SaveAs("../figures/HCAL_ShowerCalib/c_Linearity_LevelingCorr.eps");
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248 TCanvas *c_Resolution = new TCanvas("c_Resolution","c_Resolution",10,10,800,800);
0249 c_Resolution->cd();
0250 c_Resolution->cd()->SetLeftMargin(0.15);
0251 c_Resolution->cd()->SetBottomMargin(0.15);
0252 c_Resolution->cd()->SetTicks(1,1);
0253 c_Resolution->cd()->SetGrid(0,0);
0254
0255 h_play->GetYaxis()->SetTitle("$DeltaE/<E>");
0256 h_play->GetYaxis()->CenterTitle();
0257 h_play->GetYaxis()->SetRangeUser(0.0,0.8);
0258 h_play->DrawCopy("pE");
0259
0260 g_resolution->SetMarkerStyle(24);
0261 g_resolution->SetMarkerColor(2);
0262 g_resolution->SetMarkerSize(1.2);
0263 g_resolution->Draw("PE same");
0264 }