Spaces:
Build error
Build error
| import pandas as pd | |
| import numpy as np | |
| from tranception.utils import scoring_utils | |
| def DMS_file_cleanup(DMS_filename, target_seq, start_idx=1, end_idx=None, DMS_mutant_column='mutant', DMS_phenotype_name='score', DMS_directionality=1, AA_vocab = "ACDEFGHIKLMNPQRSTVWY"): | |
| """ | |
| Function to process the raw substitution DMS assay data (eg., removing invalid mutants, aggregate silent mutations). | |
| """ | |
| DMS_data = pd.read_csv(DMS_filename, low_memory=False) | |
| end_idx = start_idx + len(target_seq) - 1 if end_idx is None else end_idx | |
| DMS_data['mutant'] = DMS_data[DMS_mutant_column] | |
| DMS_data=DMS_data[DMS_data['mutant'].notnull()].copy() | |
| DMS_data=DMS_data[DMS_data['mutant'].apply(lambda x: all([len(y)>=3 for y in x.split(":")]))].copy() #Mutant triplets should have at least 3 or more characters | |
| DMS_data=DMS_data[DMS_data['mutant'].apply(lambda x: all([(y[0] in AA_vocab) and (y[1:-1].isnumeric()) and (y[-1] in AA_vocab) for y in x.split(":")]))].copy() | |
| DMS_data=DMS_data[DMS_data['mutant'].apply(lambda x: all([int(y[1:-1])-start_idx >=0 and int(y[1:-1]) <= end_idx for y in x.split(":")]))].copy() | |
| DMS_data=DMS_data[DMS_data['mutant'].apply(lambda x: all([y[0]==target_seq[int(y[1:-1])-start_idx] for y in x.split(":")]))].copy() | |
| DMS_data[DMS_phenotype_name]=pd.to_numeric(DMS_data[DMS_phenotype_name],errors='coerce') | |
| DMS_data=DMS_data[np.isfinite(DMS_data[DMS_phenotype_name])] | |
| DMS_data.dropna(subset = [DMS_phenotype_name], inplace=True) | |
| DMS_data['DMS_score'] = DMS_data[DMS_phenotype_name] * DMS_directionality | |
| DMS_data=DMS_data[['mutant','DMS_score']] | |
| DMS_data=DMS_data.groupby('mutant').mean().reset_index() | |
| DMS_data['mutated_sequence'] = DMS_data['mutant'].apply(lambda x: scoring_utils.get_mutated_sequence(target_seq, x)) | |
| DMS_data=DMS_data[['mutant','mutated_sequence','DMS_score']] | |
| return DMS_data | |