Ejemplo n.º 1
0
else:
    logger = getLogger(__name__)
logger.info('Create 1D dataset for Ostap Tutorial ')
# ============================================================================
RAD = ROOT.RooAbsData
if RAD.Tree != RAD.getDefaultStorageType():
    logger.info('DEFINE default storage type to be TTree! ')
    RAD.setDefaultStorageType(RAD.Tree)
# ============================================================================

x = ROOT.RooRealVar('x', 'x', 0, 10)
varset = ROOT.RooArgSet(x)

import Ostap.FitModels as Models

gamma = Models.GammaDist_pdf('GPDF', x)
gamma.k.setVal(2)
gamma.theta.setVal(1)

data = gamma.pdf.generate(varset, 100000)

h1 = x.histo(100)
h2 = x.histo(500)
h3 = h1_axis([0, 1, 2, 3, 6, 8, 10])

data.project(h1, 'x')
data.project(h2, 'x')
data.project(h3, 'x')

h4 = h1_axis(h2.equal_edges(5))
h5 = h1_axis(h2.equal_edges(10))
Ejemplo n.º 2
0
# =============================================================================
logger.info('Test for signal it models from Analysis/Ostap')
# =============================================================================
## make simple test
mass2 = ROOT.RooRealVar('test_mass2', 'Some test mass', 0, 10)
x = mass2

## book very simple data set
varset2 = ROOT.RooArgSet(mass2)

import Ostap.FitModels as Models

events = 5000

logger.debug('Make a test data using Gamma-Distribution')
m_gamma0 = Models.GammaDist_pdf('GD0', x)
m_gamma0.k.setVal(2)
m_gamma0.theta.setVal(1)

dataset2 = m_gamma0.pdf.generate(varset2, events)

models = []
# =============================================================================
logger.info('Test  Gamma-Distribution')
# =============================================================================
m_gamma = Models.GammaDist_pdf('GD1', x)

with rooSilent():
    result, f = m_gamma.fitTo(dataset2)
    result, f = m_gamma.fitTo(dataset2)
Ejemplo n.º 3
0
#
varset = ROOT.RooArgSet(m_phi)

#
## create model
#
import Ostap.FitModels as Models

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)
Ejemplo n.º 4
0
for i in xrange(0, 500):
    mass.setVal(random.uniform(mass.getMin(), mass.getMax()))
    dataset0.add(varset0)

print dataset0

import Ostap.FitModels as Models

models = []

# =============================================================================
## 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():
Ejemplo n.º 5
0
# =============================================================================
logger.info('Test for some polynomials models from Analysis/Ostap')
# =============================================================================
## make simple test
mass2 = ROOT.RooRealVar('test_mass3', 'Some test mass', 2, 10)
x = mass2

## book very simple data set
varset2 = ROOT.RooArgSet(mass2)

import Ostap.FitModels as Models

events = 10000

logger.debug('Make a test data using Gamma-Distribution')
m_gamma0 = Models.GammaDist_pdf('GD0', x)
m_gamma0.k.setVal(2)
m_gamma0.theta.setVal(1)

dataset2 = m_gamma0.pdf.generate(varset2, events)

models = []

# =============================================================================
logger.info('Test  Gamma-Distribution')
# =============================================================================
m_gamma = Models.GammaDist_pdf('GD1', x)

with rooSilent():
    result, f = m_gamma.fitTo(dataset2)
    result, f = m_gamma.fitTo(dataset2)
Ejemplo n.º 6
0
    logger.info('DEFINE default storage type to be TTree! ')
    RAD.setDefaultStorageType(RAD.Tree)

# ============================================================================
# The variables
# ============================================================================
m_b = ROOT.RooRealVar('mB', 'm(B)', 5.2, 5.4)
m_phi = ROOT.RooRealVar('mPhi', 'm(Phi)', 1.0, 1.050)
h_phi = m_phi.histo(50)
# ============================================================================

import Ostap.FitModels as Models

sigB = Models.Gauss_pdf('Bh',
                        m_b.getMin(),
                        m_b.getMax(),
                        mass=m_b,
                        mean=5.278,
                        sigma=0.015)

bw = cpp.Gaudi.Math.Phi0(1.0195, 0.0043, 0.4937)

sigPhi0 = Models.BreitWigner_pdf('Phi0',
                                 bw,
                                 mean=1.0195,
                                 gamma=0.0043,
                                 mass=m_phi,
                                 convolution=0.0005)

sigPhi = sigPhi0

ps2 = cpp.Gaudi.Math.PhaseSpaceNL(2 * 0.4937, 5.278 - 3.096, 2, 3)
Ejemplo n.º 7
0
logger.info('Create 1D dataset for Ostap Tutorial ')
# ============================================================================

from OstapTutor.TestVars1 import m_psi

#
## create data set
#
varset = ROOT.RooArgSet(m_psi)

#
## create model
#
import Ostap.FitModels as Models

signal = Models.Needham_pdf('N0', mass=m_psi)
bkg = Models.Bkg_pdf('B0', mass=m_psi)
bkg.tau.setVal(-10.0)

model = Models.Fit1D(signal=signal, background=bkg)

model.s.setVal(10000)
model.B.setVal(5000)

data = model.pdf.generate(varset, 15000)

# ============================================================================
if '__main__' == __name__:

    import Ostap.Line
    logger.info(__file__ + '\n' + Ostap.Line.line)
Ejemplo n.º 8
0
print dataset
# =============================================================================

import Ostap.FitModels as Models
models = []

# =============================================================================
## gauss as signal, const as background
# =============================================================================
logger.info(
    'Simplest (factorized) fit model:  ( Gauss + const ) x ( Gauss + const ) ')
model = Models.Fit2D(signal_1=Models.Gauss_pdf('Gx',
                                               m_x.getMin(),
                                               m_x.getMax(),
                                               mass=m_x),
                     signal_2=Models.Gauss_pdf('Gy',
                                               m_y.getMin(),
                                               m_y.getMax(),
                                               mass=m_y))

model.signal1.sigma.fix(m.error())
model.signal2.sigma.fix(m.error())
model.signal1.mean.fix(m.value())
model.signal2.mean.fix(m.value())
model.signal1.mean.fix(m.value())
model.signal2.mean.fix(m.value())
model.bkg1.tau.fix(0)
model.bkg2.tau.fix(0)
model.bkgA.tau.fix(0)
model.bkgB.tau.fix(0)
Ejemplo n.º 9
0
if '__main__' == __name__: logger = getLogger('Ostap.TestFlatte')
else: logger = getLogger(__name__)
# ==========================================================================================
logger.info('Compare Breit and Flatte')
# ==========================================================================================
import Ostap.FitModels as Models
from Ostap.Utils import rootWarning
m_X = 3.87156
g_X = 0.001
m_Jpsi = 3.0960
m_pipi = 0.4000

mass = ROOT.RooRealVar('m', 'mass(J/psi pipi)', 3.868, 3.88)

bw = cpp.Gaudi.Math.BreitWigner(m_X, g_X, m_Jpsi, m_pipi, 0)
breit = Models.BreitWigner_pdf('BW', bw, mass=mass, mean=m_X, gamma=g_X)

a1 = 0.40
a2 = 0.03

a1 = 0.03
a2 = 0.40

f1 = a1 / (a1 + a2)
f2 = a2 / (a1 + a2)

fl_ = cpp.Gaudi.Math.Flatte(m_X, m_X * g_X * f1, f2 / f1, m_Jpsi, m_pipi,
                            1.86483, 2.00696)

flatte = Models.Flatte_pdf('Flatte',
                           fl_,
Ejemplo n.º 10
0
"""
# =========================================================================================
import ROOT
from   Ostap.PyRoUts         import * 
from   AnalysisPython.Logger import getLogger
# ==========================================================================================
if '__main__' == __name__ : logger = getLogger('OstapTutor/yfits')
else                      : logger = getLogger( __name__          )
# ==========================================================================================


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 )
Ejemplo n.º 11
0
# =========================================================================================
import ROOT
from Ostap.PyRoUts import *
# ==========================================================================================
from Ostap.Utils import RooSilent, NoContext
from AnalysisPython.Logger import getLogger
if '__main__' == __name__: logger = getLogger('work_CY/fits')
else: logger = getLogger(__name__)
# ==========================================================================================
logger.info('Define fit models and PDFs for Y+charm analysis')
# ==========================================================================================
from OstapTutor.TestVars1 import m_D0, m_Dp, m_Ds, m_Lc, m_ups

import Ostap.FitModels as Models
signal_D0 = Models.D0_pdf(mass=m_D0,
                          name='D0',
                          mean=1.8647e+00,
                          sigma=7.2037e-03)

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,
Ejemplo n.º 12
0
## random.seed(10)
for i in xrange(0, events):

    v1 = random.expovariate(1 / 3.0)
    if not 0 < v1 < 10: continue

    x.setVal(v1)
    dataset4.add(varset4)

    v2 = 10 - v1
    x.setVal(v2)
    dataset5.add(varset4)

import Ostap.FitModels as Models

positive = Models.PolyPos_pdf('PP', mass4, power=3)
increasing = Models.Monothonic_pdf('PI', mass4, power=3, increasing=True)
decreasing = Models.Monothonic_pdf('PD', mass4, power=3, increasing=False)
inc_convex = Models.Convex_pdf('PIX',
                               mass4,
                               power=3,
                               increasing=True,
                               convex=True)
dec_convex = Models.Convex_pdf('PDX',
                               mass4,
                               power=3,
                               increasing=False,
                               convex=True)
convex = Models.ConvexOnly_pdf('PX', mass4, power=3, convex=True)
concave = Models.ConvexOnly_pdf('PX', mass4, power=3, convex=False)
Ejemplo n.º 13
0
# ============================================================================

## 1) import dataset and variable 
from OstapTutor.TestData4 import m_psi, m_D0, data

logger.info ( 'Data: %s' % data ) 


## 2) create the model: signnal + background

#
## create model
#
import  Ostap.FitModels as Models

jpsi  = Models.Needham_pdf ( 'N' , mass = m_psi , mean = 3.096  , sigma = 0.013 )
D0    = Models.Gauss_pdf   ( 'G' , mass = m_D0  , mean = 1.864  , sigma = 0.007 )

model = Models.Fit2D (
    signal_1 = jpsi ,
    signal_2 = D0   ,
    power1   = 2    ,
    power2   = 2    ,
    powerA   = 2    ,
    powerB   = 2    )



r,f = model.fitTo  ( data , silence = True , ncpu = 8 ) 
r,f = model.fitTo  ( data , ncpu = 8 , silence = True ) 
Ejemplo n.º 14
0
## 1) import dataset and variable 
from OstapTutor.TestData2 import m_psi, data

logger.info ( 'Data: %s' % data ) 


## 2) create the model: signnal + background

import Ostap.FitModels as Models

## 2a) create the  signal : 


signal = Models.CrystalBall_pdf ( 'CB'          ,
                                  mass  = m_psi , 
                                  sigma = 0.013 ,
                                  alpha = 1.5   ,
                                  n     = 1     , 
                                  mean  = 3.096 )   

# signal = Models.CB2_pdf ( 'CB'          ,
#                          mass   = m_psi , 
#                          sigma  = 0.013 ,
#                          alphaL = 1.5   ,
#                          alphaR = 1.5   ,
#                          nL     = 1     , 
#                          nR     = 1     , 
#                          mean   = 3.096 )   

# signal = Models.Bukin_pdf ( 'Bk'          ,
#                            mass   = m_psi , 
#                            sigma  = 0.013 ,
Ejemplo n.º 15
0
    logger = getLogger(__name__)
logger.info('Simple fit')
# ============================================================================

## 1) import dataset and variable
from OstapTutor.TestData1 import m_psi, data

logger.info('Data: %s' % data)

## 2) create the model: signnal + background

import Ostap.FitModels as Models

## 2a) create the  signal : gaussian  here

signal = Models.Gauss_pdf('Gauss', 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()
Ejemplo n.º 16
0
    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
Ejemplo n.º 17
0
logger.info('Create 1D dataset for Ostap Tutorial ')
# ============================================================================

from OstapTutor.TestVars1 import m_psi, m_D0

#
## create data set
#
varset = ROOT.RooArgSet(m_psi, m_D0)

#
## create model
#
import Ostap.FitModels as Models

jpsi = Models.Needham_pdf('N0', mass=m_psi, mean=3.096, sigma=0.013)
D0 = Models.Gauss_pdf('G0', mass=m_D0, mean=1.864, sigma=0.007)

bkg_jpsi = Models.Bkg_pdf('B01', mass=m_psi)
bkg_D0 = Models.Bkg_pdf('B02', mass=m_D0)
bkg_jpsi.tau.fix(-10)
bkg_D0.tau.fix(+5)

model = Models.Fit2D(signal_1=jpsi,
                     signal_2=D0,
                     bkg1=bkg_jpsi,
                     bkgA=bkg_jpsi,
                     bkg2=bkg_D0,
                     bkgB=bkg_D0)

model.ss.fix(5000)
Ejemplo n.º 18
0
# =============================================================================
logger.info ( 'Test for histogtram fits')
# =============================================================================
## make simple test 
mass2    = ROOT.RooRealVar ( 'test_mass2' , 'Some test mass' , 0 , 10 )
x        = mass2 

## book very simple data set
varset2  = ROOT.RooArgSet  ( mass2 )

import Ostap.FitModels as     Models 

events = 50000

logger.debug('Make a test data using Gamma-Distribution')
m_gamma0 = Models.GammaDist_pdf( 'GD0' , x )
m_gamma0.k    .setVal( 2 )
m_gamma0.theta.setVal( 2 )

dataset2 = m_gamma0.pdf.generate ( varset2 , events ) 
 

#
## 
h1 = ROOT.TH1D ( hID() , '' ,  10 , 0  , 10 ) ; h1.Sumw2() 
h2 = ROOT.TH1D ( hID() , '' ,  20 , 0  , 10 ) ; h2.Sumw2() 
h3 = ROOT.TH1D ( hID() , '' , 100 , 10 , 10 ) ; h3.Sumw2() 

random.seed(10) 
bins  = [ 0 ] 
for i in range(0,  9 ) : bins.append ( random.uniform ( 0 , 10 ) )
Ejemplo n.º 19
0
    ## prepare"data" histogram: lets use simple exponential and non-equidistance bins
    hdata = h1_axis([i for i in range(0, 20)] +
                    [20 + i * 2 for i in range(0, 20)] +
                    [60 + i * 4 for i in range(0, 10)] + [100])
    for i in range(0, 100000):
        v = random.random()
        v = -20 * math.log(v)
        hdata.Fill(v)

    #
    ## prepare MC-dataset: use Gamma-distribution
    #
    x = ROOT.RooRealVar('x', 'variable', 0, 100)
    ## book very simple data set
    import Ostap.FitModels as Models
    m_gamma0 = Models.GammaDist_pdf('GD0', x)
    mean = 35.0
    variance = 30**2
    m_gamma0.k.setVal(mean**2 / variance)
    m_gamma0.theta.setVal(variance / mean)
    varset4 = ROOT.RooArgSet(x)
    dataset4 = m_gamma0.pdf.generate(varset4, 200000)
    mctree = dataset4.store().tree()

    ## store DATA in DBASE
    logger.info('Test data will be stored in DBASE "%s"' % testdatadb)
    with DBASE.open(testdatadb, 'c') as db:
        db['DATAhistorgam'] = hdata
        db['MCtree'] = mctree

#