Пример #1
0
 def makePlot(self, dirname, m, index, luminosity):
     if self._data == None:
         return
     myStackList = []
     # expected
     for i in range(0, len(self._expectedList)):
         myRHWU = RootHistoWithUncertainties(self._expectedList[i])
         myRHWU.addShapeUncertaintyRelative(
             "syst",
             th1Plus=self._expectedListSystUp[i],
             th1Minus=self._expectedListSystDown[i])
         myRHWU.makeFlowBinsVisible()
         if self._expectedLabelList[i] == "QCD":
             myHisto = histograms.Histo(myRHWU,
                                        self._expectedLabelList[i],
                                        legendLabel=_legendLabelQCD)
         elif self._expectedLabelList[i] == "Embedding":
             myHisto = histograms.Histo(myRHWU,
                                        self._expectedLabelList[i],
                                        legendLabel=_legendLabelEmbedding)
         elif self._expectedLabelList[i] == "EWKfakes":
             myHisto = histograms.Histo(myRHWU,
                                        self._expectedLabelList[i],
                                        legendLabel=_legendLabelEWKFakes)
         else:
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i])
         myHisto.setIsDataMC(isData=False, isMC=True)
         myStackList.append(myHisto)
     # data
     myRHWU = RootHistoWithUncertainties(self._data)
     myRHWU.makeFlowBinsVisible()
     myHisto = histograms.Histo(myRHWU, "Data")
     myHisto.setIsDataMC(isData=True, isMC=False)
     myStackList.insert(0, myHisto)
     # Make plot
     myStackPlot = plots.DataMCPlot2(myStackList)
     myStackPlot.setLuminosity(luminosity)
     myStackPlot.setEnergy("%d" % self._config.OptionSqrtS)
     myStackPlot.setDefaultStyles()
     myParams = {}
     myParams["ylabel"] = "Events"
     myParams["log"] = True
     myParams["cmsTextPosition"] = "right"
     myParams["opts"] = {"ymin": 0.9}
     myParams["opts2"] = {"ymin": 0.3, "ymax": 1.7}
     #myParams["moveLegend"] = {"dx": -0.08, "dy": -0.12, "dh": 0.1} # for MC EWK+tt
     #myParams["moveLegend"] = {"dx": -0.15, "dy": -0.12, "dh":0.05} # for data-driven
     myParams["moveLegend"] = {
         "dx": -0.53,
         "dy": -0.52,
         "dh": 0.05
     }  # for data-driven
     myParams["ratioMoveLegend"] = {"dx": -0.51, "dy": 0.03}
     drawPlot(
         myStackPlot, "%s/DataDrivenCtrlPlot_M%d_%02d_SelectionFlow" %
         (dirname, m, index), **myParams)
 def makePlot(self, dirname, m, index, luminosity):
     if self._data == None:
         return
     myStackList = []
     # expected
     for i in range(0,len(self._expectedList)):
         myRHWU = RootHistoWithUncertainties(self._expectedList[i])
         myRHWU.addShapeUncertaintyRelative("syst", th1Plus=self._expectedListSystUp[i], th1Minus=self._expectedListSystDown[i])
         myRHWU.makeFlowBinsVisible()
         if self._expectedLabelList[i] == "QCD":
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i], legendLabel=_legendLabelQCD)
         elif self._expectedLabelList[i] == "QCDdata":
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i], legendLabel=_legendLabelQCDdata)
         elif self._expectedLabelList[i] == "Embedding":
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i], legendLabel=_legendLabelEmbedding)
         elif self._expectedLabelList[i] == "EWKfakes":
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i], legendLabel=_legendLabelEWKFakes)
         else:
             myHisto = histograms.Histo(myRHWU, self._expectedLabelList[i])
         myHisto.setIsDataMC(isData=False, isMC=True)
         myStackList.append(myHisto)
     # data
     myRHWU = RootHistoWithUncertainties(self._data)
     myRHWU.makeFlowBinsVisible()
     myHisto = histograms.Histo(myRHWU, "Data")
     myHisto.setIsDataMC(isData=True, isMC=False)
     myStackList.insert(0, myHisto)
     # Make plot
     myStackPlot = plots.DataMCPlot2(myStackList)
     myStackPlot.setLuminosity(luminosity)
     myStackPlot.setEnergy("%d"%self._config.OptionSqrtS)
     myStackPlot.setDefaultStyles()
     myParams = {}
     myParams["ylabel"] = "Events"
     myParams["log"] = True
     myParams["cmsTextPosition"] = "right"
     myParams["opts"] = {"ymin": 0.9}
     myParams["opts2"] = {"ymin": 0.3, "ymax":1.7}
     #myParams["moveLegend"] = {"dx": -0.08, "dy": -0.12, "dh": 0.1} # for MC EWK+tt
     #myParams["moveLegend"] = {"dx": -0.15, "dy": -0.12, "dh":0.05} # for data-driven
     myParams["moveLegend"] = {"dx": -0.53, "dy": -0.52, "dh":0.05} # for data-driven
     myParams["ratioMoveLegend"] = {"dx": -0.51, "dy": 0.03}
     drawPlot(myStackPlot, "%s/DataDrivenCtrlPlot_M%d_%02d_SelectionFlow"%(dirname,m,index), **myParams)
Пример #3
0
def printSummaryInfo(columnNames, myNuisanceInfo, cachedHistos, hObs, m,
                     luminosity, opts):

    config = aux.load_module(opts.settings)

    def addOrReplace(dictionary, key, newItem):
        if not key in dictionary.keys():
            dictionary[key] = newItem.Clone()
        else:
            dictionary[key].Add(newItem)

    def getHisto(cachedHistos, name):
        for h in cachedHistos:
            if h.GetName() == name:
                return h
        raise Exception("Cannot find histogram '%s'!" % name)

    # Create for each column a root histo with uncertainties
    myDict = OrderedDict()
    myTotal = None

    # Loop over columns (datasets)
    for c in columnNames:

        # Bugfix to prevent crashing with blacklisted datasets
        if c in config.Blacklist:
            continue

        hRate = aux.Clone(getHisto(cachedHistos, c))
        myRHWU = RootHistoWithUncertainties(hRate)
        for n in myNuisanceInfo:
            # Add shape uncertainties
            if n["name"] != "observation" and n[
                    "distribution"] == "shape" and n[
                        c] == "1" and not "statBin" in n["name"]:
                hUp = aux.Clone(
                    getHisto(cachedHistos, "%s_%sUp" % (c, n["name"])))
                hDown = aux.Clone(
                    getHisto(cachedHistos, "%s_%sDown" % (c, n["name"])))
                myRHWU.addShapeUncertaintyFromVariation(n["name"], hUp, hDown)
            # Add constant uncertainties
            elif n["name"] != "observation" and n["name"] != "rate" and n[
                    "name"] != "process" and n[c] != "-" and n[
                        c] != "1" and not "statBin" in n[
                            "name"] and not "BinByBin" in n["name"]:
                diffUp = 0.0
                diffDown = 0.0
                if "/" in n[c]:
                    mySplit = n[c].split("/")
                    diffDown = float(mySplit[0]) - 1.0
                    diffUp = float(mySplit[1]) - 1.0
                else:
                    diffDown = float(n[c]) - 1.0
                    diffUp = float(n[c]) - 1.0
                myRHWU.addNormalizationUncertaintyRelative(
                    n["name"], diffUp, diffDown)
        # Store column info
        _myBr = 0.01
        myAddToTotalStatus = False
        if c.startswith("HH") or c.startswith("CMS_Hptntj_HH"):
            myRHWU.Scale(_myBr**2)
            addOrReplace(myDict, "Hp", myRHWU)
        elif c.startswith("HW") or c.startswith("CMS_Hptntj_HW"):
            myRHWU.Scale(2.0 * _myBr * (1.0 - _myBr))
            addOrReplace(myDict, "Hp", myRHWU)
        elif c.startswith("Hp") or c.startswith("CMS_Hptntj_Hp"):
            addOrReplace(myDict, "Hp", myRHWU)
        elif c == "EWK_Tau" or c.startswith("CMS_Hptntj_EWK_Tau"):
            addOrReplace(myDict, "EWKtau", myRHWU)
            myAddToTotalStatus = True
        elif c.endswith("genuinetau"):
            addOrReplace(myDict, c.replace("CMS_Hptntj_", ""), myRHWU)
            myAddToTotalStatus = True
        elif c.endswith("faketau"):
            addOrReplace(myDict, "EWKfakes", myRHWU)
            myAddToTotalStatus = True
        elif c.startswith("QCD") or c.startswith("CMS_Hptntj_QCD"):
            addOrReplace(myDict, "QCD", myRHWU)
            myAddToTotalStatus = True
        else:
            myDict[c] = myRHWU
            myAddToTotalStatus = True
        if myAddToTotalStatus:
            if myTotal == None:
                myTotal = myRHWU.Clone()
            else:
                myTotal.Add(myRHWU.Clone())

    myDict["Totalbkg"] = myTotal
    # Make table
    print "\nEvent yields:"
    myTotal = None
    for item in myDict.keys():
        if myDict[item] != None:
            myDict[item].makeFlowBinsVisible()
            rate = myDict[item].getRate()
            stat = myDict[item].getRateStatUncertainty()
            (systUp, systDown) = myDict[item].getRateSystUncertainty()
            #myDict[item].Debug()
            print "%11s: %.1f +- %.1f (stat.) + %.1f - %.1f (syst.)" % (
                item, rate, stat, systUp, systDown)
    print "Observation: %d\n\n" % hObs.Integral(0, hObs.GetNbinsX() + 2)

    def setTailFitUncToStat(rhwu):
        tailfitNames = filter(lambda n: "_TailFit_" in n,
                              rhwu.getShapeUncertaintyNames())
        rhwu.setShapeUncertaintiesAsStatistical(tailfitNames)
        #rhwu.printUncertainties()
        #print rhwu.getShapeUncertaintiesAsStatistical()
        return rhwu

    myLogList = [False, True]
    for l in myLogList:

        # Create post fit shape
        myStackList = []
        if "QCD" in myDict.keys():
            myHisto = histograms.Histo(
                setTailFitUncToStat(myDict["QCD"].Clone()),
                "QCD",
                legendLabel=ControlPlotMaker._legendLabelQCD)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        if "EWKtau" in myDict.keys():
            myHisto = histograms.Histo(
                setTailFitUncToStat(myDict["EWKtau"].Clone()),
                "Embedding",
                legendLabel=ControlPlotMaker._legendLabelEmbedding)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        for c in myDict.keys():
            if c.endswith("genuinetau"):
                histoID = c.replace("CMS_Hptntj_",
                                    "").replace("_genuinetau", "")
                lookupTable = {  # Map column name to style in plots.py
                    "tt": "TT",
                    "W": "WJets",
                    "t": "SingleTop",
                    "DY": "DYJetsToLL",
                    "VV": "Diboson",
                    "tt_and_singleTop": "TTandSingleTop",
                    "EWK": "EWK"
                }
                histoString = lookupTable[histoID]
                myHisto = histograms.Histo(
                    setTailFitUncToStat(myDict[c].Clone()),
                    histoString,
                    legendLabel=c.replace("CMS_Hptntj_", ""))
                myHisto.setIsDataMC(isData=False, isMC=True)
                myStackList.append(myHisto)
        if "EWKfakes" in myDict.keys() and myDict["EWKfakes"] != None:
            myHisto = histograms.Histo(
                myDict["EWKfakes"].Clone(),
                "EWKfakes",
                legendLabel=ControlPlotMaker._legendLabelEWKFakes)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        myBlindedStatus = not opts.unblinded
        myBlindingString = None
        hObsLocal = aux.Clone(hObs)
        if myBlindedStatus:
            myBlindingString = "%d-%d GeV" % (hObs.GetXaxis().GetBinLowEdge(1),
                                              hObs.GetXaxis().GetBinUpEdge(
                                                  hObs.GetNbinsX()))
            for i in range(0, hObs.GetNbinsX()):
                hObsLocal.SetBinContent(i, -1.0)
                hObsLocal.SetBinError(i, 0.0)
        # Add data
        myDataHisto = histograms.Histo(hObsLocal, "Data")
        myDataHisto.setIsDataMC(isData=True, isMC=False)
        myStackList.insert(0, myDataHisto)
        # Add signal
        mySignalLabel = "TTToHplus_M%d" % float(m)
        if float(m) > 179:
            mySignalLabel = "HplusTB_M%d" % float(m)
        myHisto = histograms.Histo(myDict["Hp"].Clone(), mySignalLabel)
        myHisto.setIsDataMC(isData=False, isMC=True)
        myStackList.insert(1, myHisto)

        # Make plot
        myStackPlot = plots.DataMCPlot2(myStackList)
        myStackPlot.setLuminosity(luminosity)
        #myStackPlot.setEnergy("%d"%self._config.OptionSqrtS)
        myStackPlot.setDefaultStyles()
        myParams = {}
        if myBlindedStatus:
            myParams["blindingRangeString"] = myBlindingString
        myParams["cmsTextPosition"] = "right"
        myParams["ratio"] = True
        myParams["ratioType"] = "errorScale"
        myParams["ratioYlabel"] = "Data/Bkg. "
        myParams["stackMCHistograms"] = True
        myParams["addMCUncertainty"] = True
        myParams["addLuminosityText"] = True
        myParams["moveLegend"] = {"dx": -0.14, "dy": -0.10}
        myParams["ratioErrorOptions"] = {"numeratorStatSyst": False}
        myParams["ratioCreateLegend"] = True
        #myParams["ratioMoveLegend"] = {"dx": -0.51, "dy": 0.03}
        myParams["ratioMoveLegend"] = {"dx": -0.06, "dy": -0.1}
        myParams["opts2"] = {"ymin": 0.0, "ymax": 2.5}
        myParams["xlabel"] = "m_{T} (GeV)"
        #if l:
        #    myParams["ylabel"] = "< Events / bin >"
        #else:
        myParams["ylabel"] = "Events / 20 GeV"
        a = hObsLocal.GetXaxis().GetBinWidth(1)
        b = hObsLocal.GetXaxis().GetBinWidth(hObsLocal.GetNbinsX())
        #if abs(a-b) < 0.0001:
        #myParams["ylabel"]  += "%d GeV"%a
        #else:
        #myParams["ylabel"]  += "%d-%d GeV"%(a,b)
        #myParams["divideByBinWidth"] = l
        myParams["log"] = l
        myPlotName = "PostTailFitShape_M%d" % float(m)
        if l:
            # scale ymin by 20 in order to compare the rebinned mT with same y-scale
            # ymax(factor) takes care of max automatically
            myParams["opts"] = {"ymin": 20 * 1e-5}
        else:
            myParams["opts"] = {"ymin": 0.0}
            myPlotName += "_Linear"
        plots.drawPlot(myStackPlot, myPlotName, **myParams)
def printSummaryInfo(columnNames, myNuisanceInfo, cachedHistos, hObs, m, luminosity, opts):

    config = aux.load_module(opts.settings)

    def addOrReplace(dictionary, key, newItem):
        if not key in dictionary.keys():
            dictionary[key] = newItem.Clone()
        else:
            dictionary[key].Add(newItem)

    def getHisto(cachedHistos,name):
        for h in cachedHistos:
            if h.GetName() == name:
                return h
        raise Exception("Cannot find histogram '%s'!"%name)

    # Create for each column a root histo with uncertainties
    myDict = OrderedDict()
    myTotal = None

    # Loop over columns (datasets)
    for c in columnNames:
    
        # Bugfix to prevent crashing with blacklisted datasets
        if c in config.Blacklist:
            continue

        hRate = aux.Clone(getHisto(cachedHistos, c))
        myRHWU = RootHistoWithUncertainties(hRate)
        for n in myNuisanceInfo:
            # Add shape uncertainties
            if n["name"] != "observation" and n["distribution"] == "shape" and n[c] == "1" and not "statBin" in n["name"]:
                hUp = aux.Clone(getHisto(cachedHistos, "%s_%sUp"%(c,n["name"])))
                hDown = aux.Clone(getHisto(cachedHistos, "%s_%sDown"%(c,n["name"])))
                myRHWU.addShapeUncertaintyFromVariation(n["name"], hUp, hDown)
            # Add constant uncertainties
            elif n["name"] != "observation" and n["name"] != "rate" and n["name"] != "process" and n[c] != "-" and n[c] != "1" and not "statBin" in n["name"] and not "BinByBin" in n["name"]:
                diffUp = 0.0
                diffDown = 0.0
                if "/" in n[c]:
                    mySplit = n[c].split("/")
                    diffDown = float(mySplit[0])-1.0
                    diffUp = float(mySplit[1])-1.0
                else:
                    diffDown = float(n[c])-1.0
                    diffUp = float(n[c])-1.0
                myRHWU.addNormalizationUncertaintyRelative(n["name"], diffUp, diffDown)
        # Store column info
        _myBr = 0.01
        myAddToTotalStatus = False
        if c.startswith("HH") or c.startswith("CMS_Hptntj_HH"):
            myRHWU.Scale(_myBr**2)
            addOrReplace(myDict, "Hp", myRHWU)
        elif c.startswith("HW") or c.startswith("CMS_Hptntj_HW"):
            myRHWU.Scale(2.0*_myBr*(1.0-_myBr))
            addOrReplace(myDict, "Hp", myRHWU)
        elif c.startswith("Hp") or c.startswith("CMS_Hptntj_Hp"):
            addOrReplace(myDict, "Hp", myRHWU)
        elif c == "EWK_Tau" or c.startswith("CMS_Hptntj_EWK_Tau"):
            addOrReplace(myDict, "EWKtau", myRHWU)
            myAddToTotalStatus = True
        elif c.endswith("genuinetau"):
            addOrReplace(myDict, c.replace("CMS_Hptntj_",""), myRHWU)
            myAddToTotalStatus = True
        elif c.endswith("faketau"):
            addOrReplace(myDict, "EWKfakes", myRHWU)
            myAddToTotalStatus = True
        elif c.startswith("QCD") or c.startswith("CMS_Hptntj_QCD"):
            addOrReplace(myDict, "QCD", myRHWU)
            myAddToTotalStatus = True
        else:
            myDict[c] = myRHWU
            myAddToTotalStatus = True
        if myAddToTotalStatus:
            if myTotal == None:
                myTotal = myRHWU.Clone()
            else:
                myTotal.Add(myRHWU.Clone())

    myDict["Totalbkg"] = myTotal
    # Make table
    print "\nEvent yields:"
    myTotal = None
    for item in myDict.keys():
        if myDict[item] != None:
            myDict[item].makeFlowBinsVisible()
            rate = myDict[item].getRate()
            stat = myDict[item].getRateStatUncertainty()
            (systUp,systDown) = myDict[item].getRateSystUncertainty()
            #myDict[item].Debug()
            print "%11s: %.1f +- %.1f (stat.) + %.1f - %.1f (syst.)"%(item,rate,stat,systUp,systDown)
    print "Observation: %d\n\n"%hObs.Integral(0,hObs.GetNbinsX()+2)

    def setTailFitUncToStat(rhwu):
        tailfitNames = filter(lambda n: "_TailFit_" in n, rhwu.getShapeUncertaintyNames())
        rhwu.setShapeUncertaintiesAsStatistical(tailfitNames)
        #rhwu.printUncertainties()
        #print rhwu.getShapeUncertaintiesAsStatistical()
        return rhwu
    
    myLogList = [False,True]
    for l in myLogList:
        
        # Create post-tailfit shape
        myStackList = []
        if "QCD" in myDict.keys():
            myHisto = histograms.Histo(setTailFitUncToStat(myDict["QCD"].Clone()),"QCD",legendLabel=ControlPlotMaker._legendLabelQCD)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        if "EWKtau" in myDict.keys():
            myHisto = histograms.Histo(setTailFitUncToStat(myDict["EWKtau"].Clone()),"Embedding",legendLabel=ControlPlotMaker._legendLabelEmbedding)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        for c in myDict.keys():
            if "CMS_Hptntj" in c:
                histoID = c.replace("CMS_Hptntj_","").replace("_CMS_Hptntj","")
                lookupTable = { # Map column name to style in plots.py
                "ttbar": "TT",
                "W": "WJets",
                "t": "SingleTop",
                "DY": "DYJetsToLL",
                "VV": "Diboson",
                "singleTop": "SingleTop",
                "QCDandFakeTau": "QCDdata",
                "EWK": "EWK"
                }
                histoString = lookupTable[histoID]
                myHisto = histograms.Histo(setTailFitUncToStat(myDict[c].Clone()),histoString,legendLabel=c.replace("CMS_Hptntj_",""))
                myHisto.setIsDataMC(isData=False, isMC=True)
                myStackList.append(myHisto)
        if "EWKfakes" in myDict.keys() and myDict["EWKfakes"] != None:
            myHisto = histograms.Histo(myDict["EWKfakes"].Clone(),"EWKfakes",legendLabel=ControlPlotMaker._legendLabelEWKFakes)
            myHisto.setIsDataMC(isData=False, isMC=True)
            myStackList.append(myHisto)
        myBlindedStatus = not opts.unblinded
        myBlindingString = None
        hObsLocal = aux.Clone(hObs)
        if myBlindedStatus:
            myBlindingString = "%d-%d GeV"%(hObs.GetXaxis().GetBinLowEdge(1),hObs.GetXaxis().GetBinUpEdge(hObs.GetNbinsX()))
            for i in range(0, hObs.GetNbinsX()):
                hObsLocal.SetBinContent(i, -1.0)
                hObsLocal.SetBinError(i, 0.0)
        # Add data
        myDataHisto = histograms.Histo(hObsLocal,"Data")
        myDataHisto.setIsDataMC(isData=True, isMC=False)
        myStackList.insert(0, myDataHisto)
        # Add signal
        mySignalLabel = "TTToHplus_M%d"%float(m)
        if float(m) > 179:
            mySignalLabel = "HplusTB_M%d"%float(m)
        myHisto = histograms.Histo(myDict["Hp"].Clone(),mySignalLabel)
        myHisto.setIsDataMC(isData=False, isMC=True)
        myStackList.insert(1, myHisto)
        
        # Make plot
	myStackPlot = plots.DataMCPlot2(myStackList)
	myStackPlot.setLuminosity(luminosity)
	#myStackPlot.setEnergy("%d"%self._config.OptionSqrtS)
	myStackPlot.setDefaultStyles()
	myParams = {}
	if myBlindedStatus:
	    myParams["blindingRangeString"] = myBlindingString
	myParams["cmsTextPosition"] = "right"
	myParams["ratio"] = True
	myParams["ratioType"] = "errorScale"
	myParams["ratioYlabel"] = "Data/Bkg. "
	myParams["stackMCHistograms"] = True
	myParams["addMCUncertainty"] = True
	myParams["addLuminosityText"] = True
	myParams["moveLegend"] = {"dx": -0.14, "dy": -0.10}
	myParams["ratioErrorOptions"] = {"numeratorStatSyst": False}
	myParams["ratioCreateLegend"] = True
	#myParams["ratioMoveLegend"] = {"dx": -0.51, "dy": 0.03}
	myParams["ratioMoveLegend"] = {"dx": -0.06, "dy": -0.1}
	myParams["opts2"] = {"ymin": 0.0, "ymax": 2.0}
	myParams["xlabel"] = "m_{T} (GeV)"
	#if l:
        #    myParams["ylabel"] = "< Events / bin >"
        #else:
        myParams["ylabel"] = "Events / bin"
	myParams["divideByBinWidth"] = True
	a = hObsLocal.GetXaxis().GetBinWidth(1)
	b = hObsLocal.GetXaxis().GetBinWidth(hObsLocal.GetNbinsX())
	myParams["log"] = l
	myPlotName = "postTailFitShape_M%d"%float(m)
	if l:
            # scale ymin by 20 in order to compare the rebinned mT with same y-scale
            # ymax(factor) takes care of max automatically
	    myParams["opts"] = {"ymin": 1e-4, "ymaxfactor": 15, "xmax": 800}
	else:
	    myParams["opts"] = {"ymin": 0.0, "xmax": 800}
	    myPlotName += "_linear"
	plots.drawPlot(myStackPlot, myPlotName, **myParams)