Files

18 lines
1.2 KiB
Python

#!/usr/bin/env python3
import argparse
from pathlib import Path
import pandas as pd
COLS=["query_id","subject_id","identity","alignment_length","mismatch","gapopen","qstart","qend","sstart","send","evalue","bitscore","query_length","subject_length"]
def main():
ap=argparse.ArgumentParser(); ap.add_argument("--input",required=True,type=Path); ap.add_argument("--output",required=True,type=Path); ap.add_argument("--max-evalue",type=float,default=1e-5); ap.add_argument("--min-query-coverage",type=float,default=.5); ap.add_argument("--min-subject-coverage",type=float,default=.3); ap.add_argument("--min-identity",type=float,default=25); args=ap.parse_args()
df=pd.read_csv(args.input,sep="\t",names=COLS)
df["query_coverage"]=df.alignment_length/df.query_length; df["subject_coverage"]=df.alignment_length/df.subject_length
df=df[(df.evalue<=args.max_evalue)&(df.query_coverage>=args.min_query_coverage)&(df.subject_coverage>=args.min_subject_coverage)&(df.identity>=args.min_identity)]
args.output.parent.mkdir(parents=True,exist_ok=True); df[COLS].sort_values(["subject_id","evalue","bitscore"],ascending=[True,True,False]).to_csv(args.output,sep="\t",index=False,header=False)
if __name__ == "__main__": main()