def __find_param(var, input_cats, split_pars_dict, split_cat_pars): from P2VV.RooFitWrappers import RooObject ws = RooObject.ws() split_cats = split_pars_dict.get( ws[ var.GetName() ], set() ) if not var.isFundamental() : split = False for splVar, splCats in split_pars_dict.iteritems() : if var.dependsOn(splVar) : split = True split_cats |= splCats if not split : split_cats = set() if not split_cats : return var else : catLabels = [(cat.GetName(), cat.getLabel()) for cat in input_cats if cat in split_cats] catsStr = ';'.join(lab[1] for lab in catLabels) if len(catLabels) > 1 : catsStr = '{' + catsStr + '}' from P2VV.Utilities.General import getSplitPar splitVar = getSplitPar(var.GetName(), catsStr, split_cat_pars) assert splitVar, 'P2VV - ERROR: Bs2Jpsiphi_PdfBuilder: parameter "%s" is set to be constrained for category "%s", but it is not found in PDF'\ % (var.GetName(), catsStr) from ROOT import RooRealVar, RooCategory, RooFormulaVar from P2VV.RooFitWrappers import RealVar, Category, FormulaVar wrappers = { RooRealVar : RealVar, RooCategory : Category, RooFormulaVar : FormulaVar } assert type(splitVar) in wrappers\ , 'P2VV - ERROR: Bs2Jpsiphi_PdfBuilder: wrapping of RooFit object "%s" of type "%s" not implemented (yet)'\ % ( splitVar.GetName(), type(splitVar) ) return wrappers[ type(splitVar) ]( Name = splitVar.GetName() )
rlife2 = RooRealVar("rlife2", "rlife2", 6.07734, 0.1, 10) gexp2 = RooGExpModel("gexp2", "gexp2", t_diff_st, mean_gexp, sigma_gexp, rlife2, one, one, one, False, RooGExpModel.Flipped) frac_gexp2 = RooRealVar("frac_gexp2", "frac_gexp2", 0.184357, 0.01, 0.99) gexps = RooAddPdf("gexps", "gexps", RooArgList(gexp2, gexp1), RooArgList(frac_gexp2)) frac_gexps = RooRealVar("frac_gexps", "frac_gexps", 0.0118392, 0.001, 0.99) model = RooAddPdf("model", "model", RooArgList(gexps, gaussians), RooArgList(frac_gexps)) model.setParameterizeIntegral(RooArgSet(st)) from P2VV import RooFitDecorators from ROOT import RooWorkspace from P2VV.RooFitWrappers import RooObject obj = RooObject(workspace = 'w') w = obj.ws() w.put(model) w.put(sdata) from ROOT import TPaveText if options.momentum_calib: year_label = TPaveText(0.71, 0.32, 0.89, 0.45, "NDC") else: year_label = TPaveText(0.71, 0.72, 0.89, 0.85, "NDC") year_label.SetFillColor(0) pos = args[0].find('201') year_label.AddText(args[0][pos : pos + 4]) year_label.SetBorderSize(0) fitOpts = dict(NumCPU = 8, Timer = 1, Save = True, Minimizer = 'Minuit2', Optimize = 1,