ANNIE XING β€” HTGAA Spring 2026

cover image cover image

πŸ‘‹ About me

Hi! I’m Annie, a multidisciplinary designer at Harvard GSD and Visiting Researcher at the MIT Media Lab. I come from a dual background of fashion design and economics, and my work lives at the intersection of materials, computation, and the body. I build interactive wearables and bio-responsive systems β€” from electrospinning nanofiber membranes to garments that sense and react.

I want to move beyond putting electronics on the body and start engineering living materials that are the interface. Think less “tech-on-fabric,” more “biology as design medium”, exploring how synthetic biology can make wearables that truly feel like a second skin.


πŸ“¬ Contact info


πŸ“– Homework

πŸ§ͺ Labs

πŸ”¬ Projects

Subsections of ANNIE XING β€” HTGAA Spring 2026

Subsections of Homework

Week 1 HW: Principles and Practices

Application: Living Materials with Multicellular Computational Networks for Collective Sensing and Spatial Response

What is it?

I am interested in Computational Living Materials(CLMs): materials embedded with engineered cells that form cell-to-cell communication networks capable of collectively sensing, processing, and responding to environmental stimuli. Unlike existing engineered living materials that react passively to single inputs, it contain genetic logic circuits enabling the material itself to perform distributed spatial computation before producing an output response.

The Skin Analogy

The concept is inspired by how human skin processes touch. When you feel the difference between a pinprick and a palm press, it’s not because individual nerve cells are different but because of the pattern of activation across a network of communicating cells. Your skin doesn’t just sense but also computes spatially; the sensor and the processor are the same system.

Why do I care?

I am curious about the biomaterial equivalent. Cells embedded in a biomaterial substrate would sense their environment and share information with neighbors and collectively produce visible responses that represent processed information. The material includes the entire signal chain of sensor, processor, output into one living substrate. A local stimulus at one point would trigger a cascade that propagates outward, producing a coordinated response with cell-to-cell communication. Different cell populations can play different roles and multi-cell-type signal-processing networks could potentially perform noise filtering, edge detection, and signal amplification.

I work at the intersection of sensor technology, interaction design, and material fabrication. I’m drawn to the idea that computation doesn’t need silicon but emerge from living systems embedded in the materials around us. This could enable environmental monitoring surfaces, responsive architecture, wearable health interfaces, and entirely new categories of living interactive media.


Policy Goals

  1. Enhance Biosecurity

    • Prevent repurposing for harmful applications
    • Ensure genetic designs are traceable
  2. Protect the Environment

    • Prevent engineered organisms from escaping into natural ecosystems
    • Prevent gene transfer to wild microbial populations
    • Ensure safe degradation at end of life
  3. Ensure Predictable Emergent Behavior

    • Ensure collective behaviors are testable and predictable
    • Prevent unintended behavioral drift from cell mutation
  4. Promote Equity, Access & Transparency

    • Prevent biological IP concentration by few corporations
    • Promote open-source genetic designs
    • Require clear labeling of engineered living organisms in materials
    • Establish accountability for harm caused by material

Three Governance Actions

Option 1: Mandatory Dual Biocontainment Standards (Federal Regulatory)

Purpose: Currently, engineered living materials are developed under general lab biosafety rules (BSL-1/2). There are no specific regulations for deploying engineered organisms in materials outside the lab. Propose requiring two independent containment mechanisms: synthetic nutrient dependency & genetic kill switch.

Design: Administered through EPA (environmental release) and FDA (consumer products) using existing biotech frameworks. Manufacturers submit containment data showing organisms degrade within a set timeframe outside intended conditions. Inter-agency review panel evaluates.

Assumptions: Dual containment is achievable at scale (unproven for manufacturing); EPA/FDA have expertise to evaluate this new category (uncertain); lab-tested containment holds in real-world conditions (questionable).

Risks of Failure & “Success”: Too strict β†’ bans development; too loose β†’ inadequate protection. Even “successful” regulation may create false confidence: lab-tested containment may not hold in complex real environments. GMO crop regulation exists, yet gene flow to wild relatives has still occurred.

Option 2: Open-Source Biological Safety Consortium (Community Self-Governance)

Purpose: Top-down regulation often lags behind fast-moving technology. Propose voluntary consortium (modeled on iGEM’s Safety Committee or IETF internet standards) sharing safety standards and open-source containment genetic parts.

Design: “CLM Safety Certified” mark incentivizes membership. Insurance companies require certification for liability coverage. Funded by member dues and government grants (NSF/DARPA). Public registry of deployed organisms. Peer-reviewed safety audits.

Assumptions: Voluntary participation is sufficient (companies may resist open-sourcing); safety mark creates market pressure but public awareness of these materials is near zero; peer review is effective.

Risks of Failure & “Success”: Without legal enforcement, bad actors ignore standards. Dual-use dilemma: publishing how containment works also teaches how to defeat it. Open-source security helps defenders but also informs attackers.

Option 3: Mandatory Behavior Simulation Before Deployment (Government-Funded Technical Strategy)

Purpose: Collective behavior may not be predictable from individual cell specs. Propose mandatory computational simulation before deployment, similar to autonomous vehicle simulation testing.

Design: Agent-based computer models where each virtual cell follows its genetic circuit rules and communication logic. NIH/NIST funds open simulation platforms. Manufacturers must simulate behavior across environmental scenarios, including modeling how mutations over 100+ generations could alter collective behavior.

Assumptions: Models can accurately capture emergent biological behavior; evolutionary drift is somewhat predictable; simulation infrastructure is affordable.

Risks of Failure & “Success”: Inaccurate simulation models provide false confidence. Favors large companies with computational resources (equity problem). Over-reliance on simulation reduces investment in physical containment.

How do the options compare?

Does the option:Mandatory BiocontainmentOpen-Source ConsortiumBehavior Simulation
1 Β· Enhance Biosecurity
β€’ Prevent repurposing for harmful applications223
β€’ Ensure genetic designs are traceable113
2 Β· Protect the Environment
β€’ Prevent organism escape into ecosystems123
β€’ Prevent gene transfer to wild populations223
β€’ Ensure safe end-of-life degradation123
3 Β· Ensure Predictable Emergent Behavior
β€’ Ensure collective behaviors are testable321
β€’ Prevent behavioral drift from mutation221
4 Β· Promote Equity, Access & Transparency
β€’ Prevent biological IP concentration312
β€’ Promote open-source genetic designs312
β€’ Require clear labeling of living organisms123
β€’ Establish accountability for harm123
Other considerations
β€’ Minimizing costs and burdens to stakeholders313
β€’ Feasibility213
β€’ Not impede research312
β€’ Promote constructive applications212
Scores: 1 = best, 2 = moderate, 3 = poor

Prioritization and Trade-offs

Option 2 as Foundation, with Elements of Options 1 and 3

I would prioritize Option 2 (Open-Source Safety Consortium) as the primary governance framework, supplemented with targeted elements from the other two options.

Why Option 2 as the foundation: CLM technology is at developmental stage and heavy top-down regulation (Option 1) would likely stifle research before it can demonstrate its potential benefits. However, development should happen within a safety-conscious community framework. The open-source consortium has precedent in synthetic biology (iGEM’s safety practices, the BioBricks Foundation) and in technology broadly (IETF for internet standards, Linux Foundation for open-source software). It promotes both safety and equity simultaneously. would prioritize Option 2 (Open-Source Safety Consortium) as the primary governance framework, supplemented with elements from the other two options.

Supplemented with:

  • From Option 1: As CLMs approach consumer deployment (likely 5-10 years away), formal regulatory standards should be developed in collaboration with the consortium. The consortium’s standards would inform regulation rather than being replaced by it. This staged approach mirrors how 3D printing governance evolved, early community self-governance followed by targeted regulation as the technology matured.
  • From Option 3: The consortium should invest in developing open-source simulation tools for emergent behavior prediction, not as a mandatory gate, but as a shared design tool that helps researchers anticipate and avoid dangerous emergent behaviors during the design phase. Making simulation tools open and accessible avoids the equity problems of mandating them.

Key Trade-offs

The core trade-off is between safety and innovation speed. Option 1 maximizes safety assurance but minimizes innovation velocity. Option 2 maximizes innovation velocity but relies on voluntary compliance for safety. Hybrid attempt balances both by scaling governance intensity with technology maturity, light-touch community governance now, harder rules later when the stakes are higher.

A second trade-off is between openness and dual-use risk. Publishing open-source containment mechanisms helps everyone build safer materials but also helps bad actors understand how to defeat it. The benefit of openness outweighs the dual-use risk at this stage, because the technology is too immature, and the safety community benefits enormously from shared tools. This could change as the technology advances.

Audience Considerations

  • Local (MIT/Cambridge): The MIT Institutional Biosafety Committee (IBC) should develop specific guidelines for research, including containment protocols for materials that might be taken outside the lab as final projects.
  • National (NIH/NSF): Federal funding agencies should support development of open-source safety tools and simulation platforms, and require funded research to register with the proposed consortium.

Uncertainties

  1. Can emergent behavior in CLMs be made reliably safe, or is unpredictability an inherent and irreducible feature of networked living systems?
  2. Will the public accept living organisms in their everyday materials? Social acceptance may be a larger barrier than technical or regulatory challenges.
  3. How will CLMs interact with natural microbial ecosystems in ways we cannot predict? The history of introduced species suggests we should be humble about our ability to predict ecological consequences.
  4. As AI and biological computation converge, will CLMs raise questions about material “agency” that our current ethical frameworks are not equipped to handle? If a material makes a collective decision that harms someone, the question of responsibility may require entirely new ethical or legal frameworks.

References: Jacobson gene synthesis lecture (HTGAA Week 1, Slides 1-5: cell as computer, Slide 14: MutS error correction, Slide 35: genomically recoded organisms, Slide 45: molecular beacons, Slide 46: swigRNA sensors, Slide 59: bioFPGA); Pataranutaporn et al. “Living Bits” (AHs 2020); Oxman et al. “Hybrid Living Materials” (Adv. Funct. Mater. 2019); Basu et al. “Synthetic multicellular system for programmed pattern formation” (Nature 2005, Weiss Lab); DARPA Engineered Living Materials program; Walker et al. “Self-pigmenting textiles” (Nature Biotechnology 2024); Imperial College quorum sensing spatial computation (ACS Synth. Bio. 2024); Wang et al. “Engineering Microbial Consortia as Living Materials” (ACS Synth. Bio. 2024).

(AI Prompt: I’m interested in computational living materials where engineered cells communicate to collectively process information. Help me understand whether this is novel compared to existing engineered living materials, multicellular computation, and living bits research; What are the ethical and biosafety concerns specific to this development to be used outside of labs? Is it possible and help me develop specifc policy and goals; What is the iGEM safety model and how does it compare to IETF-style self-governance? Could something similar work for living materials? What is agent-based modeling in biology? Could it predict emergent behavior in multicellular systems? I need to score my governance options against my policy goals but I’m new to biology, can you help me evaluate which approaches are strongest for things like preventing gene transfer or ensuring traceability? What are the trade-offs between open-sourcing safety mechanisms and dual-use risk in synthetic biology?)


Week 2 Lecture Preparation

Homework Questions from Professor Jacobson:

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?

Error rate of polymerase is 1:10⁢. Compared to the length of the human genome with 3.2 billion bases, it is roughly 3,200 errors per cell division. Biology deals with this through the error correction Mismatch Repair (MMR) System such as MutS repair system, additional DNA repair pathways such as Nucleotide excision repair, genetic code redundancy and diploid genomes.

(AI Prompt: what are ways of error correction biology uses to prevent mutations in the human genome beyond the polymerase’s built-in proofreading)

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 to code for the protein of interest?

The average human protein is encoded by ~1,036 base pairs of DNA (slide 6). Since each amino acid is encoded by a codon of 3 nucleotides, this corresponds to 1,036 Γ· 3 β‰ˆ 345 amino acids. There are roughly 3³⁴⁡ ways for a protein of 345 amino acids. In practice, most of those sequences won’t work because of mRNA folding, codon usage bias (cells prefer certain codons), and accidental creation of regulatory regions.

(AI prompt: why are there not 3³⁴⁡ ways to code for the protein in biological reality)

Homework Questions from Dr. LeProust:

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

Phosphoramidite chemistry column-based and silicon chip-based DNA synthesis.

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

In the chemistry synthesis as the open loop protection system, yield is dropping as the number of coupling increases. (1 - 1/N)^N and the error rate is fixed at 1 out of 100 which is 1% for each one to be correct. With 99% coupling efficiency per step, the yield for a 200nt oligo is 0.99²⁰⁰ β‰ˆ 13% usable ones because the error rate is fixed but the chain keeps getting longer. The longer it gets the less usable ones in percentage due to exponential yield decay.

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

The cost and error rate is really high. With the error rate of 1:10², 20bp out of 2000bp will have error on average. The probability of getting something usable without error is 0.99²⁰⁰⁰ which is essentially impossible.

Homework Question from George Church: [Lecture 2 slides]

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

The 10 amino acids that animals cannot synthesize and must obtain from their diet are PVT TIM HALL: Phenylalanine, Valine, Threonine, Tryptophan, Isoleucine, Methionine, Histidine, Arginine, Leucine, Lysine. The “Lysine Contingency” from Jurassic Park is for biocontainment: if the dinosaurs ever escaped the island, they’d die without their lysine supplements from the park staff. The Lysine Contingency does not make sense because animals including us cannot produce their own lysine but get lysine from their diet, which means that the dinosaurs can freely obtain lysine the way all animals do β€” eat lysine-containing plants or animals.

(AI prompts: please explain in detail what are the 10 essential amino acids in all animals and what do they do? What is “lysine contingency”?)

Week 2 HW: DNA Read, Write, & Edit

DNA Design Challenge

1. Choose Your Protein

I chose Reflectin A1, the structural protein found in squid skin that is responsible for their ability to dynamically change color and iridescence. Squid iridophores contain layers of reflectin that can shift what wavelengths of light they reflect by changing the protein’s conformation β€” essentially biological tunable thin-film optics. I’m interested in this because it represents a living material that produces a dynamic optical output as a visual response through intrinsic material properties rather than added pigments. Researchers have fabricated reflectin-based thin films that change color in response to chemical signals, which sits right at the intersection of my interests in materials, sensing, and interaction.

Protein sequence from UniProt (D3UA43) / NCBI (ACZ57764.1):

Reflectin A1 β€” Amino Acid Sequence
>ACZ57764.1 reflectin-like protein A1 [Doryteuthis pealeii]
MNRYLNRQRLYNMYRNKYRGVMEPMSRMTMDFQGRYMDSQGRMVDPRYYDYYGRMHDHDRYYGRSMFNQG HSMDSQRYGGWMDNPERYMDMSGYQMDMQGRWMDAQGRFNNPFGQMWHGRQGHYPGYMSSHSMYGRNMYN PYHSHYASRHFDSPERWMDMSGYQMDMQGRWMDNYGRYVNPFNHHMYGRNMCYPYGNHYYNRHMEHPERY MDMSGYQMDMQGRWMDTHGRHCNPFGQMWHNRHGYYPGHPHGRNMFQPERWMDMSGYQMDMQGRWMDNYG RYVNPFSHNYGRHMNYPGGHYNYHHGRYMNHPERHMDMSSYQMDMHGRWMDNQGRYIDNFDRNYYDYHMY

2. Reverse Translate

Using NCBI, I traced the protein back to its original DNA coding sequence: FJ824804.1 β€” the mRNA for Reflectin-like protein A1 from Doryteuthis pealeii.

Reflectin A1 β€” Original Squid DNA Sequence
>FJ824804.1 Loligo pealei reflectin-like protein A1 mRNA, complete cds
ATGAATCGATATCTGAATCGACAGCGCCTGTACAACATGTACAGAAACAAGTACCGAGGTGTGATGGAAC CGATGTCCAGAATGACCATGGACTTCCAAGGAAGATACATGGACTCCCAGGGTAGAATGGTCGACCCCAG ATACTACGACTACTACGGAAGAATGCACGACCATGACCGATACTACGGAAGGTCCATGTTCAACCAGGGA CACAGCATGGACAGTCAACGCTACGGCGGCTGGATGGACAACCCCGAGAGGTACATGGACATGTCTGGCT ACCAGATGGACATGCAGGGACGCTGGATGGACGCCCAGGGGCGATTCAACAACCCGTTCGGTCAGATGTG GCACGGCAGGCAAGGCCATTACCCTGGTTACATGTCATCTCACTCCATGTATGGTAGAAATATGTATAAC CCCTACCACAGCCATTACGCCAGCCGGCATTTCGATTCCCCCGAGAGATGGATGGACATGTCCGGCTATC AGATGGACATGCAAGGACGCTGGATGGATAACTACGGCCGTTACGTGAACCCGTTCAACCACCACATGTA TGGCAGAAACATGTGTTATCCTTACGGCAACCATTACTACAATCGGCACATGGAGCACCCCGAGAGATAC ATGGACATGTCCGGCTATCAGATGGACATGCAGGGACGCTGGATGGACACACACGGACGCCACTGCAACC CGTTCGGTCAGATGTGGCACAACAGGCACGGTTACTATCCAGGACACCCACATGGTCGCAACATGTTCCA GCCCGAAAGATGGATGGATATGTCCGGCTATCAGATGGACATGCAAGGACGCTGGATGGATAACTATGGC CGTTATGTGAACCCGTTCAGTCATAACTACGGCAGGCATATGAACTACCCTGGAGGTCACTACAACTACC ACCACGGCCGCTACATGAATCACCCCGAGAGACACATGGACATGTCCAGCTATCAGATGGACATGCACGG ACGCTGGATGGACAACCAGGGCCGTTATATTGACAATTTCGATAGAAATTATTACGACTATCACATGTAT TAA

The sequence starts with ATG (start codon) and ends with TAA (stop codon). It’s 1,053 base pairs long, which checks out: 350 amino acids Γ— 3 bases per codon = 1,050, plus 3 for the stop codon.

3. Codon Optimization

I optimized for E. coli because that’s the organism we’re using in the lab to express proteins. The original DNA sequence comes from squid, which uses a different set of preferred codons than E. coli. Even though multiple codons can encode the same amino acid, cells have different amounts of the tRNA molecules that read each codon. E. coli has abundant tRNA for its commonly-used codons and very little for rare ones. If I put the original squid DNA into E. coli, the ribosome would stall at codons that E. coli rarely uses, resulting in slow or unsuccessful protein production. Codon optimization swaps those squid codons for ones E. coli translates quickly, so it can produce it much more efficiently.

Twist codon optimization for E. coli Twist codon optimization for E. coli Codon-optimized sequence in Twist’s editor, with Codon Usage Table set to Escherichia coli.

Reflectin A1 β€” Codon-Optimized DNA Sequence (E. coli)
ATGAATCGCTATCTGAATCGGCAACGTCTGTATAATATGTATCGTAATAAATACCGCGGTGTTATGGAGC CCATGAGTCGTATGACTATGGATTTCCAGGGTCGCTATATGGATTCTCAGGGGCGCATGGTCGATCCGCG CTATTATGATTATTACGGGCGTATGCATGACCATGACAGATATTATGGAAGATCGATGTTTAACCAGGGT CATTCAATGGACAGCCAACGCTATGGTGGTTGGATGGACAATCCGGAGCGCTATATGGATATGTCTGGTT ATCAGATGGATATGCAGGGTCGTTGGATGGACGCCCAGGGACGGTTCAATAACCCATTCGGACAGATGTG GCATGGTCGTCAGGGCCATTACCCGGGTTATATGTCCAGCCACTCAATGTATGGTAGAAACATGTACAAC CCGTATCATAGTCATTATGCTAGCCGCCATTTTGATAGCCCTGAACGGTGGATGGATATGAGTGGGTACC AAATGGATATGCAAGGTAGATGGATGGATAATTATGGACGGTACGTAAATCCTTTTAACCACCACATGTA CGGTCGGAATATGTGCTATCCGTACGGCAACCACTATTACAACCGGCACATGGAACATCCGGAACGTTAT ATGGATATGTCTGGTTACCAAATGGATATGCAAGGGCGCTGGATGGATACACATGGTCGCCATTGTAATC CGTTTGGCCAGATGTGGCATAACAGACACGGGTACTATCCGGGTCATCCGCATGGCCGAAATATGTTTCA GCCAGAACGTTGGATGGATATGAGTGGCTATCAAATGGATATGCAGGGGCGGTGGATGGACAATTACGGC AGATACGTTAACCCATTCAGCCATAATTATGGTCGCCATATGAATTACCCGGGGGGTCATTATAACTATC ACCATGGCCGGTATATGAACCACCCCGAAAGACACATGGACATGTCCTCATATCAGATGGATATGCATGGC AGATGGATGGATAATCAAGGACGTTACATTGATAATTTTGATCGTAACTATTATGACTATCACATGTATT AA

Synthesis complexity: Twist flagged this sequence as “Complex” with 17 warnings β€” high repeat density and multiple repeat regions throughout the sequence. Reflectin’s amino acid sequence is highly repetitive (the motif YMDMSGYQMDMQGRWMD appears several times), and the underlying protein repetition still creates patterns that are hard to synthesize even after optimization. This is the same challenge the TAs described in recitation about spider silk proteins.

4. Producing the Protein

To produce reflectin from this DNA sequence, I would use a cell-dependent method by putting the DNA into living E. coli and letting them produce it:

  • Expression cassette: The coding sequence needs to be wrapped with a promoter (“start transcribing here”), a ribosome binding site (so the ribosome knows where to land on the mRNA), and a terminator (“stop transcribing”).
  • Insert into a plasmid: The expression cassette gets placed into a circular plasmid, which also carries an origin of replication (so the bacteria copy it when they divide) and an antibiotic resistance gene (to filter).
  • Transform into E. coli: Using heat shock β€” the bacteria are chilled, the plasmid DNA is added, then a brief heat pulse causes temporary openings in the cell membrane allowing plasmids to enter. Cooled again to close the membrane.
  • Grow: The bacteria are plated on media with antibiotics so only the ones carrying the plasmid (and its resistance gene) survive.
  • Transcription and translation: The E. coli’s own RNA polymerase reads the DNA and creates mRNA (transcription). Then the cell’s ribosomes read the mRNA codons and build the reflectin protein chain using tRNA (translation).
  • Protein: The bacteria are broken open to release the protein inside.

Prepare a Twist DNA Synthesis Order

1. Build DNA Insert Sequence

I built an expression cassette in Benchling by stitching together all the regulatory parts needed for E. coli to read and produce my reflectin protein. The parts, in order:

PartDescription
Promoter (BBa_J23106)Constitutive promoter β€” always on
RBS (BBa_B0034)Ribosome binding site β€” tells ribosome where to land
Start Codon (ATG)Begin translation
Reflectin A1 (codon-optimized)My coding sequence from previous section
His Tag (7Γ—His)For protein purification
Stop Codon (TAA)End translation
Terminator (BBa_B0015)Stop transcription

Expression cassette linear map Expression cassette linear map Linear map of the Reflectin A1 expression cassette in Benchling (1,260 bp), showing all annotated parts.

Benchling sequence link | Download FASTA | Download GenBank

2. Upload to Twist & Choose Vector

I exported the expression cassette as a FASTA file and uploaded it to Twist as a Clonal Gene using the nucleotide sequence import option. I selected pTwist Amp High Copy as the backbone vector, which provides ampicillin resistance and a high-copy origin of replication. Twist inserts the expression cassette into this backbone to complete the circular plasmid.

I downloaded the full construct as a GenBank file and imported it back into Benchling:

Final plasmid Final plasmid The complete plasmid in Benchling - Reflectin A1 expression cassette inserted into the pTwist Amp High Copy backbone.

DNA Read/Write/Edit

1. DNA Read

What DNA would I want to sequence and why?

I want to sequence DNA that is used for digital data storage β€” DNA molecules encoding binary information like images, text, or other digital files. The concept is taking digital data (0s and 1s), mapping it onto DNA bases (A, T, G, C), synthesizing those sequences, and storing them physically. DNA is incredibly dense as a storage medium and it lasts without power. George Church’s lab demonstrated this in 2012 by encoding an entire book into DNA.

I am interested in the reading-back problem. Storing data in DNA is only useful if we can reliably retrieve it later, which means sequencing the DNA and decoding it back into the original binary. With the right sequencing technology for retrieval, DNA data storage could become practical for things like archiving cultural heritage, scientific datasets, or even personal data.

What technology would I use?

I would use nanopore sequencing, such as Oxford Nanopore’s MinION device. For DNA data storage, portability matters so that we could read data anywhere outside of just biofacilities.

This is a third-generation sequencing technology: it reads single molecules of DNA directly, without needing to copy the DNA first that rely on PCR amplification which can introduce copying errors.

Input and preparation: The input is the DNA sample containing the encoded data.

  1. Library preparation: Attach adapter sequences to the ends of the DNA molecules. They are short DNA sequences with a motor protein attached that guides the strand into the nanopore.
  2. No PCR amplification needed: Nanopore sequencing reads native single molecules, so you skip the amplification step that other methods require. This is faster and avoids errors introduced by copying.
  3. Load onto the flow cell: Pipette the prepared library onto the MinION flow cell, which contains an array of nanopore proteins embedded in a membrane.

Base calling: Each nanopore is a tiny protein channel in an electrically charged membrane. A voltage drives ionic current through the pore, and when a DNA strand gets fed through by a motor protein, each base (A, T, G, C) blocks the current slightly differently because of its unique size and charge. The device measures these current fluctuations in real time, and a machine learning algorithm figures out the sequence from the pattern of electrical shadow each base casts as it squeezes through a tiny hole.

Output: The outputs are long reads of continuous sequences that can be tens of thousands to millions of bases long and they show up in real time, so we can start seeing results within minutes. For DNA data storage, these reads would be decoded back into binary using whatever encoding scheme was used to write the data.

2. DNA Write

What DNA would I want to synthesize and why?

I want to synthesize a mechanosensitive genetic circuit, a system where living cells can detect physical pressure and produce a visible response. The core component would be MscL (Mechanosensitive Channel of Large Conductance), a protein found in E. coli that acts as a pressure-activated gate in the cell membrane. When the cell experiences mechanical force, MscL opens and allows ions to flow through, which can be wired to trigger gene expression.

The full circuit would involve multiple genes working together: MscL as the sensor, a signal transduction pathway that converts the mechanical input into a transcriptional response, and a fluorescent reporter (like sfGFP) as the visible output. When the cells experience pressure, they glow. What excites me about this is that it’s essentially a biological touch sensor but with living cells instead of electronics. Embedding these cells in a material creates a surface that visually responds to touch.

The DNA I’d need to synthesize would include: the MscL gene (codon-optimized for E. coli), a synthetic promoter responsive to the downstream signal, the sfGFP reporter gene, and the necessary regulatory parts (RBS, terminators).

What technology would I use?

I would use phosphoramidite chemical synthesis, which is the method companies like Twist Bioscience use. This is currently the standard for synthesizing custom DNA sequences.

Essential steps:

  1. Sequence design: Design the full multi-gene circuit digitally, codon-optimize for E. coli, and check for synthesis constraints (repeats, GC content, homopolymers).
  2. Oligonucleotide synthesis: Short single-stranded DNA fragments (~200 bases) are built one base at a time on a solid support. Each cycle adds one nucleotide through a chemical reaction, with about 99% efficiency per step.
  3. Assembly: The short oligos are assembled into longer sequences through overlapping ends.
  4. Cloning and verification: The assembled gene is inserted into a plasmid, transformed into E. coli, grown and then sequenced to verify.

Limitations:

  • Length: Phosphoramidite chemistry has a practical limit of about 200 bases per oligo because the ~99% per-step yield compounds.
  • Repetitive sequences: As I saw with reflectin, repetitive protein motifs create repetitive DNA that is hard to synthesize accurately.
  • GC content: Sequences with very high or very low GC content are harder to synthesize because they affect the secondary structure of the DNA during the chemical process.

3. DNA Edit

What DNA would I want to edit and why?

I want to edit the MSTN gene (myostatin) in human muscle cells. Myostatin is a protein that signals muscles to stop growing once they reach a certain size. This makes sense developmentally, but as humans age, muscle mass naturally declines (sarcopenia), leading to frailty, falls, and loss of independence. By editing the myostatin gene, we could preserve muscle mass well into old age.

Myostatin knockouts have been demonstrated across multiple animal species. There are famously muscular “mighty mice” with the gene disabled, and Belgian Blue cattle naturally carry a myostatin mutation that gives them dramatically increased muscle mass. A few humans have been documented with natural myostatin mutations and they show unusually high muscle mass with no apparent negative health effects.

What technology would I use?

I would use CRISPR-Cas9, the most widely used gene editing system. It was adapted from a bacterial immune defense mechanism and has become the standard tool for making precise edits to DNA in living cells. It has two components: the Cas9 protein (molecular scissors that cut DNA) and a guide RNA (a short sequence that tells Cas9 exactly where to cut for gene editing, designed to match the target sequence).

Preparation and steps:

  1. Design a guide RNA (~20 nucleotides) matching a region of the MSTN gene, adjacent to a PAM sequence (short DNA motif that Cas9 requires to bind).
  2. Assemble the components: Cas9 protein + guide RNA into a ribonucleoprotein complex. RNP delivery is preferred for therapeutic use because it degrades quickly, reducing the risk of unintended edits.
  3. Deliver to muscle cells using a viral vector injected into muscle tissue, or lipid nanoparticles.
  4. Cas9 cuts the MSTN gene: Once inside the cell, the guide RNA directs Cas9 to the myostatin gene. Cas9 cuts both DNA strands at that spot.
  5. Cell repair disrupts the gene: The cell tries to repair the break using a process called non-homologous end joining (NHEJ), which often introduces small insertions or deletions at the cut site which disrupt the gene’s reading frame, effectively no longer producing functional myostatin.

Limitations:

  • Off-target edits: The guide RNA might bind to similar sequences elsewhere in the genome and cause unintended cuts.
  • Delivery: Getting CRISPR into enough muscle cells across the body is hard. Vectors have limited capacity and can trigger immune responses.
  • Mosaic results: Not every cell gets edited, so you end up with a mix of edited and unedited cells. The effect depends on hitting enough of them.
  • Irreversibility: Once knocked out, you can’t easily turn the gene back on if something goes wrong.
  • Ethical and regulatory concerns: Editing healthy human genomes for enhancement (rather than treating disease) raises significant ethical questions.

Week 3 HW: Lab Automation

Post-Lab Qeustions

1. Paper Review: Automation for Novel Biology

Usai et al. (2023) β€” “Design and biofabrication of bacterial living materials with robust and multiplexed biosensing capabilities” β€” Materials Today Bio (open access)

This paper uses a CELLINK INKREDIBLE+ 3D bioprinter, a pneumatic-based, dual-head, computer-controlled extrusion system, to fabricate engineered living materials (ELMs) with spatially arranged bacterial biosensors. The automation principle is similar to the Opentrons where CAD-designed structures are translated into G-code instructions that control precise deposition of biological materials at defined spatial coordinates.

The authors embedded engineered E. coli strains into an alginate/gelatin hydrogel bioink, then used the bioprinter’s dual printheads to deposit different strain-contained bioinks into adjacent separate compartments, creating material structure and biological pattern. Each strain contains a synthetic gene circuit that produces a visible color change (red fluorescent protein) in response to a specific chemical input including quorum sensing molecules (VAI/PAI), IPTG, and tetracycline.

The novel application is the multi-strain spatial logic that automation enables. They built several configurations that would be impossible to fabricate by hand at this precision:

  • A level-bar readout β€” four compartments containing the same VAI sensor but with different promoter strengths (from the Anderson promoter library), so each bar activates at a different chemical concentration threshold which can be used to estimate the analyte concentration range.
  • A shuriken-shaped AND gate β€” 4 compartments each have its own sensing system; one compartment is a boolean logic gate only turns red when both IPTG and VAI are present.
  • A cell-cell communication device β€” two strain types printed in adjacent compartments: a sender strain produces VAI when triggered, and the signal molecule diffuses through the hydrogel to activate a receiver strain (turns red) in an adjacent compartment, creating emergent spatial patterns based on geometry.

The materials were validated in real-world conditions including non-sterile soil, tap water, and clinical bronchial aspirate samples from P. aeruginosa-infected patients, demonstrating that automation-fabricated biosensing materials can function outside the lab. Cell viability persisted over 15 days with periodic subculturing, and the materials remained functional after one month of refrigerated storage.

This paper is directly related to my interest in wearable biosensor arrays using cell-free systems rather than living cells, but the core concept of spatially arranged biosensors that produce colorimetric outputs with built-in signal processing is shared. The automation-enabled precision of multi-compartment spatial arrangement from this paper is inspiring to me.

2. Automation Plan for Final Project

My idea for the final project is to use freeze-dried cell-free (FDCF) reaction spots deposited in a designed spatial array with layered computation capability. When rehydrated, sender spots produce a diffusible signal molecule that travels and activates receiver spots at neighboring positions, producing color. Inspired by the level-bar readout in the paper, receivers contain different concentrations of toehold switch sensor, giving it a different activation threshold. The emergent pattern is non-uniform gradient arising from spatial diffusion distance and engineered sensitivity thresholds.

The emergent pattern depends on three variables: sender/receiver distance, sender concentration, and receiver sensitivity. I intend to use automation in 2 possible ways:

1. Sender/receiver pair screening via Ginkgo Nebula (cloud lab)

Before spatial exploration, I need to identify which cell-free formulations work (individual validation) and which sender/receiver pairs successfully communicate (pair activation). This is suited for cloud lab automation:

  1. Echo transfer receiver toehold switch variants + trigger molecules (single validation), and sender reaction outputs + receiver variants (pair screening), into wells
  2. Bravo stamp in cell-free TX-TL master mix
  3. Multiflo dispense cell-free lysate to start expression
  4. PlateLoc seal the plate
  5. Inheco incubate at 30–37Β°C for 1–4 hours
  6. XPeel remove seal
  7. PHERAstar read colorimetric/fluorescent output

This screens: (a) which receivers produce color when triggered directly, and (b) whether the sender reaction produces enough signal to activate those validated receivers at realistic concentrations.

2. Diffusion-gradient screening via Opentrons OT-2

With validated sender/receiver pairs from Stage 1, I would use the Opentrons to deposit sender and receiver spots to test spatial configurations on my final material (possibly textiles) to find which produce the most compelling emergent patterns. I would need to design a 3D-printed holder for my material to mount on the OT-2 deck.

I used Claude to help understand, develop, and refine this automation plan.

Subsections of Labs

Week 1: Pipetting

cover image cover image

Week 2: DNA Gel Art

cover image cover image

Design

Coming from a design background, I find it really interesting that DNA digestion patterns could be treated as a visual medium. I played around with Ronan’s gel art website trying different combination of digest results and I found some band patterns that generated a robot design. After I landed on the design, I used benchling to perform the virtual digest with the corresponding enzymes.

Design using Ronan’s website Design using Ronan’s website Ronan’s website allowed me to scroll through different enzyme combinations and randomize to see what patterns came up, which was much faster for exploring visual patterns.

Virtual digest in Benchling Virtual digest in Benchling Benchling virtual digest of my final 6-lane design, showing predicted band sizes for each enzyme combination against the 1 Kb Plus Thermo ladder.

Lane Assignments

My final design uses 6 lanes cut with different restriction enzyme combinations, mirrored across the center:

Lane assignments Lane assignments

Restriction Digest Preparation

Each digest reaction was prepared in a PCR tube with the following components:

Restriction digest recipe Restriction digest recipe *Reaction setup for each lane. Each tube contained water, CutSmart buffer, Lambda DNA, and the specific enzyme(s). *

The reactions were incubated at 37Β°C for 30 minutes to allow the enzymes to fully cut the DNA.

Lab Process

Step 1: Prepare the TAE buffer and agarose gel

We used 1Γ— TAE buffer to mix with agarose powder. The flask was microwaved until the cloudy color became completely clear as the solution just bagan to have some bubbles.

Dissolving agarose in the microwave Dissolving agarose in the microwave Waiting for the solution to cool down

Step 2: Add DNA stain and pour the gel

Once the agarose cooled slightly, we added a small amount of SYBR Safe DNA stain which made the solution tinted pink.

SYBR Safe DNA stain SYBR Safe DNA stain The SYBR Safe stain next to the flask of melted agarose.

We then poured the gel into the casting tray with the comb in place and waited for it to solidify.

Poured gel solidifying in the tray Poured gel solidifying in the tray The gel cast in the electrophoresis tray with the comb creating wells at the top.

Step 3: Prepare the digest reactions

While waiting for the gel, we prepared the restriction digest reactions. Each tube was labeled 1-6 corresponding to our lane design. We pipetted water, CutSmart buffer, Lambda DNA, and the specific enzymes into each tube.

Preparing digest reactions Preparing digest reactions Pipetting enzymes and Lambda DNA stored on ice.

This was the most challenging part because the micropipetting was tricky. It was hard to tell whether we had the right amount, since the volumes are so small they’re essentially invisible in the pipette tip.

Labeled digest tubes Labeled digest tubes Six labeled digest tubes ready for incubation.

Step 4: Add loading dye and load the gel

After incubation, we added loading dye to each reaction which would help us visually track how far the gel has run.

Adding loading dye Adding loading dye Adding loading purple dye to the digest reactions before loading into the gel.

We then filled casting wells with 1x TAE and loaded 20 uL of each samples

Step 5: Run the gel

Once loaded, we connected the electrodes and started running the gel. We noticed bubbles in the TAE buffer when the elctricity is on.

Gel electrophoresis running Gel electrophoresis running The electrophoresis setup running.

Gel electrophoresis running Gel electrophoresis running Small bubbles rising to surface

We ran it for about 45 minutes to allow the DNA to travel more than halfway throught the gel.

Results

Gel result β€” printed from imager Gel result β€” printed from imager Printed gel image from the lab imager

Gel result β€” digital capture Gel result β€” digital capture Digital gel result

The symmetric design concept came through but the overall image was fainter and the lower section was not visible. Possible reasons might be too little DNA samples and shorter runtimes.

Week 3: Opentrons Art

cover image cover image

Design

I designed a mandala-inspired symmetrical pattern using the Opentrons Art Interface, drawing on the visual language of radial symmetry. The script was exported from the GUI and ran on the Opentrons software

Design in the Opentrons Art GUI Design in the Opentrons Art GUIDesign in the Opentrons Art GUI Design in the Opentrons Art GUI

Python Script

from opentrons import types
import string

metadata = {
    'protocolName': '{ANNIE} - Opentrons Art - HTGAA',
    'author': 'HTGAA',
    'source': 'HTGAA 2026',
    'apiLevel': '2.20'
}

Z_VALUE_AGAR = 2.0
POINT_SIZE = 0.75

mjuniper_points = [(-1,31), (1,31), (-13,27), (-11,27), (-1,27), (1,27), (11,27), (13,27), (-15,25), (-13,25), (-1,25), (1,25), (13,25), (15,25), (-5,21), (5,21), (-19,19), (-7,19), (-3,19), (3,19), (7,19), (19,19), (-27,17), (-19,17), (-1,17), (1,17), (19,17), (27,17), (-7,15), (7,15), (-23,13), (-21,13), (-19,13), (19,13), (21,13), (23,13), (-7,11), (7,11), (21,11), (-15,9), (15,9), (-19,7), (-17,7), (17,7), (19,7), (-5,5), (5,5), (-29,3), (29,3), (-31,1), (-29,1), (29,1), (31,1), (-31,-1), (-29,-1), (29,-1), (31,-1), (-29,-3), (29,-3), (-5,-5), (5,-5), (-19,-7), (-17,-7), (17,-7), (19,-7), (-15,-9), (15,-9), (-21,-11), (-7,-11), (7,-11), (21,-11), (-21,-13), (-19,-13), (19,-13), (21,-13), (-7,-15), (7,-15), (-27,-17), (-19,-17), (-1,-17), (1,-17), (19,-17), (27,-17), (-19,-19), (-7,-19), (-3,-19), (3,-19), (19,-19), (-5,-21), (5,-21), (-15,-25), (-13,-25), (-1,-25), (1,-25), (13,-25), (15,-25), (-13,-27), (-11,-27), (-1,-27), (1,-27), (11,-27), (13,-27), (-1,-31), (1,-31)]
mko2_points = [(-3,27), (3,27), (-11,25), (-5,25), (-3,25), (3,25), (5,25), (11,25), (-11,23), (-9,23), (-3,23), (3,23), (9,23), (11,23), (-15,21), (-11,21), (11,21), (15,21), (-15,19), (-13,19), (-1,19), (1,19), (13,19), (15,19), (-13,17), (13,17), (-23,15), (-21,15), (-19,15), (-11,15), (-5,15), (5,15), (11,15), (19,15), (21,15), (-27,13), (-11,13), (-7,13), (-3,13), (3,13), (7,13), (11,13), (27,13), (-25,11), (-5,11), (-3,11), (3,11), (5,11), (25,11), (-23,9), (-21,9), (-11,9), (-9,9), (-5,9), (-3,9), (3,9), (5,9), (9,9), (11,9), (21,9), (23,9), (-11,7), (-7,7), (-5,7), (-3,7), (3,7), (5,7), (7,7), (11,7), (-13,5), (-3,5), (-1,5), (1,5), (3,5), (13,5), (-25,3), (-3,3), (3,3), (25,3), (-27,1), (-25,1), (-23,1), (-11,1), (-9,1), (-7,1), (-5,1), (5,1), (7,1), (9,1), (11,1), (23,1), (25,1), (27,1), (-27,-1), (-25,-1), (-23,-1), (-11,-1), (-9,-1), (-7,-1), (-5,-1), (5,-1), (7,-1), (9,-1), (11,-1), (23,-1), (25,-1), (27,-1), (-25,-3), (-3,-3), (3,-3), (25,-3), (-13,-5), (-3,-5), (-1,-5), (1,-5), (3,-5), (13,-5), (-11,-7), (-7,-7), (-5,-7), (-3,-7), (3,-7), (5,-7), (7,-7), (-23,-9), (-21,-9), (-11,-9), (-9,-9), (-5,-9), (-3,-9), (3,-9), (5,-9), (9,-9), (11,-9), (21,-9), (23,-9), (-25,-11), (-5,-11), (-3,-11), (3,-11), (5,-11), (25,-11), (-27,-13), (-11,-13), (-7,-13), (-3,-13), (3,-13), (7,-13), (11,-13), (27,-13), (-21,-15), (-19,-15), (-11,-15), (-5,-15), (5,-15), (11,-15), (19,-15), (21,-15), (-13,-17), (13,-17), (-17,-19), (-15,-19), (-13,-19), (-1,-19), (13,-19), (15,-19), (-17,-21), (-15,-21), (-11,-21), (11,-21), (15,-21), (-11,-23), (-9,-23), (-3,-23), (3,-23), (9,-23), (11,-23), (-11,-25), (-5,-25), (-3,-25), (3,-25), (5,-25), (11,-25), (-3,-27), (3,-27)]
mrfp1_points = [(-3,31), (3,31), (-5,29), (-3,29), (-1,29), (1,29), (3,29), (5,29), (-17,27), (-15,27), (-7,27), (-5,27), (5,27), (7,27), (15,27), (17,27), (-17,25), (-7,25), (7,25), (17,25), (-17,23), (-15,23), (-7,23), (7,23), (15,23), (17,23), (-7,21), (7,21), (-11,19), (-9,19), (9,19), (11,19), (-25,17), (-23,17), (-17,17), (-15,17), (-11,17), (-9,17), (-7,17), (7,17), (9,17), (11,17), (15,17), (17,17), (23,17), (25,17), (-27,15), (-13,15), (-3,15), (3,15), (13,15), (23,15), (27,15), (-17,13), (-13,13), (-9,13), (9,13), (13,13), (17,13), (-27,11), (-23,11), (-13,11), (-11,11), (11,11), (13,11), (23,11), (27,11), (-25,9), (25,9), (-27,7), (-25,7), (-23,7), (-15,7), (-13,7), (13,7), (15,7), (23,7), (25,7), (27,7), (-29,5), (-25,5), (-23,5), (-17,5), (-15,5), (15,5), (17,5), (23,5), (25,5), (29,5), (-31,3), (-27,3), (-21,3), (-19,3), (-17,3), (-15,3), (-5,3), (5,3), (15,3), (17,3), (19,3), (21,3), (27,3), (31,3), (-21,1), (-19,1), (-13,1), (13,1), (19,1), (21,1), (-21,-1), (-19,-1), (-13,-1), (13,-1), (19,-1), (21,-1), (-31,-3), (-27,-3), (-21,-3), (-19,-3), (-17,-3), (-15,-3), (-5,-3), (5,-3), (15,-3), (17,-3), (19,-3), (21,-3), (27,-3), (31,-3), (-29,-5), (-25,-5), (-23,-5), (-17,-5), (-15,-5), (15,-5), (17,-5), (23,-5), (25,-5), (29,-5), (-27,-7), (-25,-7), (-23,-7), (-15,-7), (-13,-7), (13,-7), (15,-7), (23,-7), (25,-7), (27,-7), (-25,-9), (25,-9), (-27,-11), (-23,-11), (-13,-11), (-11,-11), (11,-11), (13,-11), (23,-11), (27,-11), (-17,-13), (-13,-13), (-9,-13), (9,-13), (13,-13), (17,-13), (-27,-15), (-23,-15), (-13,-15), (-3,-15), (3,-15), (13,-15), (23,-15), (27,-15), (-25,-17), (-23,-17), (-17,-17), (-15,-17), (-11,-17), (-9,-17), (-7,-17), (7,-17), (9,-17), (11,-17), (15,-17), (17,-17), (23,-17), (25,-17), (-11,-19), (-9,-19), (9,-19), (11,-19), (-7,-21), (7,-21), (-17,-23), (-15,-23), (-7,-23), (7,-23), (15,-23), (17,-23), (-17,-25), (-7,-25), (7,-25), (17,-25), (-17,-27), (-15,-27), (-7,-27), (-5,-27), (5,-27), (7,-27), (15,-27), (17,-27), (-5,-29), (-3,-29), (-1,-29), (1,-29), (3,-29), (5,-29), (-3,-31), (3,-31)]
mclover3_points = [(-5,23), (5,23), (-3,21), (3,21), (-17,19), (-5,19), (5,19), (17,19), (-25,15), (25,15), (-11,5), (11,5), (-9,3), (9,3), (-9,-3), (9,-3), (-11,-5), (11,-5), (11,-7), (-25,-15), (25,-15), (-5,-19), (1,-19), (5,-19), (17,-19), (-3,-21), (3,-21), (-5,-23), (5,-23)]
sfgfp_points = [(-21,11), (-23,-13), (23,-13)]

point_name_pairing = [("mjuniper", mjuniper_points),("mko2", mko2_points),("mrfp1", mrfp1_points),("mclover3", mclover3_points),("sfgfp", sfgfp_points)]

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

well_colors = {
    'A1': 'sfGFP', 'A2': 'mRFP1', 'A3': 'mKO2', 'A4': 'Venus',
    'A5': 'mKate2_TF', 'A6': 'Azurite', 'A7': 'mCerulean3', 'A8': 'mClover3',
    'A9': 'mJuniper', 'A10': 'mTurquoise2', 'A11': 'mBanana', 'A12': 'mPlum',
    'B1': 'Electra2', 'B2': 'mWasabi', 'B3': 'mScarlet_I', 'B4': 'mPapaya',
    'B5': 'eqFP578', 'B6': 'tdTomato', 'B7': 'DsRed', 'B8': 'mKate2',
    'B9': 'EGFP', 'B10': 'mRuby2', 'B11': 'TagBFP', 'B12': 'mChartreuse_TF',
    'C1': 'mLychee_TF', 'C2': 'mTagBFP2', 'C3': 'mEGFP', 'C4': 'mNeonGreen',
    'C5': 'mAzamiGreen', 'C6': 'mWatermelon', 'C7': 'avGFP', 'C8': 'mCitrine',
    'C9': 'mVenus', 'C10': 'mCherry', 'C11': 'mHoneydew', 'C12': 'TagRFP',
    'D1': 'mTFP1', 'D2': 'Ultramarine', 'D3': 'ZsGreen1', 'D4': 'mMiCy',
    'D5': 'mStayGold2', 'D6': 'PA_GFP'
}

volume_used = {
    'mjuniper': 0, 'mko2': 0, 'mrfp1': 0, 'mclover3': 0, 'sfgfp': 0
}

def update_volume_remaining(current_color, quantity_to_aspirate):
    rows = string.ascii_uppercase
    for well, color in list(well_colors.items()):
        if color == current_color:
            if (volume_used[current_color] + quantity_to_aspirate) > 250:
                row = well[0]
                col = well[1:]
                next_row = rows[rows.index(row) + 1]
                next_well = f"{next_row}{col}"
                del well_colors[well]
                well_colors[next_well] = current_color
                volume_used[current_color] = quantity_to_aspirate
            else:
                volume_used[current_color] += quantity_to_aspirate
            break

def run(protocol):
    protocol.home()
    tips_20ul = protocol.load_labware('opentrons_96_tiprack_20ul', TIP_RACK_DECK_SLOT, 'Opentrons 20uL Tips')
    pipette_20ul = protocol.load_instrument("p20_single_gen2", "right", [tips_20ul])
    temperature_plate = protocol.load_labware('opentrons_96_aluminumblock_generic_pcr_strip_200ul', 6)
    agar_plate = protocol.load_labware('htgaa_agar_plate', AGAR_DECK_SLOT, 'Agar Plate')
    agar_plate.set_offset(x=0.00, y=0.00, z=Z_VALUE_AGAR)
    center_location = agar_plate['A1'].top()
    pipette_20ul.starting_tip = tips_20ul.well(PIPETTE_STARTING_TIP_WELL)

    def dispense_and_jog(pipette, volume, location):
        assert(isinstance(volume, (int, float)))
        above_location = location.move(types.Point(z=location.point.z + 2))
        pipette.move_to(above_location)
        pipette.dispense(volume, location)
        pipette.move_to(above_location)

    def location_of_color(color_string):
        for well, color in well_colors.items():
            if color.lower() == color_string.lower():
                return temperature_plate[well]
        raise ValueError(f"No well found with color {color_string}")

    for i, (current_color, point_list) in enumerate(point_name_pairing):
        if not point_list:
            continue
        pipette_20ul.pick_up_tip()
        max_aspirate = int(18 // POINT_SIZE) * POINT_SIZE
        quantity_to_aspirate = min(len(point_list)*POINT_SIZE, max_aspirate)
        update_volume_remaining(current_color, quantity_to_aspirate)
        pipette_20ul.aspirate(quantity_to_aspirate, location_of_color(current_color))

        for i in range(len(point_list)):
            x, y = point_list[i]
            adjusted_location = center_location.move(types.Point(x, y))
            dispense_and_jog(pipette_20ul, POINT_SIZE, adjusted_location)
            if pipette_20ul.current_volume == 0 and len(point_list[i+1:]) > 0:
                quantity_to_aspirate = min(len(point_list[i:])*POINT_SIZE, max_aspirate)
                update_volume_remaining(current_color, quantity_to_aspirate)
                pipette_20ul.aspirate(quantity_to_aspirate, location_of_color(current_color))
        pipette_20ul.drop_tip()

Printing

The OT-2 dispensed 0.75 Β΅L drops of each fluorescent strain onto the charcoal agar plate.

Opentrons OT-2 dispensing onto the agar plate Opentrons OT-2 dispensing onto the agar plate Printing in progress Printing in progress

Result

After overnight incubation, the plate was imaged under UV light.

Final plate under UV illumination Final plate under UV illumination

Subsections of Projects

Individual Final Project

cover image cover image

Group Final Project

cover image cover image