Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

193 lines
7.7 KiB

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"