A Unified Framework for Schedule and Storage Optimization

advertisement
Towards a Programming
Language for Biology Protocols
Bill Thies
Joint work with Vaishnavi Ananthanarayanan
Microsoft Research India
Microsoft Research India
Established January, 2005
Seven research areas
–
–
–
–
–
–
–
Algorithms
Cryptography, Security & Applied Math
Graphics and Visualization
Mobility, Networks, and Systems
Multilingual Systems
Rigorous Software Engineering
Technology for Emerging Markets
Contributions to Microsoft:
– MultiPoint, Netra, Virtual India
Currently ~55 full-time staff, growing
Collaborations with government,
academia, industry, and NGOs in India
http://research.microsoft.com/india
Microsoft Research India
Sadashivnagar, Bangalore
“Technology for Emerging Markets”
Research Group Goals
Understand potential technology
users in developing communities
Design and evaluate technology
and systems that contribute to
socio-economic development of
poor communities worldwide
Computer-skills camp in Nakalabande, Bangalore
(MSR India, Stree Jagruti Samiti, St. Joseph’s College)
Collaborate with developmentfocused organizations for
sustained, scaled impact
Multidisciplinary Research
Aishwarya Lakshmi Ratan
–
Society
International Development
Public Administration and
Jonathan Donner
–
Communications
Nimmi Rangaswamy
–
Group
Social Anthropology
Indrani Medhi
–
Design
David Hutchful
–
Individual
Human Computer Interaction
Kentaro Toyama (Group Lead)
–
Computer Science
Bill Thies
-
Technology
Innovation
Computer science
Saurabh Panjwani
-
Computer science
Rikin Gandhi
–
Astrophysics
Sample
Projects
Microfinance & Technology
Microfinance
PC + mobile
Qualitative
studies
Business analysis
Research only
Potential of technology to
support microfinance
Kelsa+
IT and Microentrepreneurs
Microenterprise
PC + mobile
Mixed-method study
Research only
Information ecology of very
small businesses
Simultaneous Shared Access Featherweight Multimedia
Information access
PC
Qualitative study
Usage analysis
Pilot
Primary education
PC
HCI
User studies
Software SDK
General
education
Electronics
HCI
User studies
Prelim research
Free access PCs for lowincome office staff
Multi-user systems for
educational
Paper and cheap electronics
for low-cost multimedia
Text-Free UI
Warana Unwired
Digital Green
User interfaces
PC
Design
User studies
Guidelines
Text-free user interfaces for
non-literate users
Info systems
Mobile
Intervention
Rural kiosks
Pilot
Substitution of mobile phones
for rural PC kiosks
Agriculture
Video
Intervention
Control trials
Pilot
Video and mediated instruction
for agriculture extension
Interactive DVDs for Education
with Kiran, Gaurav, CLT India, Int’l Digital Children’s Library, Pratham Books, …
Can we leverage the advanced features of DVD players
to extend the reach of interactive educational materials?
1. PowerPoint Presentations on DVD
- TV / DVD is cheap, robust, easy to use
- We converted one CLT subject to DVD
- CLT liked it, moved all content to DVD
- In schools, teachers prefer TV / DVD
Computer
2. Books and Encyclopedias on DVD
- Developed tool to map 90K pages to DVD
- Almost done: 1,000 children’s books on 1 DVD
- Next: Wikipedia (Hindi full or English subset)
RMB 7 per
- Usability studies planned in libraries
book
TV / DVD
RMB 7 per
1,000 books
Technology for Tuberculosis Treatment
with Michael Paik, Innovators In Health, and Operation Asha
Can we utilize lightweight mobile devices to ensure that
tuberculosis patients receive and take their medication?
Biometrics
Smart pillbox
Phone
Key milestones:
- Prototype fingerprint + netbook + SMS system
 Successful 1-week field trials in Delhi, Sep 2009
- Evaluated accuracy of reporting data over mobiles
 For low-education health workers, live operator is best
Towards a Programming
Language for Biology Protocols
Bill Thies
Joint work with Vaishnavi Ananthanarayanan
Microsoft Research India
Microfluidic Chips
• Idea: a whole biology lab on a single chip
– Input/output
– Sensors: pH, glucose,
temperature, etc.
– Actuators: mixing, PCR,
electrophoresis, cell lysis, etc.
• Benefits:
– Small sample volumes
– High throughput
– Low-cost
• Applications:
– Biochemistry
- Cell biology
– Biological computing
1 mm 10x real-time
Moore’s Law of Microfluidics:
Valve Density Doubles Every 4 Months
Source: Fluidigm Corporation (http://www.fluidigm.com/images/mlaw_lg.jpg)
Moore’s Law of Microfluidics:
Valve Density Doubles Every 4 Months
Source: Fluidigm Corporation (http://www.fluidigm.com/didIFC.htm)
Current Practice: Manage Gate-Level
Details from Design to Operation
• For every change in the experiment or the chip design:
fabricate
chip
1. Manually draw in AutoCAD
2. Operate each gate from LabView
Abstraction Layers for Microfluidics
Silicon Analog
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
C
x86
Pentium III,
Pentium IV
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
transistors,
registers, …
Abstraction Layers for Microfluidics
Contributions
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
BioStream Language
[IWBDA 2009]
Optimized Compilation
[Natural Computing 2007]
Demonstrate Portability
[DNA 2006]
Micado AutoCAD Plugin
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
[MIT 2008, ICCD 2009]
Digital Sample Control
Using Soft Lithography
[Lab on a Chip ‘06]
Abstraction Layers for Microfluidics
Contributions
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
BioStream Language
[IWBDA 2009]
Optimized Compilation
[Natural Computing 2007]
Demonstrate Portability
[DNA 2006]
Micado AutoCAD Plugin
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
[MIT 2008, ICCD 2009]
Digital Sample Control
Using Soft Lithography
[Lab on a Chip ‘06]
“Immunological detection ... was carried out as
described in the Boehringer digoxigenin-nucleic
acid detection kit with some modifications.”
Problems with Existing
Descriptions of Protocols
• Incomplete
– Cascading references several levels deep
– Some information missing completely
• Ambiguous
– One word can refer to many things
– E.g., “inoculate” a culture
• Non-uniform
– Different words can refer to the same thing
– E.g., “harvest”, “pellet down”, “centrifuge” are equivalent
• Not suitable for automation
Towards a High-Level Programming
Language for Biology Protocols
In biology publications, can we replace the textual
description of the methods used with a computer program?
1. Enable automation
via microfluidic chips
2. Improve reproducibility
of manual experiments
The BioStream Language
• BioStream is a protocol language for reuse & automation
– Portable
– Volume-independent
– Initial focus: molecular biology
• Implemented as a C library
– Used to express 37 protocols, 3800 lines of code
– General backend: emit readable instructions for human
– Restricted backend: automatic execution on microfluidic chips
• Validation
– Used to direct actions of scientists in the lab (IISc)
– Used to control microfluidic chips (MIT)
– Standardizing online Wiki; interest from Berkeley, UW, UMN…
Language Primitives
• Declaration / measurement / disposal
- declare_fluid
- declare_column
- measure_sample
- measure_fluid
- volume
- discard
- transfer
- transfer_column
- declare_tissue
• Combination / mixing
- combine
- mix
- combine_and_mix
- addto_column
- mixing_table
• Centrifugation
- centrifuge_pellet
- centrifuge_phases
- centrifuge_column
• Temperature
- set_temp
- use_or_store
- autoclave
• Timing
- wait
- time_constraint
- store_until
- inoculation
- invert_dry
• Detection
- ce_detect
- gas_chromatography
- nanodrop
- electrophoresis
- mount_observe_slide
- sequencing
Example: Plasmid DNA Extraction
I. Original protocol (Source: Klavins Lab)
Add 100 ul of 7X Lysis Buffer (Blue) and mix by inverting the
tube 4-6 times. Proceed to step 3 within 2 minutes.
II. BioStream code
FluidSample f1 = measure_and_add(f0, lysis_buffer, 100*uL);
FluidSample f2 = mix(f1, INVERT, 4, 6);
time_constraint(f1, 2*MINUTES, next_step);
III. Auto-generated text output
Add 100 ul of 7X Lysis Buffer (Blue).
Invert the tube 4-6 times.
NOTE: Proceed to the next step within 2 mins.
Example: Plasmid DNA Extraction
Auto-Generated
Dependence Graph
1. Data Types
conceptually infinite volume
finite volume
Stock
Fluid
declare_fluid
instruction
Sample
Solid
FluidSample
measure instruction
Can measure symbolic volume
which is resolved by compiler /
runtime system depending on
eventual uses
SolidSample
other instructions
2. Standardizing Ad-Hoc Language
• Need to convert qualitative words to quantitative scale
• Example: a common scale for mixing
–
–
–
–
–
When a protocol says “mix”, it could mean many things
Level 1: tap
Level 2: stir
Level 3: invert
Level 4: vortex / resuspend / dissolve
• Similar issues with temperature, timing, opacity, …
3. Separating Instructions from Hints
• How to translate abstract directions?
– “Remove the medium by aspiration, leaving the bacterial
pellet as dry as possible.”
Centrifuge(&medium, ...);
hint(pellet_dry)
Aspirate and remove medium.
Leave the pellet as dry as possible.
• Hints provide tutorial or self-check information
– Can be ignored if rest of protocol is executed correctly
• Separating instructions and hints keeps language
tractable
– Small number of precise instructions
– Extensible set of hints
4. Timing Constraints
• Precise timing is critical for many biology protocols
– Minimum delay: cell growth, enzyme digest, denaturing, etc.
– Maximum delay: avoid precipitation, photobleaching, etc.
– Exact delay: regular measurements, synchronized steps, etc.
• May require parallel execution
– Fluid f1 = mix(…); useBetween(f1, 10, 10);
– Fluid f2 = mix(…); useBetween(f2, 10, 10);
– Fluid f3 = mix(f1, f2);
• Addressed via lazy execution
f1
f2
10
10
f3
Benchmark Suite
Textbook:
Alkaline lysis with SDS - Miniprep
Academic lab:
2ab Assembly Protocol
CTAB DNA Plant Miniprep
Ligation
Protein insitu localization
Restriction digestion
DNA Miniprep
Non- radioactive in-situ
hybridization
Plant RNA isolation
Transformation
87
133
408
46
120
48
93
163
97
56
Published paper:
Splinkerette PCR
Touchdown PCR
Molecular barcodes
SIRT1 Redistribution
Transcriptional instability
143
40
145
180
142
Commercial kit:
Allprep RNA Protein protocol
Plasmid purification
DNA Sequencing
150
125
110
OpenWetWare:
Miniprep/GET Buffer
DNA Extraction - Salting Out
Endy: Colony PCR
Engineering BioBricks - Restriction
Digest
Engineering BioBricks - Colony
PCR
Ethanol precipitation of small DNA
fragments
Filamentous fungi genomic DNA
isolation
Knight: Colony PCR
Maxiprep
Miniprep/Kit-free high-throughput
Miniprep/Qiagen kit
One-step Miniprep
Silver: Restriction Digest
Yeast DNA prep
DNA Precipitation
DNA extraction from tissue
Chromosomal DNA extraction from
E.coli
Blackburn : Yeast Colony PCR
PNK Treatment of DNA ends
121
93
61
40
47
52
119
53
168
75
84
62
78
75
68
108
87
90
36
37 protocols
3800 LOC
Example: PCR
repeat
thermocycling
Example: Molecular Barcodes
Preparation
+ PCR (2)
Example: DNA Sequencing
Preparation
PCR PCR PCR PCR
Analysis
Exposing Ambiguity in Original Protocols
?
3. Add 1.5 vol. CTAB to each MCT and vortex. Incubate at 65°
C for 10-30 mins
4. Add 1 vol. Phenol:chloroform:isoamylalcohol: 48:48:4 and
vortex thoroughly
5. Centrifuge at 13000g at room temperature for 5 mins
6. Transfer aqueous (upper) layer to clean MCT and
repeat the extraction using chloroform: Isoamyalcohol: 96:4
Coding protocols in precise language removes
ambiguity and enables consistency checking
Validating the Language
• Eventual validation: automatic execution
– But BioStream more capable than most chips today
– Need to decouple language research from microfluidics
research
• Initial validation: human execution
– In collaboration with Prof. Utpal Nath’s lab at IISc
– Target Plant DNA Isolation, common task for summer intern
Original
Lab Notes
BioStream
Code
Auto-Generated
Protocol
Execution
in Lab
Biologist is never exposed to original lab notes
• To the best of our knowledge, first execution of a real
biology protocol from a portable programming language
Growing a Community
Growing a Community
Growing a Community
Abstraction Layers for Microfluidics
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
Example: Mix Instruction
• Microfluidic chips have various mixing technologies
– Electrokinetic mixing [Levitan et al.]
– Droplet mixing [Fair et al.]
– Rotary mixing [Quake et al.]
• Common attributes:
– Ability to mix two samples in equal proportions, store result
• Fluidic ISA: mix (int src1, int src2, int dst)
– Ex: mix(1, 2, 3)
Storage Cells
1
2
3
4
Mixer
– To allow for lossy transport, only 1 unit of mixture retained
Implementation: Oil-Driven Chip
Inputs Storage Cells Background Phase Wash Phase
Chip 1
2
8
Oil
—
Mixing
Rotary
Implementation: Oil-Driven Chip
mix (S1, S2, D) {
1. Load S1
2. Load S2
3. Rotary mixing
4. Store into D
}
50x real-time
Inputs Storage Cells Background Phase Wash Phase
Chip 1
2
8
Oil
—
Mixing
Rotary
Implementation 2: Air-Driven Chip
Inputs Storage Cells Background Phase Wash Phase
Mixing
Chip 1
2
8
Oil
—
Rotary
Chip 2
4
32
Air
Water
In channels
Implementation 2: Air-Driven Chip
mix (S1, S2, D) {
1. Load S1
2. Load S2
3. Mix / Store into D
4. Wash S1
5. Wash S2
}
50x real-time
Inputs Storage Cells Background Phase Wash Phase
Mixing
Chip 1
2
8
Oil
—
Rotary
Chip 2
4
32
Air
Water
In channels
Demonstration: Gradient Generation
Fluid yellow = input (0);
Fluid blue = input(1);
for (int i=0; i<=4; i++) {
mix(yellow, 1-i/4, blue, i/4);
}
Hidden from programmer:
–
–
–
–
Location of fluids
Details of mixing, I/O
Logic of valve control
Timing of chip operations
450 Valve Operations
Demonstration: Gradient Generation
Fluidic ISA
input(0, 0);
input(1, 1);
input(0, 2);
mix(1, 2, 3);
input(0, 2);
mix(2, 3, 1);
input(1, 3);
input(0, 4);
mix(3, 4, 2);
input(1, 3);
input(0, 4);
mix(3, 4, 5);
input(1, 4);
mix(4, 5, 3);
mix(0, 4);
450 Valve Operations
Demonstration: Gradient Generation
Valve
Actuations
setValve(0,
HIGH);
setValve(1,
HIGH);
wait(2000);
setValve(0,
HIGH);
setValve(1,
HIGH);
wait(2000);
setValve(0,
HIGH);
setValve(1,
HIGH);
wait(2000);
setValve(0,
HIGH);
setValve(1,
HIGH);
wait(2000);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
HIGH);
setValve(1,
HIGH);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
HIGH);
setValve(1,
HIGH);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
HIGH);
setValve(1,
HIGH);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
HIGH);
setValve(1,
HIGH);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(2,
LOW);
setValve(3,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(2,
LOW);
setValve(3,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(2,
LOW);
setValve(3,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(2,
LOW);
setValve(3,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(10,
LOW);
setValve(11,
HIGH);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
wait(2000);
setValve(19,
LOW);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
wait(2000);
setValve(19,
LOW);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
wait(2000);
setValve(19,
LOW);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(10,
LOW);
setValve(11,
HIGH);
wait(2000);
setValve(19,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
wait(2000);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
wait(2000);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
wait(2000);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
wait(2000);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(0,
LOW);
setValve(1,
LOW);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(16,
LOW);
setValve(17,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
setValve(2,
LOW);
setValve(3,
HIGH);
wait(2000);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
wait(2000);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
wait(2000);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
wait(2000);
setValve(18,
LOW);
setValve(19,
LOW);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(4,
LOW);
setValve(5,
HIGH);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
setValve(14,
HIGH);
setValve(2,
LOW);
wait(2000);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(6,
HIGH);
setValve(7,
LOW);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
wait(1000);
setValve(14,
HIGH);
setValve(2,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(8,
LOW);
setValve(9,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(4,
HIGH);
setValve(12,
LOW);
wait(1000);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(10,
HIGH);
setValve(11,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(4,
HIGH);
setValve(12,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(12,
LOW);
setValve(13,
LOW);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(16,
HIGH);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(16,
HIGH);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(16,
HIGH);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(18,
HIGH);
setValve(16,
HIGH);
setValve(17,
LOW);
setValve(14,
LOW);
setValve(15,
HIGH);
wait(2000);
setValve(19,
LOW);
setValve(18,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(17,
LOW);
wait(2000);
setValve(19,
LOW);
setValve(18,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(17,
LOW);
wait(2000);
setValve(19,
LOW);
setValve(18,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(17,
LOW);
wait(2000);
setValve(19,
LOW);
setValve(18,
HIGH);
setValve(19,
LOW);
setValve(16,
HIGH);
setValve(17,
LOW);
wait(2000);
setValve(18,
HIGH);
setValve(19,
LOW);
wait(2000);
setValve(18,
HIGH);
setValve(19,
LOW);
wait(2000);
setValve(18,
HIGH);
setValve(19,
LOW);
wait(2000);
setValve(18, HIGH); setValve(19, LOW);
450 Valve Operations
Abstraction Layers for Microfluidics
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
Algorithms for Efficient Mixing
• Mixing is fundamental operation of microfluidics
–
–
–
–
Prepare samples for analysis
Dilute concentrated substances
Control reagant volumes
Analogous to ALU operations on microprocessors
• How to synthesize complex mixture using simple steps?
– Many systems support only 50/50 mixers
– Should minimize number of mixes, reagent usage
– Note: some mixtures only reachable within error tolerance 
Interesting scheduling and optimization problem
• N
Why Not Binary Search?
0
3/8
1
1/2
1/4
3/8
1/2
5 inputs, 4 mixes
Why Not Binary Search?
0
3/8
1
1/2
3/4
3/8
4 inputs, 3 mixes
1/2
1/4
3/8
1/2
5 inputs, 4 mixes
Min-Mix Algorithm
•
Simple algorithm yields minimal number of mixes
– For any number of reagents, to any reachable concentration
– Also minimizes reagent usage on certain chips
Min-Mix Algorithm: Key Insights
1. The mixing process can be represented by a tree.
A
B
B
A
5/8 A, 3/8 B
Min-Mix Algorithm: Key Insights
1. The mixing process can be represented by a tree.
d
2-d
3
1/8
2
1/4
1
1/2
A
B
B
A
5/8 A, 3/8 B
2. The contribution of an input sample to the overall mixture
is 2-d, where d is the depth of the sample in the tree
Min-Mix Algorithm: Key Insights
1. The mixing process can be represented by a tree.
d
2-d
3
1/8
1
2
1/4
0
1
1/2
1
A
A
5 = 101
B
1
B
1
0
3 = 011
5/8 A, 3/8 B
2. The contribution of an input sample to the overall mixture
is 2-d, where d is the depth of the sample in the tree
3. In the optimal mixing tree, a reagent appears at depths
corresponding to the binary representation of its overall
concentration.
Min-Mix Algorithm
• Example: mix 5/16 A, 7/16 B, 4/16 C
d
2-d
4
1/16
3
1/8
2
1/4
1
1/2
A
B
A
B
A
A=5
=0101
B
B=7
=0111
B
B
C
A
B
C
C=4
=0100
• To mix k fluids with precision 1/n:
– Min-mix algorithm: O(k log n) mixes
– Binary search: O(k n) mixes
[Natural Computing 2007]
Abstraction Layers for Microfluidics
Protocol Description Language
- architecture-independent protocol description
Fluidic Instruction Set Architecture (ISA)
- primitives for I/O, storage, transport, mixing
chip 1
chip 2
chip 3
Fluidic Hardware Primitives
- valves, multiplexers, mixers, latches
Micado: An AutoCAD Plugin
for Microfluidic Chips
• Automates design of control layer of microfluidic chips
1.
2.
3.
4.
5.
Language for fluidic ISA
Infer control valves
Infer control sharing
Route valves to control ports
Generate an interactive GUI
• Realistic use by at least 3
microfluidic researchers
• Freely available at:
http://groups.csail.mit.edu/cag/micado/
Embryonic Cell Culture
Courtesy J.P. Urbanski
Embryonic Cell Culture
Courtesy J.P. Urbanski
Metabolite Detector
Courtesy J.P. Urbanski
Metabolite Detector
Courtesy J.P. Urbanski
Cell Culture with Waveform Generator
Courtesy David Craig
Cell Culture with Waveform Generator
Courtesy David Craig
Research Opportunities
• Adapt the language to biologists
– Consider ‘natural language’ authoring rather than programming
– Share language and protocols on a public wiki
• Backends for BioStream
– Generate graphical protocol
– Schedule separate protocols onto shared hardware,
maximizing utilization of shared resource (e.g., thermocycler)
• Hardware description language for microfluidic chips
– Automate design of the flow layer from a problem description
• Program analysis and optimization
– Adapt unique (linear) types for microfluidics
– Sound scheduling under timing constraints
– Dynamic optimization of slow co-processors (lazy vectorization?)
Related Work
• EXACT: EXperimental ACTions ontology as a formal
representation for biology protocols [Soldatova et al., 2009]
• Aquacore: ISA and architecture for programmable
microfluidics, builds on our prior work [Amin et al., 2007]
• Robot Scientist: functional genomics driven by
macroscopic laboratory automation [King et al., 2004]
• PoBol: RDF-based data exchange standard for BioBricks
Conclusions
• A high-level programming language
for biology protocols is tractable
and useful
– Improves readability
– Enables automation
• Vision: a de-facto language for
experimental science
– Replace ad-hoc language with
precise, reusable description
– Download a colleague’s code,
automatically map to your
microfluidic chip or lab setup
• Next steps: public release and
community-building
Courtesy J.P. Urbanski
Extra Slides
Application to Rural Diagnostics
Disposable
Enteric Card
PATH,
Washington U.
Micronics, Inc.,
U. Washington
Targets:
- E. coli, Shigella,
Salmonella,
C. jejuni
DxBox
CARD
U. Washington,
Micronics, Inc.,
Nanogen, Inc.
Rheonix, Inc.
Targets:
- malaria (done)
- dengue, influenza,
Rickettsial diseases,
typhoid, measles
(under development)
Targets:
- HPV diagnosis
- Detection of
specific gene
sequences
Download