Example #1
0
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
Example #2
0
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)
Example #3
0
def c_sum_qest(model):
    """

    Parameters
    ----------
    model : InvPBaseModel

    Returns
    -------
    Constraint rule for equality of sum(QEST) and 1

    """
    return moment(model.QEST, 0) == 1
Example #4
0
def c_noisesum(model):
    return moment(model.p_noise, 0) == 1
Example #5
0
def e_noisemean(model):
    return moment(model.p_noise, 1)
Example #6
0
def e_ppoisson(model, n):
    pmean = moment(model.P, 1) - moment(model.p_noise, 1)
    return exp(-pmean) * pmean ** n / fact(n)