Let's process the PAF output from miniprot to get some stats:
for i in *paf; do python ../paf-stats.py -i ${i} -o ${i/paf/tsv} ; doneLet's process the PAF output from miniprot to get some stats:
for i in *paf; do python ../paf-stats.py -i ${i} -o ${i/paf/tsv} ; done| import re | |
| import pandas as pd | |
| import argparse | |
| import json | |
| from collections import defaultdict | |
| import sys | |
| class MiniprotStats: | |
| def __init__(self, paf_file, translation_table): | |
| self.paf_file = paf_file | |
| self.translation_table, self.initiators = self.get_translation_table( | |
| translation_table | |
| ) | |
| self.stats = defaultdict(int) | |
| self.records = [] | |
| # From: https://github.com/linsalrob/genetic_codes/blob/main/pygenetic_code/genetic_code.py | |
| def three_letters_to_one_letter(self): | |
| return { | |
| "Ala": "A", | |
| "Arg": "R", | |
| "Asn": "N", | |
| "Asp": "D", | |
| "Cys": "C", | |
| "Gln": "Q", | |
| "Glu": "E", | |
| "Gly": "G", | |
| "His": "H", | |
| "Ile": "I", | |
| "Leu": "L", | |
| "Lys": "K", | |
| "Met": "M", | |
| "Phe": "F", | |
| "Pro": "P", | |
| "Ser": "S", | |
| "Thr": "T", | |
| "Trp": "W", | |
| "Tyr": "Y", | |
| "Val": "V", | |
| "Ter": "*", | |
| } | |
| def get_translation_table(self, table_id): | |
| genetic_codes = json.loads( | |
| """ | |
| { | |
| "1": | |
| { | |
| "initiators": ["TTG", "CTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "2": | |
| { | |
| "initiators": ["GTG", "ATC", "ATA", "ATT", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Met", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ter", "AGT": "Ser", "AGG": "Ter", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "3": | |
| { | |
| "initiators": ["ATA", "ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Met", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Thr", "CTT": "Thr", "CTG": "Thr", "CTC": "Thr", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "4": | |
| { | |
| "initiators": ["GTG", "TTA", "ATC", "ATA", "ATT", "TTG", "CTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "5": | |
| { | |
| "initiators": ["GTG", "ATC", "ATA", "ATT", "TTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Met", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ser", "AGT": "Ser", "AGG": "Ser", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "6": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Gln", "TAT": "Tyr", "TAG": "Gln", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "9": | |
| { | |
| "initiators": ["ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Asn", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ser", "AGT": "Ser", "AGG": "Ser", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "10": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Cys", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "11": | |
| { | |
| "initiators": ["GTG", "ATC", "ATA", "ATT", "TTG", "CTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "12": | |
| { | |
| "initiators": ["CTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Ser", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "13": | |
| { | |
| "initiators": ["TTG", "ATA", "ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Met", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Gly", "AGT": "Ser", "AGG": "Gly", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "14": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Asn", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ser", "AGT": "Ser", "AGG": "Ser", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Tyr", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "15": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Gln", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "16": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Leu", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "21": | |
| { | |
| "initiators": ["ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Asn", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Met", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ser", "AGT": "Ser", "AGG": "Ser", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "22": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Leu", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ter", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "23": | |
| { | |
| "initiators": ["ATG", "ATT", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Ter", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "24": | |
| { | |
| "initiators": ["TTG", "CTG", "ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Ser", "AGT": "Ser", "AGG": "Lys", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "25": | |
| { | |
| "initiators": ["TTG", "ATG", "GTG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Gly", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "26": | |
| { | |
| "initiators": ["CTG", "ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Ter", "TAT": "Tyr", "TAG": "Ter", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Ala", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "27": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Gln", "TAT": "Tyr", "TAG": "Gln", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "28": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Gln", "TAT": "Tyr", "TAG": "Gln", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "29": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Tyr", "TAT": "Tyr", "TAG": "Tyr", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "30": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Glu", "TAT": "Tyr", "TAG": "Glu", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Ter", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| }, | |
| "31": | |
| { | |
| "initiators": ["ATG"], | |
| "codons": | |
| { | |
| "AAA": "Lys", "AAT": "Asn", "AAG": "Lys", "AAC": "Asn", | |
| "ATA": "Ile", "ATT": "Ile", "ATG": "Met", "ATC": "Ile", | |
| "AGA": "Arg", "AGT": "Ser", "AGG": "Arg", "AGC": "Ser", | |
| "ACA": "Thr", "ACT": "Thr", "ACG": "Thr", "ACC": "Thr", | |
| "TAA": "Glu", "TAT": "Tyr", "TAG": "Glu", "TAC": "Tyr", | |
| "TTA": "Leu", "TTT": "Phe", "TTG": "Leu", "TTC": "Phe", | |
| "TGA": "Trp", "TGT": "Cys", "TGG": "Trp", "TGC": "Cys", | |
| "TCA": "Ser", "TCT": "Ser", "TCG": "Ser", "TCC": "Ser", | |
| "GAA": "Glu", "GAT": "Asp", "GAG": "Glu", "GAC": "Asp", | |
| "GTA": "Val", "GTT": "Val", "GTG": "Val", "GTC": "Val", | |
| "GGA": "Gly", "GGT": "Gly", "GGG": "Gly", "GGC": "Gly", | |
| "GCA": "Ala", "GCT": "Ala", "GCG": "Ala", "GCC": "Ala", | |
| "CAA": "Gln", "CAT": "His", "CAG": "Gln", "CAC": "His", | |
| "CTA": "Leu", "CTT": "Leu", "CTG": "Leu", "CTC": "Leu", | |
| "CGA": "Arg", "CGT": "Arg", "CGG": "Arg", "CGC": "Arg", | |
| "CCA": "Pro", "CCT": "Pro", "CCG": "Pro", "CCC": "Pro" | |
| } | |
| } | |
| } | |
| """ | |
| ) | |
| if str(table_id) not in genetic_codes.keys(): | |
| print(f"ERROR: Genetic code table {table_id} not found") | |
| sys.exit(1) | |
| table = genetic_codes[str(table_id)] | |
| initiators = table["initiators"] | |
| # convert initiators to lowercase | |
| initiators = [initiator.lower() for initiator in initiators] | |
| codons = table["codons"] | |
| # convert codons to lowercase | |
| codons = {codon.lower(): aa for codon, aa in codons.items()} | |
| # convert aa to one-letter code | |
| three2one = self.three_letters_to_one_letter() | |
| codons = {codon: three2one[aa] for codon, aa in codons.items()} | |
| return codons, initiators | |
| def parse_paf(self): | |
| with open(self.paf_file, "r") as file: | |
| for line in file: | |
| fields = line.strip().split("\t") | |
| if len(fields) < 12: | |
| continue # Ignore incomplete lines | |
| self.process_fields(fields) | |
| def process_fields(self, fields): | |
| record = { | |
| "query_name": fields[0], | |
| "query_length": int(fields[1]), | |
| "query_start": int(fields[2]), | |
| "query_end": int(fields[3]), | |
| "strand": fields[4], | |
| "target_name": fields[5], | |
| "target_length": int(fields[6]), | |
| "target_start": int(fields[7]), | |
| "target_end": int(fields[8]), | |
| "residue_matches": int(fields[9]), | |
| "alignment_block_length": int(fields[10]), | |
| "mapping_quality": int(fields[11]), | |
| } | |
| tags = fields[12:] | |
| frameshift_deletion_events = 0 | |
| frameshift_match_events = 0 | |
| frameshift_deletion_nucleotides = 0 | |
| frameshift_match_nucleotides = 0 | |
| frameshift_match_amino_acids = 0 | |
| inframe_stop_count = 0 | |
| synonymous = 0 | |
| non_synonymous = 0 | |
| insertion_count = 0 | |
| deletion_count = 0 | |
| substitution_count = 0 | |
| other_event_count = 0 | |
| truncation = False | |
| for tag in tags: | |
| if tag.startswith("cg:Z:"): | |
| events, del_nt, match_nt, match_aa = self.count_frameshifts(tag[5:]) | |
| frameshift_deletion_events += events["deletion"] | |
| frameshift_match_events += events["match"] | |
| frameshift_deletion_nucleotides += del_nt | |
| frameshift_match_nucleotides += match_nt | |
| frameshift_match_amino_acids += match_aa | |
| elif tag.startswith("cs:Z:"): | |
| syn, non_syn, ins, del_, sub, other, is_trunc, stops = ( | |
| self.parse_cs_tag(tag[5:]) | |
| ) | |
| synonymous += syn | |
| non_synonymous += non_syn | |
| insertion_count += ins | |
| deletion_count += del_ | |
| substitution_count += sub | |
| other_event_count += other | |
| inframe_stop_count += stops | |
| # Check for truncation: presence of frameshifts or in-frame stop codons | |
| if inframe_stop_count > 0: | |
| truncation = True | |
| record.update( | |
| { | |
| "frameshift_deletion_events": frameshift_deletion_events, | |
| "frameshift_match_events": frameshift_match_events, | |
| "frameshift_deletion_nucleotides": frameshift_deletion_nucleotides, | |
| "frameshift_match_nucleotides": frameshift_match_nucleotides, | |
| "frameshift_match_amino_acids": frameshift_match_amino_acids, | |
| "inframe_stops": inframe_stop_count, | |
| "synonymous": synonymous, | |
| "non_synonymous": non_synonymous, | |
| "insertions": insertion_count, | |
| "deletions": deletion_count, | |
| "substitutions": substitution_count, | |
| "other_events": other_event_count, | |
| "truncated": truncation, | |
| "query_coverage": (record["query_end"] - record["query_start"]) | |
| / record["query_length"], | |
| "target_coverage": (record["target_end"] - record["target_start"]) | |
| / record["target_length"], | |
| "identity_percentage": record["residue_matches"] | |
| / record["alignment_block_length"], | |
| } | |
| ) | |
| self.records.append(record) | |
| def count_frameshifts(self, cigar): | |
| events = {"deletion": 0, "match": 0} | |
| deletion_nucleotides = 0 | |
| match_nucleotides = 0 | |
| match_amino_acids = 0 | |
| for match in re.finditer(r"([0-9]+)([FfGg])", cigar): | |
| num = int(match.group(1)) | |
| if match.group(2) in "Ff": | |
| events["deletion"] += 1 | |
| deletion_nucleotides += num | |
| elif match.group(2) in "Gg": | |
| events["match"] += 1 | |
| match_nucleotides += num | |
| match_amino_acids += 1 | |
| return events, deletion_nucleotides, match_nucleotides, match_amino_acids | |
| def parse_cs_tag(self, cs_tag): | |
| synonymous = 0 | |
| non_synonymous = 0 | |
| insertion_count = 0 | |
| deletion_count = 0 | |
| substitution_count = 0 | |
| other_event_count = 0 | |
| inframe_stop_count = 0 | |
| truncation = False | |
| pattern = re.compile( | |
| r"(:[0-9]+|\*[acgtn]+\S|\+[A-Z]+|\-[acgtn]+|~[acgtn]{2}[0-9]+[acgtn]{2})" | |
| ) | |
| cs_parts = pattern.findall(cs_tag) | |
| for part in cs_parts: | |
| if part.startswith(":"): | |
| continue | |
| elif part.startswith("*"): | |
| if len(part[1:]) >= 4: # e.g., '*aaax' | |
| nt = part[1:4] | |
| aa_ref = part[4] | |
| syn = self.is_synonymous(nt, aa_ref) | |
| if syn: | |
| synonymous += 1 | |
| else: | |
| non_synonymous += 1 | |
| substitution_count += 1 | |
| aa_translated = self.translate_codon(nt) | |
| if aa_translated == "Stop": # Stop codon | |
| inframe_stop_count += 1 | |
| elif part.startswith("+"): | |
| insertion_count += len(part[1:]) | |
| elif part.startswith("-"): | |
| deletion_count += len(part[1:]) | |
| elif part.startswith("~"): | |
| other_event_count += 1 | |
| return ( | |
| synonymous, | |
| non_synonymous, | |
| insertion_count, | |
| deletion_count, | |
| substitution_count, | |
| other_event_count, | |
| truncation, | |
| inframe_stop_count, | |
| ) | |
| def is_synonymous(self, nt_seq, aa_ref): | |
| nt_codon = nt_seq.lower() | |
| aa_residue = self.translation_table.get(nt_codon, "*") | |
| return aa_residue == aa_ref | |
| def translate_codon(self, nt_codon): | |
| aa = self.translation_table.get(nt_codon.lower(), "*") | |
| if aa == "*": | |
| return "Stop" | |
| return aa | |
| def to_dataframe(self): | |
| return pd.DataFrame(self.records) | |
| def save_stats(self, output_file): | |
| df = self.to_dataframe() | |
| df.to_csv(output_file, index=False, sep="\t") | |
| def main(input_file, output_file, translation_table): | |
| miniprot_stats = MiniprotStats(input_file, translation_table) | |
| miniprot_stats.parse_paf() | |
| miniprot_stats.save_stats(output_file) | |
| print(f"Statistics saved to {output_file}") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser( | |
| description="Summarize statistics from a PAF file." | |
| ) | |
| parser.add_argument("-i", "--input", required=True, help="Input PAF file") | |
| parser.add_argument("-o", "--output", required=True, help="Output CSV file") | |
| parser.add_argument( | |
| "-t", | |
| "--translation_table", | |
| type=int, | |
| default=1, | |
| help="NCBI translation table ID", | |
| ) | |
| args = parser.parse_args() | |
| main(args.input, args.output, args.translation_table) |