import ROOT as R


deltat = R.RooRealVar("deltat", "Decay time", -10, 10)
deltaterr = R.RooRealVar("deltaterr", "Decay time error", 0, 2)
r = R.RooRealVar("r", "r", 0, 1)
tagflav = R.RooCategory("tagflav", "Tag Flavour")
tagflav.defineType("B0", +1)
tagflav.defineType("B0bar", -1)
mod_mbc = R.RooRealVar("mod_mbc", "mod_mbc", 5.2, 5.3)
deltae = R.RooRealVar("deltae", "deltae", -0.2, 0.2)
csobdtprime = R.RooRealVar("csobdtprime", "csobdtprime", -1, 1)


mean = R.RooRealVar("mean", "mean", 0)
sigma = R.RooRealVar("sigma", "sigma", 1)
res_core = R.RooGaussian("res_core", "core PDF", deltat, mean, sigma)


frac_tail = R.RooFormulaVar("frac_tail", "0.5 + 0.05*deltat", R.RooArgList(deltat))
res_tail = R.RooGaussian("res_tail", "tail PDF", deltat, R.RooFit.RooConst(1), R.RooFit.RooConst(2))


res_add = R.RooAddModel("res_core", "core + tail", R.RooArgList(res_core, res_tail), R.RooArgList(frac_tail))


argset_with_dups = R.RooArgSet(
    deltat, deltaterr, r, tagflav, mod_mbc,
    deltae, csobdtprime,
    deltaterr, r, tagflav, mod_mbc, deltae, csobdtprime  # duplicates
)

# Fake Data
proto_data = res_add.generate(R.RooArgSet(deltat), 100)


mcstudy = R.RooMCStudy(
    res_add,
    argset_with_dups,
    R.RooFit.ProtoData(proto_data),
    R.RooFit.Extended(True)
)


mcstudy.generate(5)

