def test_breitwigner_rho_more():
    """Rho0 shape from eta'  decays
    """

    logger = getLogger("test_breitwigner_rho_more")
    logger.info("Rho0 shape from eta'  decays")

    ## Rho-profile with Gounaris-Sakurai lineshape
    ch4 = Ostap.Math.ChannelGS(g_rho, m_pi)
    bw4 = Ostap.Math.BreitWigner(m_rho, ch4)

    ## Rho-profile from eta' decays
    bw5 = Ostap.Math.BW3L(bw4, m_etap, m_pi, m_pi, 0, 1)

    mass = ROOT.RooRealVar('mass', 'm(pipi)', 200 * MeV, 1.6 * GeV)

    model4 = Models.BreitWigner_pdf('BW4',
                                    bw4,
                                    xvar=mass,
                                    m0=m_rho,
                                    gamma=g_rho)
    model5 = Models.BW3L_pdf('BW5', bw5, xvar=mass, m0=m_rho, gamma=g_rho)

    f4 = model4.draw(total_fit_options=(ROOT.RooFit.LineColor(4), ))
    f5 = model5.draw(total_fit_options=(ROOT.RooFit.LineColor(8), ))

    f5.draw()
    f4.draw('same')

    models.add(bw4)
    models.add(bw5)
    models.add(model4)
    models.add(model5)

    time.sleep(2)
def test_breitwigner_rho():

    ## 1) P-wave Breit-Wigner with Jackson's formfactor
    bw1 = Ostap.Math.Rho0(m_rho, g_rho, m_pi)

    ## 2) P-wave Breit-Wigner with Blatt-Weisskopf formfactor
    ff = Ostap.Math.FormFactors.BlattWeisskopf(1, 3.5 / GeV)
    ch2 = Ostap.Math.Channel(g_rho, m_pi, m_pi, 1, ff)
    bw2 = Ostap.Math.BreitWigner(m_rho, ch2)

    ## 3) Gounaris-Sakurai lineshape
    ch2 = Ostap.Math.ChannelGS(g_rho, m_pi)
    bw3 = Ostap.Math.BreitWigner(m_rho, ch2)

    bw1.draw(xmin=200 * MeV, xmax=1.6 * GeV, linecolor=2)
    bw2.draw('same', xmin=200 * MeV, xmax=1.6 * GeV, linecolor=4)
    bw3.draw('same', xmin=200 * MeV, xmax=1.6 * GeV, linecolor=8)

    mass = ROOT.RooRealVar('mass', 'm(pipi)', 200 * MeV, 1.6 * GeV)

    model1 = Models.BreitWigner_pdf('BW1',
                                    bw1,
                                    xvar=mass,
                                    mean=m_rho,
                                    gamma=g_rho)
    model2 = Models.BreitWigner_pdf('BW2',
                                    bw2,
                                    xvar=model1.mass,
                                    mean=model1.mean,
                                    gamma=model1.gamma)
    model3 = Models.BreitWigner_pdf('BW3',
                                    bw3,
                                    xvar=model1.mass,
                                    mean=model1.mean,
                                    gamma=model1.gamma)

    f1 = model1.draw(total_fit_options=(ROOT.RooFit.LineColor(2), ))
    f2 = model2.draw(total_fit_options=(ROOT.RooFit.LineColor(4), ))
    f3 = model3.draw(total_fit_options=(ROOT.RooFit.LineColor(8), ))

    f1.draw()
    f2.draw('same')
    f3.draw('same')
示例#3
0
def test_bw():

    logger.info('Test BreitWigner_pdf')

    ff = cpp.Ostap.Math.FormFactors.BlattWeisskopf(1, 3.5)  ## formfactor
    bw = cpp.Ostap.Math.BreitWigner(
        m.value(),
        m.error(),
        0.150,  ## m1 
        0.150,  ## m2 
        1,  ## orbital momentum
        ff  ## formfactor 
    )

    model = Models.Fit1D(
        signal=Models.BreitWigner_pdf(name='BW',
                                      breitwigner=bw,
                                      mass=mass,
                                      mean=signal_gauss.mean,
                                      convolution=0.010),  ## CONVOLUTION! 
        background=Models.Bkg_pdf('BkgBW', mass=mass, power=0))

    signal = model.signal
    model.s.setVal(5000)
    model.b.setVal(500)

    signal.mean.fix(m.value())

    with rooSilent():
        result, frame = model.fitTo(dataset0)
        signal.mean.release()
        signal.gamma.release()
        result, frame = model.fitTo(dataset0)

    if 0 != result.status() or 3 != result.covQual():
        logger.warning('Fit is not perfect MIGRAD=%d QUAL=%d ' %
                       (result.status(), result.covQual()))
        print result
    else:
        logger.info('Signal & Background are: %-28s & %-28s ' %
                    (result('S')[0], result('B')[0]))
        logger.info('Mean                 is: %-28s ' % result(signal.mean)[0])
        logger.info('Gamma                is: %-28s ' %
                    result(signal.gamma)[0])

    models.add(model)
示例#4
0
def fit_bw():
    im = ROOT.RooRealVar('im', 'im', 2.42, 2.52)
    pk = ROOT.RooRealVar('pk', 'pk', 2.47, 2.46, 2.48)
    bw = cpp.Ostap.Math.BreitWigner(pk)
    sig_ap = Models.BreitWigner_pdf('sig_bw', breitwigner=bw, xvar=im)
    bkg0 = Models.Bkg_pdf('bkg0', xvar=im, power=2.)

    model = Models.Fit1D(signal=sig_ap, background=bkg0)
    rfile = ROOT.TFile("../datasets/test_xic_100invpb.root", "READ")
    ds = rfile["da_lc"]
    ds = ds.reduce("im > 2.42 && im < 2.52")
    dh = (ds.reduce(ROOT.RooArgSet(im), "im>0")).binnedClone()

    with timing():
        r, w = model.fitTo(dh)
        r, w = model.fitTo(ds, draw=True, nbins=200)
    r.draw()
示例#5
0
def test_bw():

    logger.info('Test BreitWigner_pdf')

    ff = cpp.Ostap.Math.FormFactors.BlattWeisskopf(1, 3.5)  ## formfactor
    bw = cpp.Ostap.Math.BreitWigner(
        m.value(),
        m.error(),
        0.150,  ## m1 
        0.150,  ## m2 
        1,  ## orbital momentum
        ff  ## formfactor 
    )

    model = Models.Fit1D(signal=Models.BreitWigner_pdf(name='BW',
                                                       breitwigner=bw,
                                                       xvar=mass,
                                                       m0=signal_gauss.mean),
                         background=Models.Bkg_pdf('BkgBW', xvar=mass,
                                                   power=0),
                         S=S,
                         B=B)

    signal = model.signal
    model.S.setVal(5000)
    model.B.setVal(500)

    signal.mean.fix(m.value())

    with rooSilent():
        result, frame = model.fitTo(dataset0)
        signal.m0.release()
        signal.gamma.release()
        result, frame = model.fitTo(dataset0)
        model.draw(dataset0)

    if 0 != result.status() or 3 != result.covQual():
        logger.warning('Fit is not perfect MIGRAD=%d QUAL=%d ' %
                       (result.status(), result.covQual()))

    logger.info("Breit-Wigner function\n%s" % result.table(prefix="# "))

    models.add(model)
m23 = ROOT.RooRealVar("m23", "m23", 1.006, 1.065)
phi_ds = ds.reduce(ROOT.RooArgSet(im, m23),
                   "im>2.24 && im<2.33 && m23>1.006 && m23<1.065")
#--- Prepare a composite model
import ostap.fitting.models as Models
sig = Models.Voigt_pdf("sig",
                       xvar=m23,
                       mean=(1.02, 1.015, 1.025),
                       gamma=(0.0042, 0.0004, 0.0044),
                       sigma=(0.001, 0.0001, 0.003))
bkg = Models.PS2_pdf("bkg", xvar=m23, m1=0.493272, m2=0.493272)

bw = Ostap.Math.BreitWigner(1.019, 0.0042, 0.493272, 0.493272, 1)
breit = Models.BreitWigner_pdf('BW',
                               bw,
                               xvar=m23,
                               mean=(1.019, 1.016, 1.022),
                               gamma=0.0042)

reso = ROOT.RooRealVar("reso", "reso", 0.001, 0.0001, 0.003)
cnv_pdf = Models.Convolution_pdf(pdf=breit,
                                 xvar=m23,
                                 resolution=reso,
                                 useFFT=True)
model1 = Models.Fit1D(signal=sig, background=bkg)
model2 = Models.Fit1D(signal=breit, background=bkg)
model3 = Models.Fit1D(signal=cnv_pdf, background=bkg)

# ---- Fit and Draw
r, w = model3.fitTo(phi_ds, draw=True, silent=True)
canv = ROOT.TCanvas("canv", "canv", 900, 900)
def test_breitwigner_rho():
    """Different rho0 parameterizations
    """

    logger = getLogger("test_breitwigner_rho")
    logger.info("Rho0 shapes")

    ## 1) P-wave Breit-Wigner with Jackson's formfactor
    bw1 = Ostap.Math.Rho0(m_rho, g_rho, m_pi)

    ## 2) P-wave Breit-Wigner with Blatt-Weisskopf formfactor
    ff = Ostap.Math.FormFactors.BlattWeisskopf(1, 3.5 / GeV)
    ch2 = Ostap.Math.Channel(g_rho, m_pi, m_pi, 1, ff)
    bw2 = Ostap.Math.BreitWigner(m_rho, ch2)

    ## 3) Gounaris-Sakurai lineshape
    ch2 = Ostap.Math.ChannelGS(g_rho, m_pi)
    bw3 = Ostap.Math.BreitWigner(m_rho, ch2)

    ## 3) P-wave Breit-Wigner with no formfactors
    bw4 = Ostap.Math.BreitWigner(m_rho, g_rho, m_pi, m_pi, 1)

    bw1.draw(xmin=200 * MeV, xmax=1.6 * GeV, linecolor=2)
    bw2.draw('same', xmin=200 * MeV, xmax=1.6 * GeV, linecolor=4)
    bw3.draw('same', xmin=200 * MeV, xmax=1.6 * GeV, linecolor=8)
    bw4.draw('same', xmin=200 * MeV, xmax=1.6 * GeV, linecolor=5)

    mass = ROOT.RooRealVar('mass', 'm(pipi)', 200 * MeV, 1.6 * GeV)

    model1 = Models.BreitWigner_pdf('BW1',
                                    bw1,
                                    xvar=mass,
                                    m0=m_rho,
                                    gamma=g_rho)
    model2 = Models.BreitWigner_pdf('BW2',
                                    bw2,
                                    xvar=model1.mass,
                                    m0=model1.mean,
                                    gamma=model1.gamma)
    model3 = Models.BreitWigner_pdf('BW3',
                                    bw3,
                                    xvar=model1.mass,
                                    m0=model1.mean,
                                    gamma=model1.gamma)

    f1 = model1.draw(total_fit_options=(ROOT.RooFit.LineColor(2), ))
    f2 = model2.draw(total_fit_options=(ROOT.RooFit.LineColor(4), ))
    f3 = model3.draw(total_fit_options=(ROOT.RooFit.LineColor(8), ))

    f1.draw()
    f2.draw('same')
    f3.draw('same')

    models.add(bw1)
    models.add(bw2)
    models.add(bw3)
    models.add(model1)
    models.add(model2)
    models.add(model3)

    time.sleep(2)
示例#8
0
import ROOT
import ostap.fitting.models as Models
from ostap.core.core import cpp

#variables
imc = ROOT.RooRealVar('imc', 'imc', 1., 3.)
pk = ROOT.RooRealVar('pk', 'peak', 0.)

#signal
bw = cpp.Ostap.Math.BreitWigner(pk)
sig_bw = Models.BreitWigner_pdf('sig_bw', breitwigner=bw, xvar=imc)
sig_bw.gamma.setVal(0.20)
sig_bw.gamma.setError(0.01)
sig_bw.mean.setVal(2.10)
sig_bw.mean.setError(0.10)

#background
bkg0 = Models.PolyPos_pdf('bkg', imc, power=1)
bkg0.phis[0].setVal(2.72)
bkg0.phis[0].setError(0.02)

#compound model
model = Models.Fit1D(signal=sig_bw, background=bkg0)
model.draw()
示例#9
0
## 1b: prepare DATA dataset
# ===============================================================================
gen_reso_data = Models.ResoCB2(
    'R',
    xvar=mass,
    sigma=1.15 * MeV,  ## 15% wider 
    alpha=1.5,  ## slightly different alpha 
    n=10,  ## slightly different N 
    kappaN=0.05,  ## small asymmetry 
    kappaA=0.05)  ## small asymmetry

ff = Ostap.Math.FormFactors.BlattWeisskopf(1, 3.5 / GeV)
phi = Ostap.Math.BreitWigner(m_phi, g_phi, m_K, m_K, 1, ff)
gen_phi = Models.BreitWigner_pdf('BW0',
                                 xvar=mass,
                                 breitwigner=phi,
                                 m0=(m_phi, m_phi - 10 * MeV,
                                     m_phi + 10 * MeV),
                                 gamma=(g_phi, 1 * MeV, g_phi + 10 * MeV))

gen_cnv_conf = {
    'resolution': gen_reso_data,
    'nbins': 5000,
    'buffer': 0.25,
    'bufstrat': 2
}

## Signals:
signal = Models.Convolution_pdf(gen_phi, **gen_cnv_conf)
ps = Ostap.Math.PhaseSpace2(m_K, m_K)
bkg = Models.PSLeftExpoPol_pdf('B0',
                               xvar=mass,