Esempio n. 1
0
 def customized_preFitSteps_preFit(self, var, val):
     """ Set proper initial value to reasonable region."""
     unboundAfb = self.args.find("unboundAfb")
     unboundFl = self.args.find("unboundFl")
     if var == "afb":
         for iFl in range(1, 20):
             unboundAfb.setVal(
                 StdFitter.afbToUnboundAfb(
                     val, (1. - 1.33 * math.fabs(val)) / 20. *
                     (20. - iFl)))
             unboundFl.setVal(
                 StdFitter.flToUnboundFl(
                     (1. - 1.33 * math.fabs(val)) / 20. *
                     (20. - iFl)))
             self.FitMigrad()
             if math.fabs(self._nll.getVal()) < 1e20:
                 break
     elif var == "fl":
         unboundFl.setVal(StdFitter.flToUnboundFl(val))
         unboundFl.setConstant(True)
         for iAfb in list(
                 itertools.chain(*[(i, -i) for i in range(-9, 0)])):
             unboundAfb.setVal(
                 StdFitter.afbToUnboundAfb(
                     0.75 * (1. - val) / 10. * iAfb, val))
             self.FitMigrad()
             if math.fabs(self._nll.getVal()) < 1e20:
                 break
Esempio n. 2
0
 def _postRunFitSteps(self, setIdx):
     """ Fill information to otree """
     if math.fabs(self.fitter._nll.getVal()) < 1e20:
         unboundAfb = self.fitter.args.find('unboundAfb').getVal()
         unboundFl  = self.fitter.args.find('unboundFl').getVal()
         self.treeContent.fl = StdFitter.unboundFlToFl(unboundFl)
         self.treeContent.afb = StdFitter.unboundAfbToAfb(unboundAfb, self.treeContent.fl)
         self.treeContent.fs = self.fitter.args.find('fs').getVal()
         self.treeContent.transAs = self.fitter.args.find('transAs').getVal()
         self.treeContent.nSig = self.fitter.args.find('nSig').getVal()
         self.treeContent.nBkgComb = self.fitter.args.find('nBkgComb').getVal()
         self.treeContent.nll = self.fitter._nll.getVal()
         self.otree.Fill()
Esempio n. 3
0
 def _postRunFitSteps(self, setIdx):
     """ Fill information to otree """
     if math.fabs(self.fitter._nll.getVal()) < 1e20:
         unboundAfb = self.fitter.args.find('unboundAfb').getVal()
         unboundFl = self.fitter.args.find('unboundFl').getVal()
         self.treeContent.fl = StdFitter.unboundFlToFl(unboundFl)
         self.treeContent.afb = StdFitter.unboundAfbToAfb(
             unboundAfb, self.treeContent.fl)
         self.treeContent.entries = self.fitter.data.numEntries(
         )  #self.fitter.args.find('fs').getVal()
         self.treeContent.status = self.fitter.fitResult[
             'finalFitter.migrad'][
                 'status']  #self.fitter.args.find('transAs').getVal()
         self.treeContent.nSig = self.fitter.args.find('nSig').getVal()
         self.treeContent.nBkgComb = self.fitter.args.find(
             'nBkgComb').getVal()
         self.treeContent.nll = self.fitter._nll.getVal()
         self.otree.Fill()
    def _postRunFitSteps(self, setIdx):
        SimFit = self.process.cfg['args'].SimFit
        if not SimFit: self.fitter._nll = self.fitter._nll.getVal()
        if math.fabs(self.fitter._nll) < 1e20:
            SimFit = self.process.cfg['args'].SimFit
            unboundAfb = self.fitter.minimizer.getParameters(
                self.fitter.dataWithCategories).find('unboundAfb').getVal(
                ) if SimFit else self.fitter.args.find('unboundAfb').getVal()
            unboundFl = self.fitter.minimizer.getParameters(
                self.fitter.dataWithCategories).find('unboundFl').getVal(
                ) if SimFit else self.fitter.args.find('unboundFl').getVal()
            self.treeContent.fl = StdFitter.unboundFlToFl(unboundFl)
            self.treeContent.afb = StdFitter.unboundAfbToAfb(
                unboundAfb, self.treeContent.fl)
            #self.treeContent.fl = self.process.sourcemanager.get('fl.{}'.format(self.process.cfg['args'].Year)).getVal()
            #self.treeContent.afb = self.process.sourcemanager.get('afb.{}'.format(self.process.cfg['args'].Year)).getVal()

            self.treeContent.index = setIdx
            self.treeContent.status = self.fitter.migradResult if SimFit else self.fitter.fitResult[
                '{}.migrad'.format(self.fitter.name)]['status']
            self.treeContent.hesse = self.fitter.hesseResult if SimFit else self.fitter.fitResult[
                '{}.hesse'.format(self.fitter.name)]['status']
            #self.treeContent.minos = self.fitter.minosResult.status() if SimFit else self.fitter.fitResult['{}.minos'.format(self.fitter.name)]['status']
            if self.process.cfg['args'].SimFit:
                simargs = self.fitter.minimizer.getParameters(
                    self.fitter.dataWithCategories)
                self.treeContent.events16 = self.fitter.data[0].numEntries()
                self.treeContent.events17 = self.fitter.data[1].numEntries()
                self.treeContent.events18 = self.fitter.data[2].numEntries()
                self.treeContent.Wevents16 = self.fitter.data[0].sumEntries()
                self.treeContent.Wevents17 = self.fitter.data[1].sumEntries()
                self.treeContent.Wevents18 = self.fitter.data[2].sumEntries()
            else:
                self.treeContent.events = self.fitter.data.numEntries()
                self.treeContent.Wevents = self.fitter.data.sumEntries()
            self.treeContent.nll = self.fitter._nll
            self.otree.Fill()
Esempio n. 5
0
setupProfiledFCToyStudier = deepcopy(
    AbsToyStudier.AbsToyStudier.templateConfig())
setupProfiledFCToyStudier.update({
    'name': "profiledFCToyStudier",
    'data': "ToyGenerator.mixedToy",
    'fitter': fitCollection.finalFitter,
    'nSetOfToys':
    500,  # Typically 100 Toys * 5 submissions for acceptable precision, in proportion to generating time.
})
profiledFCToyStudier = ProfiledFCToyStudier(setupProfiledFCToyStudier)

setupProfiler = deepcopy(fitCollection.setupFinalFitter)
setupProfiler.update({
    'FitMinos': [True, ('nSig', 'unboundAfb', 'unboundFl', 'nBkgComb')],
})
profiler = StdFitter.StdFitter(setupProfiler)
profiler.name = "profiler"

# Customize batch task


class BatchTaskWrapper(AbsBatchTaskWrapper.AbsBatchTaskWrapper):
    def createJdl(self, parser_args):
        jdl = self.createJdlBase()
        for BinKey in parser_args.binKey:
            jdl += """
JobBatchName = "{JobBatchName}_{binKey}"
arguments = --binKey {binKey} run $(Process)
queue {nJobs}
"""
            jdl = jdl.format(
Esempio n. 6
0
def func_postproc(args):
    """ Fit to fit result and make plots """
    GenResult = []
    RecoResult = []
    os.chdir(args.wrapper.task_dir)
    args.process.addService(
        "dbplayer",
        FitDBPlayer(absInputDir=os.path.join(modulePath, "plots_{}".format(
            args.Year))))
    binKeys = args.process.cfg['allBins'] if args.process.cfg[
        'args'].forall else args.process.cfg[
            'bins']  #Run over all bins if no binkey arg is supplied
    for binKey in binKeys:
        ifilename = "setSummary_{}_{}.root".format(
            "Simult" if args.SimFit else args.Year, q2bins[binKey]['label'])
        if not os.path.exists(ifilename) or args.forceHadd:
            call(["hadd", "-f", ifilename] +
                 glob.glob('*/setSummary_{}_{}.root'.format(
                     "Simult" if args.SimFit else args.Year, q2bins[binKey]
                     ['label'])))
        ifile = ROOT.TFile(ifilename)
        tree = ifile.Get("tree")
        Cuts = "covQual==3&&status==0&&hesse==0"

        binWidth = 0.01
        h_setSummary_afb = ROOT.TH1F("h_setSummary_afb", "",
                                     int(1.5 / binWidth), -0.75, 0.75)
        h_setSummary_fl = ROOT.TH1F("h_setSummary_fl", "", int(1. / binWidth),
                                    0., 1.)

        tree.Draw("afb>>h_setSummary_afb", Cuts)
        tree.Draw("fl>>h_setSummary_fl", Cuts)

        f_setSummary_afb = ROOT.TF1("f_setSummary_afb", "gaus",
                                    -0.75 + binWidth, 0.75 - binWidth)
        h_setSummary_afb.Fit("f_setSummary_afb")
        h_setSummary_afb.GetFunction("f_setSummary_afb").SetLineColor(4)

        f_setSummary_fl = ROOT.TF1("f_setSummary_fl", "gaus", binWidth,
                                   1 - binWidth)
        if binKey == "betweenPeaks":
            r = h_setSummary_fl.Fit("f_setSummary_fl", "S", "", 0.39, .8)
        else:
            r = h_setSummary_fl.Fit("f_setSummary_fl", "S")
        h_setSummary_fl.GetFunction("f_setSummary_fl").SetLineColor(4)

        # Draw
        db = shelve.open(
            os.path.join(args.process.dbplayer.absInputDir,
                         "fitResults_{0}.db".format(q2bins[binKey]['label'])),
            'r')
        fl_GEN = StdFitter.unboundFlToFl(db['unboundFl_GEN']['getVal'])
        afb_GEN = StdFitter.unboundAfbToAfb(db['unboundAfb_GEN']['getVal'],
                                            fl_GEN)
        line = ROOT.TLine()
        line.SetLineWidth(2)
        line.SetLineColor(2)
        line.SetLineStyle(9)
        plotCollection.Plotter.canvas.cd()

        h_setSummary_afb.SetXTitle("A_{6}")
        h_setSummary_afb.SetYTitle("Number of test samples")
        h_setSummary_afb.SetFillColor(ROOT.kGreen - 10)
        h_setSummary_afb.GetYaxis().SetRangeUser(
            0., 1.5 * h_setSummary_afb.GetMaximum())
        h_setSummary_afb.Draw()
        GetParams(f_setSummary_afb, h_setSummary_afb, binKey, afb_GEN, "a6")
        if args.drawGEN:
            line.DrawLine(afb_GEN, 0, afb_GEN, h_setSummary_afb.GetMaximum())
        plotCollection.Plotter.latexDataMarks(['mix'])
        plotCollection.Plotter.canvas.Print(
            "h_setSummary_mixedToyValidation_a6_{}_{}.pdf".format(
                "Simult" if args.SimFit else args.Year,
                q2bins[binKey]['label']))

        h_setSummary_fl.SetXTitle("F_{L}")
        h_setSummary_fl.SetYTitle("Number of test samples")
        h_setSummary_fl.SetFillColor(ROOT.kGreen - 10)
        h_setSummary_fl.GetYaxis().SetRangeUser(
            0., 1.5 * h_setSummary_fl.GetMaximum())
        h_setSummary_fl.Draw()
        GetParams(f_setSummary_fl, h_setSummary_fl, binKey, fl_GEN, "fl")
        if args.drawGEN:
            line.DrawLine(fl_GEN, 0, fl_GEN, h_setSummary_fl.GetMaximum())
        plotCollection.Plotter.latexDataMarks(['mix'])
        plotCollection.Plotter.canvas.Print(
            "h_setSummary_mixedToyValidation_fl_{}_{}.pdf".format(
                "Simult" if args.SimFit else args.Year,
                q2bins[binKey]['label']))
        Fl_GENErr = abs(
            StdFitter.unboundFlToFl(db['unboundFl_GEN']['getVal'] +
                                    db['unboundFl_GEN']['getError']) - fl_GEN)
        A6_GENErr = abs(
            StdFitter.unboundAfbToAfb(
                db['unboundAfb_GEN']['getVal'] +
                db['unboundAfb_GEN']['getError'], fl_GEN) - afb_GEN)
        GenResult.append((fl_GEN, Fl_GENErr, afb_GEN, A6_GENErr))
        RecoResult.append(
            (f_setSummary_fl.GetParameter(1), f_setSummary_fl.GetParameter(2),
             f_setSummary_afb.GetParameter(1),
             f_setSummary_afb.GetParameter(2)))

        if not args.process.cfg['args'].SimFit:
            from copy import deepcopy
            tree.Draw("nSig", Cuts)
            nSigHist = deepcopy(ROOT.gPad.GetPrimitive("htemp"))
            tree.Draw("nBkgComb", Cuts)
            nBkgCombHist = deepcopy(ROOT.gPad.GetPrimitive("htemp"))
            tree.Draw("nBkgPeak", Cuts)
            nBkgPeakHist = deepcopy(ROOT.gPad.GetPrimitive("htemp"))
            tree.Draw("entries", Cuts)
            nTotalHist = deepcopy(ROOT.gPad.GetPrimitive("htemp"))

            # Signal Event Distributions
            nSigHist.Draw()
            nSigHist.SetFillColor(ROOT.kBlue - 10)
            #nSigHist.SetLineColor(ROOT.kBlue)
            ROOT.TLatex().DrawLatexNDC(
                .73, .77,
                r"#scale[0.7]{{#color[4]{{Mean}}   : {param}}}".format(
                    param=round(nSigHist.GetMean(), 5)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .73,
                r"#scale[0.7]{{#color[1]{{Samples}} : {param}}}".format(
                    param=round(nSigHist.GetEntries(), 0)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .82, r"#scale[0.7]{{#color[2]{{nSig}} : {param}}}".format(
                    param=round(db['nSig']['getVal'], 0)))
            plotCollection.Plotter.canvas.Update()
            line.DrawLine(db['nSig']['getVal'], 0, db['nSig']['getVal'],
                          ROOT.gPad.GetUymax())
            ROOT.TLatex().DrawLatexNDC(
                .45, .89, r"#scale[0.8]{{{latexLabel}}}".format(
                    latexLabel=q2bins[binKey]['latexLabel']))
            plotCollection.Plotter.canvas.Print("h_nSig_{}_{}.pdf".format(
                args.Year, q2bins[binKey]['label']))

            #Bkg yield distribution
            nBkgCombHist.Draw()
            nBkgCombHist.SetFillColor(ROOT.kRed - 10)
            #nBkgCombHist.SetLineColor(ROOT.kRed)
            ROOT.TLatex().DrawLatexNDC(
                .73, .77,
                r"#scale[0.7]{{#color[2]{{Mean}}   : {param}}}".format(
                    param=round(nBkgCombHist.GetMean(), 5)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .73,
                r"#scale[0.7]{{#color[1]{{Samples}} : {param}}}".format(
                    param=round(nBkgCombHist.GetEntries(), 0)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .82, r"#scale[0.7]{{#color[2]{{nBkg}} : {param}}}".format(
                    param=round(db['nBkgComb']['getVal'], 0)))
            plotCollection.Plotter.canvas.Update()
            line.DrawLine(db['nBkgComb']['getVal'], 0,
                          db['nBkgComb']['getVal'], ROOT.gPad.GetUymax())
            ROOT.TLatex().DrawLatexNDC(
                .45, .89, r"#scale[0.8]{{{latexLabel}}}".format(
                    latexLabel=q2bins[binKey]['latexLabel']))
            plotCollection.Plotter.canvas.Print("h_nBkgComb_{}_{}.pdf".format(
                args.Year, q2bins[binKey]['label']))

            #Peaking Bkg yield distribution
            nBkgPeakHist.Draw()
            nBkgPeakHist.SetFillColor(ROOT.kGreen - 10)
            #nBkgPeakHist.SetLineColor(ROOT.kGreen)
            ROOT.TLatex().DrawLatexNDC(
                .73, .77,
                r"#scale[0.7]{{#color[3]{{Mean}}   : {param}}}".format(
                    param=round(nBkgPeakHist.GetMean(), 5)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .73,
                r"#scale[0.7]{{#color[1]{{Samples}} : {param}}}".format(
                    param=round(nBkgPeakHist.GetEntries(), 0)))
            nPeak = db['PeakFrac']['getVal'] * db['nSig']['getVal']
            ROOT.TLatex().DrawLatexNDC(
                .73, .82,
                r"#scale[0.7]{{#color[2]{{nPeak}} : {param}}}".format(
                    param=round(nPeak, 0)))
            plotCollection.Plotter.canvas.Update()
            line.DrawLine(nPeak, 0, nPeak, ROOT.gPad.GetUymax())
            ROOT.TLatex().DrawLatexNDC(
                .45, .89, r"#scale[0.8]{{{latexLabel}}}".format(
                    latexLabel=q2bins[binKey]['latexLabel']))
            plotCollection.Plotter.canvas.Print("h_nBkgPeak_{}_{}.pdf".format(
                args.Year, q2bins[binKey]['label']))

            # Total yield distributions
            nTotalHist.Draw()
            nTotalHist.SetFillColor(ROOT.kBlue - 10)
            #nTotalHist.SetLineColor(ROOT.kBlue)
            ROOT.TLatex().DrawLatexNDC(
                .73, .77,
                r"#scale[0.7]{{#color[4]{{Mean}}   : {param}}}".format(
                    param=round(nTotalHist.GetMean(), 5)))
            ROOT.TLatex().DrawLatexNDC(
                .73, .73,
                r"#scale[0.7]{{#color[1]{{Samples}} : {param}}}".format(
                    param=round(nTotalHist.GetEntries(), 0)))
            nTotal = db['nBkgComb']['getVal'] + db['nSig']['getVal'] + nPeak
            ROOT.TLatex().DrawLatexNDC(
                .73, .82,
                r"#scale[0.7]{{#color[2]{{nTotal}} : {param}}}".format(
                    param=round(nTotal, 0)))
            plotCollection.Plotter.canvas.Update()
            line.DrawLine(nTotal, 0, nTotal, ROOT.gPad.GetUymax())
            ROOT.TLatex().DrawLatexNDC(
                .45, .89, r"#scale[0.8]{{{latexLabel}}}".format(
                    latexLabel=q2bins[binKey]['latexLabel']))
            plotCollection.Plotter.canvas.Print("h_nTotal_{}_{}.pdf".format(
                args.Year, q2bins[binKey]['label']))

        Hist2D = ROOT.TH2F("Hist2D", "title", 100, -1, 1, 100, 0., 1.05)
        tree.Draw("fl:afb>>Hist2D", Cuts)  #+"&&(fl-abs(afb))<=0.95")
        Hist2D.Draw("COLZ")
        Hist2D.GetXaxis().SetTitle("A_{6}")
        Hist2D.GetYaxis().SetTitle("F_{L}")
        ROOT.gPad.SetRightMargin(0.115)
        #ROOT.TColor.InvertPalette()
        #ROOT.TLine().DrawLine(-1, 0, 0, 1);        ROOT.TLine().DrawLine(0, 1, 1, 0);        ROOT.TLine().DrawLine(-1, 0, 1, 0)
        plotCollection.Plotter.canvas.Print("h2_{}_{}.pdf".format(
            "Simult" if args.SimFit else args.Year, q2bins[binKey]['label']))

        db.close()
    if args.process.cfg['args'].forall:
        GetSummaryGraph(binKeys,
                        RecoResult,
                        GenResult,
                        args,
                        pltName="mixedToy")
Esempio n. 7
0
 def _postRunFitSteps(self, setIdx):
     SimFit = self.process.cfg['args'].SimFit
     if not SimFit: self.fitter._nll = self.fitter._nll.getVal()
     if math.fabs(self.fitter._nll) < 1e20:
         unboundAfb = self.fitter.minimizer.getParameters(
             self.fitter.dataWithCategories).find('unboundAfb').getVal(
             ) if SimFit else self.fitter.args.find('unboundAfb').getVal()
         unboundFl = self.fitter.minimizer.getParameters(
             self.fitter.dataWithCategories).find('unboundFl').getVal(
             ) if SimFit else self.fitter.args.find('unboundFl').getVal()
         self.treeContent.fl = StdFitter.unboundFlToFl(unboundFl)
         self.treeContent.afb = StdFitter.unboundAfbToAfb(
             unboundAfb, self.treeContent.fl)
         self.treeContent.index = setIdx
         self.treeContent.status = self.fitter.fitter.fitResult[
             '{}.StdFitter'.format(
                 self.fitter.name
             )]['MIGRAD'] if SimFit else self.fitter.fitResult[
                 '{}.StdFitter'.format(self.fitter.name)]['MIGRAD']
         self.treeContent.hesse = self.fitter.fitter.fitResult[
             '{}.StdFitter'.format(
                 self.fitter.name
             )]['HESSE'] if SimFit else self.fitter.fitResult[
                 '{}.StdFitter'.format(self.fitter.name)]['HESSE']
         self.treeContent.covQual = self.fitter.fitter.fitResult[
             '{}.StdFitter'.format(
                 self.fitter.name
             )]['covQual'] if SimFit else self.fitter.fitResult[
                 '{}.StdFitter'.format(self.fitter.name)]['covQual']
         if SimFit:
             simargs = self.fitter.minimizer.getParameters(
                 self.fitter.dataWithCategories)
             self.treeContent.events16 = self.fitter.data[0].numEntries()
             self.treeContent.events17 = self.fitter.data[1].numEntries()
             self.treeContent.events18 = self.fitter.data[2].numEntries()
             self.treeContent.Wevents16 = self.fitter.data[0].sumEntries()
             self.treeContent.Wevents17 = self.fitter.data[1].sumEntries()
             self.treeContent.Wevents18 = self.fitter.data[2].sumEntries()
             self.treeContent.nSig16 = simargs.find('nSig_2016').getVal()
             self.treeContent.nSig17 = simargs.find('nSig_2017').getVal()
             self.treeContent.nSig18 = simargs.find('nSig_2018').getVal()
             self.treeContent.nBkgComb16 = simargs.find(
                 'nBkgComb_2016').getVal()
             self.treeContent.nBkgComb17 = simargs.find(
                 'nBkgComb_2017').getVal()
             self.treeContent.nBkgComb18 = simargs.find(
                 'nBkgComb_2018').getVal()
             self.treeContent.nBkgPeak16 = self.fitter.pdf[0].servers(
             ).findByName("nBkgPeak").getVal()
             self.treeContent.nBkgPeak17 = self.fitter.pdf[1].servers(
             ).findByName("nBkgPeak").getVal()
             self.treeContent.nBkgPeak18 = self.fitter.pdf[2].servers(
             ).findByName("nBkgPeak").getVal()
         else:
             self.treeContent.entries = self.fitter.data.sumEntries()
             self.treeContent.sigEntries = self.sigEntries
             self.treeContent.nSig = self.fitter.args.find('nSig').getVal()
             self.treeContent.nBkgComb = self.fitter.args.find(
                 'nBkgComb').getVal()
             self.treeContent.nBkgPeak = self.fitter.pdf.servers(
             ).findByName("nBkgPeak").getVal()
         self.treeContent.nll = self.fitter._nll
         self.otree.Fill()
         if not SimFit:
             if (self.treeContent.fl > 0.97
                     and abs(self.treeContent.afb) < 0.05
                     and self.plotflag):
                 self._postRunFitPlotter(setIdx)
         print("Status: ", self.treeContent.status, self.treeContent.hesse,
               self.treeContent.covQual)
def func_postproc(args):
    """ Fit to fit result and make plots """
    GenResult = []
    RecoResult = []
    os.chdir(args.wrapper.task_dir)
    args.process.addService(
        "dbplayer",
        FitDBPlayer(absInputDir=os.path.join(modulePath, "plots_{}".format(
            args.Year))))
    binKeys = args.process.cfg['allBins'] if args.process.cfg[
        'args'].forall else args.process.cfg[
            'bins']  #Run over all bins if no binkey arg is supplied
    for binKey in binKeys:
        ifilename = "setSummary_{}_{}.root".format(
            "Simult" if args.SimFit else args.Year, q2bins[binKey]['label'])
        if not os.path.exists(ifilename) or args.forceHadd:
            call(["hadd", "-f", ifilename] +
                 glob.glob('*/setSummary_{}_{}.root'.format(
                     "Simult" if args.SimFit else args.Year, q2bins[binKey]
                     ['label'])))
        ifile = ROOT.TFile(ifilename)
        tree = ifile.Get("tree")

        binWidth = 0.01
        h_setSummary_afb = ROOT.TH1F("h_setSummary_afb", "",
                                     int(1.5 / binWidth), -0.75, 0.75)
        h_setSummary_fl = ROOT.TH1F("h_setSummary_fl", "", int(1. / binWidth),
                                    0., 1.)

        tree.Draw("afb>>h_setSummary_afb", "status==0")
        tree.Draw("fl>>h_setSummary_fl", "status==0")

        f_setSummary_afb = ROOT.TF1("f_setSummary_afb", "gaus",
                                    -0.75 + binWidth, 0.75 - binWidth)
        #f_setSummary_afb.SetLineColor(ROOT.kBlue)
        h_setSummary_afb.Fit("f_setSummary_afb")
        h_setSummary_afb.GetFunction("f_setSummary_afb").SetLineColor(4)

        f_setSummary_fl = ROOT.TF1("f_setSummary_fl", "gaus", binWidth,
                                   1 - binWidth)
        #f_setSummary_fl.SetLineColor(ROOT.kBlue)
        h_setSummary_fl.Fit("f_setSummary_fl")
        h_setSummary_fl.GetFunction("f_setSummary_fl").SetLineColor(4)

        # Draw
        db = shelve.open(
            os.path.join(args.process.dbplayer.absInputDir,
                         "fitResults_{0}.db".format(q2bins[binKey]['label'])),
            'r')
        fl_GEN = StdFitter.unboundFlToFl(db['unboundFl_GEN']['getVal'])
        afb_GEN = StdFitter.unboundAfbToAfb(db['unboundAfb_GEN']['getVal'],
                                            fl_GEN)
        line = ROOT.TLine()
        line.SetLineWidth(2)
        line.SetLineColor(2)
        line.SetLineStyle(9)
        plotCollection.Plotter.canvas.cd()

        h_setSummary_afb.SetXTitle("A_{6}")
        h_setSummary_afb.SetYTitle("Number of test samples")
        h_setSummary_afb.SetFillColor(ROOT.kGreen - 10)
        h_setSummary_afb.GetYaxis().SetRangeUser(
            0., 1.5 * h_setSummary_afb.GetMaximum())
        h_setSummary_afb.Draw()
        GetParams(f_setSummary_afb, h_setSummary_afb, binKey, afb_GEN, "a6")
        if args.drawGEN:
            line.DrawLine(afb_GEN, 0, afb_GEN, h_setSummary_afb.GetMaximum())
        plotCollection.Plotter.latexDataMarks(['sim'])
        plotCollection.Plotter.canvas.Print(
            "h_setSummary_sigMCValidation_a6_{}_{}.pdf".format(
                "Simult" if args.SimFit else args.Year,
                q2bins[binKey]['label']))

        h_setSummary_fl.SetXTitle("F_{L}")
        h_setSummary_fl.SetYTitle("Number of test samples")
        h_setSummary_fl.SetFillColor(ROOT.kGreen - 10)
        h_setSummary_fl.GetYaxis().SetRangeUser(
            0., 1.5 * h_setSummary_fl.GetMaximum())
        h_setSummary_fl.Draw()
        GetParams(f_setSummary_fl, h_setSummary_fl, binKey, fl_GEN, "fl")
        if args.drawGEN:
            line.DrawLine(fl_GEN, 0, fl_GEN, h_setSummary_fl.GetMaximum())
        plotCollection.Plotter.latexDataMarks(['sim'])
        plotCollection.Plotter.canvas.Print(
            "h_setSummary_sigMCValidation_fl_{}_{}.pdf".format(
                "Simult" if args.SimFit else args.Year,
                q2bins[binKey]['label']))

        Fl_GENErr = abs(
            StdFitter.unboundFlToFl(db['unboundFl_GEN']['getVal'] +
                                    db['unboundFl_GEN']['getError']) - fl_GEN)
        A6_GENErr = abs(
            StdFitter.unboundAfbToAfb(
                db['unboundAfb_GEN']['getVal'] +
                db['unboundAfb_GEN']['getError'], fl_GEN) - afb_GEN)
        GenResult.append((fl_GEN, Fl_GENErr, afb_GEN, A6_GENErr))
        RecoResult.append(
            (f_setSummary_fl.GetParameter(1), f_setSummary_fl.GetParameter(2),
             f_setSummary_afb.GetParameter(1),
             f_setSummary_afb.GetParameter(2)))
        db.close()
    if args.process.cfg['args'].forall:
        from BsToPhiMuMuFitter.script.batchTask_mixedToyValidation import GetSummaryGraph as SummaryGraph
        SummaryGraph(binKeys,
                     RecoResult,
                     GenResult,
                     args,
                     pltName="sigMCSubsample")