##### READ BELOW FIRST ##### # Requirements: # PyMOL, Argparse # Running: pymol -- --visual ############################ import argparse import pymol from pymol import _cmd RNA3 = { "AAA": "Lys", "AAC": "Asn", "AAG": "Lys", "AAU": "Asn", "ACA": "Thr", "ACC": "Thr", "ACG": "Thr", "ACU": "Thr", "AGA": "Arg", "AGC": "Ser", "AGG": "Arg", "AGU": "Ser", "AUA": "Lle", "AUC": "Lle", "AUG": "Mel", "AUU": "Lle", "CAA": "Gln", "CAC": "His", "CAG": "Gln", "CAU": "His", "CCA": "Pro", "CCC": "Pro", "CCG": "Pro", "CCU": "Pro", "CGA": "Arg", "CGC": "Arg", "CGG": "Arg", "CGU": "Arg", "CUA": "Leu", "CUC": "Leu", "CUG": "Leu", "CUU": "Leu", "GAA": "Glu", "GAC": "Asp", "GAG": "Glu", "GAU": "Asp", "GCA": "Ala", "GCC": "Ala", "GCG": "Ala", "GCU": "Ala", "GGA": "Gly", "GGC": "Gly", "GGG": "Gly", "GGU": "Gly", "GUA": "Val", "GUC": "Val", "GUG": "Val", "GUU": "Val", "UAA": "Stop", "UAC": "Tyr", "UAG": "Stop", "UAU": "Tyr", "UCA": "Ser", "UCC": "Ser", "UCG": "Ser", "UCU": "Ser", "UGA": "Stop", "UGC": "Cys", "UGG": "Trp", "UGU": "Cys", "UUA": "Leu", "UUC": "Phe", "UUG": "Leu", "UUU": "Phe", } AMINOACID_CHEM = { "Ala": "CH3-CH(NH2)-COOH", "Arg": "HN=C(NH2)-NH-(CH2)3-CH(NH2)-COOH", "Asn": "H2N-CO-CH2-CH(NH2)-COOH", "Asp": "HOOC-CH2-CH(NH2)-COOH", "Cys": "HS-CH2-CH(NH2)-COOH", "Gln": "H2N-CO-(CH2)2-CH(NH2)-COOH", "Glu": "HOOC-(CH2)2-CH(NH2)-COOH", "Gly": "NH2-CH2-COOH", "His": "NH-CH=N-CH=C-CH2-CH(NH2)-COOH", "Lle": "CH3-CH2-CH(CH3)-CH(NH2)-COOH", "Leu": "(CH3)2-CH-CH2-CH(NH2)-COOH", "Lys": "H2N-(CH2)4-CH(NH2)-COOH", "Met": "CH3-S-(CH2)2-CH(NH2)-COOH", "Phe": "Ph-CH2-CH(NH2)-COOH", "Pro": "NH-(CH2)3-CH-COOH", "Ser": "HO-CH2-CH(NH2)-COOH", "Thr": "CH3-CH(OH)-CH(NH2)-COOH", "Trp": "Ph-NH-CH=C-CH2-CH(NH2)-COOH", "Tyr": "HO-Ph-CH2-CH(NH2)-COOH", "Val": "(CH3)2-CH-CH(NH2)-COOH" } AMINOACID_PEPTIDE = { "Ala": "A", "Arg": "R", "Asn": "N", "Asp": "D", "Cys": "C", "Gln": "Q", "Glu": "E", "Gly": "G", "His": "H", "Lle": "I", "Leu": "L", "Lys": "K", "Met": "M", "Phe": "F", "Pro": "P", "Ser": "S", "Thr": "T", "Trp": "W", "Tyr": "Y", "Val": "V" } RNA_CONVERSION = { "A": "A", "C": "C", "G": "G", "T": "U" } def DNAtoRNA(DNA): RNA = "" for c in DNA: RNA += RNA_CONVERSION[c] return RNA def RNAtoAminoAcid(RNA): amino = "" i = 0; while (i <= len(RNA)-1): next3 = RNA[i:3+i]; if (len(next3) != 3): break; if (RNA3[next3] == "Stop"): break; amino += RNA3[next3]; i+=3; return amino; def AminoAcidtoChem(AMINO): chem = "" i = 0; while (i <= len(AMINO)-1): next3 = AMINO[i:3+i]; if (len(next3) != 3): break; if (AMINOACID_CHEM[next3] == "Stop"): break; chem += AMINOACID_CHEM[next3] + " + "; i+=3; return chem[:-3]; def AminoAcidtoPeptide(AMINO): peptide = "" i = 0; while (i <= len(AMINO)-1): next3 = AMINO[i:3+i]; if (len(next3) != 3): break; if (AMINOACID_PEPTIDE[next3] == "Stop"): break; peptide += AMINOACID_PEPTIDE[next3] i+=3; return peptide def ChemtoAminoAcid(CHEM): CHEM = CHEM.split(" + ") AMINO = "" for eq in CHEM: for amino in AMINOACID_CHEM: if (eq == AMINOACID_CHEM[amino]): AMINO += amino; return AMINO; def AminoAcidtoRNA(AMINO): RNA = "" i = 0; while (i <= len(AMINO)): for rnaset in RNA3: if AMINO[i:i+3] == RNA3[rnaset]: RNA += rnaset; break; i += 3; return RNA; def RNAtoDNA(RNA): DNA = "" for c in RNA: if (c == "U"): DNA += "T" else: DNA += c return DNA parser = argparse.ArgumentParser(description='Process DNA/RNA Structures') parser.add_argument('structure', help='DNA/RNA Structure (Example: TCAGTTCGAATC)') parser.add_argument('--rna', action='store_true', help='Use RNA as structure'); parser.add_argument('--chem', action='store_true', help='Generate chemical structure of protein produced by RNA/DNA') parser.add_argument('--chemtoamino', action='store_true', help='Convert CHEM to Amino acid') parser.add_argument('--aminotorna', action='store_true', help='Convert Amino acids to RNA') parser.add_argument('--rnatodna', action='store_true', help='Convert RNA to DNA') parser.add_argument('--peptide', action='store_true', help='Output Peptide form') parser.add_argument('--visual', action='store_true', help='Visualize the protein') args = parser.parse_args() if (args.rna and not args.chemtoamino and not args.aminotorna and not args.rnatodna): try: if (args.chem): print(AminoAcidtoChem(RNAtoAminoAcid(args.structure))) elif (args.peptide): print(AminoAcidtoPeptide(RNAtoAminoAcid(args.structure))) elif (args.visual): for aa in AminoAcidtoPeptide(RNAtoAminoAcid(args.structure)): cmd._alt(string.lower(aa)) else: print(RNAtoAminoAcid(args.structure)) except Exception as e: print("Error: Invalid RNA Structure!") elif (not args.rna and not args.chemtoamino and not args.aminotorna and not args.rnatodna): try: if (args.chem): print(AminoAcidtoChem(RNAtoAminoAcid(DNAtoRNA(args.structure)))) elif (args.peptide): print(AminoAcidtoPeptide(RNAtoAminoAcid(DNAtoRNA(args.structure)))) elif (args.visual): for aa in AminoAcidtoPeptide(RNAtoAminoAcid(DNAtoRNA(args.structure))): cmd._alt(string.lower(aa)) else: print(RNAtoAminoAcid(DNAtoRNA(args.structure))) except Exception as e: print("Error: Invalid DNA Structure!") elif (args.chemtoamino): print(ChemtoAminoAcid(args.structure)) elif (args.aminotorna): print(AminoAcidtoRNA(args.structure)) elif (args.rnatodna): print(RNAtoDNA(args.structure))