Transformation and PUDU Protocol Chain¶
Use case¶
You have run level-1 assembly and want to:
transform the assembled product into a chassis strain,
generate PUDU-compatible transformation JSON,
generate PUDU assembly, transformation, and plating protocols, and
simulate the full OT-2 handoff chain.
Notebook¶
The full executable example lives in:
notebooks/buildcompiler_transformation_quickstart.ipynb
It produces artifacts in:
notebooks/results/buildcompiler_transformation_quickstart/
BuildCompiler transformation¶
After running assembly_lvl1, pass the structured assembly products directly
to BuildCompiler.transformation:
transformation_result = compiler.transformation(
assembly_products,
chassis_name="E_coli_DH5alpha",
transformation_doc=assembly_doc,
)
transformation_spec = transformations_to_pudu_json(
strain_identities=[
artifact["transformed_strain_module"]
for artifact in transformation_result["sbol_artifacts"]
],
chassis_identities=["https://sbolcanvas.org/DH5alpha/1"],
plasmid_sets=[
[product.plasmid_definition.identity]
for product in assembly_products
],
)
PUDU transformation spec:
[
{
"Strain": "http://buildcompiler.org/E_coli_DH5alpha_with_standard_GFP_transformation_lvl1/1",
"Chassis": "https://sbolcanvas.org/DH5alpha/1",
"Plasmids": [
"http://buildcompiler.org/standard_GFP_transformation_lvl1/1"
]
}
]
PUDU protocol generation¶
PUDU’s documented handoff is:
assembly_input.json
-> opentrons_simulate assembly_protocol.py
-> transformation_input.json
-> opentrons_simulate transformation_protocol.py
-> plating_input.json
-> opentrons_simulate plating_protocol.py
-> plating_layout.json / plating_layout.xlsx
The notebook uses PUDU’s Python API:
from pudu.generate_protocol import detect_protocol_type, generate_protocol
assembly_protocol = generate_protocol(
protocol_data=assembly_pudu,
protocol_type="assembly",
assembly_subtype="SBOL",
)
transformation_protocol = generate_protocol(
protocol_data=transformation_spec,
protocol_type="transformation",
plasmid_locations=plasmid_locations,
)
plating_protocol = generate_protocol(
protocol_data=plating_input,
protocol_type="plating",
)
The CLI equivalent is:
python -m pudu.generate_protocol assembly_input.json -o assembly_protocol.py --protocol-type assembly
opentrons_simulate assembly_protocol.py
python -m pudu.generate_protocol transformation_spec.json -o transformation_protocol.py --protocol-type transformation --plasmid-locations transformation_input.json
opentrons_simulate transformation_protocol.py
python -m pudu.generate_protocol plating_input.json -o plating_protocol.py --protocol-type plating
opentrons_simulate plating_protocol.py
Generated files¶
The validated notebook run generated:
pudu_assembly_protocol.pytransformation_input.jsonpudu_transformation_protocol.pyplating_input.jsonpudu_plating_protocol.pyplating_layout.jsonplating_layout.xlsx
The final plating input shape matches PUDU:
{
"bacterium_locations": {
"A1": [
"E_coli_DH5alpha_with_standard_GFP_transformation_lvl1",
"Competent_Cell_DH5alpha",
"standard_GFP_transformation_lvl1",
"Media_1"
]
}
}