示例#1
0
    def __call__(self, data):
        pdf_pars = self.__pdf.getParameters(data.get())
        if not self.__parameters:
            self.__parameters = pdf_pars
            self.__parameters = [p for p in pdf_pars] + [self.__status]
        else:
            for p in self.__parameters:
                pdf_par = pdf_pars.find(p.GetName())
                if not pdf_par:
                    continue
                pdf_par.setVal(p.getVal())
                pdf_par.setError(p.getError())

        success = False
        status = 4
        for i in range(3):
            self.__result = self.__pdf.fitTo(data, **self.__fit_opts)
            status = self.__result.status()
            if status == 0:
                success = True
                break

        if status < 4:
            self.__status.setIndex(self.__result.status())
        else:
            self.__status.setIndex(4)
        if success:
            from P2VV.Utilities.SWeights import SData

            self.__sData = SData(Pdf=self.__pdf, Data=data, Name="MassSPlot")
            data = self.__sData.data(self.__comp)
            if self.__correct_weights:
                from P2VV.Utilities.DataHandling import correctWeights

                data = correctWeights(data, splitCatNames=None, ImportIntoWS=False)
            return data
        else:
            return None
示例#2
0
    minosPars += [ 'Gamma', 'dGamma', 'dM', 'AparPhase', 'AperpPhase' ]
    if args.model in [ 'phi', 'lamb_phi' ] :
        minosPars += [ 'phiCP', 'A0Mag2', 'AperpMag2' ]
    if args.model == 'lamb_phi' :
        minosPars += [ 'lambdaCP' ]
    elif args.model == 'polarDep' :
        minosPars += [ 'phiCPAv', 'phiCPRel_Apar', 'phiCPRel_AperpApar', 'phiCPRel_AS'
                      , 'CCPAv', 'CCPRel_Apar', 'CCPRel_Aperp', 'CCPAv_AS', 'avA02', 'avAperp2' ]
minosPars = [ pdfPars.find(par) for par in minosPars ]
if minosPars :
    print 'Bs2JpsiphiMCFit: running Minos for parameters', ', '.join( '"%s"' % par.GetName() for par in minosPars )

# fit data
if dataSet.isWeighted() :
    from P2VV.Utilities.DataHandling import correctWeights
    fitData = correctWeights( dataSet, [ ] )
else :
    fitData = dataSet
fitResult = pdf.fitTo( fitData, SumW2Error = False, Save = True, NumCPU = args.numCPU, Optimize = 2, Timer = True, Minimizer = 'Minuit2'
                      , Strategy = 1, Offset = True, Hesse = runHesse, Minos = minosPars )

if pdfConfig['lambdaCPParam'] == 'observables_CPVDecay' :
    from P2VV.Imports import parNames, parValuesCPVDecay as parValues
elif args.model == 'phi' :
    from P2VV.Imports import parNames, parValuesFixLamb as parValues
else :
    from P2VV.Imports import parNames, parValues
print 120 * '-'
print 'parameter values:'
fitResult.PrintSpecial( text = True, LaTeX = True, normal = True, ParNames = parNames, ParValues = parValues )
print 120 * '-'
示例#3
0
    minosPars += [ 'Gamma', '{0}dGamma{0}'.format(blindAdd), 'dM', 'AparPhase', 'AperpPhase' ]
    if args.model in [ 'phi', 'lamb_phi' ] :
        minosPars += [ '{0}phiCP{0}'.format(blindAdd), 'A0Mag2', 'AperpMag2' ]
    if args.model == 'lamb_phi' :
        minosPars += [ 'lambdaCP' ]
    elif args.model == 'polarDep' :
        minosPars += [ '{0}phiCPAv{0}'.format(blindAdd), '{0}phiCPRel_Apar{0}'.format(blindAdd)
                      , '{0}phiCPRel_AperpApar{0}'.format(blindAdd), '{0}phiCPRel_AS{0}'.format(blindAdd)
                      , 'CCPAv', 'CCPRel_Apar', 'CCPRel_Aperp', 'CCPAv_AS', 'avA02', 'avAperp2' ]
minosPars = [ pdfPars.find(par) for par in minosPars ]
if minosPars :
    print 'Bs2JpsiKK3fbFit: running Minos for parameters', ', '.join( '"%s"' % par.GetName() for par in minosPars )

# fit data
from P2VV.Utilities.DataHandling import correctWeights
fitData = correctWeights( dataSet, [ 'runPeriod', 'KKMassCat' ] )
fitResult = pdf.fitTo( fitData, SumW2Error = False, Save = True, NumCPU = args.numCPU, Optimize = 2, Timer = True, Minimizer = 'Minuit2'
                      , Strategy = 1, Offset = True, Hesse = runHesse, Minos = minosPars )

if pdfConfig['lambdaCPParam'] == 'observables_CPVDecay' :
    from P2VV.Imports import parNames, parValuesCPVDecay as parValues
elif args.model == 'phi' :
    from P2VV.Imports import parNames, parValuesFixLamb as parValues
else :
    from P2VV.Imports import parNames, parValues
print 120 * '-'
print 'parameter values:'
fitResult.PrintSpecial( text = True, LaTeX = True, normal = True, ParNames = parNames, ParValues = parValues )
print 120 * '-'
print 'correlation matrix:'
fitResult.correlationMatrix().Print()
pdf = pdfBuild.pdf()

if not 'Optimize' in fitOpts or fitOpts['Optimize'] < 2 :
    # unset cache-and-track
    for par in pdfBuild['taggingParams'].parameters() : par.setAttribute( 'CacheAndTrack', False )

if parFileIn :
    # read parameters from file
    pdfConfig.readParametersFromFile( filePath = parFileIn )
    pdfConfig.setParametersInPdf(pdf)

# data set with weights corrected for background dilution: for phi_s fit only!
if corrSFitErr == 'sumWeight'\
        or ( type(corrSFitErr) != str and hasattr( corrSFitErr, '__iter__' ) and hasattr( corrSFitErr, '__getitem__' ) ) :
    from P2VV.Utilities.DataHandling import correctWeights
    fitData = correctWeights( sigData, 'KKMassCat' if pdfConfig['paramKKMass'] == 'simultaneous' else ''
                             , CorrectionFactors = None if corrSFitErr == 'sumWeight' else corrSFitErr )

else :
    fitData = sigData

# get observables and parameters in PDF
pdfObs  = pdf.getObservables(fitData)
pdfPars = pdf.getParameters(fitData)


###########################################################################################################################################
## fit data ##
##############

# float/fix values of some parameters
for CEvenOdds in pdfBuild['taggingParams']['CEvenOdds'] :
示例#5
0
from P2VV.Parameterizations.FullPDFs import Bs2Jpsiphi_PdfBuilder as PdfBuilder
pdfBuild = PdfBuilder( **pdfConfig )
pdf = pdfBuild.pdf()

if not 'Optimize' in fitOpts or fitOpts['Optimize'] < 2 :
    # unset cache-and-track
    for par in pdfBuild['taggingParams'].parameters() : par.setAttribute( 'CacheAndTrack', False )

if parFileIn :
    # read parameters from file
    pdfConfig.readParametersFromFile( filePath = parFileIn )
    pdfConfig.setParametersInPdf(pdf)

# data set with weights corrected for background dilution: for phi_s fit only!
from P2VV.Utilities.DataHandling import correctWeights
fitData = correctWeights( dataSet, 'KKMassCat' if pdfConfig['paramKKMass'] == 'simultaneous' else '' )

# get observables and parameters in PDF
pdfObs  = pdf.getObservables(fitData)
pdfPars = pdf.getParameters(fitData)


###########################################################################################################################################
## fit data ##
##############

# fix values of some parameters
for CEvenOdds in pdfBuild['taggingParams']['CEvenOdds'] :
    if not pdfConfig['SSTagging'] :
        CEvenOdds.setConstant('avgCEven.*')
        CEvenOdds.setConstant( 'avgCOdd.*', True )
示例#6
0
        from P2VV.Utilities.DataHandling import addTransversityAngles
        addTransversityAngles( fitData, 'trcospsi',          'trcostheta',        'trphi'
                                      , angles[0].GetName(), angles[1].GetName(), angles[2].GetName() )

    # write data to file
    from P2VV.Utilities.DataHandling import writeData
    writeData( dataSetFile, dataSetName, fitData )

elif pdfConfig['sFit'] :
    defData = pdfBuild['sigSWeightData']
    sigData = pdfBuild['sigSWeightData']
    bkgData = pdfBuild['bkgSWeightData']
    if corrSFitErr == 'sumWeight'\
            or ( type(corrSFitErr) != str and hasattr( corrSFitErr, '__iter__' ) and hasattr( corrSFitErr, '__getitem__' ) ) :
        from P2VV.Utilities.DataHandling import correctWeights
        fitData = correctWeights( pdfBuild['sigSWeightData'], 'KKMassCat' if pdfConfig['parameterizeKKMass'] == 'simultaneous' else ''
                                 , CorrectionFactors = None if corrSFitErr == 'sumWeight' else corrSFitErr )

    else :
        fitData = pdfBuild['sigSWeightData']

else :
    defData = pdfBuild['data']
    fitData = pdfBuild['data']
    sigData = pdfBuild['sigSWeightData']
    bkgData = pdfBuild['bkgSWeightData']

# get observables and parameters in PDF
pdfObs  = pdf.getObservables(fitData)
pdfPars = pdf.getParameters(fitData)

# print parameters
        bkgYield.setVal( bkgYield.getVal() * nEvBin / nEv )
        bkgYield.setError( sqrt( bkgYield.getVal() ) )
        bkgYield.setMin(0.)
        bkgYield.setMax(nEvBin)
    
    # determine mass parameters in each sub-sample with a fit
    sim_mass_result = sWeight_mass_pdf.fitTo(data, **fitOpts)
    sweight_pdf = sWeight_mass_pdf
else:
    sweight_pdf = mass_pdf

from P2VV.Utilities.SWeights import SData
from P2VV.Utilities.DataHandling import correctWeights
sdata = SData( Pdf = sweight_pdf, Data = data, Name = 'mass_sdata')

sig_sdata = correctWeights(sdata.data('signal'), splitCatNames = [excl_biased.GetName()],
                           ImportIntoWS = False)
bkg_sdata = correctWeights(sdata.data('background'), splitCatNames = [excl_biased.GetName()],
                           ImportIntoWS = False)

from array import array
weights = array('d')

from ROOT import TFile
f = TFile.Open(input_file, "read")
tree = f.Get("DecayTree")

from ROOT import gDirectory
tree.Draw(">>elist", cut, "entrylist")

output = "temp.root"
output_file = TFile(output, "recreate")
示例#8
0
from P2VV.Parameterizations.FullPDFs import Bs2Jpsiphi_PdfBuilder as PdfBuilder
pdfBuild = PdfBuilder( **pdfConfig )
pdf = pdfBuild.pdf()

if not 'Optimize' in fitOpts or fitOpts['Optimize'] < 2 :
    # unset cache-and-track
    for par in pdfBuild['taggingParams'].parameters() : par.setAttribute( 'CacheAndTrack', False )

if parFileIn :
    # read parameters from file
    pdfConfig.readParametersFromFile( filePath = parFileIn )
    pdfConfig.setParametersInPdf(pdf)

# data set with weights corrected for background dilution: for phi_s fit only!
from P2VV.Utilities.DataHandling import correctWeights
fitData = correctWeights( dataSet, corrSFitErrCats )

# get observables and parameters in PDF
pdfObs  = pdf.getObservables(fitData)
pdfPars = pdf.getParameters(fitData)

# get test parameters
testPars = [ pdfPars.find(name) for name in testParNames ]


###########################################################################################################################################
## get NLL values ##
####################

# fix values of some parameters
for CEvenOdds in pdfBuild['taggingParams']['CEvenOdds'] :