Beispiel #1
0
            # 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:
Beispiel #3
0
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))