import os
import sys
import ROOT as R
import pandas as pd
import numpy as np
R.ROOT.EnableImplicitMT(10)

ws = R.RooWorkspace('dt_workspace', 'dt_workspace')

ws.factory("deltat[0,-15,15]")
ws.factory("deltaterr[0.5,0.05,3]")
ws.factory("RooGaussModel::res_gs_ol(deltat,res_ol_mu[0],res_ol_sigma[200])")

ws.factory("RooGaussModel::res_gs_main(deltat,muM1[-0.1555,-1,1],sigmaM1[1.2441,0,2],deltaterr,deltaterr)")
ws.factory("RooGaussModel::res_gs_tail(deltat,muT1[-0.972,-2,2],sigmaT1[2.475,1,4],deltaterr,deltaterr)")

ws.factory("RooGExpModel::res_exp_right(deltat,muT1,sigmaT1,c1[3.69745,0,100],deltaterr,deltaterr,deltaterr,False,RooGExpModel::Flipped)")
ws.factory("RooGExpModel::res_exp_left(deltat,muT1,sigmaT1,c1,deltaterr,deltaterr,deltaterr,False,RooGExpModel::Normal)")

ws.factory("RooAddModel::res_exp({res_exp_right,res_exp_left},{fTR[0.2348,0,1]})")
ws.factory("RooAddModel::res_tail({res_exp,res_gs_tail},{fracExp[0.2089,0,1]})")

#ws.factory("expr::frac_tail('0.5*fracT*( TMath::Erf(fTmu/(fTsigma*sqrt(2))) - TMath::Erf((fTmu-deltaterr)/(fTsigma*sqrt(2))) )',fracT[0.2604,0,1],fTmu[0.2261,0,1],fTsigma[0.0833,0,1],deltaterr)")
ws.factory("frac_tail[0.18,0,1]")  # constant
ws.factory("RooAddModel::res_core({res_tail,res_gs_main},{frac_tail})")

ws.Print()

pdf = ws.pdf("res_core")
obs = R.RooArgSet(ws.var("deltat"), ws.var("deltaterr"))
proto = R.RooDataSet("proto", "proto", obs)

mcstudy = R.RooMCStudy(
    pdf,
    obs,
    R.RooFit.ProtoData(proto),
    R.RooFit.Extended(False),
    R.RooFit.Silence(True),
    R.RooFit.Binned(False)
)


mcstudy.generateAndFit(10, 100)
