def __init__(self, params): # https://github.com/rmanzoni/triggertools/blob/master/objects/FitFunctions.py#L153 alpha = params['alpha'] sigma = params['sigma'] norm = params['norm'] m0 = params['m_{0}'] n = params['n'] sqrtPi2 = sqrt(pi / 2) sqrt2 = sqrt(2.) absSig = abs(sigma) absAlpha = abs(alpha / absSig) a = (n / absAlpha)**n * TMath.Exp(-0.5 * absAlpha * absAlpha) b = absAlpha - n / absAlpha arg = absAlpha / sqrt2 erf = 1 if arg > 5. else -1 if arg < -5. else TMath.Erf(arg) leftArea = (1. + erf) * sqrtPi2 rightArea = (a * 1. / (absAlpha - b)**(n - 1)) / (n - 1) area = leftArea + rightArea self.norm = norm self.alpha = alpha self.sigma = sigma self.m0 = m0 self.nm1 = n - 1 self.absAlpha = absAlpha self.b = b self.sqrt2 = sqrt2 self.norm1 = norm * sqrtPi2 / area self.norm2 = norm * a / (1 - n) / area self.sigma1 = absSig * alpha / abs(alpha) self.A = norm * leftArea / area - self.norm2 / (absAlpha - b)**self.nm1
def eval(self, x): t = (x - self.m0) / self.sigma1 if t <= self.absAlpha: arg = t / self.sqrt2 erf = 1 if arg > 5. else -1 if arg < -5. else TMath.Erf(arg) return self.norm1 * (1 + erf) else: return self.A + self.norm2 / (t - self.b)**self.nm1
def err_func(p0, p1, p2, p3, p4, x): return p2 + p3 * TMath.Erf((p4 * x - p1) / p0)
def normCDF(x, par): mu = par[0] sigma = par[1] return 0.5 * (1.0 + TMath.Erf((x[0] - mu) / (math.sqrt(2.0) * sigma)))
def normCDF(x, par): return (0.5 * par[2] * (1.0 + TMath.Erf((x[0] - par[0]) / (math.sqrt(2.0) * par[1]))) + par[3])
c1 = canvas("large") F = F1 = Frame("200 PU t#bar{t}", "PU", 0., 320., "# reconstructed vertices", 0., 160) F1.add(hreal3d, "fullcircle", color=1, label="3d matched") F1.add(hreal4d, "fullcircle", color=2, label="4d matched") #F1.add(hsplit3d, "fullcircle", label="3d", add_to_legend = False) #F1.add(hsplit4d, "fullcircle", label="4d") #F1.add(hother3d, "fullcircle", label="3d") #F1.add(hother4d, "fullcircle", label="4d") F1.add(hfake4d, "opencircle", color=2, label="4d fake") F1.add(hfake3d, "opencircle", color=1, label="3d fake") if True: sigmaz=4.26 # beamspot dzeff = 0.018 alpha=TMath.Erf(dzeff/sigmaz/2.) epsilon = 0.70 print alpha #lf3d = TF1("f","x*%f-0.5*%f*x*x"%(epsilon, epsilon**2*alpha),0., 300.) lf3d = TF1("f","x*[0]-0.5*[1]*x*x",0., 300.) lf3d.SetParameter(0, epsilon) lf3d.SetParameter(1, epsilon**2*alpha) lf3d.SetLineColor(1) lf3d.SetLineWidth(1) lf3d.SetLineStyle(2) hreal3d.Fit(lf3d, "") #lf3d.Draw("same") eff3d_200 = lf3d.GetParameter(0) -0.5 * lf3d.GetParameter(1)*200 dzeff = 0.0185
def fitFuncErf(xVal, par): return par[3]+par[0]*(1.+TMath.Erf((xVal[0]-par[1])/par[2]/TMath.Sqrt(2.)))