Fill-Mask
Transformers
Safetensors
esm
Sophia Vincoff
fixed READMEs and added IDR Prediction benchmark
e048d40
from fuson_plm.utils.logging import open_logfile, log_update
from fuson_plm.benchmarking.idr_prediction.config import CLUSTER
from fuson_plm.utils.clustering import ensure_mmseqs_in_path, process_fasta, analyze_clustering_result, make_fasta, run_mmseqs_clustering, cluster_summary
import os
import pandas as pd
def main_old():
# Read all the input args
LOG_PATH = "clustering_log.txt"
INPUT_PATH = CLUSTER.INPUT_PATH
MIN_SEQ_ID = CLUSTER.MIN_SEQ_ID
C = CLUSTER.C
COV_MODE = CLUSTER.COV_MODE
CLUSTER_MODE = CLUSTER.CLUSTER_MODE
PATH_TO_MMSEQS = CLUSTER.PATH_TO_MMSEQS
with open_logfile(LOG_PATH):
log_update("Input params from config.py:")
CLUSTER.print_config(indent='\t')
# Make a subfolder for clustering results, and direct MMSeqs2 outputs here
os.makedirs("clustering",exist_ok=True)
output_dir = "clustering/raw_output"
# Make fasta of input file
sequences = pd.read_csv(INPUT_PATH)
# We only want to cluster the ones in the Train split from Albatross
sequences = sequences.loc[sequences['Split']=='Train'].reset_index(drop=True)
log_update(f"\nPreparing input data (albatross TRAIN only)...\n\tdataset size: {len(sequences)} sequences")
max_seqlen = max(sequences['Sequence'].str.len().tolist())
log_update(f"\tLongest sequence in dataset: {max_seqlen} AAs")
# Unfortunately, these IDs are NOT unique. Need to add tags to them
sequences['Unique_ID'] = [f"s{i+1}" for i in range(len(sequences))]
sequences['Unique_ID'] = sequences["IDs"].apply(lambda x: "_".join(x.split(','))) + "_" + sequences['Unique_ID']
log_update("Not all IDs from the database are unique. Created unique IDs by tagging on sequence #s")
log_update(f"\tExample: {sequences.iloc[0]['Unique_ID']}")
sequences = dict(zip(sequences['Unique_ID'],sequences['Sequence']))
fasta_path = make_fasta(sequences, "clustering/input.fasta")
log_update(f"\tMade fasta of input sequences, saved at {fasta_path}")
run_mmseqs_clustering(fasta_path, output_dir, min_seq_id=MIN_SEQ_ID, c=C, cov_mode=COV_MODE, cluster_mode=CLUSTER_MODE, path_to_mmseqs=PATH_TO_MMSEQS)
# Brief read to preview results
clusters = analyze_clustering_result('clustering/input.fasta', 'clustering/raw_output/mmseqs_cluster.tsv')
# Save clusters
clusters.to_csv('clustering/mmseqs_full_results.csv',index=False)
log_update("Processed and combined mmseqs output. Wrote comprehensive results to clustering/mmseqs_full_results.csv")
cluster_summary(clusters)
def main():
# Read all the input args
LOG_PATH = "clustering_log.txt"
INPUT_PATH = CLUSTER.INPUT_PATH
MIN_SEQ_ID = CLUSTER.MIN_SEQ_ID
C = CLUSTER.C
COV_MODE = CLUSTER.COV_MODE
CLUSTER_MODE = CLUSTER.CLUSTER_MODE
PATH_TO_MMSEQS = CLUSTER.PATH_TO_MMSEQS
with open_logfile(LOG_PATH):
log_update("Input params from config.py:")
CLUSTER.print_config(indent='\t')
# Make a subfolder for clustering results, and direct MMSeqs2 outputs here
os.makedirs("clustering",exist_ok=True)
output_dir = "clustering/raw_output"
# Make fasta of input file
sequences = pd.read_csv(INPUT_PATH)
log_update(f"\nPreparing input data (albatross train AND test sequences)...\n\tdataset size: {len(sequences)} sequences")
max_seqlen = max(sequences['Sequence'].str.len().tolist())
log_update(f"\tLongest sequence in dataset: {max_seqlen} AAs")
# Unfortunately, these IDs are NOT unique. Need to add tags to them
sequences['Unique_ID'] = [f"s{i+1}" for i in range(len(sequences))]
sequences['Unique_ID'] = sequences["IDs"].apply(lambda x: "_".join(x.split(','))) + "_" + sequences['Unique_ID']
log_update("Not all IDs from the database are unique. Created unique IDs by tagging on sequence #s")
log_update(f"\tExample: {sequences.iloc[0]['Unique_ID']}")
sequences = dict(zip(sequences['Unique_ID'],sequences['Sequence']))
fasta_path = make_fasta(sequences, "clustering/input.fasta")
log_update(f"\tMade fasta of input sequences, saved at {fasta_path}")
run_mmseqs_clustering(fasta_path, output_dir, min_seq_id=MIN_SEQ_ID, c=C, cov_mode=COV_MODE, cluster_mode=CLUSTER_MODE, path_to_mmseqs=PATH_TO_MMSEQS)
# Brief read to preview results
clusters = analyze_clustering_result('clustering/input.fasta', 'clustering/raw_output/mmseqs_cluster.tsv')
# Save clusters
clusters.to_csv('clustering/mmseqs_full_results.csv',index=False)
log_update("Processed and combined mmseqs output. Wrote comprehensive results to clustering/mmseqs_full_results.csv")
cluster_summary(clusters)
if __name__ == "__main__":
main()