@@ -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