File indexing completed on 2025-08-05 08:11:18
0001
0002 from optparse import OptionParser
0003 import sys
0004 import os
0005 import datetime
0006 from array import *
0007 from ROOT import *
0008 import numpy
0009 import math
0010 import glob
0011 from plotUtil import *
0012
0013 titlesize = 0.05
0014 labelsize = 0.05
0015 pad1scale = 1.05
0016 pad2scale = 2.6
0017
0018 def fitfunction(fstr):
0019 if fstr == 'powerlaw':
0020 return '[0]*x^(-[1])', 'N#timesx^{-#lambda}'
0021 elif fstr == 'expo':
0022 return '[0]*exp(-x/[1])', 'N#timesexp(-x/#lambda)'
0023 elif fstr == 'pwexp':
0024 return '[0]*x^(-[1])*exp(-x/[2])', 'N#timesx^{-#alpha}#timesexp(-x/#lambda)'
0025 else:
0026 print('Invalid function. Returning powerlaw as default')
0027 return '[0]*x^{-[1]}', 'N#timesx^{-#lambda}'
0028
0029 def FillRandom(h, f, n):
0030 for i in range(n):
0031 h.Fill(f.GetRandom())
0032 return h
0033
0034 gROOT.SetBatch(True)
0035
0036 if __name__ == '__main__':
0037 gStyle.SetPalette(kSolar)
0038 os.makedirs('./ClusPhiSize/', exist_ok=True)
0039
0040 hM_ClusPhiSize_all_sim = GetHistogram('./hists/Sim_Ntuple_HIJING_ana443_20241030/Cluster/hists_merged.root', 'hM_ClusPhiSize_all')
0041 hM_ClusPhiSize_all_data = GetHistogram('./hists/Data_CombinedNtuple_Run54280_HotChannel_BCO/Cluster/hists_merged.root', 'hM_ClusPhiSize_all')
0042
0043 hM_ClusPhiSize_all_sim.Scale(1/hM_ClusPhiSize_all_sim.Integral(-1,-1))
0044 hM_ClusPhiSize_all_data.Scale(1/hM_ClusPhiSize_all_data.Integral(-1,-1))
0045 maxbincontent = max(hM_ClusPhiSize_all_sim.GetMaximum(), hM_ClusPhiSize_all_data.GetMaximum())
0046 minbincontent = min(hM_ClusPhiSize_all_sim.GetMinimum(0), hM_ClusPhiSize_all_data.GetMinimum(0))
0047
0048 fitstr_data, fitleg_data = fitfunction('pwexp')
0049 f_data = TF1('f_data', fitstr_data, 1, 100)
0050 f_data.SetParameter(0, 2.3)
0051 f_data.SetParameter(1, 3.1)
0052 f_data.SetParameter(2, 15)
0053
0054
0055
0056
0057 f_data.SetParNames('N', '#alpha', '#lambda')
0058 f_data.SetLineColorAlpha(kRed+1,0.5)
0059 f_data.Draw()
0060
0061
0062
0063
0064 fitstr_sim, fitleg_sim = fitfunction('pwexp')
0065 f_sim = TF1('f_sim', fitstr_sim, 1, 100)
0066 f_sim.SetParameter(0, 2.9)
0067 f_sim.SetParameter(1, 2.5)
0068 f_sim.SetParameter(2, 4.5)
0069
0070
0071
0072
0073 f_sim.SetParNames('N', '#alpha', '#lambda')
0074 f_sim.SetLineColorAlpha(kTMutCyan,0.5)
0075 f_sim.Draw()
0076
0077
0078
0079
0080
0081 ref_alpha = 3.0
0082 ref_lambda = 4.5
0083 nentires = 10000000
0084 nhists = 6
0085 l_alpha = [1.+0.5*i for i in range(nhists)]
0086 l_lambda = [4.+2*i for i in range(nhists)]
0087 l_hist_fixed_alpha = []
0088 l_hist_fixed_lambda = []
0089 for i in range(nhists):
0090 f_alpha = TF1('f_alpha', fitstr_sim, 1, 100)
0091 f_alpha.SetParameter(0, 1)
0092 f_alpha.SetParameter(1, l_alpha[i])
0093 f_alpha.SetParameter(2, ref_lambda)
0094 h_alpha = TH1F('h_alpha', 'h_alpha', 100, 1, 100)
0095 h_alpha = FillRandom(h_alpha, f_alpha, nentires)
0096
0097 h_alpha.Scale(1/h_alpha.Integral(-1,-1))
0098 l_hist_fixed_alpha.append(h_alpha)
0099
0100 f_lambda = TF1('f_lambda', fitstr_sim, 1, 100)
0101 f_lambda.SetParameter(0, 1)
0102 f_lambda.SetParameter(1, ref_alpha)
0103 f_lambda.SetParameter(2, l_lambda[i])
0104 h_lambda = TH1F('h_lambda', 'h_lambda', 100, 1, 100)
0105 h_lambda = FillRandom(h_lambda, f_lambda, nentires)
0106
0107 h_lambda.Scale(1/h_lambda.Integral(-1,-1))
0108 l_hist_fixed_lambda.append(h_lambda)
0109
0110 c = TCanvas('c','c',800,600)
0111 c.SetLogy()
0112 hM_ClusPhiSize_all_data.SetLineColor(kBlack)
0113 hM_ClusPhiSize_all_data.SetLineWidth(2)
0114 hM_ClusPhiSize_all_data.SetMarkerStyle(20)
0115 hM_ClusPhiSize_all_data.SetMarkerSize(0.8)
0116 hM_ClusPhiSize_all_data.GetYaxis().SetTitle('Normalized Counts')
0117 hM_ClusPhiSize_all_data.GetYaxis().SetTitleOffset(1.5)
0118 hM_ClusPhiSize_all_data.GetYaxis().SetRangeUser(minbincontent*0.5, maxbincontent*10)
0119 hM_ClusPhiSize_all_data.GetYaxis().SetTitleSize(titlesize)
0120 hM_ClusPhiSize_all_data.GetXaxis().SetTitle('Cluster #phi size')
0121 hM_ClusPhiSize_all_data.GetXaxis().SetRangeUser(1, 100)
0122 hM_ClusPhiSize_all_data.GetXaxis().SetTitleSize(titlesize)
0123 hM_ClusPhiSize_all_data.Draw('PE1')
0124 hM_ClusPhiSize_all_sim.SetLineColor(kTVibBlue)
0125 hM_ClusPhiSize_all_sim.SetFillColorAlpha(kTVibBlue, 0.1)
0126 hM_ClusPhiSize_all_sim.SetLineWidth(2)
0127 hM_ClusPhiSize_all_sim.Draw('hist same')
0128 f_data.Draw('same')
0129 f_sim.Draw('same')
0130 c.RedrawAxis()
0131 leg = TLegend(0.5, 0.6, 0.9, 0.9)
0132 leg.AddEntry(hM_ClusPhiSize_all_data, 'Data', 'PE')
0133 leg.AddEntry(hM_ClusPhiSize_all_sim, 'Simulation', 'lf')
0134
0135
0136
0137
0138
0139
0140 leg.AddEntry(f_data, 'Function:' + fitleg_data, 'l')
0141 leg.AddEntry(0, f_data.GetParName(1) + '={:.1f}'.format(f_data.GetParameter(1)) + ', ' + f_data.GetParName(2) + '={:.1f}'.format(f_data.GetParameter(2)), '')
0142 leg.AddEntry(f_sim, 'Function:' + fitleg_sim, 'l')
0143 leg.AddEntry(0, f_sim.GetParName(1) + '={:.1f}'.format(f_sim.GetParameter(1)) + ', ' + f_sim.GetParName(2) + '={:.1f}'.format(f_sim.GetParameter(2)), '')
0144 leg.SetBorderSize(0)
0145 leg.SetFillStyle(0)
0146 leg.SetTextSize(0.035)
0147 leg.Draw()
0148 c.SaveAs('./ClusPhiSize/ClusPhiSize_fit.pdf')
0149 c.SaveAs('./ClusPhiSize/ClusPhiSize_fit.png')
0150
0151
0152 c.Clear()
0153 c.SetLogy()
0154 hM_ClusPhiSize_all_data.GetYaxis().SetRangeUser(minbincontent*0.5, maxbincontent*100)
0155 hM_ClusPhiSize_all_data.Draw('PE1')
0156 hM_ClusPhiSize_all_sim.Draw('hist same')
0157 leg_2 = TLegend(0.3, 0.83, 0.6, 0.9)
0158 leg_2.SetNColumns(2)
0159 leg_2.AddEntry(hM_ClusPhiSize_all_data, 'Data', 'PE')
0160 leg_2.AddEntry(hM_ClusPhiSize_all_sim, 'Simulation', 'lf')
0161 leg_2.SetBorderSize(0)
0162 leg_2.SetFillStyle(0)
0163 leg_2.SetTextSize(0.04)
0164 leg_2.Draw()
0165 leg_alpha = TLegend(0.3, 0.66, 0.6, 0.82)
0166 leg_alpha.SetHeader('Toy model N#timesx^{-#alpha}#timesexp(-x/#lambda), fixed'+ ' #lambda={:.1f}'.format(ref_lambda) + ', varying #alpha')
0167 leg_alpha.SetNColumns(2)
0168 for i in range(nhists):
0169
0170 l_hist_fixed_alpha[i].Draw('same hist PLC')
0171 leg_alpha.AddEntry(l_hist_fixed_alpha[i], '#alpha={:.1f}'.format(l_alpha[i]), 'l')
0172
0173 leg_alpha.SetBorderSize(0)
0174 leg_alpha.SetFillStyle(0)
0175 leg_alpha.SetTextSize(0.04)
0176 leg_alpha.Draw()
0177 c.SaveAs('./ClusPhiSize/ClusPhiSize_toys_fixed_alpha.pdf')
0178 c.SaveAs('./ClusPhiSize/ClusPhiSize_toys_fixed_alpha.png')
0179
0180 c.Clear()
0181 c.SetLogy()
0182 hM_ClusPhiSize_all_data.GetYaxis().SetRangeUser(minbincontent*0.5, maxbincontent*100)
0183 hM_ClusPhiSize_all_data.Draw('PE1')
0184 hM_ClusPhiSize_all_sim.Draw('hist same')
0185 leg_2.Draw()
0186 leg_lambda = TLegend(0.3, 0.66, 0.6, 0.82)
0187 leg_lambda.SetHeader('Toy model N#timesx^{-#alpha}#timesexp(-x/#lambda), fixed' + ' #alpha={:.1f}'.format(ref_alpha) + ', varying #lambda')
0188 leg_lambda.SetNColumns(2)
0189 for i in range(nhists):
0190
0191 l_hist_fixed_lambda[i].Draw('same hist PLC')
0192 leg_lambda.AddEntry(l_hist_fixed_lambda[i], '#lambda={:.1f}'.format(l_lambda[i]), 'l')
0193
0194 leg_lambda.SetBorderSize(0)
0195 leg_lambda.SetFillStyle(0)
0196 leg_lambda.SetTextSize(0.04)
0197 leg_lambda.Draw()
0198 c.SaveAs('./ClusPhiSize/ClusPhiSize_toys_fixed_lambda.pdf')
0199 c.SaveAs('./ClusPhiSize/ClusPhiSize_toys_fixed_lambda.png')