Apicomplexan Evolution

api evo
independent research
honors thesis
charles center grant
Procedure and notes for my indepedent research project over the summer through the W&M Charles Center Grant and during senior year for my honors thesis!
Author

Shama Hasan

Published

July 14, 2026

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