Ejemplo n.º 1
0
def showRatios(ratios, outUrl):
    """shows the ratio plots"""

    ROOT.gStyle.SetOptTitle(0)
    ROOT.gStyle.SetOptStat(0)
    ROOT.gROOT.SetBatch(True)

    os.system('rm %s' % outUrl)
    outDir = os.path.dirname(outUrl)

    COLOURS = [1, '#f4a582', '#bababa', '#abdda4']
    for key in ratios:
        p = Plot(key + '_ratio', com='13 TeV')
        p.doPoissonErrorBars = False
        p.ratiorange = (0.68, 1.34)
        p.spimposeWithErrors = True
        ic = 0
        for h in ratios[key]:
            p.add(h=h,
                  title=h.GetTitle(),
                  color=COLOURS[ic],
                  isData=False,
                  spImpose=True,
                  isSyst=False)
            ic += 1
        p.show(outDir=outDir,
               lumi=41400,
               noStack=False,
               saveTeX=False,
               noRatio=True)
        p.appendTo(outUrl)
        p.reset()
Ejemplo n.º 2
0
def drawVariations(h, exp, cat):

    for c in comp:
        projs = getProjections(exp, comp[c])

        p = Plot('%s_%s' % (cat, c))
        p.doPoissonErrorBars = False
        p.add(h, 'nominal', 1, True, False, False)
        for px in projs:
            if c == 'qg':
                px.Scale(h.Integral() / px.Integral())
            p.add(px, px.GetTitle(), px.GetLineColor(), False, False, False)
        p.show('./', 41000, True)
Ejemplo n.º 3
0
def showShapes(resultsDir,
               name,
               title,
               mass,
               boson,
               r95,
               sig,
               lumi,
               plotData=True,
               showPseudoData=True,
               showAllBkgs=True):
    """ show the shapes corresponding to a given analysis """

    shapeFiles = [
        os.path.join(resultsDir, f) for f in os.listdir(resultsDir)
        if 'shapes_' in f and '.root' in f
    ]
    for f in shapeFiles:

        try:
            angle = int(re.search('_a(\d+)', f).group(1))
        except:
            print 'No angle could be parsed, assuming this is an inclusive analysis'
            angle = None

        fIn = ROOT.TFile.Open(f)

        #check consistency of the file with the boson to plot
        if 'shapes_22' in f and boson == 'g':
            v = 'g'
            channel = '#gamma'
        elif 'shapes_169' in f and boson == 'z':
            v = 'zmm'
            channel = 'Z#rightarrow#mu#mu'
        elif 'shapes_121' in f and boson == 'z':
            v = 'zee'
            channel = 'Z#rightarrowee'
        else:
            continue

        for icat in range(2):

            if angle:
                bkgH = fIn.Get('bkg_%s_a%d_%d' % (v, angle, icat))
                fidsigH = fIn.Get('fidsig_%s_a%d_%d_m%d' %
                                  (v, angle, icat, mass))
                outfidsigH = fIn.Get('outfidsig_%s_a%d_%d_m%d' %
                                     (v, angle, icat, mass))
                dataH = fIn.Get('data_obs_%s_a%d_%d' % (v, angle, icat))
            else:
                bkgH = fIn.Get('bkg_%s_%d' % (v, icat))
                fidsigH = fIn.Get('fidsig_%s_%d_m%d' % (v, icat, mass))
                outfidsigH = fIn.Get('outfidsig_%s_%d_m%d' % (v, icat, mass))
                dataH = fIn.Get('data_obs_%s_%d' % (v, icat))

            print bkgH, fidsigH, outfidsigH, dataH

            try:
                fidsigH.Scale(5)
                outfidsigH.Scale(5)
            except:
                fidsigH = None
                outfidsigH = None

            if showPseudoData:
                dataH.Reset('ICE')
                nexp = bkgH.Integral()
                if fidsigH: nexp += bkgH.Integral()
                if outfidsigH: nexp += outfidsigH.Integral()
                for iev in range(ROOT.gRandom.Poisson(nexp)):
                    dataH.Fill(bkgH.GetRandom())
            try:

                #main shapes
                if angle:
                    p = Plot('%s_%s_a%d_cat%d' % (name, v, angle, icat))
                else:
                    p = Plot('%s_%s_inc_cat%d' % (name, v, icat))

                p.xtit = 'Missing mass [GeV]'
                p.ytit = 'Events'
                if fidsigH:
                    p.add(fidsigH,
                          title='#scale[0.5]{5x}' + title +
                          '#scale[0.8]{(%d)}' % mass,
                          color=ROOT.TColor.GetColor('#fdc086'),
                          isData=False,
                          spImpose=False,
                          isSyst=False)

                if showAllBkgs:
                    if outfidsigH:
                        p.add(outfidsigH,
                              title='#scale[0.5]{5x}non-fiducial',
                              color=ROOT.TColor.GetColor('#a6cee3'),
                              isData=False,
                              spImpose=False,
                              isSyst=False)
                    p.add(bkgH,
                          title='background',
                          color=ROOT.TColor.GetColor('#1f78b4'),
                          isData=False,
                          spImpose=False,
                          isSyst=False)
                else:
                    allBkg = bkgH.Clone('allbkg')
                    if outfidsigH:
                        allBkg.Add(outfidsigH)
                    p.add(allBkg,
                          title='background',
                          color=ROOT.TColor.GetColor('#1f78b4'),
                          isData=False,
                          spImpose=False,
                          isSyst=False)

                if plotData:
                    dtitle = 'pseudo-data' if showPseudoData else 'Data'
                    p.add(dataH,
                          title=dtitle,
                          color=1,
                          isData=True,
                          spImpose=False,
                          isSyst=False)
                if fidsigH:
                    p.add(fidsigH.Clone(),
                          title=title + '#scale[0.8]{(%d)}' % mass,
                          color=ROOT.TColor.GetColor('#fdc086'),
                          isData=False,
                          spImpose=True,
                          isSyst=False)

                if showAllBkgs and outfidsigH:
                    p.add(outfidsigH.Clone(),
                          title='non-fiducial',
                          color=ROOT.TColor.GetColor('#a6cee3'),
                          isData=False,
                          spImpose=True,
                          isSyst=False)
                p.ratiorange = [0.68, 1.32]

                subcatName = 'low pileup' if icat == 0 else 'high pileup'
                if angle:
                    extraText = '%s, %d#murad\\%s' % (channel, angle,
                                                      subcatName)
                else:
                    extraText = '%s, inclusive\\%s' % (channel, subcatName)
                if r95: extraText += '\\#mu_{95}(exp.)<%3.3f' % r95
                if sig: extraText += '\\S(exp.)=%3.3f' % sig
                p.show('./', lumi * 1000, extraText=extraText)

                colors = [ROOT.kGreen + 1, ROOT.kAzure + 3, ROOT.kRed + 2]

                #background systs
                if angle:
                    p = Plot('%s_%s_a%d_cat%d_bkgunc' % (name, v, angle, icat))
                else:
                    p = Plot('%s_%s_inc_cat%d_bkgunc' % (name, v, icat))
                p.noErrorsOnRatio = True
                p.doPoissonErrorBars = False
                p.xtit = 'Missing mass [GeV]'
                p.ytit = 'Events'
                p.add(bkgH,
                      title='background',
                      color=1,
                      isData=True,
                      spImpose=False,
                      isSyst=False)
                ic = 0
                for syst, title in [('Up', 'Pileup spec.'),
                                    ('SingleDiffUp', 'Single diff.')]:
                    if angle:
                        p.add(fIn.Get('bkg_%s_a%d_%d_bkgShape%s' %
                                      (v, angle, icat, syst)),
                              title=title,
                              color=colors[ic],
                              isData=False,
                              spImpose=False,
                              isSyst=False)
                    else:
                        p.add(fIn.Get('bkg_%s_inc_%d_bkgShape%s' %
                                      (v, icat, syst)),
                              title=title,
                              color=colors[ic],
                              isData=False,
                              spImpose=False,
                              isSyst=False)
                    ic += 1
                p.ratiorange = [0.76, 1.24]
                if angle:
                    extraText = '%s, %d#murad' % (channel, angle)
                else:
                    extraText = '%s, inclusive' % (channel)
                p.show('./', lumi, noStack=True, extraText=extraText)

                #signal systs
                if fidsigH:
                    if angle:
                        p = Plot('%s_%s_a%d_cat%d_sigunc' %
                                 (name, v, angle, icat))
                    else:
                        p = Plot('%s_%s_inc_cat%d_sigunc' % (name, v, icat))
                    fidsigH.Scale(1. / 5.)
                    p.doPoissonErrorBars = False
                    p.noErrorsOnRatio = True
                    p.xtit = 'Missing mass [GeV]'
                    p.ytit = 'Events'
                    p.add(fidsigH,
                          title='signal',
                          color=1,
                          isData=True,
                          spImpose=False,
                          isSyst=False)
                    ic = 0
                    for syst, title in [('ShapeUp', 'Pileup spec.'),
                                        ('CalibUp', 'Time dependence'),
                                        ('PzModelUp', 'p_{z}(pp)')]:
                        if angle:
                            p.add(fIn.Get('fidsig_%s_a%d_%d_m%d_sig%s' %
                                          (v, angle, icat, mass, syst)),
                                  title=title,
                                  color=colors[ic],
                                  isData=False,
                                  spImpose=False,
                                  isSyst=False)
                        else:
                            p.add(fIn.Get('fidsig_%s_%d_m%d_sig%s' %
                                          (v, icat, mass, syst)),
                                  title=title,
                                  color=colors[ic],
                                  isData=False,
                                  spImpose=False,
                                  isSyst=False)
                        ic += 1
                    p.ratiorange = [0.76, 1.24]
                    if angle:
                        extraText = '%s, %d#murad\\m_{X}=%d GeV' % (
                            channel, angle, mass)
                    else:
                        extraText = '%s, inclusive\\m_{X}=%d GeV' % (channel,
                                                                     mass)
                    p.show('./', lumi, noStack=True, extraText=extraText)

                #out fiducial signal systs
                if outfidsigH:
                    if angle:
                        p = Plot('%s_%s_a%d_cat%d_outfidsigunc' %
                                 (name, v, angle, icat))
                    else:
                        p = Plot('%s_%s_inc_cat%d_outfidsigunc' %
                                 (name, v, icat))
                    outfidsigH.Scale(1. / 5.)
                    p.doPoissonErrorBars = False
                    p.noErrorsOnRatio = True
                    p.xtit = 'Missing mass [GeV]'
                    p.ytit = 'Events'
                    p.add(outfidsigH,
                          title='out-fid. signal',
                          color=1,
                          isData=True,
                          spImpose=False,
                          isSyst=False)
                    ic = 0
                    for syst, title in [('ShapeUp', 'Pileup spec.'),
                                        ('CalibUp', 'Time dependence'),
                                        ('PzModelUp', 'p_{z}(pp)')]:
                        if angle:
                            p.add(fIn.Get('outfidsig_%s_a%d_%d_m%d_sig%s' %
                                          (v, angle, icat, mass, syst)),
                                  title=title,
                                  color=colors[ic],
                                  isData=False,
                                  spImpose=False,
                                  isSyst=False)
                        else:
                            p.add(fIn.Get('outfidsig_%s_%d_m%d_sig%s' %
                                          (v, icat, mass, syst)),
                                  title=title,
                                  color=colors[ic],
                                  isData=False,
                                  spImpose=False,
                                  isSyst=False)
                        ic += 1

                    p.ratiorange = [0.76, 1.24]
                    if angle:
                        extraText = '%s, %d#murad\\m_{X}=%d GeV' % (
                            channel, angle, mass)
                    else:
                        extraText = '%s, inclusive\\m_{X}=%d GeV' % (channel,
                                                                     mass)
                    p.show('./', lumi, noStack=True, extraText=extraText)

            except Exception as e:
                print e
                pass

        fIn.Close()
Ejemplo n.º 4
0
    plot.mcUnc = 0.0

    totalMC = sigH.Clone('tmptotal')
    totalMC.Reset('ICE')
    for h in plot.mc:
        totalMC.Add(plot.mc[h])
    plot.normUncGr = ROOT.TGraphErrors(totalMC)
    plot.normUncGr.SetFillStyle(3354)
    plot.normUncGr.SetFillColor(ROOT.kGray + 3)
    plot.normUncGr.SetMarkerStyle(1)
    plot.normUncGr.SetLineColor(1)
    plot.normUncGr.SetName("normuncgr")
    plot.normUncGr.SetTitle('Stat #oplus syst')
    totalMC.Delete()
    plot.show(outDir="plots/",
              lumi=35882,
              extraText=extraText,
              saveTeX=countOnly)


def main():

    os.system('mkdir -p plots')

    plots = sys.argv[1].split(',')
    chList = "eehighpt1b,eehighpt2b,eelowpt1b,eelowpt2b"
    chList += ",mmhighpt1b,mmhighpt2b,mmlowpt1b,mmlowpt2b"
    chList += ",emhighpt1b,emhighpt2b,emlowpt1b,emlowpt2b"
    if len(sys.argv) > 2: chList = sys.argv[2]

    plotter = 'root://eoscms//eos/cms/store/cmst3/group/top/TOP17010/final/0c522df/plots/plotter.root'
    if len(sys.argv) > 3: plotter = sys.argv[3]
Ejemplo n.º 5
0
def drawPlots():
    """draw final plots comparing distributions in data"""
    def fillHistos(fIn, histos, era, ch):

        eraKey = (era, ch)
        for k in fIn.GetListOfKeys():
            kname = k.GetName()
            hname = kname.split('_')[0]
            tag = ''.join(kname.split('_')[1:])
            key = (hname, tag)
            if not key in histos:
                histos[key] = {}
            histos[key][eraKey] = k.ReadObj().Clone(kname + '%s_%d' %
                                                    (era, ch))
            histos[key][eraKey].SetDirectory(0)
            histos[key][eraKey].GetYaxis().SetTitle('PDF')

        return histos

    histos = {}
    for era, ch in list(product(list('BCDEF'), [11 * 11, 13 * 13])):
        fIn = ROOT.TFile.Open('RPcontrol_era%s_ch%d.root' % (era, ch))
        fillHistos(fIn, histos, era, ch)
        fIn.Close()

    perAlgo = ['multi', 'px', 'strip']
    perAlgoPlusInc = perAlgo + [''] + ['a120', 'a130', 'a140', 'a150']
    perSide = product(perAlgo, ['pos', 'posinc', 'neg', 'neginc'])

    colors = ["#fdc086", "#7fc97f", "#DCDCDC", 633, "#386cb0", 9]
    for d, tags in [  #('n',        perSide),
            #('csi',       perSide),
            #('mpp',      perAlgo),
            ##('mmass',    perAlgo),
        ('nvtx', perAlgoPlusInc),
            #('xangle',   perAlgoPlusInc),
        ('ptll', perAlgoPlusInc),
            #('nch',      perAlgoPlusInc),
            #('rue',      perAlgoPlusInc),
            #('met',      perAlgoPlusInc),
            #('dphimetz', perAlgoPlusInc),
    ]:

        hglobal = None
        hperAlgo = {}
        hperXangle = {}
        for tag in tags:
            hinc = None
            hperEra = {}
            hperCh = {}

            key = (d, ''.join(tag))
            if not key in histos: continue

            for eraKey, h in histos[key].items():

                era, ch = eraKey

                #global inclusive histogram
                if len(tag) == 0:
                    print key, eraKey
                    if hglobal is None:
                        hglobal = h.Clone(d + '_global')
                        hglobal.SetDirectory(0)
                    else:
                        hglobal.Add(h)

                #inclusive histogram (this tag only)
                if hinc is None:
                    hinc = h.Clone(d + '_inc')
                    hinc.SetDirectory(0)
                else:
                    hinc.Add(h)

                #per angle histos
                if len(tag) == 4 and tag[0] == 'a':
                    xangle = tag[1:]
                    print key, xangle
                    if not xangle in hperXangle:
                        hperXangle[xangle] = h.Clone(d + '_' + xangle)
                        hperXangle[xangle].SetDirectory(0)
                    else:
                        hperXangle[xangle].Add(h)

                #per era histogram
                if not era in hperEra:
                    hperEra[era] = h.Clone('%s_%s' % (d, era))
                    hperEra[era].SetDirectory(0)
                else:
                    hperEra[era].Add(h)

                #per ch histogram
                if not ch in hperCh:
                    hperCh[ch] = h.Clone('%s_%d' % (d, ch))
                    hperCh[ch].SetDirectory(0)
                else:
                    hperCh[ch].Add(h)

                #per algo histogram
                algo = tag
                algoExtra = None
                if d == 'csi' and not 'inc' in tag[1]:
                    algo = tag[0]
                    algoExtra = '_pos' if 'pos' in tag[1] else '_neg'
                if isinstance(algo, str) and (algo in perAlgo + ['']):
                    algoKey = algo
                    if algoExtra: algoKey += algoExtra
                    if not algoKey in hperAlgo:
                        hperAlgo[algoKey] = h.Clone('%s_%s' % (d, algoKey))
                        hperAlgo[algoKey].SetDirectory(0)
                    else:
                        hperAlgo[algoKey].Add(h)

            if hinc is None: continue
            hinc.Scale(1. / hinc.Integral())

            #per era
            p = Plot('%s_%s_perEra' % key, com='13 TeV')
            p.savelog = True
            p.range = [1e-3, 1]
            p.doPoissonErrorBars = False
            for i, era in enumerate(hperEra.keys()):
                hperEra[era].Scale(1. / hperEra[era].Integral())
                p.add(hperEra[era],
                      title=era,
                      color=colors[i],
                      isData=False,
                      spImpose=False,
                      isSyst=False)
            p.add(hinc.Clone(),
                  title='total',
                  color=1,
                  isData=False,
                  spImpose=True,
                  isSyst=False)
            p.show(outDir='./', lumi=37500, noStack=True)

            #per ch
            p = Plot('%s_%s_perCh' % key, com='13 TeV')
            p.savelog = True
            p.range = [1e-3, 1]
            p.doPoissonErrorBars = False
            for i, ch in enumerate(hperCh.keys()):
                hperCh[ch].Scale(1. / hperCh[ch].Integral())
                p.add(hperCh[ch],
                      title='ee' if ch == 11 * 11 else '#mu#mu',
                      color=colors[i],
                      isData=False,
                      spImpose=False,
                      isSyst=False)
            p.add(hinc.Clone(),
                  title='total',
                  color=1,
                  isData=False,
                  spImpose=True,
                  isSyst=False)
            p.show(outDir='./', lumi=37500, noStack=True)

        #per xangle
        p = Plot('%s_perxangle' % d, com='13 TeV')
        p.savelog = True
        p.range = [1e-3, 1]
        p.doPoissonErrorBars = False
        for i, xangle in enumerate(['120', '130', '140', '150']):
            hperXangle[xangle].Scale(1. / hperXangle[xangle].Integral())
            spImpose = True if xangle == '' else False
            title = '%s#murad' % xangle
            ci = colors[i]
            p.add(hperXangle[xangle],
                  title=title,
                  color=ci,
                  isData=False,
                  spImpose=spImpose,
                  isSyst=False)
        if hglobal:
            hglobal.Scale(1. / hglobal.Integral())
            p.add(hglobal.Clone(),
                  title='total',
                  color=1,
                  isData=False,
                  spImpose=True,
                  isSyst=False)
        try:
            p.show(outDir='./', lumi=37500, noStack=True)
        except Exception as e:
            print d, e

        #per algo
        p = Plot('%s_peralgo' % d, com='13 TeV')
        p.savelog = True
        p.range = [1e-3, 1]
        p.doPoissonErrorBars = False
        for i, algo in enumerate(hperAlgo.keys()):
            hperAlgo[algo].Scale(1. / hperAlgo[algo].Integral())
            spImpose = True if algo == '' else False
            title = 'inclusive' if algo == '' else algo
            title = title.replace('_pos', ' (+)')
            title = title.replace('_neg', ' (-)')
            ci = colors[i] if algo != '' else 1
            p.add(hperAlgo[algo],
                  title=title,
                  color=ci,
                  isData=False,
                  spImpose=spImpose,
                  isSyst=False)
        p.show(outDir='./', lumi=37500, noStack=True)
Ejemplo n.º 6
0
def main(args):

    parser = argparse.ArgumentParser(description='usage: %prog [options]')
    parser.add_argument(
        '-i',
        '--input',
        dest='input',
        default=
        '/eos/cms/store/cmst3/user/psilva/ExclusiveAna/final/ab05162/analysis_0p04/',
        help='input directory with the files [default: %default]')
    parser.add_argument(
        '--sig',
        dest='sig',
        default=
        '{boson}_m_X_{mass}_xangle_{xangle}_2017_preTS2_opt_v1_simu_reco.root',
        help='signal point [%default]')
    parser.add_argument('--massList',
                        dest='massList',
                        default='800,1000,1200',
                        help='signal mass list (CSV) [%default]')
    parser.add_argument(
        '--selCuts',
        dest='selCuts',
        default='bosonpt>40 && l1pt>30 && l2pt>20',
        help='preselection for Z categories [default: %default]')
    parser.add_argument('--doPerAngle',
                        dest='doPerAngle',
                        default=False,
                        help='do per crossing angle [default: %default]',
                        action='store_true')
    parser.add_argument('--lumi',
                        dest='lumi',
                        default=37500.,
                        type=float,
                        help='integrated luminosity [default: %default]')
    parser.add_argument('-o',
                        '--output',
                        dest='output',
                        default='analysis/bkg',
                        help='Output directory [default: %default]')
    opt = parser.parse_args(args)

    ROOT.gROOT.SetBatch(True)
    ROOT.gStyle.SetOptTitle(0)
    ROOT.gStyle.SetOptStat(0)

    os.system('mkdir -p %s' % opt.output)

    selCuts = [(opt.selCuts, '', 'e#mu')]
    if opt.doPerAngle:
        for xangle in VALIDLHCXANGLES:
            selCuts.append((opt.selCuts + ' && xangle==%d' % xangle,
                            '_%d' % xangle, 'e#mu, %d #murad' % xangle))
    for cuts, pfix, catTitle in selCuts:

        os.system('rm %s/plotter_%s.root' % (opt.output, pfix))

        data = fillShapes(inputDir=opt.input, selCuts=cuts, proc='MuonEG')

        #sigs={}
        #for m in opt.massList.split():
        #    if not m in sigs: sigs[m]={}
        #    for xangle in VALIDLHCXANGLES:
        #        newSigs=fillShapes(inputDir=opt.input,selCuts=opt.selCuts,tag=opt.sig.format(mass=m,xangle=xangle))
        #        for dist in newSigs:
        #            if not dist in sigs[m]:
        #                sigs[m]=newSigs[dist]['data'].Clone('{0}_{1}'.format(dist,m))
        #            #FIXME scale me according to xsec
        #FIXME plot me

        for dist in data:

            pname = dist + pfix
            for c in [':', ',', '>', '=', '(', ')', '-', '<', '?']:
                pname = pname.replace(c, '')

            p = Plot(pname)
            p.doChi2 = True
            p.nominalDistForSystsName = 'background'

            #if dist=='mmiss':
            #    newBins=range(0,1000,40)+[1000,1100,1200,1500,2000]
            #    print 'Rebinning',dist,'to',newBins
            #    for k in data[dist]:
            #        data[dist][k]=rebinUnequalBinSize(data[dist][k],newBins)

            #main distributions
            #doDivideByBinWidth=True if dist=='mmiss' or dist=='(bosony>=0?mmiss:-mmiss)' else False
            #if doDivideByBinWidth:
            #    p.doPoissonErrorBars=False

            p.add(data[dist]['data'],
                  title='data',
                  color=ROOT.kBlack,
                  isData=True,
                  spImpose=False,
                  isSyst=False)  #,doDivideByBinWidth=doDivideByBinWidth)
            p.add(data[dist]['bkg'],
                  title='background',
                  color=ROOT.TColor.GetColor('#1f78b4'),
                  isData=False,
                  spImpose=False,
                  isSyst=False)  #,doDivideByBinWidth=doDivideByBinWidth)

            #background systematics
            for syst in [
                    '{0}_bkgshape_MuonEG_obsUp', '{0}_bkgshape_MuonEG_obsDown',
                    '{0}_bkgsinglediff_MuonEG_obsDown',
                    '{0}_bkgsinglediff_MuonEG_obsUp'
            ]:
                p.add(data[dist][syst.format(dist)],
                      title=syst,
                      color=ROOT.TColor.GetColor('#1f78b4'),
                      isData=False,
                      spImpose=False,
                      isSyst=True)
                #doDivideByBinWidth=doDivideByBinWidth)

            #p.ratiorange=[0.78,1.22]
            #p.ratiorange=[0.58,1.42]
            p.ratiorange = [0., 2.]
            p.show(opt.output, opt.lumi, extraText=catTitle)
            p.appendTo('%s/plotter_%s.root' % (opt.output, pfix))
            p.reset()
Ejemplo n.º 7
0
    plot.finalize()
    plot.mcUnc = 0.0

    totalMC = sigH.Clone('tmptotal')
    totalMC.Reset('ICE')
    for h in plot.mc:
        totalMC.Add(plot.mc[h])
    plot.normUncGr = ROOT.TGraphErrors(totalMC)
    plot.normUncGr.SetFillStyle(3444)
    plot.normUncGr.SetFillColor(1)
    plot.normUncGr.SetMarkerStyle(1)
    plot.normUncGr.SetLineColor(1)
    plot.normUncGr.SetName("normuncgr")
    plot.normUncGr.SetTitle('Stat #oplus norm')
    totalMC.Delete()
    plot.show(outDir="plots/", lumi=35922, extraText=extraText)


def main():

    os.system('mkdir -p plots')

    plots = sys.argv[1].split(',')
    chList = "eehighpt1b,eehighpt2b,eelowpt1b,eelowpt2b"
    chList += ",mmhighpt1b,mmhighpt2b,mmlowpt1b,mmlowpt2b"
    chList += ",emhighpt1b,emhighpt2b,emlowpt1b,emlowpt2b"
    if len(sys.argv) > 2: chList = sys.argv[2]

    plotter = 'root://eoscms//eos/cms/store/cmst3/group/top/TOP17010/final/0c522df/plots/plotter.root'
    if len(sys.argv) > 3: plotter = sys.argv[3]
Ejemplo n.º 8
0
def drawPlots(data, mc, period):
    """draw final plots comparing distributions in data and in mc"""

    files = {'data': data, 'mc': mc}

    base = 'passStrip'
    baseTitle = '=2 strip'
    base = 'passPix'
    baseTitle = '=2 px'
    for d, pfix in [
        ('xangle', ''),
            #('nvtx',''),      ('yboson',''),  ('dyboson',''),
            #('n','RP003'),    ('n','RP023'),    ('n','RP103'),   ('n','RP123'),
            #('csi','RP003'),  ('csi','RP023'),  ('csi','RP103'), ('csi','RP123'),
        ('mpp', 'far'),
        ('mpp', 'near'),
        ('mmass', 'far'),
        ('mmass', 'near'),
            #('dmpp',''),      ('dmmass',''),
    ]:

        hpercat = {}

        for tag in ['', 'matched']:
            for x in files:

                for cat in [base, 'passPixandpassStrip']:
                    try:
                        hpercat[(x, tag, cat)] = files[x].Get(
                            '%s_%s%s%s' % (d, cat, tag, pfix))
                        hpercat[(x, tag, cat)].SetDirectory(0)
                        hpercat[(x, tag, cat)].Sumw2()
                        hpercat[(x, tag, cat)].GetYaxis().SetTitle('PDF')
                    except:
                        pass

                #remove overlap
                #hpercat[(x,tag,base)].Add(hpercat[(x,tag,'passPixandpassStrip')],-1)

                #build the total
                hpercat[(x, tag, 'tot')] = hpercat[(x, tag, base)].Clone(
                    'tot_%s_%s' % (d, tag))
                hpercat[(x, tag, 'tot')].Add(hpercat[(x, tag,
                                                      'passPixandpassStrip')])
                hpercat[(x, tag, 'tot')].SetDirectory(0)
                ntot = hpercat[(x, tag, 'tot')].Integral()

                continue
                for cat in [base, 'passPixandpassStrip']:
                    hpercat[(x, tag, cat)].Scale(1. / ntot)

            if tag == '':
                print base, hpercat[('data', '', base)].Integral()
                print base + 'passPixandpassStrip', hpercat[(
                    'data', '', 'passPixandpassStrip')].Integral()
                print '\t', hpercat[('data', '', base)].Integral() / hpercat[
                    ('data', '', 'passPixandpassStrip')].Integral()
            continue

            if tag == 'matched': continue

            p = Plot('%s%s_%s_era%s' % (d, pfix, tag, period), com='13 TeV')
            p.savelog = True
            p.range = [1e-3, 1]
            p.doPoissonErrorBars = False
            p.add(hpercat[('data', tag, base)],
                  title=baseTitle,
                  color=633,
                  isData=False,
                  spImpose=False,
                  isSyst=False)
            p.add(hpercat[('data', tag, 'passPixandpassStrip')],
                  title='=2 px+strip',
                  color="#fdc086",
                  isData=False,
                  spImpose=False,
                  isSyst=False)
            try:
                hpercat[('mc', tag, 'tot')].Scale(
                    1. / hpercat[('mc', tag, 'tot')].Integral())
                p.add(hpercat[('mc', tag, 'tot')],
                      title='signal',
                      color=1,
                      isData=False,
                      spImpose=True,
                      isSyst=False)
            except:
                pass
            p.show(outDir='./', lumi=37500, noStack=False)

        continue
        #efficiency
        effgr = {}
        for x, ms in [('data', 20), ('mc', 24)]:
            effgr[x] = ROOT.TGraphAsymmErrors()
            effgr[x].Divide(hpercat[(x, 'matched', 'tot')],
                            hpercat[(x, '', 'tot')])
            effgr[x].SetMarkerStyle(ms)
            effgr[x].SetTitle(x)
            effgr[x].SetName(x)
        p = Plot('%s%s_eff_era%s' % (d, pfix, period), com='13 TeV')
        p.ytit = 'Efficiency'
        p.xtit = hpercat[(x, 'matched', 'tot')].GetXaxis().GetTitle()
        p.savelog = False
        p.range = [1e-3, 1]
        #p.add(effgr['mc'],   title='MC',   color=ROOT.kCyan+1,  isData=False, spImpose=True,  isSyst=False)
        p.add(effgr['data'],
              title='Data',
              color=1,
              isData=False,
              spImpose=True,
              isSyst=False)
        p.show(outDir='./', lumi=37500, noStack=True)
Ejemplo n.º 9
0
          isSyst=False)

    totalBkgf0 = hdy.Clone('totalbkgf0')
    p.add(h=totalBkgf0,
          title='DY',
          color=ROOT.kRed + 1,
          isData=False,
          spImpose=False,
          isSyst=False)

    totalBkg = hdy.Clone('totalbkg')
    totalBkg.Scale(1 - f * dilFactorBkg)
    totalBkg.Add(fhsigmix)
    totalBkg.Scale(totalBkgf0.Integral() / totalBkg.Integral())
    p.add(h=totalBkg,
          title='DY+mix.signal',
          color=ROOT.kAzure + 1,
          isData=True,
          spImpose=False,
          isSyst=False)

    extraText = '%d #murad\\m_{X}=%d GeV\\signal fraction: %3.2f\\' % (xangle,
                                                                       mass, f)
    p.show(outDir='./',
           lumi=lumi,
           noStack=True,
           saveTeX=False,
           noRatio=False,
           extraText=extraText)
    p.reset()
Ejemplo n.º 10
0
p.ytit = '95% CL limits on #sigma_{fid}#timesBR [pb]'
for i in range(len(sys.argv) - 1):
    name, url = sys.argv[i + 1].split(':')
    fIn = ROOT.TFile.Open(url)
    c = fIn.Get('c')
    gr = c.GetListOfPrimitives().At(2).GetListOfGraphs().At(2)
    gr.SetLineWidth(3)
    gr.SetLineStyle(1 + i % 2)
    p.add(gr,
          title=name,
          color=colors[i],
          isData=False,
          spImpose=True,
          isSyst=False)
    fIn.Close()
p.show('./', lumi=37500, noRatio=True)
p.reset()

p = Plot('limitcomparison_obs')
p.spimposeOpt = 'l'
p.xtit = 'm_{X} [GeV]'
p.ytit = '95% CL limits on #sigma_{fid}#timesBR [pb]'
for i in range(len(sys.argv) - 1):
    name, url = sys.argv[i + 1].split(':')
    fIn = ROOT.TFile.Open(url)
    c = fIn.Get('c')
    gr = c.GetListOfPrimitives().At(2).GetListOfGraphs().At(3)
    gr.SetLineWidth(3)
    gr.SetLineStyle(1 + i % 2)
    p.add(gr,
          title=name,
Ejemplo n.º 11
0
def main():

    ROOT.gStyle.SetOptStat(0)
    ROOT.gStyle.SetOptTitle(0)
    ROOT.gROOT.SetBatch(True)

    isSingleRP = True if 'single' in sys.argv[1] else False
    isExc = True if '1exc' in sys.argv[1] else False
    pfix = 'pxonly' if isSingleRP else ''
    pfix += 'exc' if isExc else ''

    hnopu = {}
    hrpinhpur = {}
    hout = {}
    hin = {}
    for xangle in VALIDLHCXANGLES:
        for era in 'preTS2', 'postTS2':

            url = sys.argv[1].format(xangle, era)
            mass = re.findall(r'\d+', os.path.basename(url))[0]
            fEra = FPRETS2 if era == 'preTS2' else FPOSTTS2
            xsecWgt = SIGNALXSECS[xangle] * LUMI * fEra
            print url
            #determine analysis type
            cats = [4] if isSingleRP else [1, 2, 3, 4]

            #open file and build te plots
            fIn = ROOT.TFile.Open(url)
            data = fIn.Get('data')
            for icat in cats:

                if not icat in hnopu:
                    hnopu[icat] = fIn.Get('mmass_mm%dnopu' % icat).Clone(
                        'hnopu%d' % icat)
                    hnopu[icat].Reset('ICE')
                    hnopu[icat].SetDirectory(0)
                    hrpinhpur[icat] = fIn.Get('mmass_mmrpinhpur%d' %
                                              icat).Clone('hrpinhpur%d' % icat)
                    hrpinhpur[icat].Reset('ICE')
                    hrpinhpur[icat].SetDirectory(0)
                for ch in ['ee', 'mm']:
                    hnopu[icat].Add(fIn.Get('mmass_%s%dnopu' % (ch, icat)),
                                    xsecWgt)
                    hrpinhpur[icat].Add(
                        fIn.Get('mmass_%srpinhpur%d' % (ch, icat)), xsecWgt)

                #
                # project in-fiducial vs out-fiducial components
                #
                data.Draw(
                    "mmiss>>hout(50,0,2500)",
                    "ppsEff*wgt*(!(%s) && protonCat==%d && mmiss>0 && mixType==1)"
                    % (FIDUCIALCUTS, icat), 'goff')
                h = ROOT.gDirectory.Get('hout')
                if not icat in hout:
                    hout[icat] = h.Clone('hout%d' % icat)
                    hout[icat].SetDirectory(0)
                    hout[icat].Reset('ICE')
                hout[icat].Add(h, xsecWgt)

                data.Draw(
                    "mmiss>>hin(50,0,2500)",
                    "ppsEff*wgt*(%s && protonCat==%d && mmiss>0 && mixType==1)"
                    % (FIDUCIALCUTS, icat), "goff")
                h = ROOT.gDirectory.Get('hin')
                if not icat in hin:
                    hin[icat] = h.Clone('hin%d' % icat)
                    hin[icat].SetDirectory(0)
                    hin[icat].Reset('ICE')
                hin[icat].Add(h, xsecWgt)

    #final plots
    for icat in hin:

        pcatTitle = 'single-single'
        if not isSingleRP:
            pcatTitle = 'multi-multi'
            if icat == 2: pcatTitle = 'multi-single'
            if icat == 3: pcatTitle = 'single-multi'
            if icat == 4: pcatTitle = 'single-single'
        finalExtraText = 'm_{{X}}={0} GeV ({1})'.format(mass, pcatTitle)

        p = Plot('mmass_{0}_sigacc_{1}{2}'.format(mass, icat, pfix),
                 com='13 TeV')
        p.saveLog = True
        p.xtitle = 'Missing mass [GeV]'
        p.ytitle = 'Events'
        hin[icat].SetLineWidth(2)
        p.add(hin[icat],
              title='in accept.',
              color=ROOT.kRed,
              isData=False,
              spImpose=False,
              isSyst=False)
        p.add(hout[icat],
              title='out accept.',
              color=ROOT.kBlack,
              isData=False,
              spImpose=True,
              isSyst=False)
        p.show(outDir='./', lumi=37500, extraText=finalExtraText)

        p = Plot('mmass_{0}_puonfidsig_{1}{2}'.format(mass, icat, pfix),
                 com='13 TeV')
        p.saveLog = True
        p.xtitle = 'Missing mass [GeV]'
        p.ytitle = 'Events'
        p.add(hnopu[icat],
              title='no pileup',
              color=ROOT.kGray,
              isData=False,
              spImpose=False,
              isSyst=False)
        p.add(hrpinhpur[icat],
              title='pileup+cuts',
              color=1,
              isData=False,
              spImpose=True,
              isSyst=False)
        p.show(outDir='./', lumi=37500, extraText=finalExtraText)
Ejemplo n.º 12
0
    sigH.Scale(1. / sigH.Integral())
    sigH.GetXaxis().SetTitle(t)
    sigH.GetYaxis().SetTitle('PDF')

    dyT.Draw(v.format('dy'), 'evwgt*(%s)' % c)
    dyH = ROOT.gDirectory.Get('dy')
    dyH.Scale(1. / dyH.Integral())
    dyH.GetXaxis().SetTitle(t)
    dyH.GetYaxis().SetTitle('PDF')

    p = Plot(v.split(' >>')[0], com='13 TeV')
    p.frameMin = 0
    p.add(dyH,
          title='DY',
          color=ROOT.kMagenta + 1,
          isData=False,
          spImpose=True,
          isSyst=False)
    p.add(sigH,
          title='#splitline{m_{X}=950 GeV}{#scale[0.5]{120#murad post-TS2}}',
          color=ROOT.kBlack,
          isData=False,
          spImpose=True,
          isSyst=False)
    p.show(
        outDir='./',
        lumi=37500,
    )
    sigH.Delete()
    dyH.Delete()
p.spimposeWithErrors = True
for ic in [0, 1]:
    title = histos[ic].GetTitle()
    histos[ic].GetXaxis().SetTitle('Missing mass [GeV]')
    histos[ic].GetYaxis().SetTitle('Events')

    if ic == 0:
        p.add(h=histos[ic],
              title=title,
              color=COLOURS[ic],
              isData=True,
              spImpose=False,
              isSyst=False)
    else:
        for frac in [0.001, 0.01, 0.1]:
            h = histos[ic]
            idx = len(histos) - 1
            histos.append(h.Clone('siginj%d_%d' % (ic, idx)))
            histos[-1].Scale(frac)
            histos[-1].Add(histos[0], 1. - frac)
            title = 'f(sig)=%.g' % frac
            p.add(h=histos[-1],
                  title=title,
                  color=COLOURS[idx],
                  isData=False,
                  spImpose=False,
                  isSyst=False)

p.show(outDir='./', lumi=4776, noStack=True, saveTeX=False, noRatio=False)
p.reset()
Ejemplo n.º 14
0
def main(args):

    parser = argparse.ArgumentParser(description='usage: %prog [options]')
    parser.add_argument(
        '-i',
        '--input',
        dest='input',
        default=
        '/eos/cms/store/cmst3/user/psilva/ExclusiveAna/final/ab05162/analysis_0p04/',
        help='input directory with the files [default: %default]')
    parser.add_argument(
        '--selCuts',
        dest='selCuts',
        default='bosonpt>40 && l1pt>30 && l2pt>20',
        help='preselection for Z categories [default: %default]')
    parser.add_argument('--doPerNch',
                        dest='doPerNch',
                        default=False,
                        action='store_true',
                        help='break-down per Nch [default: %default]')
    parser.add_argument('--doPerEra',
                        dest='doPerEra',
                        default=False,
                        action='store_true',
                        help='break-down per era [default: %default]')
    parser.add_argument(
        '--doPerPU',
        dest='doPerPU',
        default=False,
        action='store_true',
        help='break-down per pileup category [default: %default]')
    parser.add_argument('--doPerAngle',
                        dest='doPerAngle',
                        default=False,
                        action='store_true',
                        help='break-down per angle [default: %default]')
    parser.add_argument('--lumi',
                        dest='lumi',
                        default=37500.,
                        type=float,
                        help='integrated luminosity [default: %default]')
    parser.add_argument('-o',
                        '--output',
                        dest='output',
                        default='analysis/bkg',
                        help='Output directory [default: %default]')
    opt = parser.parse_args(args)

    ROOT.gROOT.SetBatch(True)
    ROOT.gStyle.SetOptTitle(0)
    ROOT.gStyle.SetOptStat(0)

    os.system('mkdir -p %s' % opt.output)

    #do all possible combinations of these categories
    baseCats = ['protonCat==%d' % (i + 1) for i in range(4)]
    subCats = ['']
    if opt.doPerEra: subCats += ['era==%d' % int(ord(x)) for x in 'BCDEF']
    if opt.doPerPU: subCats += ['nvtx<20', 'nvtx>=20']
    if opt.doPerAngle:
        subCats += ['xangle==%d' % i for i in [120, 130, 140, 150]]
    if opt.doPerNch: subCats += ['nch<15', 'nch>=15']
    catList = list(itertools.product(baseCats, subCats))

    outF = '%s/plotter_embkg.root' % opt.output
    os.system('rm %s' % outF)

    print '[doBackgroundValidation] with %d variations to test' % len(catList)
    print '\t output will be available in', outF
    for i, cat in enumerate(catList):

        selCut = ''
        for c in cat:
            if len(c) == 0: continue
            selCut += '%s&&' % c
        selCut += opt.selCuts
        titleCut = parseTitleFromCut(selCut)
        print '\t', i, selCut

        data = fillShapes(inputDir=opt.input, selCuts=selCut, proc='MuonEG')

        for dist in data:

            pname = '%s_%d' % (dist, i)
            for c in [':', ',', '>', '=', '(', ')', '-', '<', '?']:
                pname = pname.replace(c, '')
            p = Plot(pname)
            p.doChi2 = False  #True
            p.nominalDistForSystsName = 'background'

            #if dist=='mmiss':
            #    newBins=range(0,1000,40)+[1000,1100,1200,1500,2000]
            #    print 'Rebinning',dist,'to',newBins
            #    for k in data[dist]:
            #        data[dist][k]=rebinUnequalBinSize(data[dist][k],newBins)

            p.add(data[dist]['data'],
                  title='data',
                  color=ROOT.kBlack,
                  isData=True,
                  spImpose=False,
                  isSyst=False)
            p.add(data[dist]['bkg'],
                  title='background',
                  color=ROOT.kCyan - 6,
                  isData=False,
                  spImpose=False,
                  isSyst=False)

            #background systematics
            ci = 1
            for syst in [
                    '{0}_bkgshape_MuonEG_obsUp',
                    '{0}_bkgshape_MuonEG_obsDown',
                    '{0}_bkgsinglediffUp_MuonEG_obs',
                    '{0}_bkgsinglediffDown_MuonEG_obs',
            ]:
                ci = ci + 1
                p.add(
                    data[dist][syst.format(dist)],
                    title=syst,
                    color=ROOT.kCyan - 6,  #ci
                    isData=False,
                    spImpose=False,  #True,
                    isSyst=True)  #False)

            #p.ratiorange=[0.78,1.22]
            p.ratiorange = [0.58, 1.43]
            p.show(opt.output, opt.lumi, extraText='\\'.join(titleCut))
            p.appendTo(outF)
            p.reset()
Ejemplo n.º 15
0
p.add(h=simScenariosH[(172.5, 0.90)].Clone(),
      title=simScenariosH[(172.5, 0.90)].GetTitle(),
      color=1,
      isData=True,
      spImpose=False,
      isSyst=False,
      doDivideByBinWidth=True)
p.add(h=rwScenariosH[(172.5, 0.90)].Clone(),
      title=rwScenariosH[(172.5, 0.90)].GetTitle(),
      color=2,
      isData=False,
      spImpose=False,
      isSyst=False,
      doDivideByBinWidth=True)
#p.add(h=rwScenariosH[(172.5,2.0)].Clone(), title=rwScenariosH[(172.5,2.0)].GetTitle(),color=3,isData=False,spImpose=False,isSyst=False,doDivideByBinWidth=True)
p.show('./', lumi=35900, noStack=True)

p = Plot('mlbwidth_m_closure', '13 TeV')
p.ratiorange = [0.858, 1.142]
p.savelog = True
p.doPoissonErrorBars = False
p.range = (1e-4, 0.014)
p.ytit = 'PDF'
p.add(h=simScenariosH[(172.5, 1.31)].Clone(),
      title=simScenariosH[(172.5, 1.31)].GetTitle(),
      color=1,
      isData=True,
      spImpose=False,
      isSyst=False,
      doDivideByBinWidth=True)
p.add(h=rwScenariosH[(171.5, 1.28)].Clone(),
Ejemplo n.º 16
0
#
# before and after pileup mixing/selection
#
p = Plot('mmass_{0}_xangle{1}_sig'.format(mass, xangle), com='13 TeV')
p.frameMin = 0
p.add(nopu,
      title='no pileup',
      color=ROOT.kGray,
      isData=False,
      spImpose=False,
      isSyst=False)
p.add(pu, title='pileup', color=1, isData=False, spImpose=True, isSyst=False)
finalExtraText = '#scale[0.8]{{m={0} GeV #alpha={1}#murad}}'.format(
    mass, xangle)
p.show(outDir='./', lumi=37500, extraText=finalExtraText)

#
# in-fiducial vs out-fiducial components
#
fiducialCuts = 'gencsi1>0.03 & gencsi1<0.13 && gencsi2>0.03 && gencsi2<0.16'
data.Draw("mmiss>>hout(50,0,2500)",
          "ppsEff*wgt*(!(%s) && mmiss>0 && mixType==1)" % fiducialCuts, 'goff')
hout = ROOT.gDirectory.Get('hout')
hout.SetDirectory(0)
hout.Scale(SIGNALXSECS[int(xangle)] * 37500.)
hout.GetXaxis().SetTitle('Missing mass [GeV]')
hout.GetYaxis().SetTitle('Events')

data.Draw("mmiss>>hin(50,0,2500)",
          "ppsEff*wgt*(%s && mmiss>0 && mixType==1)" % fiducialCuts, "goff")
Ejemplo n.º 17
0
def drawPlots(data, period):
    """draw final plots comparing distributions in data and in mc"""

    base = 'passStrip'
    baseTitle = '=2 strip'
    base = 'passPix'
    baseTitle = '=2 px'
    for d, pfix in [
        ('xangle', ''),
        ('nvtx', ''),
        ('yboson', ''),
        ('dyboson', ''),
        ('n', 'RP003'),
        ('n', 'RP023'),
        ('n', 'RP103'),
        ('n', 'RP123'),
        ('csi', 'RP003'),
        ('csi', 'RP023'),
        ('csi', 'RP103'),
        ('csi', 'RP123'),
        ('mpp', 'far'),
        ('mpp', 'near'),
        ('mmass', 'far'),
        ('mmass', 'near'),
        ('dmpp', ''),
        ('dmmass', ''),
    ]:

        hpercat = {}

        for tag in ['', 'matched']:
            for cat in [base, 'passPixandpassStrip']:
                try:
                    hpercat[(tag, cat)] = data.Get('%s_%s%s%s' %
                                                   (d, cat, tag, pfix))
                    hpercat[(tag, cat)].SetDirectory(0)
                    hpercat[(tag, cat)].Sumw2()
                    hpercat[(tag, cat)].GetYaxis().SetTitle('PDF')
                except Exception as e:
                    print e
                    pass

            #build the total
            hpercat[(tag,
                     'tot')] = hpercat[(tag,
                                        base)].Clone('tot_%s_%s' % (d, tag))
            hpercat[(tag, 'tot')].Add(hpercat[(tag, 'passPixandpassStrip')])
            hpercat[(tag, 'tot')].SetDirectory(0)
            ntot = hpercat[(tag, 'tot')].Integral()

            continue
            for cat in [base, 'passPixandpassStrip']:
                hpercat[(tag, cat)].Scale(1. / ntot)

            if tag == '':
                print base, hpercat[('', base)].Integral()
                print base + 'passPixandpassStrip', hpercat[(
                    '', 'passPixandpassStrip')].Integral()
                print '\t', hpercat[('', base)].Integral() / hpercat[
                    ('', 'passPixandpassStrip')].Integral()
            continue

            if tag == 'matched': continue

            p = Plot('%s%s_%s_era%s' % (d, pfix, tag, period), com='13 TeV')
            p.savelog = True
            p.range = [1e-3, 1]
            p.doPoissonErrorBars = False
            p.add(hpercat[(tag, base)],
                  title=baseTitle,
                  color=633,
                  isData=False,
                  spImpose=False,
                  isSyst=False)
            p.add(hpercat[(tag, 'passPixandpassStrip')],
                  title='=2 px+strip',
                  color="#fdc086",
                  isData=False,
                  spImpose=False,
                  isSyst=False)
            p.show(outDir='./', lumi=37500, noStack=False)

        continue
Ejemplo n.º 18
0
def showShapes(resultsDir,name,plotTitle,mass,boson,lumi,plotData=True,showPseudoData=True,showAllBkgs=True,plotpfix=''):

    """ show the shapes corresponding to a given analysis """

    colors=[ROOT.kGreen+1,ROOT.kAzure+3,ROOT.kOrange+2,ROOT.kGray,ROOT.kRed+2]
    
    shapeFiles=[os.path.join(resultsDir,f) for f in os.listdir(resultsDir) if 'shapes_' in f and '.root' in f]

    for f in shapeFiles:

        fIn=ROOT.TFile.Open(f)

        #check consistency of the file with the boson to plot
        if 'shapes_22' in f and boson=='g':
            v='g'
            channel='#gamma'
        elif 'shapes_169' in f and boson=='z': 
            v='zmm'
            channel='Z#rightarrow#mu#mu'
        elif 'shapes_121' in f and boson=='z': 
            v='zee'
            channel='Z#rightarrowee'
        else:
            continue
        

        bkgH       = fIn.Get('bkg_%s'%v)
        fidsigH    = fIn.Get('fidsig_%s_m%d'%(v,mass))
        outfidsigH = fIn.Get('outfidsig_%s_m%d'%(v,mass))
        dataH      = fIn.Get('data_obs_%s'%(v))

        if showPseudoData:
            dataH.Reset('ICE')
            nexp=bkgH.Integral()
            if fidsigH: nexp+=bkgH.Integral()
            if outfidsigH: nexp+=outfidsigH.Integral()
            for iev in range( ROOT.gRandom.Poisson( nexp ) ):
                dataH.Fill( bkgH.GetRandom() )
       
        try:
            p=Plot('%s_%s_inc%s'%(name,v,plotpfix))
            p.xtit='Missing mass [GeV]'
            p.ytit='Events'
            if fidsigH:
                p.add(fidsigH,            title='fiducial #scale[0.8]{(%d)}'%mass, color=ROOT.TColor.GetColor('#fdc086'), isData=False, spImpose=False, isSyst=False)
    
            if showAllBkgs:
                if outfidsigH:
                    p.add(outfidsigH,         title='non-fiducial',  color=ROOT.TColor.GetColor('#a6cee3'), isData=False, spImpose=False, isSyst=False)
                p.add(bkgH,               title='background',    color=ROOT.TColor.GetColor('#1f78b4'), isData=False, spImpose=False, isSyst=False)
            else:
                allBkg=bkgH.Clone('allbkg')
                if outfidsigH : 
                    allBkg.Add(outfidsigH)
                p.add(allBkg,               title='background',    color=ROOT.TColor.GetColor('#1f78b4'), isData=False, spImpose=False, isSyst=False)

            if plotData:
                dtitle='pseudo-data' if showPseudoData else 'Data'
                p.add(dataH, title=dtitle,   color=1, isData=True, spImpose=False, isSyst=False)

            if fidsigH:
                p.add(fidsigH.Clone(),    title=plotTitle+'#scale[0.8]{(%d)}'%mass, color=ROOT.TColor.GetColor('#fdc086'), isData=False, spImpose=True,  isSyst=False)

            if showAllBkgs and outfidsigH:
                p.add(outfidsigH.Clone(), title='non-fiducial',  color=ROOT.TColor.GetColor('#a6cee3'), isData=False, spImpose=True,  isSyst=False)
            
            p.ratiorange=[0.68,1.32]
            p.show('./',lumi*1000,extraText=plotTitle)

            

            #background systs
            p=Plot('%s_%s_inc_bkgunc%s'%(name,v,plotpfix))
            p.noErrorsOnRatio=True
            p.doPoissonErrorBars=False
            p.xtit='Missing mass [GeV]'
            p.ytit='Events'
            p.add(bkgH, title='background', color=1, isData=True,spImpose=False, isSyst=False)
            ic=0
            for syst,title in [('Up',            'e#mu mix'),
                               ('SingleDiffUp',  'single arm mix')]:
                h=fIn.Get('bkg_%s_bkgShape%s'%(v,syst))
                p.add(h, title=title, color=colors[ic], isData=False, spImpose=False, isSyst=False)
                ic+=1
            p.ratiorange=[0.76,1.24]                
            p.show('./',lumi,noStack=True,extraText=plotTitle)

            #signal systs
            if fidsigH:
                p=Plot('%s_%s_sigunc%s'%(name,v,plotpfix))
                #fidsigH.Scale(1./5.)
                p.doPoissonErrorBars=False
                p.noErrorsOnRatio=True
                p.xtit='Missing mass [GeV]'
                p.ytit='Events'
                p.add(fidsigH, title='signal', color=1, isData=True,spImpose=False, isSyst=False)
                ic=0
                for syst,title in [('ShapeUp',   'e#mu mix.'),
                                   ('CalibUp',   'Time dependence'),                     
                                   ('PPSEffUp',  'PPS efficiency'),
                                   ('PzModelUp', 'p_{z}(pp)')]:
                    h=fIn.Get('fidsig_%s_m%d_sig%s'%(v,mass,syst))
                    print ic,syst,title,h
                    p.add(h, title=title, color=colors[ic], isData=False, spImpose=False, isSyst=False)
                    ic+=1
                p.ratiorange=[0.5,1.46]
                p.show('./',lumi,noStack=True,extraText=plotTitle)

            #out fiducial signal systs
            if outfidsigH:
                p=Plot('%s_%s_outfidsigunc%s'%(name,v,plotpfix))
                #outfidsigH.Scale(1./5.)
                p.doPoissonErrorBars=False
                p.noErrorsOnRatio=True
                p.xtit='Missing mass [GeV]'
                p.ytit='Events'
                p.add(outfidsigH, title='out-fid. signal', color=1, isData=True,spImpose=False, isSyst=False)
                ic=0
                for syst,title in [('ShapeUp',   'e#mu mix.'),
                                   ('CalibUp',   'Time dependence'),
                                   ('PPSEffUp',  'PPS efficiency'),
                                   ('PzModelUp', 'p_{z}(pp)')]:
                    h=fIn.Get('outfidsig_%s_m%d_sig%s'%(v,mass,syst))
                    p.add(h, title=title, color=colors[ic], isData=False, spImpose=False, isSyst=False)
                    ic+=1

                p.ratiorange=[0.5,1.46]                    
                p.show('./',lumi,noStack=True,extraText=plotTitle)

        except Exception as e:
            print e
            pass

        fIn.Close()
Ejemplo n.º 19
0
                     'wzb',
                     'ZeroBias (weighted)',
                     lw=1,
                     lc=ROOT.kRed,
                     ms=1,
                     weights=weights)

    for key in zbh:

        p = Plot('%s_2017%s' % (key, era), com='13 TeV')
        p.doPoissonErrorBars = False
        p.add(zbh[key],
              title=zbh[key].GetTitle(),
              color=ROOT.kGray,
              isData=False,
              spImpose=False,
              isSyst=False)
        p.add(wzbh[key],
              title=wzbh[key].GetTitle(),
              color=ROOT.kRed,
              isData=False,
              spImpose=False,
              isSyst=False)
        p.add(mmh[key],
              title=mmh[key].GetTitle(),
              color=1,
              isData=True,
              spImpose=False,
              isSyst=False)
        p.show(outDir='./', lumi=41833, noStack=True)