Example #1
0
def func_altSP(args):
    """ Set fs to 5% instead of 0% """
    setupFinalAltSPFitter = deepcopy(fitCollection.setupFinalFitter)
    setupFinalAltSPFitter.update({
        'argAliasInDB': {'afb': 'afb_altSP', 'fl': 'fl_altSP', 'fs': 'fs_altSP', 'as': 'as_altSP'},
        'saveToDB': False,
    })
    finalAltSPFitter = StdFitter(setupFinalAltSPFitter)
    def _preFitSteps_vetoSmallFs_altSP(self):
        """ fs is usually negligible, set the alternative fraction to 0.05 """
        if "fs" in self.cfg.get('argPattern'):
            fs = self.args.find("fs")
            transAs = self.args.find("transAs")
            fs.setVal(0.05)
            fs.setConstant(True)
            transAs.setVal(0)
            transAs.setConstant(False)

    finalAltSPFitter._preFitSteps_vetoSmallFs = types.MethodType(_preFitSteps_vetoSmallFs_altSP, finalAltSPFitter)

    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataCollection.dataReader,
        finalAltSPFitter,
    ])

    try:
        p.beginSeq()
        p.runSeq()

        updateToDB_altShape(args, "altSP")
    finally:
        p.endSeq()
Example #2
0
def func_vetoJpsiX(args):
    """ Remvoe LSB from Fit region """
    dataReaderCfg = deepcopy(dataCollection.dataReaderCfg)
    dataReaderCfg.update({
        'preloadFile': None
    })
    dataReader = DataReader(dataReaderCfg)
    dataReader.customize = types.MethodType(
        functools.partial(dataCollection.customizeOne,
                          targetBMassRegion=['altFit_vetoJpsiX'],
                          extraCuts=cut_kshortWindow),
        dataReader
    )
    fitterCfg = deepcopy(fitCollection.setupFinalFitter)
    fitterCfg.update({
        'data': "dataReader.altFit_vetoJpsiX",
        'saveToDB': False
    })
    fitter = StdFitter(fitterCfg)
    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataReader,
        fitter,
    ])

    try:
        p.beginSeq()
        p.runSeq()

        updateToDB_altShape(args, "vetoJpsiX")
    finally:
        p.endSeq()
Example #3
0
def func_simMismodel(args):
    p.setSequence([])
    try:
        p.beginSeq()
        db = shelve.open(p.dbplayer.odbfile)
        fl_GEN = unboundFlToFl(db['unboundFl_GEN']['getVal'])
        fl_RECO = unboundFlToFl(db['unboundFl_RECO']['getVal'])
        afb_GEN = unboundAfbToAfb(db['unboundAfb_GEN']['getVal'], fl_GEN)
        afb_RECO = unboundAfbToAfb(db['unboundAfb_RECO']['getVal'], fl_RECO)
        db.close()
        syst_simMismodel = {
            'syst_simMismodel_fl': {
                'getError': math.fabs(fl_GEN - fl_RECO),
                'getErrorHi': math.fabs(fl_GEN - fl_RECO),
                'getErrorLo': -math.fabs(fl_GEN - fl_RECO),
            },
            'syst_simMismodel_afb': {
                'getError': math.fabs(afb_GEN - afb_RECO),
                'getErrorHi': math.fabs(afb_GEN - afb_RECO),
                'getErrorLo': -math.fabs(afb_GEN - afb_RECO),
            }
        }
        print(syst_simMismodel)

        if args.updateDB:
            FitDBPlayer.UpdateToDB(p.dbplayer.odbfile, syst_simMismodel)
    finally:
        p.endSeq()
Example #4
0
def func_altSigM(args):
    """ Not used """
    setupFinalAltSigMFitter = deepcopy(fitCollection.setupFinalFitter)
    setupFinalAltSigMFitter.update({
        'argAliasInDB': {'afb': 'afb_altSigM', 'fl': 'fl_altSigM', 'fs': 'fs_altSigM', 'as': 'as_altSigM'},
        'saveToDB': False,
    })
    finalAltSigMFitter = StdFitter(setupFinalAltSigMFitter)
    def _preFitSteps_altSigM(self):
        StdFitter._preFitSteps(self)
        sigM_frac = self.args.find("sigM_frac")
        sigM_frac.setVal(0)
    finalAltSigMFitter._preFitSteps = types.MethodType(_preFitSteps_altSigM, finalAltSigMFitter)

    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataCollection.dataReader,
        finalAltSigMFitter,
    ])

    try:
        p.beginSeq()
        p.runSeq()

        updateToDB_altShape(args, "altSigM")
    finally:
        p.endSeq()
Example #5
0
def func_altEffi(args):
    """ Typically less than 1% """
    setupFinalAltEffiFitter = deepcopy(fitCollection.setupFinalFitter)
    setupFinalAltEffiFitter.update({
        'argAliasInDB': {'afb': 'afb_altEffi', 'fl': 'fl_altEffi', 'fs': 'fs_altEffi', 'as': 'as_altEffi'},
        'saveToDB': False,
    })
    finalAltEffiFitter = StdFitter(setupFinalAltEffiFitter)
    def _preFitSteps_altEffi(self):
        StdFitter._preFitSteps(self)
        hasXTerm = self.args.find("hasXTerm")
        hasXTerm.setVal(0)
    finalAltEffiFitter._preFitSteps = types.MethodType(_preFitSteps_altEffi, finalAltEffiFitter)

    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataCollection.dataReader,
        finalAltEffiFitter,
    ])

    try:
        p.beginSeq()
        p.runSeq()

        updateToDB_altShape(args, "altEffi")
    finally:
        p.endSeq()
 def runSimSequences():
     for Year in [2016, 2017, 2018]:
         p.cfg['args'].Year = Year
         GetInputFiles(p)
         sequence = Instantiate(p,
                                predefined_sequence[args.seqKey][0])
         p.setSequence(sequence)
         p.beginSeq()
         p.runSeq()
     p.cfg['args'].Year = args.Year
Example #7
0
def func_altBkgCombM(args):
    """ Not used """
    setupFinalAltBkgCombMFitter = deepcopy(fitCollection.setupFinalFitter)
    setupFinalAltBkgCombMFitter.update({
        'pdf': "f_finalAltBkgCombM",
        'argAliasInDB': {'afb': 'afb_altBkgCombM', 'fl': 'fl_altBkgCombM', 'fs': 'fs_altBkgCombM', 'as': 'as_altBkgCombM'},
        'saveToDB': False,
    })
    finalAltBkgCombMFitter = StdFitter(setupFinalAltBkgCombMFitter)
    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataCollection.dataReader,
        finalAltBkgCombMFitter,
    ])

    try:
        p.beginSeq()
        p.runSeq()

        updateToDB_altShape(args, "altBkgCombM")
    finally:
        p.endSeq()
                for Year in [2016, 2017, 2018]:
                    p.cfg['args'].Year = Year
                    GetInputFiles(p)
                    sequence = Instantiate(p,
                                           predefined_sequence[args.seqKey][0])
                    p.setSequence(sequence)
                    p.beginSeq()
                    p.runSeq()
                p.cfg['args'].Year = args.Year

            if args.SimFit and not (args.Function_name
                                    in ['submit', 'run', 'postproc']):
                print("INFO: Processing simultaneously over three year data")
                runSimSequences()
                sequence = Instantiate(p, predefined_sequence[args.seqKey][1])
                p.setSequence(sequence)
                p.beginSeq()
            elif args.Function_name in ['submit', 'run', 'postproc']:
                print("INFO: Processing {0} year data".format(args.Year))
                from BsToPhiMuMuFitter.anaSetup import modulePath
                if args.seqKey == 'sigMCValidation':
                    import BsToPhiMuMuFitter.script.batchTask_sigMCValidation as batchTask_sigMCValidation
                    wrappedTask = batchTask_sigMCValidation.BatchTaskWrapper(
                        "myBatchTask",
                        os.path.join(modulePath, "batchTask_sigMCValidation"),
                        cfg=batchTask_sigMCValidation.setupBatchTask)
                elif args.seqKey == 'mixedToyValidation':
                    import BsToPhiMuMuFitter.script.batchTask_mixedToyValidation as batchTask_mixedToyValidation
                    wrappedTask = batchTask_mixedToyValidation.BatchTaskWrapper(
                        "myBatchTask_MixedToy",
                        os.path.join(modulePath,
Example #9
0
                      ROOT.RooFit.Range("Fit"),
                      ROOT.RooFit.Components('f_sig3D'))
                 ],
                 [
                     "f_final",
                     plotCollection.plotterCfg_styles['bkgStyleBase'] +
                     (ROOT.RooFit.ProjectionRange("Fit"),
                      ROOT.RooFit.Range("Fit"),
                      ROOT.RooFit.Components('f_bkgComb'))
                 ],
             ],
             'marks':
             None,
         })
     p.setSequence([
         dataCollection.dataReader, pdfCollection.stdWspaceReader, profiler,
         plotCollection.plotter
     ])
     setupBatchTaskProfile['work_dir'] = profilePoints
     setupBatchTaskProfile['nJobs'] = len(profilePoints)
     wrappedTask = BatchTaskWrapperProfile("myBatchTask",
                                           "{0}".format(task_dir),
                                           cfg=setupBatchTaskProfile)
 elif args.Function_name in ["submit", "run"]:
     p.setSequence([
         pdfCollection.stdWspaceReader,
         toyCollection.sigToyGenerator,
         toyCollection.bkgCombToyGenerator,
         profiledFCToyStudier,
     ])
     setupBatchTask['nJobs'] = len(profilePoints)
     wrappedTask = BatchTaskWrapper("myBatchTask",
Example #10
0
def func_randEffi(args):
    """ Typically less than 5% """
    setupFinalRandEffiFitter = deepcopy(fitCollection.setupFinalFitter)
    setupFinalRandEffiFitter.update({
        'FitMinos': [False, ()],
        'argAliasInDB': {'afb': 'afb_randEffi', 'fl': 'fl_randEffi', 'fs': 'fs_randEffi', 'as': 'as_randEffi'},
        'saveToDB': False,
    })
    finalRandEffiFitter = StdFitter(setupFinalRandEffiFitter)

    def preFitSteps_randEffi(self):
        self.args = self.pdf.getParameters(self.data)
        self._preFitSteps_initFromDB()

        # Fluctuate cross-term correction
        effiArgs = ROOT.RooArgSet()
        FitterCore.ArgLooper(self.args, lambda iArg: effiArgs.add(iArg), targetArgs=[r"x\d{1,2}"])
        FitDBPlayer.fluctuateFromDB(self.process.dbplayer.odbfile, effiArgs, self.cfg['argAliasInDB'])

        self._preFitSteps_vetoSmallFs()
        self._preFitSteps_preFit()

    finalRandEffiFitter._preFitSteps = types.MethodType(preFitSteps_randEffi, finalRandEffiFitter)

    foutName = "syst_randEffi_{0}.root".format(q2bins[args.binKey]['label'])
    class effiStudier(AbsToyStudier):
        def _preSetsLoop(self):
            self.hist_afb = ROOT.TH1F("hist_afb", "", 300, -0.75, 0.75)
            self.hist_afb.GetXaxis().SetTitle("A_{{FB}}")
            self.hist_fl = ROOT.TH1F("hist_fl", "", 200, 0., 1.)
            self.hist_fl.GetXaxis().SetTitle("F_{{L}}")

        def _preRunFitSteps(self, setIndex):
            pass

        def _postRunFitSteps(self, setIndex):
            if self.fitter.fitResult["{0}.migrad".format(self.fitter.name)]['status'] == 0:
                afb = self.process.sourcemanager.get('afb')
                fl = self.process.sourcemanager.get('fl')
                self.hist_afb.Fill(afb.getVal())
                self.hist_fl.Fill(fl.getVal())

        def _postSetsLoop(self):
            fout = ROOT.TFile(foutName, "RECREATE")
            fout.cd()
            self.hist_afb.Write()
            self.hist_fl.Write()
            fout.Close()

        def getSubDataEntries(self, setIndex):
            return 1

        def getSubData(self):
            while True:
                yield self.data

    setupStudier = deepcopy(effiStudier.templateConfig())
    setupStudier.update({
        'name': "effiStudier",
        'data': "dataReader.Fit",
        'fitter': finalRandEffiFitter,
        'nSetOfToys': 200,
    })
    studier = effiStudier(setupStudier)

    p.setSequence([
        pdfCollection.stdWspaceReader,
        dataCollection.dataReader,
        studier,
    ])

    try:
        p.beginSeq()
        if os.path.exists("{0}".format(foutName)):
            print("{0} exists, skip fitting procedure".format(foutName))
        else:
            p.runSeq()

        fin = ROOT.TFile("{0}".format(foutName))

        hist_fl = fin.Get("hist_fl")
        gaus_fl = ROOT.TF1("gaus_fl", "gaus(0)", 0, 1)
        hist_fl.Fit(gaus_fl, "WI")

        hist_afb = fin.Get("hist_afb")
        gaus_afb = ROOT.TF1("gaus_afb", "gaus(0)", -0.75, 0.75)
        hist_afb.Fit(gaus_afb, "WI")

        syst_randEffi = {
            'syst_randEffi_fl': {
                'getError': gaus_fl.GetParameter(2),
                'getErrorHi': gaus_fl.GetParameter(2),
                'getErrorLo': -gaus_fl.GetParameter(2),
            },
            'syst_randEffi_afb': {
                'getError': gaus_afb.GetParameter(2),
                'getErrorHi': gaus_afb.GetParameter(2),
                'getErrorLo': -gaus_afb.GetParameter(2),
            }
        }
        print(syst_randEffi)

        if args.updatePlot:
            canvas = Plotter.canvas.cd()
            hist_afb.Draw("HIST")
            Plotter.latexCMSMark()
            Plotter.latexCMSExtra()
            Plotter.latexCMSSim()
            canvas.Print("syst_randEffi_afb_{0}.pdf".format(q2bins[args.binKey]['label']))

            hist_fl.GetXaxis().SetTitle("F_{{L}}")
            hist_fl.Draw("HIST")
            Plotter.latexCMSMark()
            Plotter.latexCMSExtra()
            Plotter.latexCMSSim()
            canvas.Print("syst_randEffi_fl_{0}.pdf".format(q2bins[args.binKey]['label']))

        if args.updateDB:
            FitDBPlayer.UpdateToDB(p.dbplayer.odbfile, syst_randEffi)
    finally:
        p.endSeq()
#  plotterCfg['switchPlots'].append('angular3D_sigM')
#  plotterCfg['switchPlots'].append('angular3D_bkgCombA')
#  plotterCfg['switchPlots'].append('angular3D_final')
#  plotterCfg['switchPlots'].append('angular3D_summary')
#  plotterCfg['switchPlots'].append('angular2D_summary_RECO2GEN')

plotter = Plotter(plotterCfg)

if __name__ == '__main__':
    binKey = [
        'summaryLowQ2'
    ]  #, 'belowJpsiB', 'belowJpsiC', 'betweenPeaks', 'abovePsi2sA', 'abovePsi2sB', 'summary', 'summaryLowQ2']
    for b in binKey:
        p.cfg['binKey'] = b
        print(p.cfg)
        #  plotter.cfg['switchPlots'].append('simpleSpectrum')
        plotter.cfg['switchPlots'].append('effi')
        #  plotter.cfg['switchPlots'].append('angular3D_sigM')
        #  plotter.cfg['switchPlots'].append('angular3D_bkgCombA')
        #  plotter.cfg['switchPlots'].append('angular3D_final')
        #  plotter.cfg['switchPlots'].append('angular3D_summary')
        #  plotter.cfg['switchPlots'].append('angular2D_summary_RECO2GEN')

        p.setSequence([
            dataCollection.effiHistReader, dataCollection.sigMCReader,
            dataCollection.dataReader, pdfCollection.stdWspaceReader, plotter
        ])
        p.beginSeq()
        p.runSeq()
        p.endSeq()
Example #12
0
    'argAliasInDB': {
        **ArgAliasGEN
    },
    'LegName':
    'Data',
    'argAliasSaveToDB':
    False,
    'fitToCmds': [
        [
            ROOT.RooFit.Strategy(3),
            ROOT.RooFit.InitialHesse(0),
            ROOT.RooFit.Minimizer('Minuit2', 'migrad'),
            ROOT.RooFit.Minos(0)
        ],
    ],
})
SimultaneousFitter_mixedToyValidation = SimultaneousFitter(
    Simul_mixedToyValidation_setup)

if __name__ == '__main__':
    p.setSequence([
        dataCollection.effiHistReader, pdfCollection.stdWspaceReader,
        effiFitter
    ])
    #  p.setSequence([dataCollection.sigMCReader, pdfCollection.stdWspaceReader, sigMFitter])
    #  p.setSequence([dataCollection.sigMCReader, pdfCollection.stdWspaceReader, sig2DFitter])
    #  p.setSequence([dataCollection.dataReader, pdfCollection.stdWspaceReader, bkgCombAFitter])
    p.beginSeq()
    p.runSeq()
    p.endSeq()
]

# For fitter validation and syst
predefined_sequence['fitSig2D'] = [
    dataCollection.sigMCReader, pdfCollection.stdWspaceReader,
    fitCollection.sig2DFitter
]
predefined_sequence['fitSigMCGEN'] = [
    dataCollection.sigMCGENReader, pdfCollection.stdWspaceReader,
    fitCollection.sigAFitter
]

if __name__ == '__main__':
    # binKey = ['belowJpsiA', 'belowJpsiB', 'belowJpsiC', 'betweenPeaks', 'abovePsi2sA', 'abovePsi2sB', 'summary', 'summaryLowQ2']
    binKey = ['belowJpsiC']
    for b in binKey:
        p.cfg['binKey'] = b
        #  p.setSequence(predefined_sequence['buildEfficiecyHist'])
        p.setSequence(predefined_sequence['fitEfficiency'])
        #  p.setSequence(predefined_sequence['fitBkgCombA'])
        #  p.setSequence(predefined_sequence['fitFinal3D'])
        #  p.setSequence(predefined_sequence['stdFit'])

        #  p.setSequence(predefined_sequence['fitSig2D'])
        #  p.setSequence(predefined_sequence['fitSigMCGEN'])
        try:
            p.beginSeq()
            p.runSeq()
        finally:
            p.endSeq()
Example #14
0
def bkgCombToyGenerator_customize(self):
    pass
bkgCombToyGenerator.customize = types.MethodType(bkgCombToyGenerator_customize, bkgCombToyGenerator)

# Systematics

# sigAToyGenerator - systematics
setupSigAToyGenerator = deepcopy(CFG)
setupSigAToyGenerator.update({
    'name': "sigAToyGenerator",
    'pdf': "f_sigA",
    'argAliasInDB': setupSigAFitter['argAliasInDB'],
    'saveAs': "sigAToyGenerator.root",
})
sigAToyGenerator = ToyGenerator(setupSigAToyGenerator)
@decorator_setExpectedEvents(["nSig"])
@decorator_initParameters
def sigAToyGenerator_customize(self):
    pass
sigAToyGenerator.customize = types.MethodType(sigAToyGenerator_customize, sigAToyGenerator)

if __name__ == '__main__':
    try:
        p.setSequence([pdfCollection.stdWspaceReader, sigToyGenerator])
        #  p.setSequence([pdfCollection.stdWspaceReader, bkgCombToyGenerator])
        p.beginSeq()
        p.runSeq()
        p.sourcemanager.get('ToyGenerator.mixedToy').Print()
    finally:
        p.endSeq()
                    h2_accXrec.SetBinContent(iL, iK, h2_acc.GetEfficiency(iLK) * h2_rec.GetEfficiency(iLK))
                    h2_accXrec.SetBinError(iL, iK, h2_accXrec.GetBinContent(iL, iK) * math.sqrt(1 / h2_acc.GetTotalHistogram().GetBinContent(iLK) + 1 / h2_acc.GetPassedHistogram().GetBinContent(iLK) + 1 / h2_rec.GetTotalHistogram().GetBinContent(iLK) + 1 / h2_rec.GetPassedHistogram().GetBinContent(iLK)))
            h2_accXrec.SetXTitle("cos#theta_{l}")
            h2_accXrec.SetYTitle("cos#theta_{K}")
            h2_accXrec.SetZTitle("Overall efficiency")

            h2_accXrec.Write("h2_accXrec_{0}".format(binKey), ROOT.TObject.kOverwrite)
            self.logger.logINFO("Overall efficiency is built.")

    # Register the chosen one to sourcemanager
    h2_accXrec = fin.Get("h2_accXrec_{0}".format(self.process.cfg['binKey']))
    self.cfg['source']['effiHistReader.h2_accXrec'] = h2_accXrec
    self.cfg['source']['effiHistReader.accXrec'] = RooDataHist("accXrec", "", RooArgList(CosThetaL, CosThetaK), ROOT.RooFit.Import(h2_accXrec))
    self.cfg['source']['effiHistReader.h_accXrec_fine_ProjectionX'] = fin.Get("h_accXrec_{0}_ProjectionX".format(self.process.cfg['binKey']))
    self.cfg['source']['effiHistReader.h_accXrec_fine_ProjectionY'] = fin.Get("h_accXrec_{0}_ProjectionY".format(self.process.cfg['binKey']))

effiHistReader = ObjProvider({
    'name': "effiHistReader",
    'obj': {
        'effiHistReader.h2_accXrec': [buildAccXRecEffiHist, ],
    }
})

if __name__ == '__main__':
    #  p.setSequence([dataReader])
    #  p.setSequence([sigMCReader])
    p.setSequence([effiHistReader])
    p.beginSeq()
    p.runSeq()
    p.endSeq()
            ('f_sigA', [buildSigA]),
            ('f_sigM', [buildSigM]),
            ('f_sig3D', [buildSig]),  # Include f_sig2D
            ('f_bkgCombA', [buildAnalyticBkgCombA]),
            ('f_bkgCombAAltA', [buildSmoothBkgCombA]),
            ('f_bkgCombM', [buildBkgCombM]),
            ('f_bkgCombMAltM', [buildBkgCombMAltM]),
            ('f_bkgComb', [buildBkgComb]),  # Include all variations
            ('f_final', [buildFinal]),  # Include all variations
        ])
    })


stdPDFBuilder.customize = types.MethodType(customizePDFBuilder, stdPDFBuilder)

if __name__ == '__main__':
    #  binKey = ['belowJpsiA', 'belowJpsiB', 'belowJpsiC', 'betweenPeaks', 'abovePsi2sA','abovePsi2sB', 'summary', 'summaryLowQ2']
    binKey = ['betweenPeaks']
    for b in binKey:
        p.cfg['binKey'] = b
        p.setSequence(
            [dataCollection.dataReader, stdWspaceReader, stdPDFBuilder])
        p.beginSeq()
        p.runSeq()
        p.endSeq()

        #  p.reset()
        dataCollection.dataReader.reset()
        stdWspaceReader.reset()
        stdPDFBuilder.reset()
Example #17
0
                    plotCollection.plotterCfg_sigStyle, None, "Signal"
                ],
                [
                    "f_final", (ROOT.RooFit.Components('f_bkgComb'), ) +
                    plotCollection.plotterCfg_bkgStyle, None, "Background"
                ],
            ],
            'marks': ['toy'],
        })

        plotCollection.plotter.cfg['switchPlots'] = [
            'simpleBLK',
        ]
        p.setSequence([
            pdfCollection.stdWspaceReader, toyCollection.sigToyGenerator,
            toyCollection.bkgCombToyGenerator, fitCollection.finalFitter,
            plotCollection.plotter
        ])
        wrappedTask = BatchTaskWrapper(
            "myBatchTask",
            "/afs/cern.ch/work/p/pchen/public/BuToKstarMuMu/v2Fitter/BsToPhiMuMuFitter/batchTask_simpleToyValidation",
            cfg=setupBatchTask)
    elif args.Function_name in ['run_summary', 'submit_summary']:
        plotCollection.plotter.cfg['plots']['angular3D_summary']['kwargs'][
            'drawSM'] = False
        plotCollection.plotter.cfg['plots']['angular3D_summary']['kwargs'][
            'dbSetup'] = [{
                'title': "Toy Data",
                'dbPat': "fitResults_{binLabel}.db",
                'legendOpt': "LPE"
            }]