From 3f55f499c7ee5b90ec3b3b974ec23cc3e21fb0db Mon Sep 17 00:00:00 2001 From: Joseph Paggi Date: Sun, 27 Jul 2025 21:27:58 -0400 Subject: [PATCH] Avoid double counting self-interactions with --ignore-diags 0 --- src/cooler/_balance.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cooler/_balance.py b/src/cooler/_balance.py index 0dc69c9..9197014 100644 --- a/src/cooler/_balance.py +++ b/src/cooler/_balance.py @@ -63,7 +63,8 @@ def _timesouterproduct(vec, chunk, data): def _marginalize(chunk, data): n = len(chunk["bins"]["chrom"]) pixels = chunk["pixels"] - marg = np.bincount(pixels["bin1_id"], weights=data, minlength=n) + np.bincount( + not_self = pixels["bin1_id"] != pixels["bin2_id"] # Only include self-interactions once. + marg = np.bincount(pixels["bin1_id"] * not_self, weights=data, minlength=n) + np.bincount( pixels["bin2_id"], weights=data, minlength=n ) return marg