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
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()
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()
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(
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")
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")