# save canvases filled for each energy and eta if calo_init.output(ifile): canvPhi.SaveAs( calo_init.output(ifile) + "_previewPhi_eta" + str(eta) + ".png") else: canvPhi.SaveAs("upstremCorrection_previewPhi_eta" + str(eta) + "_" + str(layer * width) + "cm.png") # fit energy-dependent parameters fitP0 = TF1("fitP0", "pol1", 0, energy) par0result = param0.Fit(fitP0, "SR") fitP1 = TF1("fitP1", "[0]+[1]/sqrt(x)", 0, energy) par1result = param1.Fit(fitP1, "SR") cEnergy = prepare_divided_canvas( 'upstreamParams_eta' + str(eta), 'Energy upstream E=p0+p1E for eta=' + str(eta), 2) cEnergy.cd(1) prepare_graph(param0, "param0", 'P0 (E);' + axisName + '; parameter P0') param0.Draw("aep") param0.GetYaxis().SetRangeUser(param0.GetYaxis().GetXmin(), param0.GetYaxis().GetXmax() * 1.2) cEnergy.cd(2) prepare_graph(param1, "param1", 'P1 (E);' + axisName + '; parameter P1') param1.Draw("aep") param1.GetYaxis().SetRangeUser(param1.GetYaxis().GetXmin(), param1.GetYaxis().GetXmax() * 1.2) cEnergy.Update() # fill energy-dependent graphs par0par0.SetPoint(ieta, eta, par0result.Get().Parameter(0))
hmerged = [] # first merge adjacent layers and get histograms of SF for islice in range(startIndex, Nslices + startIndex): h = TH1F() h = f.Get(histName+str(islice)) # if first hist to be merged lastIm = -1 if islice - startIndex in merge: lastIm += 1 hmerged.append(h) else: hmerged[lastIm].Add(h) gSF = TGraphErrors() # now fit SF with Gaussians if calo_init.args.preview: cPreview = prepare_divided_canvas('preview_e'+str(energy)+'GeV', 'Preview for '+str(energy)+'GeV', Nslicesmerged) fitoptions = "SQR" else: fitoptions = "SQRN" for islice, h in enumerate(hmerged): fitPre = TF1("fitPre","gaus", h.GetMean() - 1. * h.GetRMS(), h.GetMean() + 1. * h.GetRMS()) h.Rebin(1) resultPre = h.Fit(fitPre, fitoptions) fit = TF1("fit","gaus",resultPre.Get().Parameter(1) - 2. * resultPre.Get().Parameter(2), resultPre.Get().Parameter(1) + 2. * resultPre.Get().Parameter(2) ) result = h.Fit(fit, fitoptions) if result and result.Ndf() > 0: # if it fits terribly, try to fit in narrower range if result.Chi2() / result.Ndf() > 10: refit = TF1("refit","gaus",resultPre.Get().Parameter(1) - resultPre.Get().Parameter(2), resultPre.Get().Parameter(1) + resultPre.Get().Parameter(2) ) result = h.Fit(refit, fitoptions) if calo_init.args.preview:
eta = [0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5] Deta = [0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125] P00 = [0.1235, 0.1314, 0.1518, 0.1824, 0.2077, 0.2328, 0.01205] P01 = [0.0004518, 0.0004978, 0.0006698, 0.0009367, 0.00138, 0.00211, 0.003343] P10 = [4.426, 4.312, 4.021, 3.68, 3.324, 2.754, 2.211] P11 = [2.466, 4.068, 4.132, 6.176, 10.52, 14.62, 22.18] from ROOT import TCanvas, TGraphErrors from draw_functions import prepare_graph, prepare_divided_canvas, prepare_single_canvas, draw_text, draw_1histogram c = prepare_divided_canvas( 'etaParameters', 'Upstream energy correction parameters E_{upstream}=(p00(#eta)+p01(#eta)#cdot E) + (p10(#eta)+ p11(#eta)/#sqrt{E})#cdot E', 4 ) g00 = TGraphErrors() g01 = TGraphErrors() g10 = TGraphErrors() g11 = TGraphErrors() for i in range(0,len(eta)): g00.SetPoint(i,eta[i],P00[i]) g00.SetPointError(i,0.125,0) g01.SetPoint(i,eta[i],P01[i]) g01.SetPointError(i,0.125,0) g10.SetPoint(i,eta[i],P10[i]) g10.SetPointError(i,0.125,0) g11.SetPoint(i,eta[i],P11[i]) g11.SetPointError(i,0.125,0) graphs = [g00, g01, g10, g11] parTitles = ['P00', 'P01', 'P10', 'P11'] for igraph, g in enumerate(graphs): pad = c.cd(igraph + 1) prepare_graph(g, parTitles[igraph], parTitles[igraph]+'(#eta);#eta; parameter '+parTitles[igraph]) g.GetXaxis().SetRangeUser(0,eta[len(eta)-1]+0.125) g.Draw("aep")
avgSFerr.append(result.Get().Parameter(2)) hmerged = [] # first merge adjacent layers and get histograms of SF for islice in range(startIndex, Nslices + startIndex): h = f.Get(histName+str(islice)) # if first hist to be merged lastIm = -1 if islice - startIndex in merge: lastIm += 1 hmerged.append(h) else: hmerged[lastIm].Add(h) gSF = TGraphErrors() # now fit SF with Gaussians if calo_init.args.preview: cPreview = prepare_divided_canvas('preview_e'+str(energy)+'GeV', 'Preview for '+str(energy)+'GeV', Nslicesmerged) fitoptions = "SQR" else: fitoptions = "SQRN" for islice, h in enumerate(hmerged): fitPre = TF1("fitPre","gaus", h.GetMean() - 1. * h.GetRMS(), h.GetMean() + 1. * h.GetRMS()) h.Rebin(10) resultPre = h.Fit(fitPre, fitoptions) fit = TF1("fit","gaus",resultPre.Get().Parameter(1) - 2. * resultPre.Get().Parameter(2), resultPre.Get().Parameter(1) + 2. * resultPre.Get().Parameter(2) ) result = h.Fit(fit, fitoptions) if result and result.Ndf() > 0: # if it fits terribly, try to fit in narrower range if result.Chi2() / result.Ndf() > 10: refit = TF1("refit","gaus",resultPre.Get().Parameter(1) - resultPre.Get().Parameter(2), resultPre.Get().Parameter(1) + resultPre.Get().Parameter(2) ) result = h.Fit(refit, fitoptions) if calo_init.args.preview:
legendPhi.SetTextSize(0.05) legendPhi.SetTextFont(42) canvProfile.Update() canvPhi.Update() # save canvases filled for each energy and eta if calo_init.output(ifile): canvPhi.SaveAs(calo_init.output(ifile) + "_previewPhi_eta" + str(eta) + ".png") else: canvPhi.SaveAs("upstremCorrection_previewPhi_eta"+str(eta)+"_"+str(layer*width)+"cm.png") # fit energy-dependent parameters fitP0 = TF1("fitP0","pol1", 0, energy) par0result = param0.Fit(fitP0, "SR") fitP1 = TF1("fitP1","[0]+[1]/sqrt(x)", 0, energy) par1result = param1.Fit(fitP1, "SR") cEnergy = prepare_divided_canvas('upstreamParams_eta'+str(eta), 'Energy upstream E=p0+p1E for eta='+str(eta), 2) cEnergy.cd(1) prepare_graph(param0, "param0", 'P0 (E);'+axisName+'; parameter P0') param0.Draw("aep") param0.GetYaxis().SetRangeUser(param0.GetYaxis().GetXmin(), param0.GetYaxis().GetXmax() * 1.2) cEnergy.cd(2) prepare_graph(param1, "param1", 'P1 (E);'+axisName+'; parameter P1') param1.Draw("aep") param1.GetYaxis().SetRangeUser(param1.GetYaxis().GetXmin(), param1.GetYaxis().GetXmax() * 1.2) cEnergy.Update() # fill energy-dependent graphs par0par0.SetPoint(ieta,eta,par0result.Get().Parameter(0)) par0par0.SetPointError(ieta,etaWidth,par0result.Get().Error(0)) par0par1.SetPoint(ieta,eta,par0result.Get().Parameter(1)) par0par1.SetPointError(ieta,etaWidth,par0result.Get().Error(1))