Source code for mermithid.misc.KuriePlotTools

'''
Generate a Kurie binning from energy data
Author: M. Guigue
Date: Sept 28 2018
'''

from __future__ import absolute_import
try:
    from ROOT import TMath
except ImportError:
    pass

from morpho.utilities import morphologging
from mermithid.misc import TritiumFormFactor

logger = morphologging.getLogger(__name__)
__all__ = []
__all__.append(__name__)

[docs]def KuriePlotBinning(data, xRange = [0,-1], nBins=100): ''' For a given list of data points, returns two lists: - one containing the bins contents - one containing the bins errors ''' xmin = xRange[0] xmax = xRange[1] if xmin>=xmax: xmin = min(data) xmax = max(data) lower_bound = [xmin + (xmax-xmin)*i/nBins for i in range(nBins)] upper_bound = [xmin + (xmax-xmin)*(i+1)/nBins for i in range(nBins)] central_value = [xmin + (xmax-xmin)*(i+0.5)/nBins for i in range(nBins)] binned_data = [0]*nBins error_bins = [0]*nBins # Data binning for value in data: for i in range(nBins): if lower_bound[i] <= value <= upper_bound[i]: binned_data[i] = binned_data[i] + 1 continue for i in range(nBins): error_bins[i] = 0.5/TMath.Sqrt(TritiumFormFactor.RFactor(central_value[i],1)) binned_data[i] = TMath.Sqrt(binned_data[i]/TritiumFormFactor.RFactor(central_value[i],1)) return central_value, binned_data, error_bins
[docs]def KurieFunction(x, par): ''' Kurie function: A(Q-E)+B par[0]: A par[1]: Q par[2]: B ''' value = 0 if x < par[1][0]: value = par[0]*(par[1]-x) return value + par[2]
[docs]def UnormalizedSquarePoisson(y,l): ''' Return the probability density function for Y=sqrt(X) when X follows a Poisson distribution with param lambda ''' return 2*y*TMath.Exp(-l)*TMath.Pow(l,y*y)/TMath.tgamma(y*y)