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')
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)
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()
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)
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()
## 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,