#!/usr/bin/env python3
from ROOT import gROOT, TFile, TCanvas, RooAbsReal, RooArgSet, RooWorkspace, RooFit

def test():
    w = RooWorkspace('w')
    w.factory('xm[670,650,720]')
    w.factory('dm[900,875,995]')
    w.factory('expr::bm("xm+dm",xm,dm)')
#     w.factory('Gaussian::tPdf(bm,mean[1620,1615,1625],sigma[5,0.1,25])')
#     w.factory('CrystalBall::tPdf(bm,mean[1620,1615,1625],sigma[5.,0.1,10],sigma,aL[3.06,0.1,9],nL[2.43,0.1,9],aR[4.37,0.1,12],nR[8.08,0.1,12])')
    w.factory('Hypatia2::tPdf(bm,l[-4.07,-7,0],zeta[0,0,10],fb[0],sigma[5.,0.1,10],mean[1620,1615,1625],aL[3.06,0,9],nL[2.43,0,9],aR[4.37,0,12],nR[8.08,0.1,12])')
    w.factory('Chebychev::xPdf(xm, {a1p[0.9,0,1],a2p[0.1,0,0.5]})')
    w.factory('PROD::model(tPdf, xPdf)')
    xm = w.var('xm')
    dm = w.var('dm')
    bm = w.arg('bm')

    tPdf = w.pdf('tPdf')
    model = w.pdf('model')

    obs = RooArgSet(xm,dm)
    data = model.generate(obs, 50000)
    bmv = data.addColumn(bm)
#     tPdf.fitTo(data)

    bframe = bmv.frame(RooFit.Bins(100), RooFit.Range(1560,1680))
    data.plotOn(bframe)

#     tPdf.plotOn(bframe)
    tPdf.plotOn(bframe, RooFit.ProjWData(data))
#     tPdf.plotOn(bframe,RooFit.Normalization(data.sumEntries(), RooAbsReal.NumEvent))
#     tPdf.plotOn(bframe,RooFit.Normalization(1.0, RooAbsReal.RelativeExpected))
#     tPdf.plotOn(bframe, RooFit.Normalization(1., RooAbsReal.Relative))
    bframe.Draw()

#     xm = w.var('dm')
#     xframe = xm.frame()
#     data.plotOn(xframe)
#     tPdf.plotOn(xframe)
#     xframe.Draw()

    a = input('wait...')

if __name__ == '__main__':
    test()
