Skip to content

Instantly share code, notes, and snippets.

@willcanine
Forked from Cixelyn/gist:8353ce715bee8e1dc82a
Last active August 29, 2015 14:14
Show Gist options
  • Save willcanine/76c01fd3da6f01b8cd9c to your computer and use it in GitHub Desktop.
Save willcanine/76c01fd3da6f01b8cd9c to your computer and use it in GitHub Desktop.
OpenTrons Protocol Datastructure *ALPHA*

#OpenTrons Protocol Datastructure ALPHA ###(SUBJECT TO CHANGE)

The OT.One runs jobs based on a JSON datastructure. This "low-level" definiton provides volume, container, and location specific information, describing protocols at the liquid transfer level (as opposed to Barista's higher level description).

It is based loosely on [Transcriptic's Autoprotocol] (https://www.transcriptic.com/platform/#instructions). We modified it to suit platforms beyond Transcriptic's robotic work cells, parsing out the platform specific information into a separate file with information particular to the OT platform. This should empower biodevelopers to easily develop and test protocols on their local machine, and then quickly scale them to "the cloud."

Please send any questions to info@opentrons.com!

Note that

  • ALL DISTANCES in Millimeters (mm)
  • ALL VOLUMES in Microleters (ul)

Document format

The base document is a simple json object containing an array of instructions. Instructions are the bulk of a protocol, describing the steps carried out by the machine during a run. The instructions reference the containers.json document.

{
  "instructions": [instructions]
}

Instructions

Instructions are organized by tool. The OT.One can hold two micropipettes, so protocols will use one of these two tools at the beginning. In the future things like magnetic bead stations, heat plates, and centrifuges will be added as well.

{
  "tool": "p200",
  "groups": [instruction_groups]
}

"Groups" is an ordered array of instruction groups. Each instruction group holds multiple instructions that specify different things depending on the tool. With a pipette, the machine changes pipette tips between each group; instructions in the same group use the same tip.

Transfer Instruction Group

The transfer instruction group is an array of transfer instruction commands. Pipette tips will not be changed between transfer instructions in the same group.

"transfer": [{
  "from": {
    "container": "source-bucket",
    "location": "A1",
    "tip-offset": -2
  },
  "to": {
    "container": "plate-1",
    "location": "B1"
  },
  "volume": 80
}, ...]
  • Containers dimensions and characteristics are specified in "container-lib.json", every container has at least one location inside it, but often more.
  • Tip offset is the distance from the meniscus of the liquid from which the tip draws. So, 0 = at the liquid surface (default option); -2 = 2mm below the liquid surface; 2 = 2mm above liquid surface. When the machine knows dimensions of container and the liquid volume inside, it dynamically calculates the surface level throughout a job.

Distribute Instruction

The distribute instruction is a one-to-many liquid transfer operation; the "to" field is an array of locations. Distribute commands only use one pipette tip to dispense to multiple locations, so the total transfer volume cannot exceed the volume of a single pipette tip.

"distribute": {
  "from": {
    "container": "source-bucket",
    "location": "A1",
    "tip-offset": -2
  },
  "to": [
      {
       "container": "plate-1",
       "location": "A2",
       "volume": 50
      },
      {
        "container": "plate-1",
        "location": "A2",
        "volume": 50
      },
    ]
  }
   

Consolodate Instruction

The consolodate instruction is a many-to-one liquid transfer operation; the "to" field is an array of locations. Consolodate commands only use one pipette tip to aspirate from multiple locations in a "pipeline pipetting" style, so the total transfer volume cannot exceed the volume of a single pipette tip.

"consolodate": {
  "from": [
    {
      "container": "source-bucket",
      "location": "A1",
      "tip-offset": -2
    },
    {
      "container": "source-bucket",
      "location": "A1",
      "tip-offset": -2
    },
  ]
  "to": {
   "container": "plate-1",
   "location": "A2",
   "volume": 50
  }
}

Mix Instruction

Mix command is not a liquid transfer; it mixes the contents of a well by moving liquid up and down in a pipette tip.

"mix": [
  {
    "container": "plate-1",
    "location": "A1",
    "volume" : 50,
    "repetitions": 2
  },
  {   
    "container": "plate-1",
    "location": "B1",
    "volume" : 50,
    "repetitions": 8
  }
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment