def doFixedShapes(inFileName,
                  sectors,
                  startBin,
                  stopBin,
                  tBins,
                  sectorRangeMap={},
                  referenceWave=""):
    waveModel = {}
    for n, sector in enumerate(sectors):
        model = []
        fileNames = getFileNameForSector(sector, False, False)
        print fileNames
        for fn in fileNames:
            param = pc.fixedParameterization(fn,
                                             polynomialDegree=0,
                                             complexPolynomial=False)
            model.append(param)
        waveModel[sector] = model
    fixedShapes = amplitudeAnalysis(inFileName,
                                    sectors,
                                    waveModel,
                                    startBin,
                                    stopBin,
                                    tBins,
                                    sectorRangeMap=sectorRangeMap)
    fixedShapes.loadData(referenceWave=referenceWave)
    fixedShapes.finishModelSetup()
    fixedShapes.fitShapeParameters()
    fixedShapes.calculateNonShapeParameters()
    fixedShapes.mode = AMPL
    #	fixedShapes.removeGlobalPhaseFromComa()
    return fixedShapes
Пример #2
0
def getRhoModel(inFileName,
                sector,
                startBin,
                stopBin,
                tBins,
                sectorRangeMap,
                L,
                referenceWave="",
                writeResultToFile=None,
                loadIntegrals=False):
    rhoMass = ptc.parameter(mRho - .1, "rhoMass")
    rhoWidth = ptc.parameter(Grho + .1, "rhoWidth")
    rho = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1, L,
                                      False)
    fitRho = amplitudeAnalysis(inFileName, [sector], {sector: [rho]},
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap)
    fitRho.loadData(referenceWave=referenceWave, loadIntegrals=loadIntegrals)
    fitRho.finishModelSetup()
    fitRho.fitShapeParameters()
    fitRho.mode = AMPL
    if writeResultToFile:
        with open(writeResultToFile, 'a') as outFile:
            if len(tBins) > 1:
                raise ValueError("More than one t' bin not supported")
            resultString = str(tBins[0]) + " 666. " + str(
                rhoMass.value) + ' ' + str(rhoMass.error) + ' ' + str(
                    rhoWidth.value) + ' ' + str(rhoWidth.error) + "\n"
            outFile.write(resultString)
    return fitRho
Пример #3
0
def getF2Model(inFileName,
               sector,
               startBin,
               stopBin,
               tBins,
               sectorRangeMap,
               L,
               referenceWave="",
               writeResultToFile=None,
               loadIntegrals=False):
    print 'sector', sector, 'has L =', L
    f2Mass = ptc.parameter(mF2, "f2Mass")
    f2Width = ptc.parameter(GF2, "f2Width")
    f2 = ptc.relativisticBreitWigner([f2Mass, f2Width], mPi, mPi, mPi, 2, L,
                                     False)
    fitF2 = amplitudeAnalysis(inFileName, [sector], {sector: [f2]},
                              startBin,
                              stopBin,
                              tBins,
                              sectorRangeMap=sectorRangeMap)
    fitF2.loadData(referenceWave=referenceWave, loadIntegrals=loadIntegrals)
    fitF2.finishModelSetup()
    fitF2.fitShapeParameters()
    fitF2.mode = AMPL
    if writeResultToFile:
        with open(writeResultToFile, 'a') as outFile:
            if len(tBins) > 1:
                raise ValueError("More than one t' bin not supported")
            resultString = str(tBins[0]) + " 666. " + str(
                f2Mass.value) + ' ' + str(f2Mass.error) + ' ' + str(
                    f2Width.value) + ' ' + str(f2Width.error) + "\n"
            outFile.write(resultString)
    return fitF2
def doFitBothF2(inFileName,
                zeroFileName,
                sectors,
                startBin,
                stopBin,
                tBins,
                sectorRangeMap={},
                referenceWave=""):
    f2Mass = ptc.parameter(mF2, "f2Mass")
    f2Width = ptc.parameter(GF2, "f2Width")
    f2S = ptc.relativisticBreitWigner([f2Mass, f2Width], mPi, mPi, mPi, 2, 0,
                                      False)
    f2D = ptc.relativisticBreitWigner([f2Mass, f2Width], mPi, mPi, mPi, 2, 2,
                                      False)
    fitF2 = amplitudeAnalysis(inFileName,
                              sectors, {
                                  "2-+0+[pi,pi]2++PiS": [f2S],
                                  "2-+0+[pi,pi]2++PiD": [f2D]
                              },
                              startBin,
                              stopBin,
                              tBins,
                              sectorRangeMap=sectorRangeMap,
                              zeroFileName=zeroFileName)
    fitF2.loadData(referenceWave=referenceWave)
    fitF2.finishModelSetup()
    fitF2.fitShapeParameters()
    fitF2.calculateNonShapeParameters()
    fitF2.mode = AMPL
    #	fitF2.removeGlobalPhaseFromComa()
    return fitF2
def doFitRhoRadius(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", writeResultToFile = None, acv = None):
	rhoMass   = ptc.parameter( mRho, "rhoMass" )
	rhoWidth  = ptc.parameter( Grho, "rhoWidth")
	rhoRadius = ptc.parameter(  Pr0, "rRho"    )
	pi1radius = ptc.parameter(  100., "rPi1"    )
	
	rhoMass.lock   = True
	rhoWidth.lock  = True
#	pi1radius.lock = True
	rhoRadius.lock = True

	rho = ptc.relativisticBreitWigner([rhoMass, rhoWidth, pi1radius, rhoRadius], mPi, mPi, mPi, 1, 1, fitPr = True)
	fitRho = amplitudeAnalysis(inFileName, sectors, {"1-+1+[pi,pi]1--PiP":[rho]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitRho.loadData( loadIntegrals = True, referenceWave = referenceWave)
	fitRho.finishModelSetup()
	fitRho.fitShapeParameters()
	fitRho.calculateNonShapeParameters()
	fitRho.mode = AMPL
#	fitRho.removeGlobalPhaseFromComa()
	if writeResultToFile is not None:
		with open(writeResultToFile, 'a') as outFile:
			if len(tBins) > 1:
				raise ValueError("More than one t' bin not supported")
			resultString = str(tBins[0]) + " 666. " + str(rhoRadius.value) + "\n"
#	#	#	resultString = str(tBins[0])+ " 666. "  + str(rhoMass.value) + ' ' + str(rhoMass.error) + ' ' + str(rhoWidth.value) + ' ' + str(rhoWidth.error) + "\n"
			outFile.write(resultString)
	return fitRho
Пример #6
0
def doFitF2(inFileName,
            zeroFileName,
            sectors,
            startBin,
            stopBin,
            tBins,
            sectorRangeMap={},
            referenceWave="",
            writeResultToFile=None):
    f2Mass = ptc.parameter(mF2, "f2Mass")
    f2Width = ptc.parameter(GF2, "f2Width")
    f2 = ptc.relativisticBreitWigner([f2Mass, f2Width], mPi, mPi, mPi, 2, 1,
                                     False)
    fitF2 = amplitudeAnalysis(inFileName,
                              sectors, {"2++1+[pi,pi]2++PiP": [f2]},
                              startBin,
                              stopBin,
                              tBins,
                              sectorRangeMap=sectorRangeMap,
                              zeroFileName=zeroFileName)
    fitF2.loadData(referenceWave=referenceWave)
    fitF2.finishModelSetup()
    fitF2.fitShapeParameters()
    fitF2.calculateNonShapeParameters()
    fitF2.mode = AMPL
    #	fitF2.removeGlobalPhaseFromComa()
    if writeResultToFile:
        with open(writeResultToFile, 'a') as outFile:
            if len(tBins) > 1:
                raise ValueError("More than one t' bin not supported")
            resultString = str(tBins[0]) + " 666. " + str(
                f2Mass.value) + ' ' + str(f2Mass.error) + ' ' + str(
                    f2Width.value) + ' ' + str(f2Width.error) + "\n"
            outFile.write(resultString)
    return fitF2
def doF0phase(inFileName,
              sectors,
              startBin,
              stopBin,
              tBins,
              sectorRangeMap={"2-+0+[pi,pi]0++PiD": (0.34, 2 * mK - .04)},
              referenceWave=""):
    pipiSfileName = "/nfs/freenas/tuph/e18/project/compass/analysis/fkrinner/fkrinner/trunk/massDependentFit/scripts/anything/zeroModes/bwAmplitudes_noBF/amp_2mp0pSigmaPiD"
    pipiSw = pc.fixedParameterization(pipiSfileName,
                                      polynomialDegree=0,
                                      complexPolynomial=False)
    waveModel = {"2-+0+[pi,pi]0++PiD": [pipiSw]}
    fitPiPiSshape = amplitudeAnalysis(inFileName,
                                      sectors,
                                      waveModel,
                                      startBin,
                                      stopBin,
                                      tBins,
                                      sectorRangeMap=sectorRangeMap)
    fitPiPiSshape.loadData(referenceWave=referenceWave)
    fitPiPiSshape.finishModelSetup()
    fitPiPiSshape.phaseFit()
    fitPiPiSshape.mode = PHASE
    #	fitPiPiSshape.removeGlobalPhaseFromComa()
    #	fitPiPiSshape.unifyComa()
    return fitPiPiSshape
Пример #8
0
def doFitRho(inFileName,
             zeroFileName,
             sectors,
             startBin,
             stopBin,
             tBins,
             sectorRangeMap={},
             referenceWave=""):
    rhoMass = ptc.parameter(mRho, "rhoMass")
    rhoWidth = ptc.parameter(Grho, "rhoWidth")
    rho = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1, 1,
                                      False)
    fitRho = amplitudeAnalysis(inFileName,
                               sectors, {"2++1+[pi,pi]1--PiD": [rho]},
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap,
                               zeroFileName=zeroFileName)
    fitRho.loadData(referenceWave=referenceWave)
    fitRho.finishModelSetup()
    fitRho.fitShapeParameters()
    fitRho.calculateNonShapeParameters()
    fitRho.mode = AMPL
    #	fitRho.removeGlobalPhaseFromComa()
    return fitRho
def doFitRho(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", writeResultToFile = None, acv = None, polDeg = None):
	rhoMass  = ptc.parameter( mRho, "rhoMass" )
	rhoWidth = ptc.parameter( Grho , "rhoWidth")
	rho      = ptc.relativisticBreitWigner([rhoMass,rhoWidth], mPi, mPi, mPi, 1, 1, False)
	model    = [rho]
	if polDeg is not None:
		params = []
		sVal = 1.
		for i in range(polDeg):
			params.append(ptc.parameter( sVal, "c"+str(i+1)+"_re" ))
			sVal = 0. # Make the start value to constant 1
			params.append(ptc.parameter( 0., "c"+str(i+1)+"_im" ))
		polynome = ptc.complexPolynomial(polDeg,params)
		model.append(polynome)

	fitRho = amplitudeAnalysis(inFileName, sectors, {"1-+1+[pi,pi]1--PiP":model}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitRho.loadData(loadIntegrals = True, referenceWave = referenceWave)
	fitRho.finishModelSetup()
	fitRho.fitShapeParameters()
	fitRho.calculateNonShapeParameters()
	fitRho.mode = AMPL
#	fitRho.removeGlobalPhaseFromComa()
	if writeResultToFile:
		with open(writeResultToFile, 'a') as outFile:
			if len(tBins) > 1:
				raise ValueError("More than one t' bin not supported")
			resultString = str(tBins[0])+ " 666. " + str(rhoMass.value) + ' ' + str(rhoMass.error) + ' ' + str(rhoWidth.value) + ' ' + str(rhoWidth.error) + "\n"
			outFile.write(resultString)
	return fitRho
def doF0Fit(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", deg = 0, writeResultToFile = None):
	fixedAMPD_sub = pc.fixedParameterization("/nfs/freenas/tuph/e18/project/compass/analysis/fkrinner/fkrinner/trunk/massDependentFit/scripts/anything/zeroModes/bwAmplitudes_noBF/amp_1pp0pSigmaPiP")	
	f0Mass   = ptc.parameter(mF0,"f0Mass")
	f0g1     = ptc.parameter(g1, "g1")
	f0g2     = ptc.parameter(g2, "g2")
#	f0g1.lock = True
#	f0g2.lock = True
	f0       = ptc.flatte([f0Mass, f0g1, f0g2], mPi, mPi, mPi, mK, mK, 0, 1, False)
	polyPars = []
	for i in range(deg):
		polyPars.append(ptc.parameter(0.1, "reC"+str(i+1)))
		polyPars.append(ptc.parameter(0.1, "imC"+str(i+1)))
	poly  = ptc.complexPolynomial(deg, polyPars)
	fitF0 = amplitudeAnalysis(inFileName, sectors, {"1++0+[pi,pi]0++PiP":[f0,fixedAMPD_sub]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitF0.loadData(referenceWave = referenceWave)
	fitF0.finishModelSetup()
#	fitF0.unifyComa()
	fitF0.fitShapeParameters()
	fitF0.calculateNonShapeParameters()
	fitF0.mode = AMPL
	if writeResultToFile:
		with open(writeResultToFile, 'a') as outFile:
			if len(tBins) > 1:
				raise ValueError("More than one t' bin not supported")
			resultString = str(tBins[0])+ " 666. " + str(f0Mass.value) + ' ' + str(f0Mass.error) + ' ' + str(f0g1.value) + ' ' + str(f0g1.error) + ' ' + str(f0g2.value) + ' ' + str(f0g2.error) 
			for i in range(deg):
				resultString += ' ' + str(polyPars[i].value) + ' ' + str(polyPars[i].error)
			resultString +=  "\n"
			outFile.write(resultString)
	return fitF0
Пример #11
0
def doFitRho3(inFileName,
              zeroFileName,
              sectors,
              startBin,
              stopBin,
              tBins,
              sectorRangeMap={}):
    rho3Mass = ptc.parameter(mRho3, "rho3Mass")
    rho3Width = ptc.parameter(Grho3, "rho3Width")
    rho3 = ptc.relativisticBreitWigner([rho3Mass, rho3Width], mPi, mPi, mPi, 3,
                                       0, False)
    rho3BF = ptc.timesBF(rho3)
    fitRho = amplitudeAnalysis(
        inFileName,
        sectors, {"3++0+[pi,pi]3--PiS": [rho3]},
        startBin,
        stopBin,
        tBins,
        sectorRangeMap={"3++0+[pi,pi]3--PiS": (1.4, 2.0)},
        zeroFileName=zeroFileName)
    fitRho.loadData(referenceWave="4-+0+rhoPiF")
    fitRho.finishModelSetup()
    fitRho.fitShapeParameters()
    fitRho.calculateNonShapeParameters()
    fitRho.mode = AMPL
    #	fitRho.removeGlobalPhaseFromComa()
    return fitRho
def doFitRho(inFileName,
             zeroFileName,
             sectors,
             startBin,
             stopBin,
             tBins,
             sectorRangeMap={},
             referenceWave="",
             writeResultToFile=None):
    rhoMass = ptc.parameter(mRho, "rhoMass")
    rhoWidth = ptc.parameter(Grho, "rhoWidth")
    rho = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1, 2,
                                      False)
    fitRho = amplitudeAnalysis(inFileName,
                               sectors, {"3++0+[pi,pi]1--PiD": [rho]},
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap,
                               zeroFileName=zeroFileName)
    fitRho.loadData(referenceWave=referenceWave)
    fitRho.finishModelSetup()
    fitRho.fitShapeParameters()
    fitRho.calculateNonShapeParameters()
    fitRho.mode = AMPL
    #	fitRho.removeGlobalPhaseFromComa()
    if writeResultToFile:
        with open(writeResultToFile, 'a') as outFile:
            if len(tBins) > 1:
                raise ValueError("More than one t' bin not supported")
            resultString = str(tBins[0]) + " 666. " + str(
                rhoMass.value) + ' ' + str(rhoMass.error) + ' ' + str(
                    rhoWidth.value) + ' ' + str(rhoWidth.error) + "\n"
            outFile.write(resultString)
    return fitRho
def doFitBothRho(inFileName,
                 zeroFileName,
                 sectors,
                 startBin,
                 stopBin,
                 tBins,
                 sectorRangeMap={},
                 referenceWave=""):
    rhoMass = ptc.parameter(mRho, "rhoMass")
    rhoWidth = ptc.parameter(Grho, "rhoWidth")
    rhoP = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1,
                                       1, False)
    rhoF = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1,
                                       3, False)
    fitRho = amplitudeAnalysis(inFileName,
                               sectors, {
                                   "2-+0+[pi,pi]1--PiP": [rhoP],
                                   "2-+0+[pi,pi]1--PiF": [rhoF]
                               },
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap,
                               zeroFileName=zeroFileName)
    fitRho.loadData(referenceWave=referenceWave)
    fitRho.finishModelSetup()
    #	for mBin in fitRho.model[0]:
    #		print ">>",mBin.nPar,"<<"
    #	raise Exception
    fitRho.fitShapeParameters()
    fitRho.calculateNonShapeParameters()
    fitRho.mode = AMPL
    #	fitRho.removeGlobalPhaseFromComa()
    return fitRho
def doFunctionFit(inFileName, funcs, startBin, stopBin, tBins, sectorRangeMap, referenceWave = "", writeResultToFile = None, acv = None, zeroModeParameters = None):
	sector  = "1++0+[pi,pi]1--PiS"
	sectors = [sector, "1++0+[pi,pi]0++PiP"]
	fitter = amplitudeAnalysis(inFileName, sectors, {sector:funcs}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitter.loadData(loadIntegrals = True, referenceWave = referenceWave)
	fitter.finishModelSetup()
	fitter.mode = AMPL

	parameters = []
	for f in funcs:
		for p in f.returnParameters():
			parameters.append(p)

	fitter.initMinuitFunction(parameters)
#	fitter.removeZeroModeFromComa()
	if acv is not None:
		fitter.addComaValueForZeroMode(acv)

	x,err,chi2,ndf = fitter.fitShapeParametersForBinRange([p.value for p in parameters], [0],range(stopBin-startBin), zeroModeParameters = zeroModeParameters)
	if zeroModeParameters is not None:
		fitter.calculateNonShapeParametersForZeroModeParameters(zeroModeParameters)
	for i,p in enumerate(parameters):
		print p
	if writeResultToFile is not None:
		with open(writeResultToFile, 'w') as outFile:
			outFile.write("- - - - parameters - - - -\n")
			for p in parameters:
				outFile.write(str(p)+'\n')
			outFile.write(" - - - - - fit - - - - -\nchi2/NDF: "+str(chi2)+"/"+str(ndf)+"="+str(chi2/ndf))
	return fitter
def doFitRho(inFileName,
             sectors,
             startBin,
             stopBin,
             tBins,
             sectorRangeMap={},
             referenceWave=""):
    rhoMass = ptc.parameter(mRho, "rhoMass")
    rhoWidth = ptc.parameter(Grho, "rhoWidth")
    binning = [
        0.278, 0.32, 0.36, 0.4, 0.44, 0.48, 0.52, 0.56, 0.6, 0.64, 0.68, 0.7,
        0.72, 0.74, 0.76, 0.78, 0.8, 0.82, 0.84, 0.86, 0.88, 0.9, 0.92, 0.96,
        1.0, 1.04, 1.08, 1.12, 1.16, 1.2, 1.24, 1.28, 1.32, 1.36, 1.4, 1.44,
        1.48, 1.52, 1.56, 1.6, 1.64, 1.68, 1.72, 1.76, 1.8, 1.84, 1.88, 1.92,
        1.96, 2.0, 2.04, 2.08, 2.12, 2.16, 2.2, 2.24, 2.28
    ]

    rho = ptc.relativisticBreitWigner([rhoMass, rhoWidth], mPi, mPi, mPi, 1, 1,
                                      False)
    #	rho = ptc.integratedRelativisticBreitWigner([rhoMass,rhoWidth], mPi, mPi, mPi, 1, 1, binning, intensWeight = False, fitPr = False, reweightInverseBW = True)
    fitRho = amplitudeAnalysis(inFileName,
                               sectors, {"0-+0+[pi,pi]1--PiP": [rho]},
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap)
    fitRho.loadData(referenceWave=referenceWave)
    fitRho.finishModelSetup()
    fitRho.fitShapeParameters()
    fitRho.calculateNonShapeParameters()
    fitRho.mode = AMPL
    #	fitRho.removeGlobalPhaseFromComa()
    #	fitRho.removeZeroModeFromComa()
    return fitRho
Пример #16
0
def doSmooth(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = ""):
	waveModel = {}
	smooth = amplitudeAnalysis(inFileName, sectors, waveModel, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	smooth.loadData(referenceWave = referenceWave)
	smooth.finishModelSetup()
	smooth.mode = SMOOTH
#	smooth.removeGlobalPhaseFromComa()
#	smooth.removeZeroModeFromComa()
	return smooth
def doPietarinen(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", polDeg = 1, polDeg3Pi = 0, writeResultToFile = None, acv = None, zeroModeParameters = None):
	rhoResRe  = ptc.parameter( 1.       ,  "rhoResRe"  )
	rhoResIm  = ptc.parameter( 0.       ,  "rhoResIm"  )
	rhoPoleRe = ptc.parameter( mRho**2  ,  "rhoPoleRe" )
	rhoPoleIm = ptc.parameter(-mRho*Grho,  "rhoPoleIm" )

	thresholds = [(4*mPi**2,polDeg)]
	alphaPiPi  = ptc.parameter( 0.      ,  "alphaPiPi" )
	polyCoeffs = [alphaPiPi]
	for i in range(polDeg):
		for j in range(polDeg3Pi+1):
			c = ptc.parameter( 0.,    "C"+str(i+1)+"_"+str(j)+"_PiPi" )
			polyCoeffs.append(c)
	parameters  = [rhoResRe,rhoResIm,rhoPoleRe,rhoPoleIm]
	if polDeg == 0:
		thresholds = []
	else:
		parameters += polyCoeffs

	pietarinen    = ptc.pietarinenExpansion(parameters, 1, threshsolds = thresholds, polDeg3Pi = polDeg3Pi)
	fitPietarinen = amplitudeAnalysis(inFileName, sectors, {"1-+1+[pi,pi]1--PiP":[pietarinen]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitPietarinen.loadData(loadIntegrals = True, referenceWave = referenceWave)
	fitPietarinen.finishModelSetup()
	fitPietarinen.mode = AMPL

	fitPietarinen.removeZeroModeFromComa()
	if acv is not None:
		fitPietarinen.addComaValueForZeroMode(acv)

	if zeroModeParameters is None:
		fitPietarinen.fitShapeParameters()
		fitPietarinen.calculateNonShapeParameters()
		chi2 = fitPietarinen.chi2
		ndf  = fitPietarinen.getNDFforMode()
	else:
		x,err,chi2,ndf = fitPietarinen.fitShapeParametersForBinRange([p.value for p in parameters], [0],range(stopBin-startBin), zeroModeParameters = zeroModeParameters)
		fitPietarinen.calculateNonShapeParametersForZeroModeParameters(zeroModeParameters)

	print "mRho:", rhoPoleRe.value**.5
	print "Grho:",-rhoPoleIm.value/rhoPoleRe.value**.5
	print "chi2/NDF",chi2/ndf

	if writeResultToFile is not None:
		with open(writeResultToFile, 'w') as outFile:
			outFile.write("mRho: "+str(rhoPoleRe.value**.5)+'\n')
			outFile.write("Grho: "+str(-rhoPoleIm.value/rhoPoleRe.value**.5)+'\n')
			outFile.write("- - - - parameters - - - -\n")
			for p in parameters:
				outFile.write(str(p)+'\n')
			outFile.write(" - - - - - fit - - - - -\nchi2/NDF: "+str(chi2)+"/"+str(ndf)+"="+str(chi2/ndf))
	pietarinen.writeToFile("./pietarinenFits/pietarinenAmplitude_1.5_"+str(tBins[0])+".dat", [0.139*2 + 0.001*i for i in range(2000)], [1.5])
	return fitPietarinen
def doFitRhoPR(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = ""):
	rhoMass  = ptc.parameter( mRho, "rhoMass"  )
	rhoWidth = ptc.parameter( Grho , "rhoWidth")
	PrA1  = ptc.PRparameter( Pr0, "PrA1" )
	PrRho = ptc.PRparameter( Pr0, "PrRho")
	rho = ptc.relativisticBreitWigner([rhoMass,rhoWidth,PrA1,PrRho], mPi, mPi, mPi, 1, 0, True)
	fitRho = amplitudeAnalysis(inFileName, sectors, {"1++0+[pi,pi]1--PiS":[rho]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitRho.loadData(referenceWave = referenceWave)
	fitRho.finishModelSetup()
	fitRho.fitShapeParameters()
	fitRho.calculateNonShapeParameters()
	fitRho.mode = AMPL
#	fitRho.removeGlobalPhaseFromComa()
	return fitRho
def produceSingleMassTbinFitter(inFileName, funcs, mBin, tBin, sectorRangeMap, referenceWave, acv = None, removeZM = False, removePhase = False):
	sector  = "1++0+[pi,pi]1--PiS"
	sectors = [sector, "1++0+[pi,pi]0++PiP"]
	fitter = amplitudeAnalysis(inFileName, sectors, {sector:funcs}, mBin, mBin+1, [tBin], sectorRangeMap = sectorRangeMap)
	fitter.loadData(loadIntegrals = True, referenceWave = referenceWave)
	fitter.finishModelSetup()
	fitter.mode = AMPL

	if removeZM or acv is not None: # Also remove ZM in cae of an ACV (Artificial coma value)
		fitter.removeZeroModeFromComa()		
		if acv is not None:
			fitter.addComaValueForZeroMode(acv)
	if removePhase:
		fitter.removePhaseFromComa()		
	return fitter
Пример #20
0
def doFitRhoPrime(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {},referenceWave = ""):
	rhoMass  = ptc.parameter( mRho, "rhoMass" )
	rhoWidth = ptc.parameter( Grho , "rhoWidth")
	rhoPrimeMass  = ptc.parameter( mRhoPrime, "rhoPrimeMass" )
	rhoPrimeWidth = ptc.parameter( GrhoPrime, "rhoPrimeWidth")
	ratio         = ptc.parameter( .9       , "reImRatio"    )
	rho      = ptc.relativisticBreitWigner([rhoMass,rhoWidth], mPi, mPi, mPi, 1, 0, False)
	rhoPrime = ptc.relativisticBreitWignerRatio([rhoPrimeMass,rhoPrimeWidth,ratio], mPi, mPi, mPi, 1, 0, False)
	fitRho = amplitudeAnalysis(inFileName, sectors, {"1++0+[pi,pi]1--PiS":[rho, rhoPrime]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitRho.loadData(referenceWave = referenceWave)
	fitRho.finishModelSetup()
	fitRho.fitShapeParameters()
	fitRho.calculateNonShapeParameters()
	fitRho.mode = AMPL
#	fitRho.removeGlobalPhaseFromComa()
	return fitRho
def doOmnes(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", deg = 0, compl = False):
	parameters = []
	for i in range(deg):
		if compl:
			parameters.append(ptc.parameter(0., "re"+str(i)))
			parameters.append(ptc.parameter(0., "im"+str(i)))
		else:
			parameters.append(ptc.parameter(0., "c"+str(i)))
	omnes  = ptc.omnesFunctionPolynomial(parameters, nDimPol = deg, shift = False, stretch = False, complexPolynomial = compl)
	fitRho = amplitudeAnalysis(inFileName, sectors, {"1++0+[pi,pi]1--PiS":[omnes]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fitRho.loadData(referenceWave = referenceWave)
	fitRho.finishModelSetup()
	fitRho.fitShapeParameters()
	fitRho.calculateNonShapeParameters()
	fitRho.mode = AMPL
#	fitRho.removeGlobalPhaseFromComa()
	return fitRho
def fitRhoPrime(fitBin, outFileName, inFileName, startBin, stopBin, tBins, pars, zeroModeParameters, plotNameBase = "",referenceWave = ""):
	global rhoPrimeFit
	if not rhoPrimeFit:
		rhoMass  = ptc.parameter( pars[0],  "rhoMass")
		rhoWidth = ptc.parameter( pars[1], "rhoWidth")
		rhoMass.lock  = True
		rhoWidth.lock = True
		rho = ptc.relativisticBreitWigner([rhoMass,rhoWidth], mPi, mPi, mPi, 1, 0, False)
		primeMass   = ptc.parameter( mRhoPrime, "primeMass" )
		primeWidth  = ptc.parameter( GrhoPrime, "primeWidth")
		prime       = ptc.relativisticBreitWigner([primeMass,primeWidth], mPi, mPi, mPi, 1, 0, False)
		rhoPrimeFit = amplitudeAnalysis(inFileName, ["1++0+[pi,pi]1--PiS"], {"1++0+[pi,pi]1--PiS":[rho,prime]}, startBin, stopBin, tBins)
		rhoPrimeFit.loadData(referenceWave = referenceWave)
		rhoPrimeFit.finishModelSetup()
		rhoPrimeFit.fitShapeParameters()
		rhoPrimeFit.calculateNonShapeParameters()
		rhoPrimeFit.mode = AMPL
	binIndex = fitBin+startBin
	with open(outFileName, 'a') as outFile:
		outFile.write(str(binIndex)+' '+str(0.52 + 0.04*binIndex)+' ')
		startValueOffset = 0.01
		exceptCount      = 0
		while True:
#			try:
			if True:
				x,err,c2,ndf = rhoPrimeFit.fitShapeParametersForBinRange([mRhoPrime+startValueOffset,GrhoPrime+startValueOffset], [0],[fitBin], zeroModeParameters = zeroModeParameters)
				break
#			except:
#				print "Fitter exception encountered"
#				startValueOffset += 0.001
#				exceptCount      += 1
#				if exceptCount > 3:
#					print "Too many failed attempts in bin "+str(fitBin)+": "+str(exceptCount)
#					raise Exception
#					x, err = [0.,0.],[0.,0.]
#					break

		outFile.write(str(x[0]) + ' ' + str(err[0]) + ' ' + str(x[1]) + ' ' + str(err[1]))
		outFile.write(' ' + str(c2/ndf) + '\n')
		if not plotNameBase == "":
			rhoPrimeFit.calculateNonShapeParametersForZeroModeParameters(zeroModeParameters)
			rhoPrimeRV = rhoPrimeFit.produceResultViewer(zeroModeParameters,"1++0+[pi,pi]1--PiS", noRun = True, plotTheory = True)
			rhoPrimeRV.plotData = True
			rhoPrimeRV.writeBinToPdf(binIndex, stdCmd = ["", plotNameBase.replace("<mode>","intens"), [],  plotNameBase.replace("<mode>","argand"), []])
Пример #23
0
def doFixedShapes(inFileName, sectors, startBin, stopBin, tBins, sectorRangeMap = {}, referenceWave = "", acv = None):
	waveModel = {}
	for n,sector in enumerate(sectors):
		model = []
		fileNames = getFileNameForSector(sector, False, False)
		print fileNames
		for fn in fileNames:
			param = pc.fixedParameterization(fn, polynomialDegree  = 0, complexPolynomial = False)
			model.append(param)
		waveModel[sector] = model
	fixedShapes = amplitudeAnalysis(inFileName, sectors, waveModel, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
	fixedShapes.loadData(loadIntegrals = True, referenceWave = referenceWave)
	fixedShapes.finishModelSetup()
	fixedShapes.removeZeroModeFromComa()
	if acv is not None:
		fixedShapes.addComaValueForZeroMode(acv)
	fixedShapes.fitShapeParameters()
	fixedShapes.calculateNonShapeParameters()
	fixedShapes.mode = AMPL
	return fixedShapes
def doFitF2(inFileName,
            sectors,
            startBin,
            stopBin,
            tBins,
            sectorRangeMap={},
            referenceWave=""):
    f2Mass = ptc.parameter(mF2, "f2Mass")
    f2Width = ptc.parameter(GF2, "f2Width")
    binning = [
        0.278, 0.32, 0.36, 0.4, 0.44, 0.48, 0.52, 0.56, 0.6, 0.64, 0.68, 0.72,
        0.76, 0.8, 0.84, 0.88, 0.92, 0.96, 1.0, 1.04, 1.08, 1.12, 1.16, 1.18,
        1.2, 1.22, 1.24, 1.26, 1.28, 1.30, 1.32, 1.34, 1.36, 1.38, 1.4, 1.44,
        1.48, 1.52, 1.56, 1.6, 1.64, 1.68, 1.72, 1.76, 1.8, 1.84, 1.88, 1.92,
        1.96, 2.0, 2.04, 2.08, 2.12, 2.16, 2.2, 2.24, 2.28
    ]
    #	f2 = ptc.relativisticBreitWigner([f2Mass,f2Width], mPi, mPi, mPi, 2, 0, False)
    f2 = ptc.integratedRelativisticBreitWigner(
        [f2Mass, f2Width],
        mPi,
        mPi,
        mPi,
        2,
        0,
        binning,
        intensWeight=intensWeight,
        fitPr=False,
        reweightInverseBW=reweightInverseBW)
    fitF2 = amplitudeAnalysis(inFileName,
                              sectors, {"2-+0+[pi,pi]2++PiS": [f2]},
                              startBin,
                              stopBin,
                              tBins,
                              sectorRangeMap=sectorRangeMap)
    fitF2.loadData(referenceWave=referenceWave)
    fitF2.finishModelSetup()
    fitF2.fitShapeParameters()
    fitF2.calculateNonShapeParameters()
    fitF2.mode = AMPL
    #	fitF2.removeGlobalPhaseFromComa()
    return fitF2
def doFit1500(inFileName,
              sectors,
              startBin,
              stopBin,
              tBins,
              sectorRangeMap={"0-+0+[pi,pi]0++PiS": (1.15, 1.75)},
              referenceWave="",
              writeResultToFile=None):
    fixedAMPD_sub = pc.fixedParameterization(
        "/nfs/freenas/tuph/e18/project/compass/analysis/fkrinner/fkrinner/trunk/massDependentFit/scripts/anything/zeroModes/bwAmplitudes_noBF/amp_0mp0pSigmaPiS"
    )
    const = pc.constant()
    linea = pc.linear()
    f0mass = ptc.parameter(m1500, "1500mass")
    f0width = ptc.parameter(G1500, "1500width")
    f0_1500 = ptc.relativisticBreitWigner([f0mass, f0width], mPi, mPi, mPi, 0,
                                          0, False)
    fit1500 = amplitudeAnalysis(
        inFileName,
        sectors, {"0-+0+[pi,pi]0++PiS": [f0_1500, fixedAMPD_sub]},
        startBin,
        stopBin,
        tBins,
        sectorRangeMap=sectorRangeMap)
    #	fit1500 = amplitudeAnalysis(inFileName, sectors, {"0-+0+[pi,pi]0++PiS":[f0_1500, const, linea]}, startBin, stopBin, tBins, sectorRangeMap = sectorRangeMap)
    fit1500.loadData(referenceWave=referenceWave)
    fit1500.finishModelSetup()
    fit1500.fitShapeParameters()
    fit1500.calculateNonShapeParameters()
    fit1500.mode = AMPL
    #	fit1500.removeGlobalPhaseFromComa()
    if writeResultToFile:
        with open(writeResultToFile, 'a') as outFile:
            if len(tBins) > 1:
                raise ValueError("More than one t' bin not supported")
            resultString = str(tBins[0]) + " 666. " + str(
                f0mass.value) + ' ' + str(f0mass.error) + ' ' + str(
                    f0width.value) + ' ' + str(f0width.error) + "\n"
            outFile.write(resultString)
    return fit1500
def main():
    checkLaTeX()
    style = modernplotting.mpplot.PlotterStyle()
    #	style.p2dColorMap = 'ocean_r'
    #	style.p2dColorMap = 'YlOrRd'
    style.p2dColorMap = 'Reds'
    #	referenceWave     = ""

    inFileName = fileNameMap["std11"]

    for a in sys.argv:
        if a.startswith("mBins"):
            startBin = int(a.split("-")[1])
            stopBin = int(a.split("-")[2])
        if a.startswith("tBins"):
            tMin = int(a.split("-")[1])
            tMax = int(a.split("-")[2])
            tBins = range(tMin, tMax)

    nPol = 3
    for a in sys.argv:
        if a.startswith("nPol"):
            nPol = int(a[4:])

    f2Re0 = mF2**2
    f2Im0 = mF2 * GF2

    mPrime = 1.55
    Gprime = .2

    mPPrime = 1.91
    Gpprime = .3

    f2Mass = ptc.parameter(mF2, "f2_mass")
    f2Width = ptc.parameter(GF2, "f2_width")
    f2 = ptc.relativisticBreitWigner([f2Mass, f2Width], mPi, mPi, mPi, 2, 0,
                                     False)

    poleReal = ptc.parameter(f2Re0, "f2Re")
    poleImag = ptc.parameter(f2Im0, "f2Im")

    pPoleReal = ptc.parameter(mPrime**2, "f2pRe")
    pPoleImag = ptc.parameter(mPrime * Gprime, "f2pIm")

    ppPoleReal = ptc.parameter(mPPrime**2, "f2ppRe")
    ppPoleImag = ptc.parameter(mPPrime * Gpprime, "f2ppIm")

    #	poleRealPrime = ptc.parameter(mPrime**2, "rhoRePrime")
    #	poleImagPrime = ptc.parameter(mPrime*Gprime, "rhoImPrime")

    polyDeg_po = 3
    for a in sys.argv:
        if a.startswith("pdpo"):
            polyDeg_po = int(a[4:])

    params = [poleReal, poleImag, pPoleReal, pPoleImag, ppPoleReal, ppPoleImag]
    params = params[:2 * nPol]

    for d in range(polyDeg_po):
        params.append(ptc.parameter(2 * random() - 1., "c_" + str(d)))

    Kmatrix = ptc.simpleOneChannelKmatrix(params, nPol, polyDeg_po, 4 * mPi**2)
    useCM = False
    for a in sys.argv:
        if a == "CM":
            useCM = True
        if a == "rho":
            useCM = False
    if useCM:
        psString = "CM"
    else:
        psString = "rho"

    Kmatrix.use_CM = useCM

    for a in sys.argv:
        if a.startswith("polyDegP"):
            polyDegP = int(a[8:])

    mMin = .5 + .04 * startBin
    mMax = .5 + .04 * stopBin

    smartMode = True

    tFuncs = []
    tpPoly = []
    nKpar = len(params)
    KparValues = [p.value for p in params]

    funcs = []
    for d in range(polyDegP + 1):
        mnm = ptc.monomial(2 * d)
        func = ptc.multiply([Kmatrix, mnm])
        funcs.append(func)

    phases = []
    for tBin in tBins:
        tParams = []
        for mBin in range(startBin, stopBin):
            phases.append(
                ptc.parameter(2 * pi * random(),
                              "phi_t" + str(tBin) + "_m" + str(mBin)))
            for d in range(polyDegP):
                tParams.append(
                    ptc.parameter(
                        2 * random() - 1., "c" + str(d + 1) + "_t" +
                        str(tBin) + "_m" + str(mBin)))
        nPpar = len(tParams)
        if not smartMode:
            params += tParams
        pPoly = ptc.binnedPolynomial(tParams,
                                     mMin=mMin,
                                     mMax=mMax,
                                     nBins=stopBin - startBin,
                                     degree=polyDegP,
                                     baseExponent=2,
                                     real=True)
        tpPoly.append(pPoly)
        func = ptc.multiply([Kmatrix, pPoly])
        tFuncs.append(func)

    bestFitVals = [
        1.591236, 0.234037, 2.419353, 0.005742, 3.702362, 0.000053, -0.189620,
        0.207497, -0.058921, 0.517699, 0.166935, 0.181275, 0.959202, 1.528309,
        0.501027, -1.146739, -0.535555, 0.417481, -0.419879, 1.561247,
        0.120558, 1.059373, 0.393481, -0.283450, -0.182751, -0.667384,
        0.619867, 0.343112, 0.069652, 0.677225, -0.116518, -0.485594, 0.693124,
        0.270239, 0.139340, -2.694811, -0.062632, 1.570524, -0.493674,
        -2.409801, 0.394341, 0.421391, -0.524359, 0.112583, 0.285943,
        -0.166501, -0.408990, -0.010904, 0.088735, 0.117378, 0.166603,
        -0.949778, 0.500537, -1.352419, -0.639588, -2.139980, -0.146114,
        1.877676, 1.025465, -0.120469, 1.197397, 0.792957, -0.507836, 0.354736,
        -0.571950, -0.439970, 0.635951, 1.119741, 1.078536, -1.707963,
        -0.894598, -0.379259, -0.256336, 1.811274, 0.460570, -2.370441,
        -1.519688, -2.596059, -1.472923, 0.329489, 0.963846, -0.174265,
        0.497754, 0.523653, -0.082330, -2.288272, 0.238584, 2.432317,
        -0.219072, -1.818075, 0.101130, -1.315669, -0.095197, 0.185721,
        -0.468701, 1.150421, -0.706067, 1.336765, 0.114122, -2.514466,
        -1.292956, 0.909066, -0.136537, 1.579291, 0.917968, 0.519039, 0.560456,
        -3.141557, -0.919017, 1.034258, 0.651617, 0.414377, -0.954656,
        0.432315, -0.250071, -0.306383, -0.916611, 0.241417, 0.196445,
        -0.594122, -0.610276, -2.115296, -1.232504, 0.210273, -0.539883,
        1.134149, 0.582253, -1.330798, -1.189863, 2.000385, -0.286371,
        0.997649, -0.268911, -0.358648, 0.209653, 0.307646, 0.294261, 2.350279,
        -0.342739, 1.010674, -0.547855, -1.715226, 0.599891, 0.567254,
        -0.731444, 2.852883, -0.398756, 2.450370, 0.296712, 0.499203, 0.284769,
        -7.040768, -1.148202, -0.982813, 0.349752, -6.325548, -0.494806,
        0.183253, 0.745206, 2.547205, 1.571422, 0.713172, -0.253361, 0.610771,
        1.308658, 1.501376, 1.023860, 2.184354, 0.927320, 0.677329, 0.589890,
        0.139710, 0.550017, -0.702369, -0.847349, -0.729193, 0.541576,
        -0.508911, 0.495425, 1.287986, -0.364052, -1.338609, 0.281415,
        0.168475, 0.184298, -0.904410, 0.193151, -0.773044, 0.324601, 4.473005,
        0.046860, -0.359312, 0.368391, -1.623123, 0.531775, 0.384091, 0.988951,
        -0.779931, 0.030888, -0.139630, -0.264398, -9.821342, -1.601821,
        -7.745628, -2.010218, -3.540738, -0.067302, 0.153977, -1.635704
    ]

    for p, par in enumerate(params):
        par.value = bestFitVals[p]

    if smartMode:
        params += phases

    sector = "2-+0+[pi,pi]2++PiS"
    sectors = [
        "2-+0+[pi,pi]0++PiD", "2-+0+[pi,pi]1--PiP", "2-+0+[pi,pi]1--PiF",
        "2-+0+[pi,pi]2++PiS"
    ]

    sectorRangeMap = {}
    zmPars = []
    fitters = []
    for t, tBin in enumerate(tBins):
        if smartMode:
            ff = funcs
        else:
            ff = [tFuncs[t]]
        fitter = amplitudeAnalysis(inFileName,
                                   sectors, {sector: ff},
                                   startBin,
                                   stopBin, [tBin],
                                   sectorRangeMap=sectorRangeMap)
        fitter.loadData(loadIntegrals=True, referenceWave=referenceWave)
        fitter.finishModelSetup()
        fitter.mode = AMPL

        fixSectors = [
            "2-+0+[pi,pi]1--PiP", "2-+0+[pi,pi]1--PiF", "2-+0+[pi,pi]2++PiS"
        ]
        fixRangeMap = {
            "2-+0+[pi,pi]1--PiP": (0., 1.12),
            "2-+0+[pi,pi]1--PiF": (0., 1.12),
            "2-+0+[pi,pi]2++PiS": (0., 1.27)  # Use only left side of f_2(1270)
        }

        fixedShapes = doFixedShapes(inFileName,
                                    fixSectors,
                                    startBin,
                                    stopBin, [tBin],
                                    referenceWave=referenceWave,
                                    sectorRangeMap=fixRangeMap)
        zmPars.append(fixedShapes.getZeroModeParametersForMode())
        fitter.setZeroModeParameters(zmPars[-1])
        fitter.model.setBinsToEvalueate(
            [0], range(stopBin - startBin)
        )  # [0] since it is only one tBin in this fitter (one fitter par t' bin)
        fitters.append(fitter)

    c2 = 0.
    for t in range(len(tBins)):
        ddd = fitters[t].model.fixedZMPchi2(None)
        print ddd, "the previous chi2 (this should not give, since it allows phase motion in the p-vector"
        c2 += ddd
    print c2

    nmBins = stopBin - startBin

    def evalFunction(params):
        Kmatrix.setParameters(params[:nKpar])
        chi2 = 0.
        for t in range(len(tBins)):
            if smartMode:
                chi2 += fitters[t].model.fixedZMPchi2_realCouplings(
                    None, params[nKpar + t * nmBins:nKpar + (t + 1) * nmBins])
            else:
                chi2 += fitters[t].model.fixedZMPchi2(None)
        return chi2

    print evalFunction([p.value for p in params]), "gives it?"
    #	return

    argString = ','.join([p.name + '=' + str(p.value) for p in params])
    lstString = ','.join([p.name for p in params])

    ndf = 0
    for fitter in fitters:
        ndfs = fitter.model.getNDF()
        for t in ndfs:
            for m in t:
                ndf += m[0] - m[1] - m[2]
    ndf -= len(params)
    ndf += polyDegP * (stopBin - startBin) * (
        tMax - tBin)  # the couplings have just a global phase !!!
    # # # # # # 2mpF2_Kmatrix_nPol3_rho_kPol0_pPol0-3_t3_m49-50_5854.dat

    for att in range(10):  # make 10 attempts at once
        print "Setting Start Pars for attempt", att + 1
        for i in range(len(params)):
            if i < nKpar:
                params[i].value = KparValues[i]
            else:
                params[i].value = 2 * pi * random()
        vals = MIGRAD(argString, lstString, evalFunction)

        chi2 = explicit_MINUIT_function(*vals)

        seedint = randint(0, 10000)
        resultFileName = "./globalKmatrixFits/2mpF2_nPol" + str(
            nPol) + "_" + psString + "_kPol" + str(
                polyDeg_po -
                1) + "_t" + str(tMin) + '-' + str(tMax) + "_m" + str(
                    startBin) + "-" + str(stopBin) + "_polyDegP" + str(
                        polyDegP) + "_" + str(seedint) + ".dat"

        with open(resultFileName, 'w') as outFile:
            outFile.write("- - - - parameters - - - -\n")
            for p in params:
                outFile.write(str(p) + '\n')
            outFile.write(" - - - - - fit - - - - -\nchi2/NDF: " + str(chi2) +
                          "/" + str(ndf) + "=" + str(chi2 / ndf) + '\n')
            outFile.write("ndf corrected!!!")
    return

    parameters = []
    for f in funcs:
        for p in f.returnParameters():
            parameters.append(p)

    fitter.initMinuitFunction(parameters)
    fitter.removeZeroModeFromComa()
    fitter.removeGlobalPhaseFromComa()

    if acv is not None:
        print "adding ACV of", acv
        fitter.addComaValueForZeroMode(acv)
    pPoly = ptc.twoDimensionalRealPolynomial(
        pPolyDeg2, pPolyDeg3, params,
        baseExponent=2)  # baseExponent = 2: polynomial in s
    func = ptc.multiply([Kmatrix, pPoly])

    model = [func]
    #	model      = [rho]

    acv = None

    #       # - - - - --- Stop the model building here --- - - - - #       #
    zeroModeParameters = None
    fixZeroMode = True
    #	print sectorRangeMap
    #	return
    if fixZeroMode:
        fixSectors = [
            "2-+0+[pi,pi]1--PiP", "2-+0+[pi,pi]1--PiF", "2-+0+[pi,pi]2++PiS"
        ]
        fixRangeMap = {
            "2-+0+[pi,pi]1--PiP": (0., 1.12),
            "2-+0+[pi,pi]1--PiF": (0., 1.12),
            "2-+0+[pi,pi]2++PiS": (0., 1.27)  # Use only left side of f_2(1270)
        }

        fixedShapes = doFixedShapes(inFileName,
                                    fixSectors,
                                    startBin,
                                    stopBin,
                                    tBins,
                                    referenceWave=referenceWave,
                                    sectorRangeMap=fixRangeMap)
        zeroModeParameters = fixedShapes.getZeroModeParametersForMode()

#		RV = fixedShapes.produceResultViewer(zeroModeParameters,"1-+1+[pi,pi]1--PiP", noRun = True, plotTheory = True)
#		RV.plotData = True
#		for b in range(startBin, stopBin):
#			plotNameBase = "./Kmatrix_plots/1mp1p1mmPiP_<mode>_"+str(b)+"_"+str(tBin)+".pdf"
#			RV.writeBinToPdf(b, stdCmd = ["", plotNameBase.replace("<mode>","intens"), [],  plotNameBase.replace("<mode>","argand"), []])
#		return
    if useCM:
        ps = "CM"
    else:
        ps = "rho"
    if nPol == 1:
        nps = ""
    else:
        nps = "nPol" + str(nPol) + "_"

    resultFile = "./KmatrixRestrictedZMfixing_allFourSectorsActive/2mpF2_Kmatrix_" + nps + ps + "_kPol" + str(
        polyDeg_po - 1) + "_pPol" + str(pPolyDeg3) + "-" + str(
            pPolyDeg2) + "_t" + str(tBin) + "_m" + str(startBin) + '-' + str(
                stopBin) + '_' + str(seedint) + ".dat"
    fitter = doFunctionFit(inFileName,
                           model,
                           startBin,
                           stopBin,
                           tBins,
                           sectorRangeMap,
                           referenceWave=referenceWave,
                           acv=acv,
                           zeroModeParameters=zeroModeParameters,
                           writeResultToFile=resultFile,
                           ifn=ifn)

    #       # - - - - --- Start the evaluations here --- - - - - #       #
    nBinsPlot = 1000

    def fPlot(v):
        return v.imag
#	hist = pyRootPwa.ROOT.TH2D("hhh","hhh", nBinsPlot, -.25, 6.25,nBinsPlot, -1., 1.)
#	for iX in range(nBinsPlot):
#		x = hist.GetXaxis().GetBinCenter(iX+1)
#		for iY in range(nBinsPlot):
#			y = hist.GetYaxis().GetBinCenter(iY+1)
#			s = x+1.j*y
#			val = Kmatrix.complexCall(s)
#			hist.SetBinContent(iX+1, iY+1,fPlot(val))
#	hist.Draw("COLZ")
#	raw_input("press <enter> to go to the secont sheet")

    Kmatrix.secondSheet = True
    #	for iX in range(nBinsPlot):
    #		x = hist.GetXaxis().GetBinCenter(iX+1)
    #		for iY in range(nBinsPlot):
    #			y = hist.GetYaxis().GetBinCenter(iY+1)
    #			s = x+1.j*y
    #			val = Kmatrix.complexCall(s)
    #			hist.SetBinContent(iX+1, iY+1, fPlot(val))
    #	hist.Draw("COLZ")
    res = scipy.optimize.minimize(Kmatrix.absInverse, [f2Re0, f2Im0])
    print res.x, "pole position"
    mfv = res.fun
    resSting = str(res.fun) + " function value should be zero"
    print resSting
    BWstring = "BW par: " + str(abs(res.x[0])**.5) + " " + str(
        abs(res.x[1]) / abs(res.x[0])**.5) + " (all absolute values)"
    print BWstring

    if ifn is None:
        print "= = = = = = = = = Starting BW error ersimation = = = = = = = = = "
        nPoints = 1000
        poleMean = res.x
        poleSamples = []
        i = 0
        failCount = 0
        while i < nPoints:
            pts = np.random.multivariate_normal(fitter.fitParameters,
                                                fitter.MINUITcoma)
            fitter.MINUIT_function(
                pts)  # Call the function once to set parameters inside
            #		fitter.model[0].setParametersAndErrors(pts, fitter.MINUITerrs)
            res = scipy.optimize.minimize(Kmatrix.absInverse, poleMean)
            if abs(res.fun) > 100 * mfv:
                print "No more pole found (mfv = " + str(
                    mfv) + ") : fval = " + str(res.fun)
                failCount += 1
                if failCount > nPoints:
                    print "Failed to find poles too often.... abort"
                    return
                continue
    #			raise ValueError("No more pole found: fval = "+str(res.fun))

            poleSamples.append(res.x)
            i += 1
    #		print i,"Marker to find the PRINT 57473M3N7"
        meanPole = [0., 0.]
        for p in poleSamples:
            meanPole[0] += p[0]
            meanPole[1] += p[1]
        meanPole[0] /= len(poleSamples)
        meanPole[1] /= len(poleSamples)
        poleComa = [[0., 0.], [0., 0.]]
        for p in poleSamples:
            poleComa[0][0] += (p[0] - meanPole[0])**2
            poleComa[0][1] += (p[0] - meanPole[0]) * (p[1] - meanPole[1])
            poleComa[1][0] += (p[1] - meanPole[1]) * (p[0] - meanPole[0])
            poleComa[1][1] += (p[1] - meanPole[1])**2
        poleComa[0][0] /= len(poleSamples) - 1
        poleComa[0][1] /= len(poleSamples) - 1
        poleComa[1][0] /= len(poleSamples) - 1
        poleComa[1][1] /= len(poleSamples) - 1
        comaString = str(poleComa)
        print " - - - - - - le compaire pramaitre  - - - - - - "
        print meanPole, poleMean
        print " - - - - - - le compaire pramaitre  - - - - - - "
        print poleComa
        print "= = = = = = = = = Finished BW error ersimation = = = = = = = = = "
        mF2P = 1.9
        GF2P = .277
        res = scipy.optimize.minimize(Kmatrix.absInverse,
                                      [mF2P**2, mF2P * GF2P])
        print res.x, "pole position"
        resSting = str(res.fun) + " function value should be zero"
        print resSting
        BWstring = "BW' par: " + str(abs(res.x[0])**.5) + " " + str(
            abs(res.x[1]) / abs(res.x[0])**.5) + " (all absolute values)"
        print BWstring
        with open(resultFile, 'a') as outFile:
            outFile.write('\n' + BWstring + " " + resSting + "\ncoma " +
                          comaString)
    #		outFile.write('\n'+BWfitString)
    #       # - - - - --- Start the evaluations here --- - - - - #       #
        doPlots = False
        for a in sys.argv:
            if a == "plot":
                doPlots = True
    if ifn is not None:
        doPlots = True  # Set plots by default, if an inFile is given

    if doPlots:
        RV = fitter.produceResultViewer(zeroModeParameters,
                                        "2-+0+[pi,pi]2++PiS",
                                        noRun=True,
                                        plotTheory=True)
        RV.plotData = True
        for b in range(startBin, stopBin):
            plotNameBase = "./Kmatrix_plots/2mp0p2ppPiS_<mode>_" + str(
                b) + "_" + str(tBin) + "_" + str(seedint) + ".pdf"
            RV.writeBinToPdf(b,
                             stdCmd=[
                                 "",
                                 plotNameBase.replace("<mode>", "intens"), [],
                                 plotNameBase.replace("<mode>", "argand"), []
                             ])


#	raw_input("press <enter> to exit")
    return
def doFunctionFit(inFileName,
                  funcs,
                  startBin,
                  stopBin,
                  tBins,
                  sectorRangeMap,
                  referenceWave="",
                  writeResultToFile=None,
                  acv=None,
                  zeroModeParameters=None,
                  ifn=None):
    sector = "2-+0+[pi,pi]2++PiS"
    sectors = [
        "2-+0+[pi,pi]0++PiD", "2-+0+[pi,pi]1--PiP", "2-+0+[pi,pi]1--PiF",
        "2-+0+[pi,pi]2++PiS"
    ]

    fitter = amplitudeAnalysis(inFileName,
                               sectors, {sector: funcs},
                               startBin,
                               stopBin,
                               tBins,
                               sectorRangeMap=sectorRangeMap)
    fitter.loadData(loadIntegrals=True, referenceWave=referenceWave)
    fitter.finishModelSetup()
    fitter.mode = AMPL

    parameters = []
    for f in funcs:
        for p in f.returnParameters():
            parameters.append(p)

    fitter.initMinuitFunction(parameters)

    fitter.removeZeroModeFromComa()
    fitter.removeGlobalPhaseFromComa()

    if acv is not None:
        print "adding ACV of", acv
        fitter.addComaValueForZeroMode(acv)

    if ifn is None:
        if zeroModeParameters is None:
            fitter.fitShapeParameters()
            fitter.calculateNonShapeParameters()
            chi2 = fitter.chi2
            ndf = fitter.getNDFforMode()
        else:
            x, err, chi2, ndf = fitter.fitShapeParametersForBinRange(
                [p.value for p in parameters], [0],
                range(stopBin - startBin),
                zeroModeParameters=zeroModeParameters)
            fitter.calculateNonShapeParametersForZeroModeParameters(
                zeroModeParameters)
            for i, p in enumerate(parameters):
                print p
        if writeResultToFile is not None:
            with open(writeResultToFile, 'w') as outFile:
                outFile.write("- - - - parameters - - - -\n")
                for p in parameters:
                    outFile.write(str(p) + '\n')
                outFile.write(" - - - - - fit - - - - -\nchi2/NDF: " +
                              str(chi2) + "/" + str(ndf) + "=" +
                              str(chi2 / ndf))
    else:
        params = []
        errs = []
        with open(ifn, 'r') as inFile:
            inPars = False
            for line in inFile.readlines():
                if "- - - - - fit - - - - -" in line:
                    break
                elif inPars:
                    params.append(float(line.split()[2]))
                    errs.append(float(line.split()[4]))
                elif "- - - - parameters - - - -" in line:
                    inPars = True
        if not len(params) == len(parameters):
            raise IndexError("Parameter size mismatch")
        for i in range(len(params)):
            parameters[i].value = params[i]
            parameters[i].error = errs[i]
        if zeroModeParameters is None:
            raise ValueError
        else:
            fitter.setZeroModeParameters(zeroModeParameters)
        fitter.model.setBinsToEvalueate([0], range(stopBin - startBin))
        fitter.chi2 = fitter.model.fixedZMPchi2(params)
        fitter.fitParameters = params
        fitter.SET('hasFitResult')
        #		fitter.calculateNonShapeParametersForZeroModeParameters(zeroModeParameters)
        fitter.calculateNonShapeParameters()
    return fitter