Apicomplexan Evolution
Project Overview
Apicomplexa are a large phylum made up entirely of parasitic protists. Their diverse genomic characteristics and adaptability allow them to infect a wide range of hosts and cause serious diseases in humans and animals, including malaria and toxoplasmosis. An ongoing challenge in public health is understanding how parasites adapt to infect new host species, a process that drives the emergence of new diseases as vector distributions spread. Despite their prevalence, apicomplexa as a whole are understudied in the scientific community, resulting in knowledge gaps in the evolutionary history and invasion strategies of many free-living species. This project will examine the evolution of host range, or the number of host species infected by a pathogen, in apicomplexan parasites. Comparative genomic analysis will be used to determine association between host shifts and patterns of genomic change across evolutionary lineages. Ultimately, this research aims to improve understanding of how parasitic traits emerge and may help inform efforts to anticipate future disease emergence.
1. Data Acquisition
Gather genomic data in BAT from NCBI GenBank
- Filter by referenced and annotated genomes to narrow taxa
Compile metadata
- Include info about hosts, vectors, genome size, etc. to infer relationships later
Downoad genome assemblies
- Taxon and accession number columns
- CDS fies in FASTA format
import os
import pandas as pd
os.chdir("/Users/shamahasan/Desktop/Apicomplexa")
print("Files will download to:", os.getcwd())
api = pd.read_csv("apicomplexa.tsv", sep="\t")
api = api[["Taxon", "Accession_Number"]]
for taxon, accession in zip(api["Taxon"], api["Accession_Number"]):
taxon = taxon.replace(" ", "_")
cmd = f"datasets download genome accession {accession} --include cds --filename {taxon}.WGS.CDS.zip"
#print(cmd)
os.system(cmd)Upload to HPC
*See entry: “HPC Upload” for more details
2. Data Prep
Select longest isoforms
- Act as a single representative sequence for each gene per taxon
Transate ORFs
- Translate open reading frames into proteins
- Make sure each sequence begins and ends with a start and stop codon, respectively
import glob, sys
from pathlib import Path
from Bio import SeqIO
def check_complete_seq(seq):
prot = None
stop_codons = ["TGA", "TAA", "TAG"]
if len(seq) % 3 == 0 and seq[:3] == "ATG" and seq[-3:] in stop_codons:
temp_prot = seq[:-3].translate()
if "*" not in temp_prot:
prot = temp_prot
return prot
def translate_cds(fasta_file:str, output_fasta:str) -> None:
translated_seqs = []
for seq_rec in SeqIO.parse(fasta_file, 'fasta'):
prot = check_complete_seq(seq_rec.seq.upper())
if prot:
seq_rec.seq = prot
translated_seqs.append(seq_rec)
SeqIO.write(translated_seqs, output_fasta, 'fasta')
def translate_all_fastas(fasta_folder:str) -> str:
fasta_files = glob.glob(f'{fasta_folder}/*.fasta')
out_folder = f'{fasta_folder.rstrip("/")}_Translated/'
Path(out_folder).mkdir(exist_ok=True)
for fasta in fasta_files:
output_fasta = f'{out_folder}{fasta.rpartition("/")[-1].rpartition(".")[0]}.Translated.fasta'
translate_cds(fasta, output_fasta)
return out_folder
if __name__ == '__main__':
try:
fasta_folder = sys.argv[1]
except:
print('\nUsage:\n\n python3 check_seqs.py [FASTA-FOLDER]\n\n')
sys.exit(1)
translate_all_fastas(fasta_folder)3. Find Orthogroups
Run OrthoFinder
- Comparative genomic analysis to find orthologs and orthogroups
- Single copy ortholog (SCO) count determines number of genes shared across taxa
- SCO count requires orthologs to be present in 100% of the taxa
Data
Present your data here. You can include:
- Tables
- Figures
- Code outputs
Example Code Block
Observations
Record your observations.
Analysis
Describe any analysis performed.
Discussion
Discuss findings, issues encountered, and next steps.
Next Steps
References
List any references or related notebook entries.
Notes
- Additional notes
- Troubleshooting
- Ideas for future work