Skip to content

Commit d85e37b

Browse files
committed
change protein group model
1 parent 029b410 commit d85e37b

2 files changed

Lines changed: 8 additions & 21 deletions

File tree

tests/test_validations.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,8 @@ def test_protein_td_inval_merge():
137137
protein_score_p2=pl.lit(0),
138138
)
139139
res = _prot_fdr(df, agg, 0.1, 1)
140-
assert res.filter(pl.col('protein_fdr_group') == 'supported_between').height > 0
140+
assert res.filter(pl.col('protein_fdr_group') == 'self_linear_supported').height > 0
141141
assert res.filter(pl.col('protein_fdr_group') == 'unsupported_between').height == 0
142-
assert res.filter(pl.col('protein_fdr_group') == 'self_or_linear').height == 0
143-
assert res.filter(pl.col('protein_fdr_group') == 'invalid_merged').height > 0
144142

145143
def test_protein_td_only_supp():
146144
"""
@@ -186,10 +184,8 @@ def test_protein_td_only_supp():
186184
protein_score_p2=pl.lit(0),
187185
)
188186
res = _prot_fdr(df, agg, 0.1, 1)
189-
assert res.filter(pl.col('protein_fdr_group') == 'supported_between').height > 0
187+
assert res.filter(pl.col('protein_fdr_group') == 'self_linear_supported').height > 0
190188
assert res.filter(pl.col('protein_fdr_group') == 'unsupported_between').height == 0
191-
assert res.filter(pl.col('protein_fdr_group') == 'self_or_linear').height == 0
192-
assert res.filter(pl.col('protein_fdr_group') == 'invalid_merged').height == 0
193189

194190
def test_td_dd_ratio():
195191
warnings.simplefilter("always")

xifdr/fdr.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,7 @@ def _prot_fdr(df_pep:pl.DataFrame,
304304
protein_fdr_group=(
305305
pl.when(pl.col('between') & pl.col('no_self') & pl.col('no_linear'))
306306
.then(pl.lit('unsupported_between'))
307-
.when(pl.col('between'))
308-
.then(pl.lit('supported_between'))
309-
.otherwise(pl.lit('self_or_linear'))
307+
.otherwise(pl.lit('self_linear_supported'))
310308
)
311309
)
312310
df_prot = df_prot.with_columns(
@@ -319,26 +317,19 @@ def _prot_fdr(df_pep:pl.DataFrame,
319317
)
320318
df_prot = df_prot.filter(pl.col('prot_fdr').clip(0.0, 1.0) <= prot_fdr)
321319
# Check whether there are at least enough TT to have approx. `min_td` TD matches under the requested FDR level.
322-
fdr_groups = ['unsupported_between', 'supported_between', 'self_or_linear']
320+
fdr_groups = ['unsupported_between', 'self_linear_supported']
323321
valid_groups = []
324322
invalid_groups = []
323+
325324
for g in fdr_groups:
326325
df_g = df_prot.filter(pl.col('protein_fdr_group') == g)
327326
if len(df_g.filter(pl.col('TT')))*prot_fdr >= td_prot_prob:
328327
valid_groups.append(df_g)
329328
else:
329+
warnings.warn(f'Insufficient TT for protein FDR group {g}.')
330330
invalid_groups.append(df_g)
331-
if len(invalid_groups) > 1:
332-
invalid_df = pl.concat(invalid_groups).with_columns(
333-
protein_fdr_group=pl.lit('invalid_merged')
334-
)
335-
invalid_df = invalid_df.filter(pl.col('prot_fdr').clip(0.0, 1.0) <= prot_fdr)
336-
if len(invalid_df.filter(pl.col('TT')))*prot_fdr >= td_prot_prob:
337-
valid_groups.append(invalid_df)
338-
if len(valid_groups) == 0:
339-
warnings.warn('Insufficient TT for protein FDR.')
340-
return invalid_groups[0][:0] # Return empty DF
341-
df_prot = pl.concat(valid_groups)
331+
# Concat valid groups with dummy DF for schema information when no groups are valid
332+
df_prot = pl.concat([df_prot.head(0)] + valid_groups)
342333
return df_prot
343334

344335

0 commit comments

Comments
 (0)