def ENF(p_crosstalk: float) -> float: """ Calculate excess noise factor (ENF) of the detector See formulas 2.16, 2.17 and 2.27 in [1] Parameters ---------- p_crosstalk : float The probability of a single crosstalk event. Returns ------- ENF : float Excess noise factor. References ---------- .. [1] Gallego, L., et al. "Modeling crosstalk in silicon photomultipliers." Journal of instrumentation 8.05 (2013): P05010. https://iopscience.iop.org/article/10.1088/1748-0221/8/05/P05010/pdf """ d = d_crosstalk_4n(p_crosstalk) r = d[5] / (1 - sum(d[1:5])) e1 = moment(d[:5], 1) + d[5] * (1 + 4 * r) / r**2 var1 = moment(d[:5], 2) + d[5] * (2 + 7 * r + 16 * r**2) / r**3 - e1**2 return 1 + var1 / e1**2
def c_moments(model, k): """ Constraint rule for difference QEST initial moment of order k and the same moment of Q. This difference must be less than 1% Parameters ---------- model : InvPBaseModel k : int Order of moment. """ return (1 - 1e-2, moment(model.QEST, k) / moment(model.Q, k), 1 + 1e-2)
def c_sum_qest(model): """ Parameters ---------- model : InvPBaseModel Returns ------- Constraint rule for equality of sum(QEST) and 1 """ return moment(model.QEST, 0) == 1
def c_noisesum(model): return moment(model.p_noise, 0) == 1
def e_noisemean(model): return moment(model.p_noise, 1)
def e_ppoisson(model, n): pmean = moment(model.P, 1) - moment(model.p_noise, 1) return exp(-pmean) * pmean ** n / fact(n)