Example #1
0
                                count[0] = float(tmp[-3].strip("(),+-"))
                                count[1] = float(tmp[-2].strip("(),+-"))
                                count[2] = float(tmp[-1].strip("(),+-"))
                                #print count

                    if not match:
                        print "No yield found for skim:", source, dirName
                        yields[source][loc][pid][ptCut[0]][metCut[0]] = (-1., 0.0, 0.0)
                    condorFile.close()

                    yields[source][loc][pid][ptCut[0]][metCut[0]] = count
                    
pprint(yields)

canvas = SimpleCanvas(lumi = config.jsonLumi)
rcanvas = RatioCanvas(lumi = config.jsonLumi)

for loc in s.Locations[:1]:
    for pid in PhotonIds:
        for metCut in s.MetSels[1:2]:
            rcanvas.cd()
            rcanvas.Clear()
            rcanvas.legend.Clear()
            rcanvas.legend.setPosition(0.7, 0.3, 0.9, 0.5)

            dataEff = r.TGraphAsymmErrors()
            dataEff.SetName(loc+'-'+pid+'-'+metCut[0]+'-data')
            
            mcEff = r.TGraphAsymmErrors()
            mcEff.SetName(loc+'-'+pid+'-'+metCut[0]+'-mc')
Example #2
0
from datasets import allsamples
import purity.selections as selections
import config
import utils

ROOT.gROOT.SetBatch(True)

###########################
# Setup and configuration #
###########################

snames = ['sph-16*-m']

lumi = sum(s.lumi for s in allsamples.getmany(snames))
canvas = SimpleCanvas(lumi=lumi)
rcanvas = RatioCanvas(lumi=lumi)

binning = array.array('d', map(float, selections.photonPtBinning))
pid = 'medium'
tune = 'Spring16'  # 'GJetsCWIso'
extras = 'pixel-chargedpf'  # -monoph'
suffix = '_Spring16'  # '_GJetsCWIso'

itune = selections.Tunes.index(tune)

inputFile = ROOT.TFile.Open(basedir + '/data/impurity_' + tune + '.root')
impurityGraph = inputFile.Get("barrel-" + pid + "-" + extras + "-Met0to60")

outputFile = ROOT.TFile.Open(
    basedir + '/data/hadronTFactor' + suffix + '.root', 'recreate')
Example #3
0
        puweight.Divide(mcDist)

        for bin in range(1, puweight.GetNbinsX() + 1):
            puweight.SetBinError(bin, 0.)
            # HACK
            if puweight.GetBinContent(bin) > 4.:
                puweight.SetBinContent(bin, 4.)

        puweight.Write()

else:
    outputFile = ROOT.TFile.Open(sys.argv[1])

    dataDist = outputFile.Get('data')

canvas = RatioCanvas('ratio')
canvas.legend.setPosition(0.7, 0.8, 0.9, 0.9)
canvas.legend.add('data',
                  'Data',
                  opt='LF',
                  color=ROOT.kRed,
                  fstyle=3003,
                  lwidth=2)
canvas.legend.add('mc', '', opt='LF', color=ROOT.kBlue, fstyle=3003, lwidth=2)

canvas.legend.apply('data', dataDist)

dataClone = dataDist.Clone('points')
dataClone.SetFillStyle(0)
dataClone.SetMarkerStyle(1)
dataClone.SetMarkerColor(ROOT.kBlack)
Example #4
0
    scanvas.addHistogram(hdata, drawOpt = 'EP')
    scanvas.addHistogram(hmc, drawOpt = 'HIST')

    scanvas.xtitle = '#sigma_{i#etai#eta}'

    contam = hmc.Integral() / hdata.Integral() * 100.
    text = 'Sig. Contam: {contam}%'.format(contam = round(contam,1))
    scanvas.addText(text, 0.225, 0.4, 0.4, 0.6)

    scanvas.printWeb(pdir + '/sbcontam' , 'sbcontam_' + name, logy = False)

plotSigContam(hDataBkgNom, hMCSBNom, name = 'nominal')
plotSigContam(hDataBkgNear, hMCSBNear, name = 'near')
plotSigContam(hDataBkgFar, hMCSBFar, name = 'far')

canvas = RatioCanvas(lumi = s.sphLumi)

# allowing the bin edge to be lower than the actual cut (makes the purity higher!)
cutBin = hDataTarg.FindBin(var.cuts[pid])

FitResult = collections.namedtuple('FitResult', ['purity', 'aveSig', 'nReal', 'nFake'])

def plotSSFit(fitter, purity, nReal, name = '', pdir = plotDir):
    fitter.preparePlot()

    target = fitter.getTarget()
    total = fitter.getTotal()
    sig = fitter.getSignal()
    sigcr = fitter.getSignalCR()
    bkg = fitter.getBackground()
    subbkg = fitter.getSubtractedBackground()
Example #5
0
from plotstyle import RatioCanvas
import config
from datasets import allsamples

ROOT.gROOT.SetBatch(True)
ROOT.gSystem.Load("libRooFit.so")
ROOT.gSystem.Load("/home/yiiyama/cms/studies/RooFit/libCommonRooFit.so")
ROOT.gROOT.LoadMacro("metTree.cc+")

photonData = ["sph-16b2", "sph-16b2s"]

lumi = 0.0
for sname in photonData:
    lumi += allsamples[sname].lumi

canvas = RatioCanvas(cms=False)

# direct smear

outputFile = ROOT.TFile.Open(config.histDir + "/smearfit.root", "recreate")

dsource = ROOT.TChain("events")
bsource = ROOT.TChain("events")
for sname in photonData:
    dsource.Add(config.skimDir + "/" + sname + "_monoph.root")
    bsource.Add(config.skimDir + "/" + sname + "_hfake.root")
    bsource.Add(config.skimDir + "/" + sname + "_efake.root")

bmcsource = ROOT.TChain("events")
bmcsource.Add(config.skimDir + "/wglo_monoph.root")  # inclusive sample - wg130 canno be used because we go lower in MET
bmcsource.Add(config.skimDir + "/wlnu-*_monoph.root")
Example #6
0
          (50, -5., 5.), '1', False),
         ('jgammaDPhi', '#Delta#phi(#gamma, j1);#Delta#phi;pb / (#pi/30)',
          (30, 0., math.pi), 'hasMatchingPhoton && jet1Pt > 0.', False)]

samples = [('znng130MP', ('znng-130', 'znng-130-o'), 'pgammaPt > 140.'),
           ('wnlg130MP', ('wnlg-130', 'wnlg-130-o'), 'pgammaPt > 140.'),
           ('zllg130MP', ('zllg-130', 'zllg-130-o'), 'pgammaPt > 140.'),
           ('wnlg', ('wnlg', 'wglo'), 'pgammaPt > 0.'),
           ('zllg', ('zllg', None), 'pgammaPt > 0.'),
           ('znng', ('znng', None), 'pgammaPt > 0.'),
           ('wnlg130', ('wnlg-130', 'wglo-130'), 'pgammaPt > 140.'),
           ('wlng500', ('wnlg-500', 'wglo-500'), 'pgammaPt > 510.')]

source = ROOT.TFile.Open(config.histDir + '/kfactor_trees.root')

canvas = RatioCanvas(sim=True)
canvas.legend.setPosition(0.7, 0.7, 0.9, 0.9)
canvas.legend.add('lo',
                  'LO',
                  opt='L',
                  color=ROOT.kBlue,
                  lwidth=2,
                  lstyle=ROOT.kSolid)
canvas.legend.add('nlo',
                  'NLO',
                  opt='L',
                  color=ROOT.kRed,
                  lwidth=2,
                  lstyle=ROOT.kSolid)

for name, (nlo, lo), baseline in samples:
Example #7
0
        for iX in range(hnominal.GetNbinsX() + 2):
            if ROOT.TMath.IsNaN(hnominal.GetBinContent(iX)) or ROOT.TMath.IsNaN(hnominal.GetBinError(iX)):
                print hnominal.GetName(), 'cannot be plotted because it contains NaN'
                plot = False
                break

            if huncert and (ROOT.TMath.IsNaN(huncert.GetBinContent(iX)) or ROOT.TMath.IsNaN(huncert.GetBinError(iX))):
                print huncert.GetName(), 'cannot be plotted because it contains NaN'
                plot = False
                break

        if not plot:
            continue
    
        canvas1.legend.apply('stat', hnominal)
    
        if huncert:
            canvas1.Clear()
            canvas1.legend.apply('total', huncert)
   
            canvas1.addHistogram(huncert, drawOpt = 'E2')
            canvas1.addHistogram(hnominal, drawOpt = 'EP')
            canvas1.printWeb(plotDir, hnominal.GetName(), logy = not proc.startswith('tf_'))
        else:
            canvas2.Clear()
            canvas2.addHistogram(hnominal, drawOpt = 'EP')
            canvas2.printWeb(plotDir, hnominal.GetName(), logy = not proc.startswith('tf_'))

rcanvas = RatioCanvas(name = 'datamc', lumi = 36400)
rcanvas.legend.setPosition(0.7, 0.7, 0.9, 0.9)
Example #8
0
def plotFit(mass,
            targHist,
            model,
            dataType,
            suffix,
            bkgModel='nombkgModel',
            hmcbkg=None,
            alt='',
            plotName=''):
    global canvas

    if canvas is None:
        canvas = RatioCanvas(lumi=lumi, sim=(dataType == 'mc'))

    canvas.Clear(full=True)
    canvas.titlePave.SetX2NDC(0.5)
    canvas.legend.setPosition(0.6, 0.7, 0.9, 0.9)
    canvas.legend.add('obs',
                      title='Observed',
                      opt='LP',
                      color=ROOT.kBlack,
                      mstyle=8)
    canvas.legend.add('fit',
                      title='Fit',
                      opt='L',
                      lcolor=ROOT.kBlue,
                      lwidth=2,
                      lstyle=ROOT.kSolid)
    canvas.legend.add('bkg',
                      title='Bkg component',
                      opt='L',
                      lcolor=ROOT.kGreen,
                      lwidth=2,
                      lstyle=ROOT.kDashed)
    if hmcbkg:
        canvas.legend.add('mcbkg',
                          title='Bkg (MC truth)',
                          opt='LF',
                          lcolor=ROOT.kRed,
                          lwidth=1,
                          fcolor=ROOT.kRed,
                          fstyle=3003)

    if targHist.sumEntries() > 500.:
        plotBinning = plotBinningT
    else:
        plotBinning = plotBinningT2

    frame = mass.frame()
    targHist.plotOn(frame, ROOT.RooFit.Binning(*plotBinning))
    model.plotOn(frame)
    model.plotOn(frame, ROOT.RooFit.Components(bkgModel + '_' + suffix),
                 ROOT.RooFit.LineStyle(ROOT.kDashed),
                 ROOT.RooFit.LineColor(ROOT.kGreen))
    frame.SetTitle('')
    frame.SetMinimum(0.)

    canvas.addHistogram(frame, clone=True, drawOpt='')
    if hmcbkg:
        htruth = hmcbkg.Rebin(hmcbkg.GetNbinsX() / plotBinning[0], 'truth')
        canvas.legend.apply('mcbkg', htruth)
        canvas.addHistogram(htruth)

    canvas.rlimits = (-2., 2.)
    canvas.Update(rList=[], logy=False)

    frame.Print()

    # adding ratio pad
    fitcurve = frame.findObject(model.GetName() + '_Norm[mass]')

    hresid = targHist.createHistogram('residual', mass,
                                      ROOT.RooFit.Binning(*plotBinning))

    rdata = ROOT.TGraphErrors(hresid.GetNbinsX())

    for iP in range(rdata.GetN()):
        x = hresid.GetXaxis().GetBinCenter(iP + 1)
        nData = hresid.GetBinContent(iP + 1)
        statErr = hresid.GetBinError(iP + 1)
        nFit = fitcurve.interpolate(x)
        if statErr > 0.:
            rdata.SetPoint(iP, x, (nData - nFit) / statErr)
        else:
            rdata.SetPoint(iP, x, (nData - nFit))
        # rdata.SetPointError(iP, 0., dmet.GetBinError(iP + 1) / norm)

    rdata.SetMarkerStyle(8)
    rdata.SetMarkerColor(ROOT.kBlack)
    rdata.SetLineColor(ROOT.kBlack)

    canvas.ratioPad.cd()
    canvas.rtitle = '(data - fit) / #sigma_{data}'

    rframe = ROOT.TH1F('rframe', '', 1, *plotBinning[1:])
    rframe.GetYaxis().SetRangeUser(-2., 2.)
    rframe.Draw()

    line = ROOT.TLine(plotBinning[1], 0., plotBinning[2], 0.)
    line.SetLineWidth(2)
    line.SetLineColor(ROOT.kBlue)
    line.Draw()

    rdata.Draw('EP')

    canvas._needUpdate = False

    if not plotName:
        plotName = 'fit_' + dataType + '_' + suffix
    if alt:
        plotName += '_' + alt

    canvas.printWeb(plotDir, plotName, logy=False)

    rframe.Delete()
    if hmcbkg:
        htruth.Delete()
    hresid.Delete()
Example #9
0
import time
import ROOT
basedir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(basedir)
from plotstyle import RatioCanvas
import config
from datasets import allsamples

ROOT.gROOT.SetBatch(True)
ROOT.gSystem.Load('libRooFit.so')
ROOT.gSystem.Load('/home/yiiyama/cms/studies/RooFit/libCommonRooFit.so')
ROOT.gROOT.LoadMacro('metTree.cc+')

lumi = allsamples['sph-d3'].lumi + allsamples['sph-d4'].lumi

canvas = RatioCanvas(cms = False)

# direct smear

outputFile = ROOT.TFile.Open(config.histDir + '/smearfit.root', 'recreate')

dsource = ROOT.TChain('events')
dsource.Add(config.skimDir + '/sph-d*_monoph.root')

bsource = ROOT.TChain('events')
bsource.Add(config.skimDir + '/sph-d*_hfake.root')
bsource.Add(config.skimDir + '/sph-d*_efake.root')

bmcsource = ROOT.TChain('events')
bmcsource.Add(config.skimDir + '/wg_monoph.root') # NLO sample to get around pT/ MET > 130 GeV cut on LO sample
bmcsource.Add(config.skimDir + '/wlnu-*_monoph.root')
Example #10
0
import sys
import os
import array
import math
import ROOT

basedir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(basedir)
from plotstyle import SimpleCanvas, RatioCanvas
from datasets import allsamples
import config

lumi = sphLumi = sum(allsamples[s].lumi for s in ['sph-16b-r', 'sph-16c-r', 'sph-16d-r', 'sph-16e-r', 'sph-16f-r', 'sph-16g-r', 'sph-16h'])
canvas = SimpleCanvas(lumi = lumi)
rcanvas = RatioCanvas(lumi = lumi)

binning = array.array('d', [175., 180., 185., 190., 200., 210., 230., 250., 300., 350., 400.])
pid = 'medium'

inputFile = ROOT.TFile.Open(basedir+'/data/impurity.root')
# impurityHist = inputFile.Get("barrel-loose-pixel-Met0to60")
impurityGraph = inputFile.Get("barrel-" + pid + "-pixel-Met0to60")

outputFile = ROOT.TFile.Open(basedir+'/data/hadronTFactor.root', 'recreate')

isos = [ ('', '') ] # ('Worst', '') ] # , ('JetPt', 'JetPt') ] # [ ( '', 'pv'), ('Worst', '') ]

baseSel = 'jets.pt[0] > 100. && t1Met.met < 60. && photons.size == 1 && photons.pixelVeto[0]'

samples = [ ('',  baseSel+' && (( photons.sieie[0] < 0.015 && photons.sieie[0] > 0.012) || ( photons.chIso[0] < 11.0 && photons.chIso[0] > 1.37))')
            ,('Down', baseSel)
Example #11
0
            floatName = matches.group(1)

    if len(floatNames) != 0:
        postfitSub = postfitTotal.Clone('subdominant')
        for proc in floatNames:
            postfitSub.Add(postfitDir.Get(region + '/' + proc), -1.)
    else:
        postfitSub = None

    plotConfig = getConfig(region)
    
    lumi = 0.
    for sample in plotConfig.obs.samples:
        lumi += sample.lumi / plotConfig.prescales[sample]
    
    canvas = RatioCanvas(lumi = lumi, name = region)
    canvas.legend.setPosition(0.6, 0.6, 0.9, 0.9)
    canvas.legend.add('obs', title = 'Observed', opt = 'LP', color = ROOT.kBlack, mstyle = 8, msize = 0.8)
    canvas.legend.add('prefit', title = 'Prefit total', opt = 'LF', color = ROOT.kRed, lstyle = ROOT.kDashed, lwidth = 2, fstyle = 3004, mstyle = 8, msize = 0.8)
    if postfitSub:
        canvas.legend.add('subdom', title = 'Postfit subdominant', opt = 'F', fcolor = ROOT.kGray, fstyle = 1001)
    canvas.legend.add('postfit', title = 'Postfit total', opt = 'LF', color = ROOT.kBlue, lstyle = ROOT.kSolid, lwidth = 2, fstyle = 3005, mstyle = 8, msize = 0.8)

    obs.SetTitle('')
    prefitTotal.SetTitle('')
    postfitTotal.SetTitle('')
    if postfitSub:
        postfitSub.SetTitle('')

    canvas.legend.apply('obs', obs)
    canvas.legend.apply('prefit', prefitTotal, opt = 'L')
Example #12
0
    lumi = 0.
    for sample in plotConfig.obs.samples:
        lumi += sample.lumi / plotConfig.prescales[sample]

    if not SIMPLE:
        printRegionHeader(region, prefitTotal)

    if pdir == 's':
        pftitle = 'Sig.+bkgd. fit'
    elif pdir == 'c':
        pftitle = 'CR-only fit'
    else:
        pftitle = 'Bkgd. fit'

    canvas = RatioCanvas(lumi=lumi, name=region, prelim=False)
    canvas.legend.ncolumns = 1

    # y coordinates will be adjusted later
    resultLegend = Legend(0.35, 0., 0.7, 1.)
    resultLegend.add('obs',
                     title='Data',
                     opt='ELP',
                     color=ROOT.kBlack,
                     mstyle=8,
                     msize=0.8)
    resultLegend.add('prefit',
                     title='Pre-fit',
                     opt='LF',
                     color=ROOT.kRed,
                     lstyle=ROOT.kDashed,
                    cutExpr = 'fiducial && %s >= %f && %s < %f' % (
                        xvar, binning[ibin], xvar, binning[ibin + 1])

                drawer.addCut(binname, cutExpr)
                drawer.addPlot(counter, '0.5', binname)

        drawer.execute()

    out.cd()
    out.Write()

else:
    out = ROOT.TFile.Open('sigma.root')

from plotstyle import RatioCanvas
canvas = RatioCanvas(lumi=lumi)
canvas.Clear()

#canvas = ROOT.TCanvas('c1', 'c1', 600, 600)
#canvas.SetLeftMargin(0.15)
#canvas.SetRightMargin(0.05)
#canvas.SetBottomMargin(0.15)
#canvas.SetTopMargin(0.05)

canvas.legend.setPosition(0.55, 0.7, 0.9, 0.9)
canvas.legend.add('obs',
                  'Asimov fit',
                  opt='LP',
                  color=ROOT.kBlack,
                  lwidth=2,
                  mstyle=8)
Example #14
0
sys.path.append(basedir)
from plotstyle import RatioCanvas
import config
from datasets import allsamples

ROOT.gROOT.SetBatch(True)
ROOT.gSystem.Load('libRooFit.so')
ROOT.gSystem.Load('/home/yiiyama/cms/studies/RooFit/libCommonRooFit.so')

photonData = ['sph-16h'] # ['sph-16b-r', 'sph-16c-r', 'sph-16d-r', 'sph-16e-r', 'sph-16f-r', 'sph-16g-r', 'sph-16h'] # ['sph-16c-r'] #

lumi = 0.
for sname in photonData:
    lumi += allsamples[sname].lumi

canvas = RatioCanvas(lumi = lumi)
canvas.legend.add('data', title = 'Data', mstyle = 8, color = ROOT.kBlack, opt = 'LP')
canvas.legend.add('fit', title = 'Fit', color = ROOT.kBlue, lwidth = 2, opt = 'L')
canvas.legend.add('gjets', title = '#gamma+jets', color = ROOT.kGreen, lstyle = ROOT.kDashed, lwidth = 2, opt = 'L')
canvas.legend.add('mcpdf', title = '#gamma+jets raw', color = ROOT.kRed, lstyle = ROOT.kDotted, lwidth = 2, opt = 'L')

# direct smear

inputFile = ROOT.TFile.Open(config.histDir + '/gjets/fitTemplates.root_16hOnly')
outputFile = ROOT.TFile.Open(config.histDir + '/gjets/smearfit.root', 'recreate')

space = ROOT.RooWorkspace('space', 'space')

mcpdf = inputFile.Get('mcpdf')
bpdf = inputFile.Get('bpdf')
dmet = inputFile.Get('dmet')
Example #15
0
    
    lumi = 0.
    for sample in plotConfig.obs.samples:
        lumi += sample.lumi / plotConfig.prescales[sample]
    
    if not SIMPLE:
        printRegionHeader(region, prefitTotal)
    
    if pdir == 's':
        pftitle = 'Signal+background fit'
    elif pdir == 'c':
        pftitle = 'CR-only fit'
    else:
        pftitle = 'Background-only fit'

    canvas = RatioCanvas(lumi = lumi, name = region, prelim = False)
    canvas.legend.ncolumns = 1
    canvas.legend.add('obs', title = 'Data', opt = 'LP', color = ROOT.kBlack, mstyle = 8, msize = 0.8)
    canvas.legend.add('prefit', title = 'Pre-fit', opt = 'LF', color = ROOT.kRed, lstyle = ROOT.kDashed, lwidth = 2, fstyle = 3004, mstyle = 8, msize = 0.8)
    if postfitSub and SIMPLE:
        canvas.legend.add('subdom', title = 'Subdominant', opt = 'F', fcolor = ROOT.kGray, fstyle = 1001)
    canvas.legend.add('postfit', title = pftitle, opt = 'LF', color = ROOT.kBlue, lstyle = ROOT.kSolid, lwidth = 2, fstyle = 3005, mstyle = 8, msize = 0.8)

    obs.SetTitle('')
    prefitTotal.SetTitle('')
    postfitTotal.SetTitle('')
    if postfitSub and SIMPLE:
        postfitSub.SetTitle('')

    canvas.legend.apply('obs', obs)
    canvas.legend.apply('obs', dataHist)