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