<Elsa Muleya> — HTGAA Spring 2026

![cover image](ELSA MULEYA. jpg)

About me

I am a student at Copperbelt University in Zambia and a researcher in the How to Grow (Almost) Anything (HTGAA) 2026 course.

My Mission: Sustainable Agriculture Through Synthetic Biology My primary focus is the development of sustainable, bio-based solutions for agriculture. Currently, my research explores the use of cyanobiochar as a biofertilizer. By leveraging the nitrogen-fixing capabilities of cyanobacteria combined with the structural benefits of biochar, I aim to create a natural, high-efficiency alternative to chemical fertilizers that can revitalize soil health in my local community and beyond.

Strategic Goals & Personal Development To push the boundaries of my final year project, I am focusing on two key development pillars during HTGAA:

Space-Hardened Extremotolerant Stocks: I am interested in exploring how exposure to extreme environments—specifically launching samples into space—can help select for or engineer extremotolerant strains of cyanobacteria. These “space-hardened” stocks could offer superior resilience to the harsh environmental stressors found on Earth, such as drought and high salinity.

Environmental Biosensors: As a secondary goal, I am exploring synthetic biology to create low-cost biosensors that detect heavy metal contamination, ensuring the water used in sustainable irrigation is safe and clean.

Week 1 & 2 Homework

Contact info

Homework

Labs

Projects

Subsections of <Elsa Muleya> — HTGAA Spring 2026

Homework

Weekly homework submissions:

  • Week 1 HW: Principles and Practices

    Week 1: Project Concept — The “Copper-Sentinel” Initiative My Vision: Why This Matters Living in the Copperbelt, we see the good and bad aspects of mining every day—it drives our economy, but it also leaves a heavy footprint on our groundwater. I want to build Copper-Sentinel, a low-cost, decentralized tool for real-time water monitoring.

  • Week 2 HW: DNA READ WRITE AND EDIT

    Part 1: Benchling & In-silico Gel Art In-Silico Gel Art: Latent Figure Protocol Project Overview For this week’s assignment, I used Benchling to simulate restriction enzyme digests on the Lambda Phage genome (NC_001416). My goal was to move beyond simple data analysis and create “Gel Art” in the style of Paul Vanouse’s Latent Figure Protocol.

  • Week 3 HW: Lab Automation

    Week 3: Lab Automation & Opentrons Art Introduction This week’s focus is on the intersection of biology, robotics, and creative coding. As part of the HTGAA 2026* cohort based in Zambia, I am exploring how liquid-handling automation (specifically the Opentrons OT-2) can streamline laboratory workflows. Beyond the technical utility, this assignment challenged us to use the robot as a canvas, translating digital coordinates into physical biological art.

  • Week 4 HW: Protein Design I

    Homework: Protein Design I

Subsections of Homework

Week 1 HW: Principles and Practices

Week 1: Project Concept — The “Copper-Sentinel” Initiative

My Vision: Why This Matters

Living in the Copperbelt, we see the good and bad aspects of mining every day—it drives our economy, but it also leaves a heavy footprint on our groundwater. I want to build Copper-Sentinel, a low-cost, decentralized tool for real-time water monitoring.

Instead of traditional sensors that require expensive labs, I’m looking at using Cell-Free Synthetic Biology. Basically, we take the “machinery” out of a cell (the parts that can read DNA and make proteins) and freeze-dry them onto simple paper strips. When a person dips this strip into their well water, a specific DNA circuit I’ve designed reacts to copper ions. If the copper is above the safe limit, the strip turns a vivid purple. Because there are no living bacteria involved, there’s no risk of accidentally releasing a “GMO” into our local environment.


Ensuring an Ethical Future (Governance & Policy)

It isn’t enough to just hand out sensors; we have to think about the “what ifs.” My goal is to ensure this technology contributes to an ethical future where people are protected, not just informed.

Goal 1: Environmental Safety (Non-malfeasance)

  • Specific Sub-goal A: We must stick strictly to a Cell-Free platform. By ensuring the tool is non-living, we avoid the ethical nightmare of synthetic organisms self-replicating in our rivers.
  • Specific Sub-goal B: We need a clear “End-of-Life” protocol for these strips so they don’t become a new source of litter or chemical waste.

Goal 2: Data Equity & Autonomy

  • Specific Sub-goal A: I want the results to be owned by the community. If a village finds high copper, they should have the first right to that data before it goes to a corporation or a government agency.
  • Specific Sub-goal B: The science needs to be “legible”—meaning a person without a science degree should be able to look at the strip and understand exactly what it means for their health.

How We Make This Work (The Governance Matrix)

AspectAction 1: The Technical “Kill-Switch”Action 2: The Community “Water Union”Action 3: National Bio-Policy
PurposeUsing “Cell-Free” extracts instead of live bacteria to prevent any biological spread.Training local youth and leaders to act as “Sentinel Guardians” of their own data.Proposing that the Zambian government recognizes citizen-led bio-data as legal evidence.
Design (Actors)Synthetic biologists and molecular designers (like us in HTGAA).Local community leaders, NGOs, and residents.ZEMA (Zambia Environmental Management Agency) and the Ministry of Mines.
AssumptionsWe’re assuming these delicate biological reagents can survive the Zambian heat without a fridge.We’re assuming that mining firms won’t try to suppress the findings of local citizens.We assume the government is willing to prioritize public health over short-term mining profits.
Risks of Failure & SuccessFailure: The strip gives a “false safe” reading because it got too hot, and people drink toxic water.Failure: The community finds high copper but has no money or help to dig a new, cleaner well.Success Risk: We find so much pollution that land values drop, causing an economic crisis for the locals.

Scoring the Governance Actions

I’ve rated these from 1 (Most Effective/Easiest) to 3 (Hardest/Riskiest).

Does the option:Option 1 (Technical)Option 2 (Community)Option 3 (Legal)
Enhance Biosecurity122
Foster Lab & Field Safety112
Protect the Environment121
Minimize Costs & Burdens213
Feasibility?213
Promote Constructive Use112

My Recommendation & Trade-offs

If I have to choose, I’m prioritizing a combination of the Technical (Cell-Free) and Community-led models (Options 1 and 2).

The “Cell-Free” design is a non-negotiable for me because it’s the most responsible way to use biotech in the wild. But a tool is useless if the people don’t trust it. By building a “Water Union,” we empower people. The biggest trade-off here is the cost of cell-free reagents, which are currently more expensive than living bacteria. However, I believe the environmental safety is worth the extra few cents per test.

I’d present this plan to the Zambian Ministry of Green Economy and Environment. We need them to create a “Safe Sandbox” for us to test these sensors without being buried in the red tape that usually slows down biotech.


Personal Reflection

This week made me realize that biotech isn’t just about what happens in a test tube. I was struck by the idea of Dual-Use risks. A sensor that finds copper could, in the wrong hands, be used to sabotage water supplies or manipulate land prices.

Also, a new ethical concern for me was technological Paternalism the idea of an expert coming in with a fancy tool and leaving. To fix this, our governance needs to focus on remediation. It’s not enough to tell someone their water is poisoned; we must also provide the biological tools (like copper-absorbing biopolymers) to help them clean it.

Copper-Sentinel Model Sketch Copper-Sentinel Model Sketch

Week 2 Lecture Prep: Reading and Writing Life

Part 1: Professor Jacobson’s Questions

  1. Nature’s machinery for copying DNA is called polymerase. What is the error rate of polymerase? How does this compare to the length of the human genome? How does biology deal with that discrepancy?

The Discrepancy: The error rate of standard DNA polymerases is roughly 1 in 10,000 to 1 in 100,000 nucleotides. Since the human genome has approximately 3 billion base pairs, relying solely on basic polymerase would mean tens of thousands of mutations every time a cell divides. The Solution: Biology uses a multi-layered “spell-check” system. First, the polymerase has proofreading abilities (exonuclease activity) that catch most mistakes as they happen. Second, Mismatch Repair (MMR) proteins scan the strands to fix remaining errors. This brings the final error rate down to about 1 in a billion.

  1. How many different ways are there to code (DNA nucleotide code) for an average human protein? In practice, what are some of the reasons that all of these different codes don’t work?

The Numbers: There are an astronomical number of ways to write the same protein due to code degeneracy. For an average human protein (~400 amino acids), there are roughly $10^{150}$ possible DNA sequences. Practical Constraints: Not all codes work because some codons are “rare,” causing the cell to run out of tRNA and stall production. Additionally, certain sequences can create hairpins (DNA folding on itself) or unintended stop signals that terminate the process prematurely.


Part 2: Dr. LeProust’s Questions

  1. What’s the most commonly used method for oligo synthesis currently?

    The gold standard is Phosphoramidite synthesis. This chemical process builds DNA one nucleotide at a time on a solid surface.

  2. Why is it difficult to make oligos longer than 200nt via direct synthesis?

    It is due to Efficiency. Even with a 99% coupling efficiency, errors compound over 200 steps. By the end, only a tiny fraction of the strands are correct; the rest are “trash” sequences, missing letters.

  3. Why can’t you make a 2000bp gene via direct oligo synthesis?

    The math implies the yield for a 2000bp strand would be effectively zero—not a single perfect molecule would exist in the tube. Instead, scientists synthesize many short 100-200nt pieces and “glue” them together using enzymes (assembly).


    Part 3: George Church’s Question:

  4. What are the 10 essential amino acids in all animals and how does this affect your view of the “Lysine Contingency”?

The 10 Essentials: Phenylalanine, Valine, Threonine, Tryptophan, Isoleucine, Methionine, Histidine, Arginine, Leucine, and Lysine. My View: In Jurassic Park, the “Lysine Contingency” was a fictional “kill switch.” However, in reality, all animals (including humans) are unable to make lysine. It isn’t a special safety feature—it is a fundamental natural limitation that shows how all life depends on its environment and diet for survival.

Week 2 HW: DNA READ WRITE AND EDIT

Part 1: Benchling & In-silico Gel Art

In-Silico Gel Art: Latent Figure Protocol

Project Overview

For this week’s assignment, I used Benchling to simulate restriction enzyme digests on the Lambda Phage genome (NC_001416). My goal was to move beyond simple data analysis and create “Gel Art” in the style of Paul Vanouse’s Latent Figure Protocol.

The Visual Design

I designed a zigzag pattern that emerges from a complex reference lane. By selecting specific enzymes, I was able to control the migration height of the DNA bands to create a deliberate visual W shape.

Enzyme Key and Lane Setup

LaneEnzyme CombinationVisual Goal
LadderNEB 2-LogSize reference for the DNA bands.
Lane 1All 7 EnzymesThe Master Key: EcoRI, HindIII, BamHI, KpnI, EcoRV, SacI, SalI.
Lane 2SacILow Point: Sharp band near the bottom.
Lane 3BamHI + SalIMid-Point: Moving the pattern upward.
Lane 4EcoRIHigh Point: The peak of the zigzag.
Lane 5BamHI + SalIMid-Point: Symmetric return to the middle.
Lane 6SacILow Point: Completing the zigzag at the bottom.

Final Result

Zigzag Gel Art Zigzag Gel Art

Reflection

Working with EcoRV was a challenge because it cuts the genome 21 times, resulting in a significant amount of noise. By isolating simpler cutters, such as SacI and EcoRI, in the later lanes, I was able to make the intended artwork much clearer.

View my Benchling Virtual Digest Project

Part 3: DNA Design Challenge

** 3.1. Choose Your Protein**

  • Protein Chosen: Insulin (Homo sapiens)
  • Why: I chose Insulin because it is a vital hormone for glucose regulation and holds historical significance as the first human protein to be manufactured using recombinant DNA technology.
  • Protein Sequence (FASTA format):

sp|P01308|INS_HUMAN Insulin OS=Homo sapiens OX=9606 GN=INS PE=1 SV=1 MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAED LQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN


** 3.2. Reverse Translate**

Process: Using the Sequence Manipulation Suite, I reverse-translated the Insulin amino acid sequence into a DNA sequence. I used the most likely codons based on the genetic code to ensure a usable, non-degenerate sequence.

Insulin DNA Sequence (Naive/Initial):

atggcgctgtggatgcgcctgctgccgctgctggcgctgctggcgctgtggggcccggatccggcggcggcgtttgtgaaccagcatctgtgcggcagccatctggtggaagcgctgtatctggtgtgcggcgaacgcggctttttttataccccgaaaacccgccgcgaagcggaagatctgcaggtgggccaggtggaactgggcggcggcccgggcgcgggcagcctgcagccgctggcgctggaaggcagcctgcagaaacgcggcattgtggaacagtgctgcaccagcatttgcagcctgtatcagctggaaaactattgcaactaa

3.3. Codon optimization.

Chosen Organism: Escherichia coli (E. coli)

Why do we need to optimize? Different organisms have different “preferences” for which codons they use to build proteins. If we put the human insulin DNA sequence directly into E. coli, the bacteria might lack the necessary tRNA “building blocks” to read it efficiently. By using the IDT Codon Optimization Tool, I have swapped the human codons for the ones that E. coli prefers, ensuring the fastest and most reliable production of the protein.

Optimized Insulin DNA Sequence (for E. coli): ATG GCA CTG TGG ATG CGC CTG CTG CCG TTG TTA GCT CTG CTG GCG TTA TGG GGG CCG GAT CCG GCG GCG GCC TTC GTG AAT CAG CAT TTA TGT GGC TCA CAC CTG GTC GAA GCC TTG TAC TTA GTC TGT GGT GAA CGT GGT TTT TTT TAC ACA CCG AAA ACC CGC CGT GAA GCG GAG GAC CTT CAG GTG GGC CAG GTT GAA CTG GGC GGC GGT CCG GGC GCG GGA TCT CTT CAG CCT CTG GCT TTA GAA GGA AGC CTG CAG AAA CGC GGC ATT GTG GAG CAG TGC TGT ACC TCT ATT TGC TCC CTG TAT CAG TTG GAA AAC TAT TGT AAT TAA

3.4. You have a sequence! Now what?

To turn my digital sequence into a physical protein, I would use the following technologies:

  • Chemical DNA Synthesis: I would send my optimized sequence to a vendor like IDT to synthesize the physical DNA strands.
  • Recombinant Expression: I would insert this DNA into a plasmid and transform it into E. coli cells. The bacteria act as a biological factory, using transcription and translation to manufacture the insulin.
  • Cell-Free Synthesis: Alternatively, I could use a X-TL system, which uses cellular machinery in a test tube to produce the protein without needing a living host.

3.5. Biological Systems

How can a single gene code for multiple proteins? Nature is far more efficient than a simple 1:1 “one gene, one protein” rule. Through Alternative Splicing, a cell can choose which sections of an RNA transcript to keep and which to discard. This allows the same gene to produce several different versions of a protein, known as isoforms, which can have different functions in the body.

Case Study: Human Insulin (P01308)

  • Isoforms: This gene produces 2 isoforms via alternative splicing.
  • Maturation: Insulin also undergoes Post-translational processing, where it is trimmed from a long Preproinsulin chain into the final active hormone.

The Biomolecular Flow: Below is the full breakdown of how my digital DNA sequence becomes a functional protein.

LevelSequenceKey Change
DNAATG GCA CTG TGG...Optimized for E. coli host
RNAAUG GCA CUG UGG...Transcribed copy; T is now U
ProteinM A L W ...Translated amino acid sequence

Part 4: Prepare a Twist DNA Synthesis Order

Project: Insulin_v1.0_System_Architecture

Developer: [Elsa Muleya]
Status: Compiled & Verified
Target Environment: E. coli OS

1. The Source Code (DNA)

The circular plasmid represents the permanent Read-Only Memory (ROM) of the biological system.

  • ENTRY_POINT (promoter): Executes the START command. It signals the system’s hardware to begin data processing at position 1.
  • DATA_PACKET (RBS): The Ribosome Binding Site acts as the Buffer. It prepares the hardware to load the upcoming instructions.
  • MAIN_APP (Insulin CDS): The primary logic gate. This is the raw sequence that defines the structure of the final output (Insulin).
  • METADATA_TAG (7x His Tag): An attached Header. This 7-histidine string acts as a unique ID for downstream sorting and purification.
  • EOF_MARKER (Terminator): The exit(0) command. It forces the system to stop reading and release the hardware resources.

2. The Compiler (Transcription)

This is the process of converting the High-Level Code (DNA) into Machine Code (mRNA).

  • The system’s compiler (RNA Polymerase) docks at the ENTRY_POINT.
  • It generates a temporary copy of the data. This is equivalent to loading an application from the Hard Drive (DNA) into RAM (mRNA) for active execution.

3. The Execution (Translation)

The system hardware (Ribosome) executes the instructions stored in the RAM (mRNA).

  • BIT_READING: The hardware reads the code in 3-bit segments called Codons.
  • OUTPUT_GENERATION: For every 3 bits read, the system adds one unit (amino acid) to the physical product.
  • FRAME_CHECK: I have verified the 7x His Tag is in-frame, ensuring the Metadata Header is correctly attached to the Main App without data corruption.

4. System Security & Multi-Threading (The Vector)

The design uses the pTwist Amp High Copy backbone for optimized performance.

  • FIREWALL (AmpR): Provides Ampicillin resistance. This acts as a security filter; any cell that does not contain the “authorized” plasmid is deleted by the antibiotic.
  • MULTI-THREADING (colE1_high_copy): Forces the cell to run hundreds of instances of the program simultaneously. This maximizes the Data Throughput, resulting in high-volume insulin production.

Build Logs:

  • Coordinates: 1-2761 bp
  • Topology: Circular
  • Resistance: Ampicillin
  • Integrity: Verified

Plasmid Map Plasmid Map

**Part 5: 5.1 DNA READ | 5.2 DNA WRITE | 5.3 DNA EDIT

5.1 DNA READ: PALEOVIROMICS & PERMAFROST SURVEILLANCE

(i) WHAT DNA AND WHY? I intend to sequence ancient viral DNA/RNA (eDNA) extracted from Siberian permafrost cores (Reference: Alempic et al., 2023). As climate change accelerates, dormant pathogens like Pithovirus or Pandoravirus are resurfacing. Sequencing these allows for the creation of a Pre-emptive Pandemic Library to identify ancestral motifs and develop vaccine scaffolds before zoonotic spillover occurs.

(ii) TECHNOLOGY & METHODOLOGY: Technology: Oxford Nanopore Technologies (ONT) Ultra-Long Read Sequencing.

  • GENERATION: 3rd Generation (Single-molecule, real-time sequencing).
  • INPUT: Environmental DNA (eDNA) from permafrost meltwater.
  • PREPARATION STEPS:
    1. EXTRACTION: Bead-based magnetic isolation of fragmented ancient DNA.
    2. REPAIR: End-repair and A-tailing to fix degraded DNA termini.
    3. TARGETED ENRICHMENT: Hybrid capture using RNA-probe baits to isolate viral sequences from bacterial/fungal background.
    4. ADAPTER LIGATION: Attaching motor proteins to pull DNA through pores.
  • DECODING (BASE CALLING): DNA passes through a protein nanopore, disrupting an ionic current. Each base creates a specific squiggle (electrical signature). Recurrent Neural Networks (RNNs) like the ‘Dorado’ basecaller translate these signals into ATCG sequences.
  • OUTPUT: FastQ files containing Long Reads (10kb - 2Mb), enabling high-fidelity de novo assembly of unknown viral genomes.

5.2 DNA WRITE: DE NOVO ANTIFREEZE GLYCOPROTEINS (AFGPs)

(i) WHAT DNA AND WHY? I want to synthesize DNA encoding a De Novo Synthetic Antifreeze Glycoprotein (AFGP), inspired by Arctic Notothenioids (Reference: Zhuang, 2014).

  • SEQUENCE: [Ala-Ala-Thr]n repeats, optimized for human tissue compatibility.
  • WHY: To enable “Supercooling” in organ transplantation. This DNA would produce proteins that prevent ice crystal formation, extending the viability of donor organs from hours to several days.

(ii) TECHNOLOGY & METHODOLOGY: Technology: Silicon-based Phosphoramidite Synthesis (e.g., Twist Bioscience).

  • ESSENTIAL STEPS:
    1. DE-BLOCKING: Acidic removal of the DMT protective group from the silicon-bound nucleotide.
    2. COUPLING: Addition of the next phosphoramidite monomer (A,T,C, or G).
    3. CAPPING: Acetification of failed strands to prevent truncation errors.
    4. OXIDATION: Stabilizing the phosphite triester bond.
  • LIMITATIONS:
    1. SPEED: Chemical synthesis is a multi-day process involving logistics.
    2. SCALABILITY: Individual oligos are limited to ~300bp; longer constructs require Gibson Assembly, which is difficult for repetitive sequences like [Ala-Ala-Thr]n.

5.3 DNA EDIT: MUTATION-AGNOSTIC PROGERIA CORRECTION

(i) WHAT DNA AND WHY? I want to edit the LMNA gene in human fibroblasts to treat Hutchinson-Gilford Progeria Syndrome (HGPS).

  • THE EDIT: Deletion of the CAAX box motif at the C-terminus.
  • WHY: Instead of fixing a patient-specific mutation, removing the CAAX box prevents the toxic protein (progerin) from anchoring to the nuclear membrane. This is a Mutation-Agnostic therapeutic approach applicable to all HGPS patients.

(ii) TECHNOLOGY & METHODOLOGY: Technology: Prime Editing (PE).

  • HOW IT EDITS: Uses an engineered Cas9 nickase fused to a Reverse Transcriptase (RT). It uses a Search-and-Replace mechanism without causing double-strand breaks.
  • ESSENTIAL STEPS:
    1. SEARCH: The pegRNA (prime editing guide RNA) targets the LMNA site.
    2. NICK: Cas9 nicks only the target DNA strand.
    3. REPLACE: The RT enzyme synthesizes new DNA directly from the pegRNA template into the nicked site.
  • INPUTS & PREPARATION:
    1. INPUT: Plasmids/mRNA encoding the PE protein, pegRNA, and a nick-gRNA.
    2. DESIGN: Computational modeling of the Primer Binding Site (PBS) thermodynamics to ensure stable hybridization.
  • LIMITATIONS:
    1. EFFICIENCY: Prime editing often has lower “on-target” efficiency in primary cells compared to standard CRISPR.
    2. DELIVERY: The PE complex is too large for many standard viral delivery vectors (AAVs).

REFERENCES & RESOURCES

  1. Alempic, J. M., et al. (2023). “An update on eukaryotic viruses revived from ancient permafrost.” Viruses.
  2. Zhuang, X. (2014). “Creating sense from non-sense DNA: de novo genesis and evolutionary history of antifreeze glycoprotein gene.” UIUC.
  3. Anzalone, A. V., et al. (2019). “Search-and-replace genome editing without double-strand breaks or donor DNA.” Nature.
  4. Twist Bioscience Technical Documentation (2024). “Silicon-based DNA Synthesis.”

Week 3 HW: Lab Automation

Week 3: Lab Automation & Opentrons Art

Introduction

This week’s focus is on the intersection of biology, robotics, and creative coding. As part of the HTGAA 2026* cohort based in Zambia, I am exploring how liquid-handling automation (specifically the Opentrons OT-2) can streamline laboratory workflows. Beyond the technical utility, this assignment challenged us to use the robot as a canvas, translating digital coordinates into physical biological art.

Lab automation isn’t just about efficiency; it’s about precision in environments where resources must be used optimally. My work this week involves a Python-based protocol that instructs the robot to “paint” a design using colored liquids in a 96-well plate.

AI Documentation (Opentrons Python Script)

Model used: Gemini 3 Flash (Free Tier)

Description of AI Contribution: AI was utilized to translate the artistic concept from the Opentrons GUI into a functional Python script using the Opentrons API v2.13. Specifically, the AI assisted in:

  • Optimization Logic: Implementing a conditional loop (if spots_drawn % 8 == 0) to handle bulk aspiration, which reduces the number of trips the pipette makes to the source reservoir.
  • Spatial Mapping: Calculating relative coordinates using types.Point for precise deposition on an agar plate or flat-bottom well plate.
  • Troubleshooting: Ensuring proper tip handling (e.g., including drop_tip() commands) to prevent cross-contamination and robot errors.
  • Metadata Structure: Properly formatting the protocol metadata and labware loading sequences required for the robot to recognize the script.

The final art concept and the selection of the specific visual ID (zjiq3p93t07ee2n) were directed by the student, while the AI served as a technical co-pilot for the Python implementation.


The Artwork Design

I used the Opentrons Art GUI to map out the coordinates for my design. The visual representation and the specific well-mapping for this protocol can be viewed at the link below:

View my design here: Opentrons Art Design - x8zh29jmvm87u3v


Opentrons Python Protocol

Below is the Python script generated to execute the design. This script defines the labware (tips, reservoir, and plate) and the specific pipetting movements required to recreate the art.

from opentrons import types

metadata = {    # see https://docs.opentrons.com/v2/tutorial.html#tutorial-metadata
    'author': 'ELSA MULEYA',
    'protocolName': 'HTGAA Agar Art - Full Set',
    'description': 'FLORAL ART',
    'source': 'HTGAA 2026 Opentrons Lab',
    'apiLevel': '2.20'
}

##############################################################################
###   Robot deck setup constants - don't change these
##############################################################################

TIP_RACK_DECK_SLOT = 9
COLORS_DECK_SLOT = 6
AGAR_DECK_SLOT = 5
PIPETTE_STARTING_TIP_WELL = 'A1'

well_colors = {
    'A1' : 'Red',
    'B1' : 'Green',
    'C1' : 'Orange'
}


def run(protocol):
  ##############################################################################
  ###   Load labware, modules and pipettes
  ##############################################################################

  # Tips
  tips_20ul = protocol.load_labware('opentrons_96_tiprack_20ul', TIP_RACK_DECK_SLOT, 'Opentrons 20uL Tips')

  # Pipettes
  pipette_20ul = protocol.load_instrument("p20_single_gen2", "right", [tips_20ul])

  # Modules
  temperature_module = protocol.load_module('temperature module gen2', COLORS_DECK_SLOT)

  # Temperature Module Plate
  temperature_plate = temperature_module.load_labware('opentrons_96_aluminumblock_generic_pcr_strip_200ul',
                                                      'Cold Plate')
  # Choose where to take the colors from
  color_plate = temperature_plate

  # Agar Plate
  agar_plate = protocol.load_labware('htgaa_agar_plate', AGAR_DECK_SLOT, 'Agar Plate')  ## TA MUST CALIBRATE EACH PLATE!
  # Get the top-center of the plate, make sure the plate was calibrated before running this
  center_location = agar_plate['A1'].top()

  pipette_20ul.starting_tip = tips_20ul.well(PIPETTE_STARTING_TIP_WELL)

  ##############################################################################
  ###   Patterning
  ##############################################################################

  ###
  ### Helper functions for this lab
  ###

  # pass this e.g. 'Red' and get back a Location which can be passed to aspirate()
  def location_of_color(color_string):
    for well,color in well_colors.items():
      if color.lower() == color_string.lower():
        return color_plate[well]
    raise ValueError(f"No well found with color {color_string}")

  # For this lab, instead of calling pipette.dispense(1, loc) use this: dispense_and_detach(pipette, 1, loc)
  def dispense_and_detach(pipette, volume, location):
      """
      Move laterally 5mm above the plate (to avoid smearing a drop); then drop down to the plate,
      dispense, move back up 5mm to detach drop, and stay high to be ready for next lateral move.
      5mm because a 4uL drop is 2mm diameter; and a 2deg tilt in the agar pour is >3mm difference across a plate.
      """
      assert(isinstance(volume, (int, float)))
      above_location = location.move(types.Point(z=location.point.z + 5))  # 5mm above
      pipette.move_to(above_location)       # Go to 5mm above the dispensing location
      pipette.dispense(volume, location)    # Go straight downwards and dispense
      pipette.move_to(above_location)       # Go straight up to detach drop and stay high

  ###
  ### YOUR CODE HERE to create your design
  mrfp1_points = [(-8.8, 24.2),(-6.6, 24.2),(6.6, 24.2),(8.8, 24.2),(-11, 22),(-8.8, 22),(-6.6, 22),(-4.4, 22),(4.4, 22),(6.6, 22),(8.8, 22),(11, 22),(-11, 19.8),(-8.8, 19.8),(-6.6, 19.8),(-4.4, 19.8),(-2.2, 19.8),(2.2, 19.8),(4.4, 19.8),(6.6, 19.8),(8.8, 19.8),(11, 19.8),(-11, 17.6),(-8.8, 17.6),(-6.6, 17.6),(-4.4, 17.6),(-2.2, 17.6),(2.2, 17.6),(4.4, 17.6),(6.6, 17.6),(8.8, 17.6),(11, 17.6),(-11, 15.4),(-8.8, 15.4),(-4.4, 15.4),(-2.2, 15.4),(2.2, 15.4),(6.6, 15.4),(8.8, 15.4),(11, 15.4),(-11, 13.2),(-8.8, 13.2),(-2.2, 13.2),(2.2, 13.2),(8.8, 13.2),(11, 13.2),(-22, 11),(-19.8, 11),(-17.6, 11),(-15.4, 11),(-8.8, 11),(-6.6, 11),(6.6, 11),(8.8, 11),(15.4, 11),(17.6, 11),(19.8, 11),(22, 11),(-24.2, 8.8),(-22, 8.8),(-19.8, 8.8),(-17.6, 8.8),(-15.4, 8.8),(-13.2, 8.8),(13.2, 8.8),(15.4, 8.8),(17.6, 8.8),(19.8, 8.8),(22, 8.8),(24.2, 8.8),(-24.2, 6.6),(-22, 6.6),(-19.8, 6.6),(-17.6, 6.6),(-13.2, 6.6),(-11, 6.6),(0, 6.6),(4.4, 6.6),(11, 6.6),(17.6, 6.6),(19.8, 6.6),(22, 6.6),(24.2, 6.6),(-22, 4.4),(-19.8, 4.4),(-17.6, 4.4),(-6.6, 4.4),(6.6, 4.4),(15.4, 4.4),(17.6, 4.4),(19.8, 4.4),(22, 4.4),(24.2, 4.4),(-19.8, 2.2),(-17.6, 2.2),(-15.4, 2.2),(-13.2, 2.2),(13.2, 2.2),(15.4, 2.2),(17.6, 2.2),(19.8, 2.2),(22, 2.2),(-8.8, 0),(0, 0),(8.8, 0),(-19.8, -2.2),(-17.6, -2.2),(-15.4, -2.2),(-13.2, -2.2),(-6.6, -2.2),(0, -2.2),(2.2, -2.2),(6.6, -2.2),(13.2, -2.2),(15.4, -2.2),(17.6, -2.2),(19.8, -2.2),(-22, -4.4),(-19.8, -4.4),(-17.6, -4.4),(-13.2, -4.4),(-6.6, -4.4),(-2.2, -4.4),(6.6, -4.4),(17.6, -4.4),(19.8, -4.4),(22, -4.4),(-24.2, -6.6),(-22, -6.6),(-19.8, -6.6),(-17.6, -6.6),(-11, -6.6),(-4.4, -6.6),(4.4, -6.6),(11, -6.6),(13.2, -6.6),(17.6, -6.6),(19.8, -6.6),(22, -6.6),(24.2, -6.6),(-24.2, -8.8),(-22, -8.8),(-19.8, -8.8),(-17.6, -8.8),(-15.4, -8.8),(-13.2, -8.8),(-11, -8.8),(0, -8.8),(11, -8.8),(13.2, -8.8),(15.4, -8.8),(17.6, -8.8),(19.8, -8.8),(22, -8.8),(24.2, -8.8),(-22, -11),(-19.8, -11),(-17.6, -11),(-15.4, -11),(-13.2, -11),(-8.8, -11),(-6.6, -11),(6.6, -11),(8.8, -11),(13.2, -11),(15.4, -11),(17.6, -11),(19.8, -11),(22, -11),(-11, -13.2),(-8.8, -13.2),(-2.2, -13.2),(2.2, -13.2),(8.8, -13.2),(11, -13.2),(-11, -15.4),(-8.8, -15.4),(-6.6, -15.4),(-2.2, -15.4),(2.2, -15.4),(4.4, -15.4),(8.8, -15.4),(11, -15.4),(-11, -17.6),(-8.8, -17.6),(-6.6, -17.6),(-4.4, -17.6),(-2.2, -17.6),(2.2, -17.6),(4.4, -17.6),(6.6, -17.6),(8.8, -17.6),(11, -17.6),(-11, -19.8),(-8.8, -19.8),(-6.6, -19.8),(-4.4, -19.8),(-2.2, -19.8),(2.2, -19.8),(4.4, -19.8),(6.6, -19.8),(8.8, -19.8),(11, -19.8),(-11, -22),(-8.8, -22),(-6.6, -22),(-4.4, -22),(4.4, -22),(6.6, -22),(8.8, -22),(11, -22),(-8.8, -24.2),(-6.6, -24.2),(6.6, -24.2),(8.8, -24.2)]
  sfgfp_points = [(-11, 28.6),(11, 28.6),(-13.2, 26.4),(-11, 26.4),(-8.8, 26.4),(8.8, 26.4),(11, 26.4),(13.2, 26.4),(-13.2, 24.2),(-11, 24.2),(11, 24.2),(13.2, 24.2),(-13.2, 22),(13.2, 22),(-13.2, 19.8),(13.2, 19.8),(-13.2, 17.6),(13.2, 17.6),(-13.2, 15.4),(-6.6, 15.4),(4.4, 15.4),(13.2, 15.4),(-26.4, 13.2),(-24.2, 13.2),(-22, 13.2),(-19.8, 13.2),(-17.6, 13.2),(-6.6, 13.2),(-4.4, 13.2),(4.4, 13.2),(6.6, 13.2),(17.6, 13.2),(19.8, 13.2),(22, 13.2),(24.2, 13.2),(26.4, 13.2),(28.6, 13.2),(-28.6, 11),(-26.4, 11),(-24.2, 11),(24.2, 11),(26.4, 11),(28.6, 11),(30.8, 11),(-26.4, 8.8),(-2.2, 8.8),(0, 8.8),(2.2, 8.8),(26.4, 8.8),(28.6, 8.8),(-15.4, 6.6),(-4.4, 6.6),(-2.2, 6.6),(2.2, 6.6),(13.2, 6.6),(15.4, 6.6),(26.4, 6.6),(-15.4, 4.4),(-13.2, 4.4),(-8.8, 4.4),(-2.2, 4.4),(2.2, 4.4),(8.8, 4.4),(13.2, 4.4),(-8.8, 2.2),(-6.6, 2.2),(-4.4, 2.2),(0, 2.2),(4.4, 2.2),(6.6, 2.2),(8.8, 2.2),(-6.6, 0),(6.6, 0),(-8.8, -2.2),(-4.4, -2.2),(4.4, -2.2),(8.8, -2.2),(-15.4, -4.4),(-8.8, -4.4),(2.2, -4.4),(8.8, -4.4),(13.2, -4.4),(15.4, -4.4),(-15.4, -6.6),(-13.2, -6.6),(-2.2, -6.6),(0, -6.6),(2.2, -6.6),(15.4, -6.6),(-26.4, -8.8),(-2.2, -8.8),(2.2, -8.8),(26.4, -8.8),(-28.6, -11),(-26.4, -11),(-24.2, -11),(24.2, -11),(26.4, -11),(28.6, -11),(-26.4, -13.2),(-24.2, -13.2),(-22, -13.2),(-19.8, -13.2),(-17.6, -13.2),(-6.6, -13.2),(-4.4, -13.2),(4.4, -13.2),(6.6, -13.2),(17.6, -13.2),(19.8, -13.2),(22, -13.2),(24.2, -13.2),(26.4, -13.2),(-13.2, -15.4),(-4.4, -15.4),(6.6, -15.4),(13.2, -15.4),(-13.2, -17.6),(13.2, -17.6),(-13.2, -19.8),(13.2, -19.8),(-13.2, -22),(13.2, -22),(-13.2, -24.2),(-11, -24.2),(11, -24.2),(13.2, -24.2),(-13.2, -26.4),(-11, -26.4),(-8.8, -26.4),(8.8, -26.4),(11, -26.4),(13.2, -26.4),(-11, -28.6),(11, -28.6)]

  # Combine the point data with their corresponding well colors into an art_data dictionary
  art_data = {
      'Red': {
          'well': 'A1',
          'points': mrfp1_points
      },
      'Green': {
          'well': 'B1',
          'points': sfgfp_points
      },
      'Orange': {
          'well': 'C1',
          'points': [] # Add points for Orange if needed, otherwise leave empty
      }
  }

  # --- EXECUTION LOGIC ---
  # Center spot of the agar (adjust based on plate size)
  center_well = agar_plate['D6'] # Fixed: Use dictionary-like access instead of wells_by_name()

  for color_name, data in art_data.items():
      source = color_plate[data["well"]] # Fixed: source_plate should be color_plate
      pipette_20ul.pick_up_tip()

      spots_drawn = 0
      for x, y in data["points"]:
          # Aspirate enough liquid for up to 8 spots, or less if fewer spots remain.
          # Each spot is 2uL, so 8 spots is 16uL.
          # The 'min' ensures we don't aspirate more than 16uL at a time or more than what's needed.
          if spots_drawn % 8 == 0:
              pipette_20ul.aspirate(min(16, (len(data["points"])-spots_drawn) * 2), source)

          # Create the relative coordinate on the agar plate
          target = center_well.top().move(types.Point(x=x, y=y, z=0))

          # Use the helper function to dispense and detach the tip
          dispense_and_detach(pipette_20ul, 2, target)

          spots_drawn += 1

      pipette_20ul.drop_tip()

3. Final Project Ideas


Idea 1: Zambia Mineral-Waste Bioremediation Predictor

  • Technical Problem: Mining tailings IN Zambia contain high levels of $Cu$ and $Zn$. Traditional cleaning is too expensive. We need “extremophiles” to stabilize these metals.
  • The Project: A computational pipeline to analyze the genomes of Bacillus and Pseudomonas from Zambian sites. I will search for protein sequences (Metallothioneins) that bind heavy metals.
  • Data Source: NCBI SRA data for “Zambian Mine Tailings,” specifically searching for the pbr (lead) and mer (mercury) operons.

Idea 2: Maize Lethal Necrosis (MLN) Genomic Tracker

  • Technical Problem: MLN is a double infection (MCMV + SCMV) devastating maize. It’s hard to distinguish strains visually.
  • The Project: A Comparative Genomics study comparing RNA sequences of MCMV from East Africa vs. South Africa to see if a unique “Zambian strain” is emerging.
  • Data Source: Nextstrain.org and GenBank, focusing on mutations in the Coat Protein (CP) gene.

Idea 3: Maize Yield “Climate-Window” Predictor

  • Technical Problem: Maize is highly vulnerable to moisture stress during the 2-week silking stage. Climate change has shifted Zambia’s rainy season.
  • The Project: An automated Predictive Model using “Agro-Meteorological” data to calculate Growing Degree Days (GDD) for Zambian hybrids (SeedCo/MRI) against 20 years of rainfall patterns.
  • Data Source: CHIRPS rainfall data for Zambia.

Week 4 HW: Protein Design I

Homework: Protein Design I

Subsections of Labs

Week 1 Lab: Pipetting

cover image cover image

Subsections of Projects

Individual Final Project

cover image cover image

Group Final Project

cover image cover image