Skip to content

Commit a9f9b78

Browse files
authored
Merge pull request #36 from weizhongchun/main
Fix delta scores sorted
2 parents 5d1acb4 + c309d3d commit a9f9b78

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

onsite/lucxor/flr.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ def add_psm(self, delta_score: float, is_decoy: bool) -> None:
8585

8686
def prep_arrays(self) -> None:
8787
"""Prepare arrays"""
88-
self.pos = np.array(self.real_psms)
89-
self.neg = np.array(self.decoy_psms)
88+
self.pos = np.array(sorted(self.real_psms)) # Sort delta_scores for minorization
89+
self.neg = np.array(sorted(self.decoy_psms)) # Sort delta_scores for minorization
9090
self.n_real = len(self.pos)
9191
self.n_decoy = len(self.neg)
9292

@@ -466,12 +466,24 @@ def perform_minorization(self) -> None:
466466
if n == 0:
467467
continue
468468

469-
# Fill data (vectorized)
469+
# Fill data and sort by delta_score (critical for minorization algorithm)
470470
pairs = [minor_map[i] for i in range(n)]
471-
x = np.array([p[0] for p in pairs]) # delta scores
472-
f = np.array([p[1] for p in pairs]) # FDR values
471+
472+
# Sort pairs by delta_score (first element)
473+
pairs_sorted = sorted(pairs, key=lambda p: p[0])
474+
475+
x = np.array([p[0] for p in pairs_sorted]) # delta scores (now sorted)
476+
f = np.array([p[1] for p in pairs_sorted]) # FDR values
473477
is_minor_point = np.zeros(n, dtype=bool)
474478

479+
# Validate that data is sorted (should always be true now)
480+
is_sorted = all(x[i] <= x[i+1] for i in range(len(x)-1))
481+
if not is_sorted:
482+
logger.info(f"[ERROR] {iter_type} FDR data is NOT sorted! Minorization will fail!")
483+
logger.info(f"First 10 delta scores: {x[:10]}")
484+
else:
485+
logger.info(f"[OK] {iter_type} FDR data is properly sorted")
486+
475487
# Find minimum value and its index (vectorized)
476488
min_idx = np.argmin(f)
477489
min_val = f[min_idx]

0 commit comments

Comments
 (0)