ws['lambdaCP'].setConstant(False) ########################################################################################################################################### ## fit data ## ############## # fit fitResult = pdf.fitTo( fitData, SumW2Error = False, Save = True, NumCPU = options.NumCpu, Optimize = 2, Timer = True, Minimizer = 'Minuit2', Strategy = 1, Offset = True ) # save from P2VV.Imports import parNames, parValues fitResult.PrintSpecial( text = True, ParNames = parNames, ParValues = parValues ) fitResult.SetName( parFileOut.replace('.par','') ) from ROOT import TFile resultFile = TFile.Open( parFileOut.replace('.par','.root'), 'recreate') resultFile.cd() fitResult.Write() resultFile.Close() if parFileOut: pdfConfig.getParametersFromPdf( pdf, fitData ) pdfConfig.writeParametersToFile( filePath = parFileOut, Floating = True ) if 'True' in options.writeUnBlPar: for parName in ['phiCP', 'dGamma']: par = pdfConfig.parameters().pop('__%s__'%parName) pdfConfig.parameters()[parName] = (ws[parName].getVal(), ) + par[1:] pdfConfig.writeParametersToFile( filePath = parFileOut.replace('.par','_unbl.par'), Floating = True )
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() print 120 * '-' print 'covariance matrix:' fitResult.covarianceMatrix().Print() print 120 * '-' + '\n' if parFileOut : # write parameters to file pdfConfig.getParametersFromPdf( pdf, fitData ) pdfConfig.writeParametersToFile( filePath = parFileOut , FitStatus = ( fitResult.status(), fitResult.minNll(), fitResult.edm() ) ) if resultFileOut : # write fit result to file from ROOT import TFile, TObject resultFile = TFile.Open( resultFileOut, 'RECREATE' ) resultFile.Append(fitResult) resultFile.Write( resultFileOut, TObject.kOverwrite ) resultFile.Close()
import random print 'Bs2JpsiKKFit: give floating parameters random offsets (scale = %.2f sigma; seed = %s)'\ % ( randomParVals[0], str(randomParVals[1]) if randomParVals[1] else 'system time' ) random.seed( randomParVals[1] if randomParVals[1] else None ) for par in pdfPars : if not par.isConstant() : par.setVal( par.getVal() + 2. * ( random.random() - 0.5 ) * randomParVals[0] * par.getError() ) # set test-parameter values print 'Bs2JpsiKKFit: fit iteration %d' % valIt print 'Bs2JpsiKKFit: setting test-parameter values' for parIt, par in enumerate(testPars) : par.setVal( parVals[parIt] ) print ( ' {0:%ds} = {1:+10.4g}' % maxLenFitParName ).format( par.GetName(), par.getVal() ) # fit data print 'Bs2JpsiKKFit: fitting %d events (%s)' % ( fitData.numEntries(), 'weighted' if fitData.isWeighted() else 'not weighted' ) fitResult = pdf.fitTo( fitData, SumW2Error = False, Save = True, Hesse = False, Offset = False, **fitOpts ) # print parameter values from P2VV.Imports import parNames, parValues print 'Bs2JpsiKKFit: parameters:' fitResult.PrintSpecial( text = True, ParNames = parNames, ParValues = parValues ) # write parameters to file from math import log10 filePF = ( '_{0:0%dd}' % indexWidth ).format( startIndex + valIt ) pdfConfig.getParametersFromPdf( pdf, fitData ) pdfConfig.writeParametersToFile( filePath = outDirPath + 'fitPars_' + jobID + filePF + '.par' , FitStatus = ( fitResult.status(), fitResult.minNll(), fitResult.edm() ) )