Skip to content

Commit

Permalink
Add possibility to compare uncertainties
Browse files Browse the repository at this point in the history
  • Loading branch information
fgrosa committed May 27, 2020
1 parent 3d2b8f6 commit d1acbb1
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 6 deletions.
65 changes: 59 additions & 6 deletions comparisons/CompareGraphs.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,23 @@
ratioUncCorr = inputCfg['options']['ratio']['uncertainties']['corr']
displayRMS = inputCfg['options']['ratio']['displayRMS']

doCompareUnc = inputCfg['options']['errcomp']['enable']
compareRelUnc = inputCfg['options']['errcomp']['relative']

wCanv = inputCfg['options']['canvas']['width']
hCanv = inputCfg['options']['canvas']['heigth']
xLimits = inputCfg['options']['canvas']['xlimits']
yLimits = inputCfg['options']['canvas']['ylimits']
yLimitsRatio = inputCfg['options']['canvas']['ylimitsratio']
yLimitsUnc = inputCfg['options']['canvas']['ylimitserr']
xTitle = inputCfg['options']['canvas']['xaxistitle']
yTitle = inputCfg['options']['canvas']['yaxistitle']
logX = inputCfg['options']['canvas']['logx']
logY = inputCfg['options']['canvas']['logy']
ratioLogX = inputCfg['options']['canvas']['ratio']['logx']
ratioLogY = inputCfg['options']['canvas']['ratio']['logy']
uncCompLogX = inputCfg['options']['canvas']['errcomp']['logx']
uncCompLogY = inputCfg['options']['canvas']['errcomp']['logy']

xLegLimits = inputCfg['options']['legend']['xlimits']
yLegLimits = inputCfg['options']['legend']['ylimits']
Expand All @@ -65,7 +71,7 @@
leg.SetFillStyle(0)
leg.SetTextSize(legTextSize)

hToCompare, hRatioToCompare = [], []
hToCompare, hRatioToCompare, hUncToCompare = [], [], []
for iFile, (inFileName, objName, objType, scale, color, marker) in \
enumerate(zip(inFileNames, objNames, objTypes, scales, colors, markers)):
if inDirName:
Expand Down Expand Up @@ -99,6 +105,24 @@
#TODO: add util function in AnalysisUtils to manage ratios between graphs or graph and histo
SetObjectStyle(hRatioToCompare[iFile], color=GetROOTColor(color), markerstyle=GetROOTMarker(marker),
fillstyle=0)
if doCompareUnc:
if 'TH' in objType:
hUncToCompare.append(hToCompare[iFile].Clone(f'hUncToCompare{iFile}'))
for iBin in range(1, hUncToCompare[iFile].GetNbinsX()+1):
unc = hUncToCompare[iFile].GetBinError(iBin)
cent = hUncToCompare[iFile].GetBinContent(iBin)
if compareRelUnc:
hUncToCompare[iFile].SetBinContent(iBin, unc/cent)
else:
hUncToCompare[iFile].SetBinContent(iBin, unc)
hUncToCompare[iFile].SetBinError(iBin, 1.e-20)
hUncToCompare[iFile].SetDirectory(0)
SetObjectStyle(hUncToCompare[iFile], color=GetROOTColor(color), markerstyle=GetROOTMarker(marker),
fillstyle=0)
else:
#TODO: add uncertainty comparison for TGraphs
print('WARNING: uncertainty comparison for TGraphs not implemented. Switching off')
doCompareUnc = False

leg.AddEntry(hToCompare[iFile], legNames[iFile], legOpt[iFile])

Expand All @@ -118,8 +142,18 @@

cOut = TCanvas('cOutput', '', wCanv, hCanv)

if doRatio:
cOut.Divide(2, 1)
if doRatio or doCompareUnc:
if doRatio and doCompareUnc:
cOut.Divide(3, 1)
ratioPad = 2
uncPad = 3
else:
cOut.Divide(2, 1)
if doRatio:
ratioPad = 2
else:
uncPad = 2

hFrame = cOut.cd(1).DrawFrame(xLimits[0], yLimits[0], xLimits[1], yLimits[1], f';{xTitle};{yTitle}')
if logX:
cOut.cd(1).SetLogx()
Expand All @@ -141,12 +175,13 @@
leg.Draw()

if doRatio:
hFrameRatio = cOut.cd(2).DrawFrame(xLimits[0], yLimitsRatio[0], xLimits[1], yLimitsRatio[1], f';{xTitle};Ratio')
hFrameRatio = cOut.cd(ratioPad).DrawFrame(xLimits[0], yLimitsRatio[0], xLimits[1], yLimitsRatio[1],
f';{xTitle};Ratio')
hFrameRatio.GetYaxis().SetDecimals()
if ratioLogX:
cOut.cd(2).SetLogx()
cOut.cd(ratioPad).SetLogx()
if ratioLogY:
cOut.cd(2).SetLogy()
cOut.cd(ratioPad).SetLogy()
lineAtOne = TLine(xLimits[0], 1., xLimits[1], 1.)
lineAtOne.SetLineColor(GetROOTColor('kBlack'))
lineAtOne.SetLineWidth(2)
Expand All @@ -159,6 +194,21 @@
else:
histo.Draw(drawOpt)

if doCompareUnc:
if compareRelUnc:
uncTitle = 'Relative uncertainties'
else:
uncTitle = 'Absolute uncertainties'
hFrameUnc = cOut.cd(uncPad).DrawFrame(xLimits[0], yLimitsUnc[0], xLimits[1], yLimitsUnc[1],
f';{xTitle};{uncTitle}')
hFrameUnc.GetYaxis().SetDecimals()
if uncCompLogX:
cOut.cd(uncPad).SetLogx()
if uncCompLogY:
cOut.cd(uncPad).SetLogy()
for iHisto, (histo, drawOpt) in enumerate(zip(hUncToCompare, drawOptions)):
histo.DrawCopy(f'{drawOpt}same')

for ext in outExtensions:
if 'root' in ext:
outFile = TFile(f'{outFileName}.root', 'recreate')
Expand All @@ -168,6 +218,9 @@
if doRatio:
for histo in hRatioToCompare:
histo.Write()
if doCompareUnc:
for histo in hUncToCompare:
histo.Write()
outFile.Close()
else:
cOut.SaveAs(f'{outFileName}.{ext}')
Expand Down
8 changes: 8 additions & 0 deletions comparisons/config_comparison.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ options:
corr: false
displayRMS: true

errcomp: # comparison of uncertainties
enable: true
relative: true

legend:
xlimits: [0.2, 0.6]
ylimits: [0.6, 0.9]
Expand All @@ -44,8 +48,12 @@ options:
xlimits: [2., 16.]
ylimits: [0., 2.]
ylimitsratio: [0., 2.]
ylimitserr: [0., 0.35]
logy: true
logx: false
ratio:
logy: false
logx: false
errcomp:
logy: false
logx: false

0 comments on commit d1acbb1

Please sign in to comment.