Source code for mutcleaner.cleaners.rbd_custom_cleaner
from __future__ import annotations
from typing import TYPE_CHECKING
import pandas as pd
from ..core.pipeline import pipeline_step
if TYPE_CHECKING:
from typing import Dict, List, Optional
__all__ = [
"standardize_rbd_target_names",
"mark_wild_type_in_mut_info",
"add_reference_sequences_by_target",
]
def __dir__() -> List[str]:
return __all__
[docs]
@pipeline_step
def standardize_rbd_target_names(
dataset: pd.DataFrame,
target_name_aliases: Dict[str, str],
name_column: str = "name",
) -> pd.DataFrame:
"""Canonicalize RBD target/reference names.
Parameters
----------
dataset : pd.DataFrame
Input RBD dataset.
target_name_aliases : Dict[str, str]
Mapping from alias names to canonical target names.
name_column : str, default="name"
Column containing the target/reference name.
Returns
-------
pd.DataFrame
Dataset with canonicalized target/reference names.
"""
result = dataset.copy()
name_values = result[name_column].astype("string").str.strip()
result[name_column] = name_values.map(target_name_aliases).fillna(name_values)
return result.reset_index(drop=True)
[docs]
@pipeline_step
def mark_wild_type_in_mut_info(
dataset: pd.DataFrame,
mutation_column: str = "mut_info",
variant_class_column: str = "variant_class",
) -> pd.DataFrame:
"""Mark wild-type RBD records in the mutation column.
Parameters
----------
dataset : pd.DataFrame
Input RBD dataset.
mutation_column : str, default="mut_info"
Column containing mutation descriptions.
variant_class_column : str, default="variant_class"
Column indicating whether a row is wild type.
Returns
-------
pd.DataFrame
Dataset where wild-type rows have ``mutation_column`` set to ``"WT"``.
"""
result = dataset.copy()
variant_class = (
result[variant_class_column].astype("string").str.strip().str.lower()
)
wt_mask = variant_class.eq("wildtype").fillna(False)
result.loc[wt_mask, mutation_column] = "WT"
return result.reset_index(drop=True)
[docs]
@pipeline_step
def add_reference_sequences_by_target(
dataset: pd.DataFrame,
reference_sequences: Dict[str, str],
name_column: str = "name",
sequence_column: str = "sequence",
fallback_reference_sequence: Optional[str] = None,
) -> pd.DataFrame:
"""Attach reference sequences to standardized RBD rows.
Parameters
----------
dataset : pd.DataFrame
Input RBD dataset.
reference_sequences : Dict[str, str]
Mapping from target/reference names to RBD reference sequences.
name_column : str, default="name"
Column containing target/reference names.
sequence_column : str, default="sequence"
Output column for reference sequences.
fallback_reference_sequence : Optional[str], default=None
Sequence used when a target/reference name is missing from
``reference_sequences``.
Returns
-------
pd.DataFrame
Dataset with the reference sequence column attached.
"""
result = dataset.copy()
result[sequence_column] = result[name_column].map(reference_sequences)
if fallback_reference_sequence is not None:
result[sequence_column] = result[sequence_column].fillna(
str(fallback_reference_sequence).strip()
)
return result