Subsections of Homeworks
Week 1: Principles and Practices
General Objective To develop a grape-pomace biocuir with antimicrobial properties through the incorporation of metabolites produced using synthetic biology techniques, intended for the fabrication of tablecloths, kitchen coverings, and bathmats to improve community health among the Kumiai Indigenous population in San Antonio Necua, Baja California, Mexico.
Objective of Introducing Antimicrobial Metabolites To incorporate antimicrobial metabolites into the grape-pomace biocuir developed by Xquenda_Lab at El Colef, in collaboration with the Autonomous University of Baja California (UABC) and the Kumiai community of San Antonio Necua.
Concept and expected outcome of the project (Copilot prompt: how to incorporate synthetic biology principles into the production of an antimicrobial biocuir based on grape pomace using the following biocuir recipes developed by Xqueda_lab)
The project develops a biocuir made from grape pomace, reinforced with natural biopolymers (gelatin, starch, glycerin, natural latex) and enriched with antimicrobial metabolites produced through synthetic biology principles in wet lab facilities at Autonomous University of Baja California (UABC). These metabolites—purified and microencapsulated—are incorporated into the orujo based bioleather to create protective surfaces that reduce bacterial and fungal proliferation in rural domestic environments.
The antimicrobial Metabolites developed and introduced into the biocuir will be: • For kitchen surfaces (gastrointestinal risks): o Lactic acid o Acetic acid o Mild terpenes (limonene, low dose carvacrol) • For bathroom and humid surfaces (respiratory and fungal risks): o Biosurfactants (surfactin or sophorolipids) o Antifungal terpenes (thymol, carvacrol)
These compounds will be produced using GRAS microorganisms genetically engineered in UABC wet laboratory. Only purified metabolites are transferred to Xquenda_lab and the Kumiai community to be incorporated into the biocuir -never living organisms. Expected Outcome.
A community oriented antimicrobial orujo based biocuir, produced by Kumiai indigenous people in Xquenda_Lab – El Colef facilities at the Gadalupe Valley, in coordination with researchers from UABC. The biocuir will be used as: • Antimicrobial tablecloths • Kitchen surface covers • Bathroom mats • Protective domestic surfaces The antimicrobial orujo based biocuir is: • Microbially protective • Biodegradable and safe • Adaptable and manufacturable by the Kumiai community in Xquenda_lab - El Colef facilities at the Gaudalupe Valley. • A vehicle for citizen science learning, community health improvement, and social entrepreneurship owned by the Kumiai community from San Antonio Necua and Xquenda_lab.
GOVERNANCE AND ETHICS PROPOSAL (Copilot prompt: how to devrlop a governance system including Xquenda_lab, El colef, the Kumiai community and UABC as stakeholders to make a safe and ethical production of the Antimicrobial Biocuir Based on Grape Pomace making use of Synthetic Biology techniques to produce Metabolites)
Synthetic Biology for Community Benefit in an Indigenous Context A. Guiding Principles • Kumiai autonomy and collective decision making • Precaution and non harm • Radical transparency • Technology transfer • Epistemic equity (Indigenous knowledge = scientific knowledge) • Community benefit and shared outcomes • Respect for cultural identity and territorial rights
B. Actors and Responsibilities
Kumiai Community of San Antonio Necua • Collective decision making • Defining needs, uses, and priorities • Cultural and practical evaluation of prototypes • Right to pause, modify, or redirect the project
Xquenda_Lab (Public and Citizen Laboratory) • Space for technology transfer • Training in biomaterials and basic synthetic biology principles • Community based production of biocuir • Accessible documentation
UABC (Biologists, Engineers, Biotechnologists) • Genetic design and metabolite production • Exclusive handling of genetically modified organisms • Purification and characterization of metabolites • Ensuring biosafety and regulatory compliance
Project Governance Council • Kumiai representatives • Xquenda_Lab researchers • UABC researchers • El Colef observer
Functions of the Governance council: • Approve project directions • Evaluate risks and benefits • Oversee technology transfer • Validate educational materials • Resolve ethical questions
- Biosecurity and Scientific Ethics Committee • Review genetic constructs and metabolic pathways • Supervise handling of organisms in wet lab settings • Ensure safe disposal of biological waste • Continuous risk assessment
C. Key Governance Processes
Collective Informed Consent • Open assemblies • Clear explanation of synthetic biology and metabolites • Recorded community agreements
Technology Transfer • Hands on training in Xquenda_Lab • Accessible manuals • Formation of local “technology stewards”
Transparency and Communication • Open information on processes, risks, and results • Pedagogical materials in clear language
Intellectual Property and Data • Explicit recognition of Kumiai contributions • Avoid exclusionary patents • Explore communitarian, co ownership or open licenses • Protection of sensitive cultural knowledge
Community Benefits • Priority use in Kumiai comunities and households • Potential Kumiai/Xquenda product line • Fair distribution of income if commercialization occurs
Note: This is just a firt conceptual approach. I understand that might be very difficult to produce those metabolites. Therefore I might have to choose only one to produce it in large scale in order to encapsulated and include it into the biocuir.
| Does the option: | Option 1 | Option 2 | Option 3 |
|---|---|---|---|
| Enhance Biosecurity | |||
| • By preventing incidents | * | ||
| • By helping respond | |||
| Foster Lab Safety | |||
| • By preventing incident | * | ||
| • By helping respond | |||
| Protect the environment | |||
| • By preventing incidents | * | ||
| • By helping respond | |||
| Other considerations | |||
| • Minimizing costs and burdens to stakeholders | * | ||
| • Feasibility? | * | ||
| • Not impede research | * | ||
| • Promote constructive applications | * |
Preparation for lecture 2:
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? There are difere types of polomerase qualities and all of them have some kind of error. The leng of human genome is about 3.2 nillion pairs. Therefore corrections has to be made in any edition. Synthetic Biology deals with this big discrepancy by making corrections. For example a 10ns Base addition to the 1:10 error rate in the case of correcting Polimerase error in Biology synthesis as is shown in the slide 8 of the presentation.
- 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? There are two main different ways when it comes to code DNC: Chip based and non-chip based. In the case of the former many types of erros may happen depending of the choosen method; e.g. correction, reduction.
Homework Questions from Dr. LeProust:
- What’s the most commonly used method for oligo synthesis currently? Direct synthesis using wall plate. 96 wale plate makes 1 gen. With a silicon platform it is possible to have 1M oligos in a chip to make 9.600 genes.
- Why is it difficult to make oligos longer than 200nt via direct synthesis? Because chemical DNA synthesis is not perfectly efficient, and small errors accumulate with every added nucleotide. After ~200 cycles, the product becomes too impure and too heterogeneous to be useful (Direct answer from Copilot)
- Why can’t you make a 2000bp gene via direct oligo synthesis? Because chemical synthesis cannot reliably produce a single, accurate 2000 base molecule. The error rate and truncation rate make it chemically impossible (Direct answer from Copilot)
Homework Question from George Church: Choose ONE of the following three questions to answer; and please cite AI prompts or paper citations used, if any.
- [Using Google & Prof. Church’s slide #4] What are the 10 essential amino acids in all animals and how does this affect your view of the “Lysine Contingency”?
The “PVT TIM HALL” (Direct answer from Gemini to the question What are the 10 essential amino acids in all animals) The “PVT” Group • P – Phenylalanine: This is a precursor for signaling molecules like dopamine and adrenaline; it’s basically a building block for the “brain chemicals” that keep an animal alert. • V – Valine: One of the three “branched-chain” amino acids (BCAAs). It focuses on muscle growth, tissue repair, and providing extra energy when the body is stressed. • T – Threonine: This is a major component of structural proteins like collagen and elastin. It’s also vital for maintaining a healthy gut lining.
The “TIM” Group • T – Tryptophan: Best known as the precursor to serotonin. It helps regulate mood, sleep, and even the “fullness” feeling after eating. • I – Isoleucine: This BCAA is heavily concentrated in muscle tissue and is essential for producing hemoglobin (the stuff in blood that carries oxygen). • M – Methionine: A sulfur-rich amino acid that is crucial for metabolism, detoxifying the liver, and helping the body absorb minerals like zinc.
The “HALL” Group • H – Histidine: This is used to produce histamine, which is vital for the immune response, digestion, and maintaining the protective “sheaths” around nerve cells. • A – Arginine: While adult humans can make some, most animals (and human infants) need it from food to help remove toxic ammonia from the body via the urea cycle. • L – Leucine: Often called the “spark plug” for protein synthesis, this is the main amino acid that tells the body to start building and repairing muscle. • L – Lysine: This one is critical for bone health, the production of antibodies to fight off sickness, and the overall creation of enzymes and hormones. I believe the Lysine contingency hypothesis is very interesting if we think about it in relation to the Anthropocene and all the radical changes that are occurring in the world due to human activity. To think about the future where sources provide one of those 10 essential amino acids triggers some questions about how to synthetize and produce in a very efficient way some alternative source to get those amino acids. It also triggers some questions about the possibilities for humans to inhabit other planets and the importance of being sure about how to create an artificial environment able to produce in an efficient and sustainable way sources for those 10 essential amino acids.
- [Given slides #2 & 4 (AA:NA and NA:NA codes)] What code would you suggest for AA:AA interactions?
Week 2: DNA Read Write and Edit
Part 0: Basics of Gel Electrophoresis I watch the lecture on live and the recorded recitation video, However, when I wanted to review rhw recorded video ofr the lecture the link did not exist on the HTGAA 2026 page. However, we got via email a recording of the 2025 lecture.
Part 1: Benchling & In-silico Gel Art Intructions: See this week’s lab protocol “Gel Art: Restriction Digests and Gel Electrophoresis” for details. Overview:
Make a free account at benchling.com [Maxmatusbenchling](https://benchling.com/organizations/maxmatus)
Import the Lambda DNA (https://www.neb.com/en/-/media/nebus/page-images/tools-and-resources/interactive-tools/dna-sequences-and-maps/text-documents/lambdagbk.txt?rev=50c75f4579114750a9ad75d892d7d118&hash=EF15DDE468761F64D50E30418917B08D).
Simulate Restriction Enzyme Digestion with the following Enzymes:(https://benchling.com/xquenda_lab/enzyme-lists/22892)
EcoRI
HindIII
BamHI
KpnI
EcoRV
SacI
SalI
Create a pattern/image in the style of Paul Vanouse’s Latent Figure Protocol artworks.
You might find Ronan’s website a helpful tool for quickly iterating on designs!

**Part 3: DNA Design Challenge**
I choosed the protein P04439 · HLAA_HUMAN from the UniProt Database (https://www.uniprot.org/uniprotkb?query=Human)
I decide to choose this protein becouse it relates with human inmmunity and my finnal project is about how to develop a biomaterial to protect humans from some bacterias, so I found interesting this protein as starting point. Some of the characteristics assosiated to this protein according to UniProt are:
HLA class I histocompatibility antigen, A alpha chain · Gene: HLA-A (HLAA) · Homo sapiens (Human) · 365 amino acids · Evidence at protein level
The sequence of the P04439 · HLAA_HUMAN protein is:
>sp|O95905|ECD_HUMAN Protein ecdysoneless homolog OS=Homo sapiens OX=9606 GN=ECD PE=1 SV=1
MEETMKLATMEDTVEYCLFLIPDESRDSDKHKEILQKYIERIITRFAPMLVPYIWQNQPF NLKYKPGKGGVPAHMFGVTKFGDNIEDEWFIVYVIKQITKEFPELVARIEDNDGEFLLIE AADFLPKWLDPENSTNRVFFCHGELCIIPAPRKSGAESWLPTTPPTIPQALNIITAHSEK ILASESIRAAVNRRIRGYPEKIQASLHRAHCFLPAGIVAVLKQRPRLVAAAVQAFYLRDP IDLRACRVFKTFLPETRIMTSVTFTKCLYAQLVQQRFVPDRRSGYRLPPPSDPQYRAHEL GMKLAHGFEILCSKCSPHFSDCKKSLVTASPLWASFLESLKKNDYFKGLIEGSAQYRERL EMAENYFQLSVDWPESSLAMSPGEEILTLLQTIPFDIEDLKKEAANLPPEDDDQWLDLSP DQLDQLLQEAVGKKESESVSKEEKEQNYDLTEVSESMKAFISKVSTHKGAELPREPSEAP ITFDADSFLNYFDKILGPRPNESDSDDLDDEDFECLDSDDDLDFETHEPGEEASLKGTLD NLKSYMAQMDQELAHTCISKSFTTRNQVEPVSQTTDNNSDEEDSGTGESVMAPVDVDLNL VSNILESYSSQAGLAGPASNLLQSMGVQLPDNTDHRPTSKPTKN
Reverse Translate results
Results for 644 residue sequence “sp|O95905|ECD_HUMAN Protein ecdysoneless homolog OS=Homo sapiens OX=9606 GN=ECD PE=1 SV=1” starting “MEETMKLATM”
Reverse translation of sp|O95905|ECD_HUMAN Protein ecdysoneless homolog OS=Homo sapiens OX=9606 GN=ECD PE=1 SV=1 to a 1932 base sequence of most likely codons. atggaagaaaccatgaaactggcgaccatggaagataccgtggaatattgcctgtttctg attccggatgaaagccgcgatagcgataaacataaagaaattctgcagaaatatattgaa cgcattattacccgctttgcgccgatgctggtgccgtatatttggcagaaccagccgttt aacctgaaatataaaccgggcaaaggcggcgtgccggcgcatatgtttggcgtgaccaaa tttggcgataacattgaagatgaatggtttattgtgtatgtgattaaacagattaccaaa gaatttccggaactggtggcgcgcattgaagataacgatggcgaatttctgctgattgaa gcggcggattttctgccgaaatggctggatccggaaaacagcaccaaccgcgtgtttttt tgccatggcgaactgtgcattattccggcgccgcgcaaaagcggcgcggaaagctggctg ccgaccaccccgccgaccattccgcaggcgctgaacattattaccgcgcatagcgaaaaa attctggcgagcgaaagcattcgcgcggcggtgaaccgccgcattcgcggctatccggaa aaaattcaggcgagcctgcatcgcgcgcattgctttctgccggcgggcattgtggcggtg ctgaaacagcgcccgcgcctggtggcggcggcggtgcaggcgttttatctgcgcgatccg attgatctgcgcgcgtgccgcgtgtttaaaacctttctgccggaaacccgcattatgacc agcgtgacctttaccaaatgcctgtatgcgcagctggtgcagcagcgctttgtgccggat cgccgcagcggctatcgcctgccgccgccgagcgatccgcagtatcgcgcgcatgaactg ggcatgaaactggcgcatggctttgaaattctgtgcagcaaatgcagcccgcattttagc gattgcaaaaaaagcctggtgaccgcgagcccgctgtgggcgagctttctggaaagcctg aaaaaaaacgattattttaaaggcctgattgaaggcagcgcgcagtatcgcgaacgcctg gaaatggcggaaaactattttcagctgagcgtggattggccggaaagcagcctggcgatg agcccgggcgaagaaattctgaccctgctgcagaccattccgtttgatattgaagatctg aaaaaagaagcggcgaacctgccgccggaagatgatgatcagtggctggatctgagcccg gatcagctggatcagctgctgcaggaagcggtgggcaaaaaagaaagcgaaagcgtgagc aaagaagaaaaagaacagaactatgatctgaccgaagtgagcgaaagcatgaaagcgttt attagcaaagtgagcacccataaaggcgcggaactgccgcgcgaaccgagcgaagcgccg attacctttgatgcggatagctttctgaactattttgataaaattctgggcccgcgcccg aacgaaagcgatagcgatgatctggatgatgaagattttgaatgcctggatagcgatgat gatctggattttgaaacccatgaaccgggcgaagaagcgagcctgaaaggcaccctggat aacctgaaaagctatatggcgcagatggatcaggaactggcgcatacctgcattagcaaa agctttaccacccgcaaccaggtggaaccggtgagccagaccaccgataacaacagcgat gaagaagatagcggcaccggcgaaagcgtgatggcgccggtggatgtggatctgaacctg gtgagcaacattctggaaagctatagcagccaggcgggcctggcgggcccggcgagcaac ctgctgcagagcatgggcgtgcagctgccggataacaccgatcatcgcccgaccagcaaa ccgaccaaaaac
Reverse translation of sp|O95905|ECD_HUMAN Protein ecdysoneless homolog OS=Homo sapiens OX=9606 GN=ECD PE=1 SV=1 to a 1932 base sequence of consensus codons. atggargaracnatgaarytngcnacnatggargayacngtngartaytgyytnttyytn athccngaygarwsnmgngaywsngayaarcayaargarathytncaraartayathgar mgnathathacnmgnttygcnccnatgytngtnccntayathtggcaraaycarccntty aayytnaartayaarccnggnaarggnggngtnccngcncayatgttyggngtnacnaar ttyggngayaayathgargaygartggttyathgtntaygtnathaarcarathacnaar garttyccngarytngtngcnmgnathgargayaaygayggngarttyytnytnathgar gcngcngayttyytnccnaartggytngayccngaraaywsnacnaaymgngtnttytty tgycayggngarytntgyathathccngcnccnmgnaarwsnggngcngarwsntggytn ccnacnacnccnccnacnathccncargcnytnaayathathacngcncaywsngaraar athytngcnwsngarwsnathmgngcngcngtnaaymgnmgnathmgnggntayccngar aarathcargcnwsnytncaymgngcncaytgyttyytnccngcnggnathgtngcngtn ytnaarcarmgnccnmgnytngtngcngcngcngtncargcnttytayytnmgngayccn athgayytnmgngcntgymgngtnttyaaracnttyytnccngaracnmgnathatgacn wsngtnacnttyacnaartgyytntaygcncarytngtncarcarmgnttygtnccngay mgnmgnwsnggntaymgnytnccnccnccnwsngayccncartaymgngcncaygarytn ggnatgaarytngcncayggnttygarathytntgywsnaartgywsnccncayttywsn gaytgyaaraarwsnytngtnacngcnwsnccnytntgggcnwsnttyytngarwsnytn aaraaraaygaytayttyaarggnytnathgarggnwsngcncartaymgngarmgnytn garatggcngaraaytayttycarytnwsngtngaytggccngarwsnwsnytngcnatg wsnccnggngargarathytnacnytnytncaracnathccnttygayathgargayytn aaraargargcngcnaayytnccnccngargaygaygaycartggytngayytnwsnccn gaycarytngaycarytnytncargargcngtnggnaaraargarwsngarwsngtnwsn aargargaraargarcaraaytaygayytnacngargtnwsngarwsnatgaargcntty athwsnaargtnwsnacncayaarggngcngarytnccnmgngarccnwsngargcnccn athacnttygaygcngaywsnttyytnaaytayttygayaarathytnggnccnmgnccn aaygarwsngaywsngaygayytngaygaygargayttygartgyytngaywsngaygay gayytngayttygaracncaygarccnggngargargcnwsnytnaarggnacnytngay aayytnaarwsntayatggcncaratggaycargarytngcncayacntgyathwsnaar wsnttyacnacnmgnaaycargtngarccngtnwsncaracnacngayaayaaywsngay gargargaywsnggnacnggngarwsngtnatggcnccngtngaygtngayytnaayytn gtnwsnaayathytngarwsntaywsnwsncargcnggnytngcnggnccngcnwsnaay ytnytncarwsnatgggngtncarytnccngayaayacngaycaymgnccnacnwsnaar ccnacnaaraay
3.4. You have a sequence! Now what?
What technologies could be used to produce this protein from your DNA? Describe in your words the DNA sequence can be transcribed and translated into your protein. You may describe either cell-dependent or cell-free methods, or both.
To answere this question I used Copilot and privided the sequence that I got from the reverse translation of sp|O95905|ECD_HUMAN Protein. The reply was as follow:
Cell‑dependent systems:
Bacterial expression (e.g., E. coli) using a plasmid vector with a strong promoter (like T7).
Yeast or insect cells for eukaryotic expression.
Mammalian cells (e.g., HEK293, CHO) if proper human‑like folding or modifications are important.
Cell‑free systems:
E. coli lysate–based systems,
Wheat germ or rabbit reticulocyte lysates,
Or a PURE system with purified transcription/translation components.
In all cases, the same basic logic applies: the DNA encodes the amino‑acid sequence of ECD via triplet codons.
In my understanding the most easy and adfordable way to produce this protein would be a cell‑dependent systems in E. coli using a plasmid vector with a strong promoter. However, I still have to make a critic analyzis of this Copilot answere according to the most uptated literature.
Part 4: Prepare a Twist DNA Synthesis Order
4.1. Create a Twist account and a Benchling account
Maxmatusbenchling I created a Twist account with my personal mail, however, when I am trying to login a window pop-up asking me to contact my local privider in Mexico. Nevertheless, it looks like the webpage of the local provider is not working, I tryed to charg it many times unsuscesfully, so I was not able to finish this secction of the homework: [Twist_Mexico] (https://ecommerce.twistdna.com/www.abalat.com.mx)
4.2. Build Your DNA Insert Sequence
4.3. On Twist, Select The “Genes” Option
4.4. Select “Clonal Genes” option
4.5. Import your sequence
4.6. Choose Your Vector
Part 5: DNA Read/Write/Edit
5.1 DNA Read
(i) What DNA would you want to sequence (e.g., read) and why?
I would like to sequence the grape pomace DNA in order to understan if there are some antibacterial proteins in it.
(ii) In lecture, a variety of sequencing technologies were mentioned. What technology or technologies would you use to perform sequencing on your DNA and why? Also answer the following questions:
Is your method first-, second- or third-generation or other? How so?
What is your input? How do you prepare your input (e.g. fragmentation, adapter ligation, PCR)? List the essential steps.
What are the essential steps of your chosen sequencing technology, how does it decode the bases of your DNA sample (base calling)?
What is the output of your chosen sequencing technology?
5.2 DNA Write
(i) What DNA would you want to synthesize (e.g., write) and why?
If I find antibacterial proteins in grape pomenace I would like to mass produce it in order to enhance this property and then insert it into a biocuir made out of grape pomenace. I found this web page wich seems to be very usefull for my project: Grape_genome and also an interesting article related to the use of pomenace as antimicrobial in feed: Antimicrobial_pomenace
(ii) What technology or technologies would you use to perform this DNA synthesis and why? Also answer the following questions:
What are the essential steps of your chosen sequencing methods?
What are the limitations of your sequencing method (if any) in terms of speed, accuracy, scalability?
5.3 DNA Edit
(i) What DNA would you want to edit and why?
Not sure yet
(ii) What technology or technologies would you use to perform these DNA edits and why? Also answer the following questions:
How does your technology of choice edit DNA? What are the essential steps?
What preparation do you need to do (e.g. design steps) and what is the input (e.g. DNA template, enzymes, plasmids, primers, guides, cells) for the editing?
What are the limitations of your editing methods (if any) in terms of efficiency or precision?
Week 3: Lab Automation

**Assignment: Python Script for Opentrons Artwork**
**Protocol for Opentron Artwork: Max_XLAB_pattern**
'author': 'MaxMatus',
'protocolName': 'Max_XLab_pattern',
'description': 'XLab_pattern',
'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
center_location = agar_plate[‘A1’].top()
cell_well = color_plate[‘A1’] # Changed ‘F1’ to ‘A1’ because F1 was not configured to have a color.
Aspirate
pipette_20ul.pick_up_tip()
X_LABpattern = [ # X (0, 4), (2, 4), # Fila superior (1, 3), # Diagonal bajando (1, 2), # Centro (0, 1), (2, 1), # Fila inferior
# First dot after X - moved from (3,1) to (4,1)
(4, 1),
# Second dot for separation - moved from (4,1) to (5,1)
(5, 1),
# L (shifted by 2 units from previous adjustment: 5+2=7)
(7, 4),
(7, 3),
(7, 2),
(7, 1), (8, 1), (9, 1),
# Espacio entre letras (col 10 vacía)
# A (shifted by 2 units from previous adjustment: 9+2=11)
(11, 1), (11, 2), (11, 3), (11, 4),
(12, 4),
(13, 4), (13, 3), (13, 2), (13, 1),
(12, 2),
# Espacio entre letras (col 14 vacía)
# b (minúscula) (shifted by 2 units from previous adjustment: 13+2=15)
(15, 1), (15, 2), (15, 3), (15, 4),
(16, 2),
(16, 1),
(17, 2),
(17, 1),
]
Determine pattern dimensions for scaling and centering
x_coords = [p[0] for p in X_LABpattern] y_coords = [p[1] for p in X_LABpattern]
min_x, max_x = min(x_coords), max(x_coords) min_y, max_y = min(y_coords), max(y_coords)
Calculate the center of the pattern in its own coordinate system
center_pattern_x_unit = (min_x + max_x) / 2 center_pattern_y_unit = (min_y + max_y) / 2
Scaling factor: Adjust this to control the size of your pattern on the plate
Each unit in X_LABpattern will represent ‘scale_factor’ mm on the plate.
For a 30mm wide pattern with the current 15 unit width: 30 / (15 - 0) = 2
scale_factor = 2.0 # mm per unit
Volume to dispense per dot
dispense_volume = 1 # uL
Aspiration tracking
aspirated_volume = 0 max_aspirate_volume = 20 # uL (matching the example’s approach)
for i, (px, py) in enumerate(X_LABpattern): # If the pipette is empty or low on liquid, aspirate more # We aspirate max_aspirate_volume or whatever is needed for the remaining dots if aspirated_volume < dispense_volume: volume_to_aspirate = min(max_aspirate_volume, (len(X_LABpattern) - i) * dispense_volume - aspirated_volume) if volume_to_aspirate > 0: pipette_20ul.aspirate(volume_to_aspirate, cell_well) aspirated_volume += volume_to_aspirate
# Shift and scale the pattern coordinates
# The agar_plate['A1'].top() is the center, so we shift relative to that.
shifted_px = (px - center_pattern_x_unit) * scale_factor
shifted_py = (py - center_pattern_y_unit) * scale_factor
# Calculate the absolute position on the agar plate
adjusted_location = center_location.move(types.Point(x=shifted_px, y=shifted_py))
# Dispense the liquid using the helper function
dispense_and_detach(pipette_20ul, dispense_volume, adjusted_location)
aspirated_volume -= dispense_volume
Drop the tip at the end
pipette_20ul.drop_tip()
“”"### Protocolo Max_XLab_pattern
Este protocolo utiliza la plataforma Opentrons para patronar un diseño ‘XLab’ en una placa de agar. A continuación, se detalla el código completo:
Descripción general del funcionamiento:
- Carga de laboratorio: Se configuran las puntas, la pipeta y el módulo de temperatura, junto con las placas de colores y agar.
- Funciones auxiliares: Se definen
location_of_colorpara obtener la ubicación de un color específico ydispense_and_detachpara una dispensación limpia. - Definición del patrón
X_LABpattern: Una lista de coordenadas (x, y) que forman el diseño ‘X LAb’. Este patrón incluye la separación solicitada entre ‘X’, los puntos y ‘L’. - Cálculo de escalado y centrado: El código calcula las dimensiones del patrón para escalarlo y centrarlo en la placa de agar.
- Aspiración y dispensación: Itera sobre cada punto del patrón. La pipeta aspira líquido (‘Red’ de la posición ‘A1’) en bloques de 20 uL y dispensa 1 uL en cada coordenada ajustada en la placa de agar, utilizando la función
dispense_and_detachpara evitar manchas. - Descarte de punta: Al finalizar, la pipeta desecha la punta usada. """
from opentrons import types
metadata = { # see https://docs.opentrons.com/v2/tutorial.html#tutorial-metadata ‘author’: ‘MaxMatus’, ‘protocolName’: ‘Max_XLab_pattern’, ‘description’: ‘XLab_pattern’, ‘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
center_location = agar_plate[‘A1’].top()
cell_well = color_plate[‘A1’] # Changed ‘F1’ to ‘A1’ because F1 was not configured to have a color.
Aspirate
pipette_20ul.pick_up_tip()
X_LABpattern = [ # Línea horizontal izquierda (puntos en fila central, columnas negativas) (-5, 2), (-4, 2), (-3, 2), (-2, 2),
# X
(0, 4), (2, 4), # Fila superior
(1, 3), # Diagonal bajando
(1, 2), # Centro
(0, 1), (2, 1), # Fila inferior
# First dot after X - moved from (3,1) to (4,1)
(4, 1),
# Second dot for separation - moved from (4,1) to (5,1)
(5, 1),
# L (shifted by 2 units from previous adjustment: 5+2=7)
(7, 4),
(7, 3),
(7, 2),
(7, 1), (8, 1), (9, 1),
# Espacio entre letras (col 10 vacía)
# A (shifted by 2 units from previous adjustment: 9+2=11)
(11, 1), (11, 2), (11, 3), (11, 4),
(12, 4),
(13, 4), (13, 3), (13, 2), (13, 1),
(12, 2),
# Espacio entre letras (col 14 vacía)
# b (minúscula) (shifted by 2 units from previous adjustment: 13+2=15)
(15, 1), (15, 2), (15, 3), (15, 4),
(16, 2),
(16, 1),
(17, 2),
(17, 1),
# Línea horizontal derecha (puntos en fila central, columnas después de la b)
(19, 2), (20, 2), (21, 2), (22, 2),
]
Determine pattern dimensions for scaling and centering
x_coords = [p[0] for p in X_LABpattern] y_coords = [p[1] for p in X_LABpattern]
min_x, max_x = min(x_coords), max(x_coords) min_y, max_y = min(y_coords), max(y_coords)
Calculate the center of the pattern in its own coordinate system
center_pattern_x_unit = (min_x + max_x) / 2 center_pattern_y_unit = (min_y + max_y) / 2
Scaling factor: Adjust this to control the size of your pattern on the plate
Each unit in X_LABpattern will represent ‘scale_factor’ mm on the plate.
For a 30mm wide pattern with the current 15 unit width: 30 / (15 - 0) = 2
scale_factor = 2.0 # mm per unit
Volume to dispense per dot
dispense_volume = 1 # uL
Aspiration tracking
aspirated_volume = 0 max_aspirate_volume = 20 # uL (matching the example’s approach)
for i, (px, py) in enumerate(X_LABpattern): # If the pipette is empty or low on liquid, aspirate more # We aspirate max_aspirate_volume or whatever is needed for the remaining dots if aspirated_volume < dispense_volume: volume_to_aspirate = min(max_aspirate_volume, (len(X_LABpattern) - i) * dispense_volume - aspirated_volume) if volume_to_aspirate > 0: pipette_20ul.aspirate(volume_to_aspirate, cell_well) aspirated_volume += volume_to_aspirate
# Shift and scale the pattern coordinates
# The agar_plate['A1'].top() is the center, so we shift relative to that.
shifted_px = (px - center_pattern_x_unit) * scale_factor
shifted_py = (py - center_pattern_y_unit) * scale_factor
# Calculate the absolute position on the agar plate
adjusted_location = center_location.move(types.Point(x=shifted_px, y=shifted_py))
# Dispense the liquid using the helper function
dispense_and_detach(pipette_20ul, dispense_volume, adjusted_location)
aspirated_volume -= dispense_volume
Drop the tip at the end
pipette_20ul.drop_tip()
Execute Simulation / Visualization – don’t change this code block
protocol = OpentronsMock(well_colors) run(protocol) protocol.visualize()