Skip to content

apply Giovanni's formula to calculate CMN

def estimate_cmn_fraction(mean_hits, rms_hits, n_strips):
    if mean_hits <= 0 or mean_hits >= n_strips:
        raise ValueError("Mean must be between 0 and n_strips.")

    mu = mean_hits
    sigma_sq = rms_hits ** 2
    p = mu / n_strips
    denom = mu * (1 - p)

    if denom == 0 or n_strips <= 1:
        raise ValueError("Invalid parameters for estimating cmnFraction.")

    cmn_fraction_sq = (sigma_sq / denom - 1) / (n_strips - 1)
    cmn_fraction_sq = max(cmn_fraction_sq, 0)
    return cmn_fraction_sq ** 0.5