194 lines
7.7 KiB
Python
194 lines
7.7 KiB
Python
from ROOT import gROOT, gDirectory, gStyle, TChain, TTree, TAxis, TH1D, TLine, TGaxis
|
|
from Utils import expressionList, variableTag
|
|
from Globals import *
|
|
|
|
def getHistHeight(hist1,hist2):
|
|
minY = 1e3
|
|
maxY = 0.0
|
|
for b in xrange(hist1.GetXaxis().GetNbins()): #hist1 and hist2 have same nBins
|
|
maxTmp = max(hist1.GetBinContent(b+1),hist2.GetBinContent(b+1))
|
|
if (maxY < maxTmp): maxY = maxTmp
|
|
minTmp = min(hist1.GetBinContent(b+1),hist2.GetBinContent(b+1))
|
|
if (minY > minTmp): minY = minTmp
|
|
if (minY < 0.0): minY = 1.1*minY
|
|
else: minY = 0.001
|
|
|
|
return minY, maxY*1.1
|
|
|
|
def defineXAxisLabels(variable1,variable2):
|
|
|
|
xTag = variable1.replace("TMath::","")
|
|
for expr in expressionList():
|
|
xTag = variable1.replace(expr.lower(),expr)
|
|
|
|
if (variable1==variable2):
|
|
return xTag
|
|
else:
|
|
xTag2 = variable2.replace("TMath::","")
|
|
for expr in expressionList():
|
|
xTag2 = variable2.replace(expr.lower(),expr)
|
|
return xTag + " vs " + xTag2 #TODO
|
|
|
|
|
|
def makePlot(hist1, hist2, histRatio, pad1, pad2, xAxisTitle, Min, Max, lowerPlotHeight = 0.6):
|
|
|
|
textsize = gStyle.GetTextSize();
|
|
|
|
# modifiy pad for the ratio plot
|
|
pad1.Clear()
|
|
pad1.SetBorderSize (0)
|
|
pad1.SetBottomMargin(1e-6)
|
|
pad1.SetTopMargin(pad1.GetTopMargin() / ( 1.0 - lowerPlotHeight) )
|
|
pad1.cd()
|
|
|
|
#Set XAxis of the ratio plot #TODO
|
|
TGaxis().SetExponentOffset(1e+9,1e+9,"y") #offset = pad size * 1e+7
|
|
histRatio.GetXaxis().SetNoExponent() #<-- spoils MaxDigits settings, so don't use it on other axis
|
|
histRatio.GetXaxis().SetLabelSize(0.0) #don't print labels
|
|
histRatio.GetXaxis().SetRangeUser(Min, Max)
|
|
histRatio.GetXaxis().SetTickLength(histRatio.GetXaxis().GetTickLength()/(1-lowerPlotHeight))
|
|
histRatio.GetXaxis().SetNdivisions(gStyle.GetNdivisions("X"))
|
|
|
|
#Set YAxis of the ratio plot
|
|
histRatio.GetYaxis().SetTitle("ratio red/black")
|
|
histRatio.GetYaxis().SetTitleSize(textsize/(1-lowerPlotHeight))
|
|
histRatio.GetYaxis().SetLabelSize(textsize/(1-lowerPlotHeight))
|
|
histRatio.GetYaxis().SetTickLength(histRatio.GetYaxis().GetTickLength())
|
|
histRatio.GetYaxis().SetNdivisions(gStyle.GetNdivisions("Y"))
|
|
histRatio.GetYaxis().SetTitleOffset(1.06*(1-lowerPlotHeight))
|
|
histRatio.GetYaxis().SetRangeUser(0.001, 3)
|
|
histRatio.Draw("E1")
|
|
|
|
#Add a line at ratio = 1
|
|
unityline2 = TLine(Min, 0.8, Max, 1.0)
|
|
unityline2.SetLineStyle(2)
|
|
unityline2.SetLineColor(4)
|
|
unityline2.Draw()
|
|
|
|
|
|
#Clear pad for the comparison plot
|
|
pad2.Clear()
|
|
pad2.SetBorderSize(0)
|
|
pad2.SetTopMargin(1e-6)
|
|
pad2.SetBottomMargin(pad2.GetBottomMargin() / lowerPlotHeight )
|
|
pad2.cd()
|
|
|
|
#Set XAxis of the comparison plot
|
|
TGaxis().SetExponentOffset(1e+9,1e+9,"x") #offset = pad size * 1e+7
|
|
hist1.GetXaxis().SetTitleOffset(1.05)
|
|
hist1.GetXaxis().SetTitleSize (textsize/lowerPlotHeight)
|
|
hist1.GetXaxis().SetLabelSize (textsize/lowerPlotHeight)
|
|
hist1.GetXaxis().SetTickLength (histRatio.GetXaxis().GetTickLength()/(lowerPlotHeight/(1-lowerPlotHeight)))
|
|
hist1.GetXaxis().SetNdivisions (gStyle.GetNdivisions("X"))
|
|
hist1.GetXaxis().SetTitle(xAxisTitle)
|
|
hist1.GetXaxis().SetRangeUser(Min, Max)
|
|
|
|
|
|
#Set YAxis of the comparison plot
|
|
minY, maxY = getHistHeight(hist1,hist2)
|
|
hist1.GetYaxis().SetRangeUser(minY,maxY)
|
|
hist1.GetYaxis().SetTitle("weighted events")
|
|
hist1.GetYaxis().SetLabelSize (textsize/lowerPlotHeight)
|
|
hist1.GetYaxis().SetTitleSize (textsize/lowerPlotHeight)
|
|
hist1.GetYaxis().SetTickLength(histRatio.GetYaxis().GetTickLength())
|
|
hist1.GetYaxis().SetNdivisions (gStyle.GetNdivisions("Y"))
|
|
hist1.GetYaxis().SetTitleOffset(1.06*lowerPlotHeight)
|
|
hist1.Draw("E1")
|
|
|
|
hist2.SetLineColor(2)
|
|
hist2.SetMarkerColor(2)
|
|
hist2.Draw("E1SAME")
|
|
|
|
return
|
|
|
|
def defineLegendTags(optionsDict1, optionsDict2):
|
|
tag1 = "" #initialize empty strings for tags
|
|
tag2 = ""
|
|
|
|
for key in optionsDict1:
|
|
if (optionsDict1[key] != optionsDict2[key]):
|
|
if (key == 'year' or key == 'magnet'):
|
|
tag1 = tag1 + " " + str(optionsDict1[key])
|
|
tag2 = tag2 + " " + str(optionsDict2[key])
|
|
elif (key == 'Run'):
|
|
tag1 = tag1 + " Run" + optionsDict1[key]
|
|
tag2 = tag2 + " Tun" + optionsDict2[key]
|
|
else:
|
|
if(optionsDict1[key]): tag1 = tag1 + " " + key
|
|
if(optionsDict2[key]): tag2 = tag2 + " " + key
|
|
|
|
return tag1, tag2
|
|
|
|
|
|
|
|
|
|
def getPlotFileName(variable1, optionsDict1, cut1, variable2, optionsDict2, cut2):
|
|
|
|
#First define dataset tag
|
|
if ( optionsDict1["year"] != optionsDict2["year"] or optionsDict1["magnet"] != optionsDict1["magnet"]):
|
|
plotName = str(optionsDict1["year"]) + str(optionsDict1["magnet"])+ "_" + str(optionsDict2["year"]) + str(optionsDict2["magnet"])
|
|
else:
|
|
plotName = str(optionsDict1["year"]) + str(optionsDict1["magnet"])
|
|
|
|
#Define name tag
|
|
if (variable1==variable2):
|
|
plotName = plotName + "_" + variableTag(variable1)
|
|
else:
|
|
plotName = plotName + "_" + variableTag(variable2) + "_" + variableTag(variable1)
|
|
|
|
#Define sample tag
|
|
if (optionsDict1["MC"]): plotName1 = "MC"
|
|
else: plotName1 = "data"
|
|
if (optionsDict1["Preselected"]):
|
|
plotName1 = plotName1 + "_Presel"
|
|
if (optionsDict1["BDTed"]):
|
|
plotName1 = plotName1 + "_BDTed"
|
|
else: plotName1 = plotName1 + "_Strip"
|
|
if (KshortChannel()):
|
|
if (optionsDict1["KshortDecaysInVelo"]): plotName1 = plotName1 + "_LL"
|
|
else: plotName1 = plotName1 + "_DD"
|
|
|
|
if (optionsDict2["MC"]): plotName2 = "MC"
|
|
else: plotName2 = "data"
|
|
if (optionsDict2["Preselected"]):
|
|
plotName2 = plotName2 + "_Presel"
|
|
if (optionsDict2["BDTed"]):
|
|
plotName2 = plotName2 + "_BDTed"
|
|
else: plotName2 = plotName2 + "_Strip"
|
|
if (KshortChannel()):
|
|
if (optionsDict2["KshortDecaysInVelo"]): plotName2 = plotName2 + "_LL"
|
|
else: plotName2 = plotName2 + "_DD"
|
|
|
|
#Define MC/data tags
|
|
if (optionsDict1["MC"]):
|
|
for keyMC in ['TM','ReferenceChannel', 'PHSP','bWeighted', 'b2Dweighted']: #TODO possibly add branch name
|
|
if(optionsDict1[keyMC]): plotName1 = plotName1 + "_" + keyMC
|
|
else:
|
|
if(optionsDict1["sWeighted"]): plotName1 = plotName1 + "_sWeighted"
|
|
|
|
if (optionsDict2["MC"]):
|
|
for keyMC in ['TM','ReferenceChannel', 'PHSP','bWeighted', 'b2Dweighted']:
|
|
if(optionsDict2[keyMC]): plotName2 = plotName2 + "_" + keyMC
|
|
else:
|
|
if(optionsDict2["sWeighted"]): plotName2 = plotName2 + "_sWeighted"
|
|
|
|
# if (optionsDict1["UseLowQ2Range"]) plotName1 = plotName1 + "_LowQ2"
|
|
# else: plotName1 = plotName1 + "_HighQ2"
|
|
# if (optionsDict2["UseLowQ2Range"]) plotName2 = plotName2 + "_LowQ2"
|
|
# else: plotName2 = plotName2 + "_HighQ2"
|
|
|
|
#Strinp the extra cut on TM
|
|
if (optionsDict1["TM"] and ("TMedBKGCAT=1" in cut1)): cut1 = cut1.replace("TMedBKGCAT=1","",-1)
|
|
if (optionsDict2["TM"] and ("TMedBKGCAT=1" in cut2)): cut2 = cut2.replace("TMedBKGCAT=1","",-1)
|
|
|
|
plotName1 = (plotName1 + "_"+variableTag(cut1)) if (cut1 != "") else plotName1
|
|
plotName2 = (plotName2 + "_"+variableTag(cut2)) if (cut2 != "") else plotName2
|
|
|
|
plotName = plotName + "_" + plotName1 + "_" + plotName2
|
|
plotName = plotName.replace(" ","")
|
|
|
|
if (KshortChannel()):
|
|
return "/auto/data/dgerick/B2Kstmumu/compare_plots/" + plotName + ".eps"
|
|
else:
|
|
return "/home/lhcb/kopecna/B2KstarMuMu/data/compare_plots/" + plotName + ".eps"
|