Exemple #1
0
def doPlots(datasetsEmb, datasetsSig, datasetName):
    lumi = datasetsEmb.getLuminosity()
    isCorrected = isinstance(datasetsEmb, tauEmbedding.DatasetsResidual)
    postfix = "_residual"

    createPlot = tauEmbedding.PlotCreatorMany(analysisEmb,
                                              analysisSig,
                                              datasetsEmb,
                                              datasetsSig,
                                              datasetName,
                                              plotStyles,
                                              addData=True)
    drawPlot = tauEmbedding.PlotDrawerTauEmbeddingEmbeddedNormal(
        ratio=True, log=True, addLuminosityText=True)

    def createDrawPlot(name, *args, **kwargs):
        p = createPlot(name)
        drawPlot(p, *args, **kwargs)

    prefix = "embdatasigmc" + postfix + "_" + datasetName + "_"

    opts2def = {"ymin": 0, "ymax": 2}

    def drawControlPlot(path, xlabel, rebin=None, opts2=None, **kwargs):
        opts2_ = opts2def
        if opts2 != None:
            opts2_ = opts2
        cargs = {}
        if rebin != None:
            cargs["rebin"] = rebin
        drawPlot(createPlot("ControlPlots/" + path, **cargs),
                 prefix + path,
                 xlabel,
                 opts2=opts2_,
                 **kwargs)

    def update(d1, d2):
        tmp = {}
        tmp.update(d1)
        tmp.update(d2)
        return tmp

    # Control plots
    optsdef = {}
    opts = optsdef
    drawControlPlot("SelectedTau_pT_AfterStandardSelections",
                    taujetH + " ^{}p_{T} (GeV/c)",
                    opts=update(opts, {"xmax": 250}),
                    rebin=2,
                    cutBox={
                        "cutValue": 40,
                        "greaterThan": 40
                    })

    moveLegend = {"dy": -0.6, "dx": -0.2}
    opts = {"SingleTop": {"ymax": 1.8}}.get(datasetName, {"ymaxfactor": 1.4})
    if datasetName != "TTJets":
        moveLegend = {"dx": -0.32}
    drawControlPlot("SelectedTau_eta_AfterStandardSelections",
                    taujetH + " #eta",
                    opts=update(opts, {
                        "xmin": -2.2,
                        "xmax": 2.2
                    }),
                    ylabel="Events / %.1f",
                    rebin=4,
                    log=False,
                    moveLegend=moveLegend)

    drawControlPlot("SelectedTau_LeadingTrackPt_AfterStandardSelections",
                    taujetH + " ldg. charged particle ^{}p_{T} (GeV/c)",
                    opts=update(opts, {"xmax": 300}),
                    rebin=2,
                    cutBox={
                        "cutValue": 20,
                        "greaterThan": True
                    })

    opts = {"ymin": 1e-1, "ymaxfactor": 5}
    moveLegend = {"dx": -0.22}
    if datasetName == "Diboson":
        opts["ymin"] = 1e-2
    drawControlPlot("SelectedTau_Rtau_AfterStandardSelections",
                    "R_{#tau} = p^{ldg. charged particle}/^{}p^{%s}" % taujet,
                    opts=update(opts, {
                        "xmin": 0.65,
                        "xmax": 1.05
                    }),
                    rebin=5,
                    ylabel="Events / %.2f",
                    moveLegend=moveLegend,
                    cutBox={
                        "cutValue": 0.7,
                        "greaterThan": True
                    })

    opts = optsdef
    drawControlPlot("Njets_AfterStandardSelections",
                    "Number of jets",
                    ylabel="Events")

    # After Njets
    drawControlPlot("MET",
                    "Uncorrected PF ^{}E_{T}^{miss} (GeV)",
                    rebin=5,
                    opts=update(opts, {"xmax": 400}),
                    cutLine=50,
                    moveLegend={
                        "dx": -0.2,
                        "dy": -0.55
                    })

    # after MET
    moveLegend = {
        "WJets": {},
        "DYJetsToLL": {},
        "SingleTop": {},
        "Diboson": {}
    }.get(datasetName, {
        "dx": -0.2,
        "dy": -0.5
    })
    drawControlPlot("NBjets",
                    "Number of selected b jets",
                    opts=update(opts, {"xmax": 6}),
                    ylabel="Events",
                    moveLegend=moveLegend,
                    cutLine=1)

    # Tree cut definitions
    treeDraw = dataset.TreeDraw(
        "dummy", weight=tauEmbedding.signalNtuple.weightBTagging)
    tdMt = treeDraw.clone(varexp="%s >>tmp(15,0,300)" %
                          tauEmbedding.signalNtuple.mtExpression)
    tdDeltaPhi = treeDraw.clone(varexp="%s >>tmp(18, 0, 180)" %
                                tauEmbedding.signalNtuple.deltaPhiExpression)

    # DeltapPhi
    xlabel = "#Delta#phi(^{}%s, ^{}E_{T}^{miss}) (^{o})" % taujet

    def customDeltaPhi(h):
        yaxis = h.getFrame().GetYaxis()
        yaxis.SetTitleOffset(0.8 * yaxis.GetTitleOffset())

    opts = {
        "WJets": {
            "ymax": 20
        },
        "DYJetsToLL": {
            "ymax": 5
        },
        "SingleTop": {
            "ymax": 2
        },
        "Diboson": {
            "ymax": 0.6
        },
    }.get(datasetName, {"ymaxfactor": 1.2})
    opts2 = {"WJets": {"ymin": 0, "ymax": 3}}.get(datasetName, opts2def)
    selection = And(*[
        getattr(tauEmbedding.signalNtuple, cut)
        for cut in ["metCut", "bTaggingCut"]
    ])
    drawPlot(createPlot(tdDeltaPhi.clone(selection=selection)),
             prefix + "deltaPhi_3AfterBTagging",
             xlabel,
             log=False,
             opts=opts,
             opts2=opts2,
             ylabel="Events / ^{}%.0f^{o}",
             function=customDeltaPhi,
             moveLegend={"dx": -0.22},
             cutLine=[130, 160])

    # After all cuts
    selection = And(*[
        getattr(tauEmbedding.signalNtuple, cut)
        for cut in ["metCut", "bTaggingCut", "deltaPhi160Cut"]
    ])

    #opts = {"ymaxfactor": 1.4}
    opts = {}

    opts = {
        "EWKMC": {
            "ymax": 40
        },
        "TTJets": {
            "ymax": 12
        },
        #"WJets": {"ymax": 35},
        "WJets": {
            "ymax": 25
        },
        "SingleTop": {
            "ymax": 2.2
        },
        "DYJetsToLL": {
            "ymax": 6.5
        },
        #"Diboson": {"ymax": 0.9},
        "Diboson": {
            "ymax": 0.8
        },
        "W3Jets": {
            "ymax": 5
        }
    }.get(datasetName, {})
    opts2 = {
        "TTJets": {
            "ymin": 0,
            "ymax": 1.2
        },
        "Diboson": {
            "ymin": 0,
            "ymax": 3.2
        },
    }.get(datasetName, {
        "ymin": 0,
        "ymax": 2
    })

    p = createPlot(tdMt.clone(selection=selection))
    histograms.cmsTextMode = histograms.CMSMode.PRELIMINARY
    p.appendPlotObject(
        histograms.PlotText(0.6,
                            0.7,
                            "#Delta#phi(^{}%s, ^{}E_{T}^{miss}) < ^{}160^{o}" %
                            taujet,
                            size=20))
    drawPlot(p,
             prefix + "transverseMass_4AfterDeltaPhi160",
             "m_{T}(^{}%s, ^{}E_{T}^{miss}) (GeV/^{}c^{2})" % taujet,
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f GeV/^{}c^{2}",
             log=False)
    histograms.cmsTextMode = histograms.CMSMode.NONE
Exemple #2
0
def doPlots(datasetsEmb, datasetsSig, datasetName):
    lumi = datasetsEmb.getLuminosity()

    createPlot = tauEmbedding.PlotCreatorMany(analysisEmb, analysisSig,
                                              datasetsEmb, datasetsSig,
                                              datasetName, createStyles())

    def drawPlot(plot, name, *args, **kwargs):
        drawPlotCommon(plot, "mcembsig_" + datasetName + "_" + name, *args,
                       **kwargs)

    def createDrawPlot(name, *args, **kwargs):
        p = createPlot(name)
        drawPlot(plot, *args, **kwargs)

    opts2def = {"ymin": 0, "ymax": 2}

    def drawControlPlot(path, xlabel, rebin=None, opts2=None, **kwargs):
        opts2_ = opts2def
        if opts2 != None:
            opts_ = opts2
        cargs = {}
        if rebin != None:
            cargs["rebin"] = rebin
        drawPlot(createPlot("ControlPlots/" + path, **cargs),
                 path,
                 xlabel,
                 opts2=opts2_,
                 **kwargs)

    def update(d1, d2):
        tmp = {}
        tmp.update(d1)
        tmp.update(d2)
        return tmp

    # Control plots
    optsdef = {}
    opts = optsdef

    # After Njets
    moveLegend = {
        "WJEts": {
            "dx": 0.02
        },
        "DYJetsToLL": {
            "dx": -0.02
        },
        "Diboson": {
            "dx": -0.05
        },
    }.get(datasetName, {})
    drawControlPlot("MET",
                    "Uncorrected PF ^{}E_{T}^{miss} (GeV)",
                    rebin=5,
                    opts=update(opts, {"xmax": 400}),
                    cutLine=50,
                    moveLegend=moveLegend)

    # after MET
    moveLegend = {"dx": -0.15, "dy": -0.5}
    moveLegend = {
        "WJets": {},
        "DYJetsToLL": {
            "dx": -0.02
        },
        "SingleTop": {},
        "Diboson": {
            "dx": -0.02
        },
    }.get(datasetName, moveLegend)
    optsmy = {"xmax": 6}
    if datasetName == "SingleTop":
        optsmy["ymaxfactor"] = 6
    elif datasetName == "WJets":
        optsmy["ymaxfactor"] = 3
    drawControlPlot("NBjets",
                    "Number of selected b jets",
                    opts=update(opts, optsmy),
                    ylabel="Events",
                    moveLegend=moveLegend,
                    cutLine=1)
    opts = optsdef

    # Tree cut definitions
    treeDraw = dataset.TreeDraw(
        "dummy", weight=tauEmbedding.signalNtuple.weightBTagging)
    tdDeltaPhi = treeDraw.clone(varexp="%s >>tmp(18, 0, 180)" %
                                tauEmbedding.signalNtuple.deltaPhiExpression)
    tdMt = treeDraw.clone(varexp="%s >>tmp(15,0,300)" %
                          tauEmbedding.signalNtuple.mtExpression)

    # DeltapPhi
    xlabel = "#Delta#phi(^{}%s, ^{}E_{T}^{miss}) (^{o})" % taujet

    def customDeltaPhi(h):
        yaxis = h.getFrame().GetYaxis()
        yaxis.SetTitleOffset(0.8 * yaxis.GetTitleOffset())

    opts = {
        "WJets": {
            "ymax": 35
        },
        "DYJetsToLL": {
            "ymax": 12
        },
        "Diboson": {
            "ymax": 1
        },
    }.get(datasetName, {"ymaxfactor": 1.2})
    opts2 = opts2def
    moveLegend = {
        "DYJetsToLL": {
            "dx": -0.24
        },
        "Diboson": {
            "dx": -0.22
        },
    }.get(datasetName, {"dx": -0.2})
    drawPlot(createPlot(
        tdDeltaPhi.clone(
            selection=And(tauEmbedding.signalNtuple.metCut,
                          tauEmbedding.signalNtuple.bTaggingCut))),
             "deltaPhi_3AfterBTagging",
             xlabel,
             log=False,
             opts=opts,
             opts2=opts2,
             ylabel="Events /^{} %.0f^{o}",
             function=customDeltaPhi,
             moveLegend=moveLegend,
             cutLine=[130, 160])

    # Transverse mass
    selection = And(*[
        tauEmbedding.signalNtuple.metCut, tauEmbedding.signalNtuple.
        bTaggingCut, tauEmbedding.signalNtuple.deltaPhi160Cut
    ])
    opts = {
        "TTJets": {
            "ymax": 28
        },
        "SingleTop": {
            "ymax": 4.5
        },
        "DYJetsToLL": {
            "ymax": 18
        },
        "Diboson": {
            "ymax": 1.2
        },
        "WJets": {
            "ymax": 50
        },
    }.get(datasetName, {})
    opts2 = {"ymin": 0, "ymax": 2}
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    p = createPlot(tdMt.clone(selection=selection))
    p.appendPlotObject(
        histograms.PlotText(0.55,
                            0.7,
                            "#Delta#phi(^{}%s, ^{}E_{T}^{miss}) < 160^{o}" %
                            taujet,
                            size=24))
    drawPlot(p,
             "transverseMass_4AfterDeltaPhi160",
             "m_{T}(^{}%s, ^{}E_{T}^{miss}) (GeV/^{}c^{2})" % taujet,
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f GeV/^{}c^{2}",
             log=False,
             moveLegend=moveLegend)
def doPlots(datasetsEmb, datasetsSig, datasetName):
    lumi = datasetsEmb.getLuminosity()

    createPlot = tauEmbedding.PlotCreatorMany(analysisEmb, analysisSig,
                                              datasetsEmb, datasetsSig,
                                              datasetName, styles.getStyles())

    def drawPlot(plot, name, *args, **kwargs):
        drawPlotCommon(plot, "mcembsig_" + datasetName + "_" + name, *args,
                       **kwargs)

    def createDrawPlot(name, *args, **kwargs):
        p = createPlot(name)
        drawPlot(plot, *args, **kwargs)

    opts2def = {"ymin": 0, "ymax": 2}

    def drawControlPlot(path, xlabel, rebin=None, opts2=None, **kwargs):
        opts2_ = opts2def
        if opts2 != None:
            opts_ = opts2
        cargs = {}
        if rebin != None:
            cargs["rebin"] = rebin
        drawPlot(createPlot("ControlPlots/" + path, **cargs),
                 path,
                 xlabel,
                 opts2=opts2_,
                 **kwargs)

    def update(d1, d2):
        tmp = {}
        tmp.update(d1)
        tmp.update(d2)
        return tmp

    # Control plots
    optsdef = {}
    opts = optsdef
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawControlPlot("SelectedTau_pT_AfterStandardSelections",
                    "#tau-jet p_{T} (GeV/c)",
                    opts=update(opts, {"xmax": 250}),
                    rebin=2,
                    cutBox={
                        "cutValue": 40,
                        "greaterThan": 40
                    },
                    moveLegend=moveLegend)

    opts = {"SingleTop": {"ymax": 1.8}}.get(datasetName, {"ymaxfactor": 1.4})
    moveLegend = {
        "TTJets": {
            "dy": -0.6,
            "dx": -0.2
        },
    }.get(datasetName, {"dx": -0.32})
    drawControlPlot("SelectedTau_eta_AfterStandardSelections",
                    "#tau-jet #eta",
                    opts=update(opts, {
                        "xmin": -2.2,
                        "xmax": 2.2
                    }),
                    ylabel="Events / %.1f",
                    rebin=4,
                    log=False,
                    moveLegend=moveLegend)

    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawControlPlot("SelectedTau_LeadingTrackPt_AfterStandardSelections",
                    "#tau-jet ldg. charged particle p_{T} (GeV/c)",
                    opts=update(opts, {"xmax": 300}),
                    rebin=2,
                    cutBox={
                        "cutValue": 20,
                        "greaterThan": True
                    },
                    moveLegend=moveLegend)

    opts = {"ymin": 1e-1, "ymaxfactor": 5}
    if datasetName == "Diboson":
        opts["ymin"] = 1e-2
    moveLegend = {"dx": -0.25}
    drawControlPlot("SelectedTau_Rtau_AfterStandardSelections",
                    "R_{#tau} = p^{ldg. charged particle}/p^{#tau jet}",
                    opts=update(opts, {
                        "xmin": 0.65,
                        "xmax": 1.05
                    }),
                    rebin=5,
                    ylabel="Events / %.2f",
                    moveLegend=moveLegend,
                    cutBox={
                        "cutValue": 0.7,
                        "greaterThan": True
                    })

    opts = optsdef
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawControlPlot("Njets_AfterStandardSelections",
                    "Number of jets",
                    ylabel="Events",
                    moveLegend=moveLegend)

    # After Njets
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawControlPlot("MET",
                    "Uncorrected PF E_{T}^{miss} (GeV)",
                    rebin=5,
                    opts=update(opts, {"xmax": 400}),
                    cutLine=50,
                    moveLegend=moveLegend)

    # after MET
    moveLegend = {"dx": -0.23, "dy": -0.5}
    moveLegend = {
        "WJets": {},
        "DYJetsToLL": {
            "dx": -0.02
        },
        "SingleTop": {},
        "Diboson": {}
    }.get(datasetName, moveLegend)
    drawControlPlot("NBjets",
                    "Number of selected b jets",
                    opts=update(opts, {"xmax": 6}),
                    ylabel="Events",
                    moveLegend=moveLegend,
                    cutLine=1)

    # After BTag
    xlabel = "#Delta#phi(#tau jet, E_{T}^{miss}) (^{o})"

    def customDeltaPhi(h):
        yaxis = h.getFrame().GetYaxis()
        yaxis.SetTitleOffset(0.8 * yaxis.GetTitleOffset())

    opts2 = opts2def
    opts = {
        # "WJets": {"ymax": 20},
        # "DYJetsToLL": {"ymax": 5},
        # "SingleTop": {"ymax": 2},
        # "Diboson": {"ymax": 0.6},
    }.get(datasetName, {"ymaxfactor": 1.2})
    opts2 = {
        # "WJets": {"ymin": 0, "ymax": 3}
    }.get(datasetName, opts2def)
    moveLegend = {"DYJetsToLL": {"dx": -0.24}}.get(datasetName, {"dx": -0.22})
    drawPlot(createPlot("deltaPhi", rebin=10),
             "deltaPhi_3AfterBTagging",
             xlabel,
             log=False,
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f^{o}",
             function=customDeltaPhi,
             moveLegend=moveLegend,
             cutLine=[130, 160])

    # After deltaPhi
    opts = {
        # "EWKMC": {"ymax": 40},
        # "TTJets": {"ymax": 12},
        # #"WJets": {"ymax": 35},
        # "WJets": {"ymax": 25},
        # "SingleTop": {"ymax": 2.2},
        # "DYJetsToLL": {"ymax": 6.5},
        # #"Diboson": {"ymax": 0.9},
        # "Diboson": {"ymax": 0.8},
        # "W3Jets": {"ymax": 5}
    }.get(datasetName, {})
    opts2 = {
        # "TTJets": {"ymin": 0, "ymax": 1.2},
        # "Diboson": {"ymin": 0, "ymax": 3.2},
    }.get(datasetName, opts2)
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawPlot(createPlot("transverseMass", rebin=10),
             "transverseMass_4AfterDeltaPhi160",
             "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})",
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f GeV/c^{2}",
             log=False,
             moveLegend=moveLegend)

    return
    # Tree cut definitions
    treeDraw = dataset.TreeDraw(
        "dummy", weight=tauEmbedding.signalNtuple.weightBTagging)
    tdDeltaPhi = treeDraw.clone(varexp="%s >>tmp(18, 0, 180)" %
                                tauEmbedding.signalNtuple.deltaPhiExpression)
    tdMt = treeDraw.clone(varexp="%s >>tmp(15,0,300)" %
                          tauEmbedding.signalNtuple.mtExpression)

    # DeltapPhi
    xlabel = "#Delta#phi(#tau jet, E_{T}^{miss}) (^{o})"

    def customDeltaPhi(h):
        yaxis = h.getFrame().GetYaxis()
        yaxis.SetTitleOffset(0.8 * yaxis.GetTitleOffset())

    opts2 = opts2def
    opts = {
        "WJets": {
            "ymax": 20
        },
        "DYJetsToLL": {
            "ymax": 5
        },
        "SingleTop": {
            "ymax": 2
        },
        "Diboson": {
            "ymax": 0.6
        },
    }.get(datasetName, {"ymaxfactor": 1.2})
    opts2 = {"WJets": {"ymin": 0, "ymax": 3}}.get(datasetName, opts2def)
    moveLegend = {"DYJetsToLL": {"dx": -0.24}}.get(datasetName, {"dx": -0.22})
    drawPlot(createPlot(
        tdDeltaPhi.clone(
            selection=And(tauEmbedding.signalNtuple.metCut,
                          tauEmbedding.signalNtuple.bTaggingCut))),
             "deltaPhi_3AfterBTagging",
             xlabel,
             log=False,
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f^{o}",
             function=customDeltaPhi,
             moveLegend=moveLegend,
             cutLine=[160])

    # Transverse mass
    selection = And(*[
        tauEmbedding.signalNtuple.metCut, tauEmbedding.signalNtuple.
        bTaggingCut, tauEmbedding.signalNtuple.deltaPhi160Cut
    ])
    opts = {
        "EWKMC": {
            "ymax": 40
        },
        "TTJets": {
            "ymax": 12
        },
        #"WJets": {"ymax": 35},
        "WJets": {
            "ymax": 25
        },
        "SingleTop": {
            "ymax": 2.2
        },
        "DYJetsToLL": {
            "ymax": 6.5
        },
        #"Diboson": {"ymax": 0.9},
        "Diboson": {
            "ymax": 0.8
        },
        "W3Jets": {
            "ymax": 5
        }
    }.get(datasetName, {})
    opts2 = {
        "TTJets": {
            "ymin": 0,
            "ymax": 1.2
        },
        "Diboson": {
            "ymin": 0,
            "ymax": 3.2
        },
    }.get(datasetName, opts2)

    p = createPlot(tdMt.clone(selection=selection))
    p.appendPlotObject(
        histograms.PlotText(0.6,
                            0.7,
                            "#Delta#phi(#tau jet, E_{T}^{miss}) < 160^{o}",
                            size=20))
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})
    drawPlot(p,
             "transverseMass_4AfterDeltaPhi160",
             "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})",
             opts=opts,
             opts2=opts2,
             ylabel="Events / %.0f GeV/c^{2}",
             log=False,
             moveLegend=moveLegend)
Exemple #4
0
def doTauPlots(datasetsEmb, datasetsSig, datasetName):
    lumi = datasetsEmb.getLuminosity()

    createPlot = tauEmbedding.PlotCreatorMany(tauAnalysisEmb, tauAnalysisSig,
                                              datasetsEmb, datasetsSig,
                                              datasetName, createStyles())

    opts2def = {
        "DYJetsToLL": {
            "ymin": 0,
            "ymax": 1.5
        }
    }.get(datasetName, {
        "ymin": 0.5,
        "ymax": 1.5
    })
    moveLegend = {"DYJetsToLL": {"dx": -0.02}}.get(datasetName, {})

    treeDraw = dataset.TreeDraw(
        "dummy", weight=tauEmbedding.tauNtuple.weight[tauEmbedding.era])

    def drawPlot(plot, name, *args, **kwargs):
        drawPlotCommon(plot, "mcembsig_" + datasetName + "_" + name, *args,
                       **kwargs)

    # Decay mode finding
    postfix = "_1AfterDecayModeFindingIsolationPtPre"
    selection = And(*[
        getattr(tauEmbedding.tauNtuple, cut)
        for cut in ["decayModeFinding", "tightIsolation", "tauPtPreCut"]
    ])
    opts2 = opts2def
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Eta()>>tmp(25,-2.5,2.5",
                       selection=selection)),
             "tauEta" + postfix,
             taujetH + "-candidate #eta",
             ylabel="Events / %.1f",
             opts={"ymin": 1e-1},
             opts2=opts2,
             moveLegend={
                 "dx": -0.12,
                 "dy": -0.45
             },
             cutLine=[-2.1, 2.1])
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Pt()>>tmp(25,0,250)",
                       selection=selection)),
             "tauPt" + postfix,
             taujetH + "-candidate ^{}p_{T} (GeV/c)",
             opts2=opts2,
             cutLine=40,
             moveLegend=moveLegend)

    # Eta cut
    postfix = "_2AfterEtaCut"
    selection = And(*[
        getattr(tauEmbedding.tauNtuple, cut) for cut in
        ["decayModeFinding", "tightIsolation", "tauPtPreCut", "tauEtaCut"]
    ])
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Eta()>>tmp(25,-2.5,2.5",
                       selection=selection)),
             "tauEta" + postfix,
             taujetH + "-candidate #eta",
             ylabel="Events / %.1f",
             opts={"ymin": 1e-1},
             opts2=opts2,
             moveLegend={
                 "dx": -0.12,
                 "dy": -0.45
             },
             cutLine=[-2.1, 2.1])
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Pt()>>tmp(25,0,250)",
                       selection=selection)),
             "tauPt" + postfix,
             taujetH + "-candidate ^{}p_{T} (GeV/c)",
             opts2=opts2,
             cutLine=40,
             moveLegend=moveLegend)

    # Pt cut
    postfix = "_3AfterPtCut"
    selection = And(*[
        getattr(tauEmbedding.tauNtuple, cut) for cut in
        ["decayModeFinding", "tightIsolation", "tauEtaCut", "tauPtCut"]
    ])
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Phi()>>tmp(32,-3.2,3.2",
                       selection=selection)),
             "tauPhi" + postfix,
             taujetH + "-candidate #phi (rad)",
             ylabel="Events / %.1f",
             opts={"ymin": 1e-1},
             opts2=opts2,
             moveLegend={
                 "dx": -0.12,
                 "dy": -0.45
             })
    opts2 = {"Diboson": {"ymin": 0, "ymax": 1.5}}.get(datasetName, opts2def)
    drawPlot(createPlot(
        treeDraw.clone(
            varexp="taus_leadPFChargedHadrCand_p4.Pt()>>tmp(25,0,250)",
            selection=selection)),
             "tauLeadingTrackPt" + postfix,
             taujetH + " ldg. charged particle ^{}p_{T} (GeV/c)",
             opts2=opts2,
             cutLine=20,
             moveLegend=moveLegend)
    opts2 = opts2def

    # Tau candidate selection
    postfix = "_4AfterTauCandidateSelection"
    selection = tauEmbedding.tauNtuple.tauCandidateSelection
    opts = {"ymin": 1e-2, "ymaxfactor": 20, "nbins": 5}
    if datasetName == "WJets":
        opts["ymaxfactor"] = 25
    opts2 = {"EWKMC": {"ymin": 0.5, "ymax": 2}}.get(datasetName, opts2def)
    drawPlot(
        createPlot(
            treeDraw.clone(varexp=tauEmbedding.tauNtuple.decayModeExpression,
                           selection=selection)),
        "tauDecayMode" + postfix + "",
        "",
        opts=opts,
        opts2=opts2,
        moveLegend=moveLegend,
        #moveLegend={"dy": 0.02, "dh": -0.02},
        customise=tauEmbedding.decayModeCustomize)
    opts2 = opts2def

    # One prong
    postfix = "_5AfterOneProng"
    td = treeDraw.clone(selection=And(*[
        getattr(tauEmbedding.tauNtuple, cut)
        for cut in ["tauCandidateSelection", "oneProng"]
    ]))
    #drawPlot(createPlot(td.clone(varexp="taus_p4.Pt()>>tmp(25,0,250)")),
    #         "tauPt"+postfix, "#tau-jet candidate p_{T} (GeV/c)", opts2={"ymin": 0, "ymax": 2})
    #drawPlot(createPlot(td.clone(varexp="taus_p4.P()>>tmp(25,0,250)")),
    #         "tauP"+postfix, "#tau-jet candidate p (GeV/c)", opts2={"ymin": 0, "ymax": 2})
    #drawPlot(createPlot(td.clone(varexp="taus_leadPFChargedHadrCand_p4.Pt()>>tmp(25,0,250)")),
    #         "tauLeadingTrackPt"+postfix, "#tau-jet ldg. charged particle p_{T} (GeV/c)", opts2={"ymin":0, "ymax": 2})
    #drawPlot(createPlot(td.clone(varexp="taus_leadPFChargedHadrCand_p4.P()>>tmp(25,0,250)")),
    #         "tauLeadingTrackP"+postfix, "#tau-jet ldg. charged particle p (GeV/c)", opts2={"ymin":0, "ymax": 2})
    moveLegend2 = {
        "DYJetsToLL": {
            "dx": -0.28
        },
        "Diboson": {
            "dx": -0.28
        },
    }.get(datasetName, {"dx": -0.27})
    drawPlot(createPlot(
        td.clone(varexp=tauEmbedding.tauNtuple.rtauExpression +
                 ">>tmp(22, 0, 1.1)")),
             "rtau" + postfix,
             "R_{#tau} = p^{ldg. charged particle}/^{}p^{%s}" % taujet,
             ylabel="Events / %.1f",
             opts={
                 "ymin": 1e-2,
                 "ymaxfactor": 2
             },
             opts2=opts2,
             moveLegend=moveLegend2,
             cutLine=0.7)

    # Full ID
    postfix = "_6AfterTauID"
    selection = And(*[
        getattr(tauEmbedding.tauNtuple, cut)
        for cut in ["tauCandidateSelection", "tauID"]
    ])
    drawPlot(createPlot(
        treeDraw.clone(varexp="taus_p4.Pt()>>tmp(25,0,250)",
                       selection=selection)),
             "tauPt" + postfix,
             taujetH + " ^{}p_{T} (GeV/c)",
             opts2=opts2,
             moveLegend=moveLegend)