# mean = 3.096 ) # signal = Models.Needham_pdf ( 'Nh' , # mass = m_psi , # sigma = 0.013 , # mean = 3.096 ) ## 2b) create the background : exponential times 1st order polymonial bkg = Models.Bkg_pdf ( 'B' , mass = m_psi , power = 1 ) ## 2c) create the model model = Models.Fit1D ( signal = signal , background = bkg ) ## 3) try to fit: r,f = model.fitTo ( data , silence = True , ncpu = 8 ) signal .mean .release() signal .sigma.release() r,f = model.fitTo ( data , ncpu = 8 , draw = True , silence = True ) ## ## signal0 = Models.Gauss_pdf ( 'G' ,
def FitHisto(self, fit_methods, histo): """Fit Histogram for all fit_methods. The result is stored in a AnnaResult Arguments: fit_methods {list} -- fit configuration string histo {TH1} -- histo to be fitted Returns: list -- contains all the AnnaResults """ try: assert histo is not None except AssertionError: error("Cannot get histo") return None subresult_list = list() print(""" \n========= > Fit histo {} < ========= """.format( histo.GetName())) for i, fit_method in enumerate(fit_methods): # Get the fit configuration for key in self._fit_key.keys(): self._fit_key[key] = None self.DecodeFitType(fit_method) # Redefine the fit range to the histo boundaries hmin = histo.GetXaxis().GetXmin() hmax = histo.GetXaxis().GetXmax() if 'range' in self._fit_key.keys(): if self._fit_key['range'] is not None: print self._fit_key['range'] hmin = float(min(self._fit_key['range'].split(';'))) hmax = float(max(self._fit_key['range'].split(';'))) fit_range = ROOT.RooRealVar(histo.GetXaxis().GetName(), histo.GetXaxis().GetTitle(), hmin, hmax) # get PDF and create fit model signal = self.CreateSignalPDF(fit_range) if signal is None: continue background = self.CreateBackgroundPDF(fit_range) if background is None: continue # return None model = Models.Fit1D(signal=signal, background=background) data = ROOT.RooDataHist(histo.GetName(), histo.GetTitle(), ROOT.RooArgList(fit_range), histo) print(" \n------- > with {} + {} (weight = {} ) \n".format( self._fit_key['signal'], self._fit_key['bkgr'], self._fit_key['weight'])) result, frame = model.fitTo(data, silent=False, draw=True, refit=True, ncpu=8) debug("{}".format(result)) # Create the AnnaResult sr_name = "{}_{}".format(fit_method, histo.GetName()) sr = AnnaResult(name=sr_name, title=histo.GetTitle(), histo=histo) sr.weigth = self._fit_key['weight'] sr.frame = frame for key in result.parameters().keys(): sr.Set(key, result(key)[0].value(), result(key)[0].error()) sr.Set("FitResult", result.status(), 0., 0.) sr.Set("CovMatrixStatus", result.covQual(), 0., 0.) subresult_list.append(sr) return subresult_list
# ============================================================================= ## gauss PDF # ============================================================================= logger.info('Test Gauss_pdf') signal_gauss = Models.Gauss_pdf(name='Gauss', mass=mass) signal_gauss.mean.setVal(m.value()) signal_gauss.sigma.setVal(m.error()) models.append(signal_gauss) # ============================================================================= ## Gauss PDF # ============================================================================= model_gauss = Models.Fit1D(signal=signal_gauss, background=Models.Bkg_pdf('BkgGauss', mass=mass, power=0)) model_gauss.background.tau.fix(0) with rooSilent(): result, frame = model_gauss.fitTo(dataset0) result, frame = model_gauss.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: print 'Signal & Background are: ', result('S')[0], result('B')[0] print 'Mean & Sigma are: ', result('mean_Gauss')[0], result( 'sigma_Gauss')[0]
mK = 0.49369 mPion = 0.1396 bw = cpp.Gaudi.Math.Phi0(1.0195, 0.0043, mK) signal = Models.BreitWigner_pdf('BW0', bw, mass=m_phi, gamma=0.0043, mean=1.0195, convolution=0.0015) ## Phase space as background: ps = cpp.Gaudi.Math.PhaseSpaceNL(2 * mK, 10.0, 2, 5) bkg = Models.PSPol_pdf('PS0', mass=m_phi, phasespace=ps, power=1) f2 = cpp.Gaudi.Math.Flatte2(0.980, 165, 4.21, mPion, mPion, mK, mK) flatte = Models.Flatte2_pdf('F20', f2, mass=m_phi, m0_980=1.000, m0g1=0.165) flatte.mean.fix(0.980) model = Models.Fit1D(signal=signal, othersignals=[flatte], background=bkg) model.S.fix(10000) model.B.fix(5000) model.S_1.fix(5000) data = model.pdf.generate(varset, 20000)
model0.ss.fix(1000) model0.sb.fix(300) model0.bs.fix(300) model0.bb.fix(300) model1 = Models.Fit2D( signal_1=sigB, signal_2=sigPhi, ## bkg2=Models.PSPol_pdf('PSP', m_phi, ps2, power=1), bkgB=Models.PSPol_pdf('PSB', m_phi, ps2, power=1), ) model_phi = Models.Fit1D(signal=sigPhi, background=Models.PSPol_pdf('PSQ', m_phi, ps2, power=1), suffix='_P') model_B = Models.Fit1D(signal=sigB, background=Models.Bkg_pdf('BB', m_b, power=1), suffix='_B') varset = ROOT.RooArgSet(m_b, m_phi) dataset = model0.pdf.generate(varset, 1900) ## 2D fits with rooSilent(): r, u = model1.fitTo(dataset) r, u = model1.fitTo(dataset)
from OstapTutor.TestVars1 import m_psi,m_ups import Ostap.FitModels as Models signal_psi = Models.CB2_pdf('Jpsi' , mass = m_psi , sigma = 0.013 , mean = 3.096 ) signal_psi.aL.fix(1.8) signal_psi.aR.fix(1.8) signal_psi.nL.fix(1.8) signal_psi.nR.fix(1.8) ## define model for J/psi model_psi = Models.Fit1D( signal = signal_psi , background = Models.Bkg_pdf ( 'BJpsi' , mass = m_psi ) ) ## define the model for Y model_Y = Models.Manca2_pdf ( m_ups , power = 0 , m1s = 9.4539e+00 , sigma = 4.03195e-02 ) model_Ypsi = Models.MancaX_pdf ( model_Y , signal_psi , suffix = '' ) # ========================================================================================== # The END # ==========================================================================================
signal_Dp = Models.Dp_pdf(mass=m_Dp, name='Dp', mean=1.8711e+00, sigma=7.1183e-03) signal_Ds = Models.Ds_pdf(mass=m_Ds, name='Ds', mean=1.9699e+00, sigma=6.0178e-03) signal_Lc = Models.Lc_pdf(mass=m_Lc, name='Lc', mean=2.2884e+00, sigma=5.1856e-03) model_D0 = Models.Fit1D(signal=signal_D0, bpower=1) model_Dp = Models.Fit1D(signal=signal_Dp, bpower=1) model_Ds = Models.Fit1D(signal=signal_Ds, bpower=1) model_Lc = Models.Fit1D(signal=signal_Lc, bpower=1) model_Y0 = Models.Manca_pdf(m_ups, power=1, name='Y0') model_Y1 = Models.Manca2_pdf(m_ups, power=2, name='Y1', m1s=9.4539e+00, sigma=4.03195e-02) model_Y2 = Models.Manca2_pdf(m_ups, power=1, name='Y2',