BioCoder Documentation


BioCoder is a high-level programming language that enables standardization and automation of biology protocols. Our vision is to change the way that experimental methods are communicated: rather than publishing a written account of the protocols used, researchers will simply publish the code. The code can be automatically converted to human-readable steps for manual execution in the laboratory. When written as a computer program, biology protocols can be parameterized to facilitate reuse in different contexts. They can also be mapped automatically to the setup of a given laboratory, taking into account the equipment and reagents that are available.

Some important links:


Before starting to use BioCoder, please read this section for basic information on usage. Doing this will prevent loss of considerable amount of time you may spend in trying to figure out details by yourself. Thanks!

General Instructions

The language is C-based, meaning the general syntax rules of C will have to be obeyed when using BioCoder, like semi-colons at the end of every statement naming rules for identifiers etc. For more information on these syntax rules, please refer to any standard documentation for the C programming language.

The layout of the protocol

The protocol that is generated is an html file that is organized as follows:

Containers as the basis of all instructions

The design of BioCoder is such that all instructions are carried out with containers as input parameters. The operations themselves, though, are on the contents of the container.

Declaration of new fluids, solids and columns

To keep the "Reagents/Solutions" column at the top, make sure that all the fluids used during the course of a protocol have been declared using the "new_fluid", "new_solid" or "new_column" command at the start of the protocol. Containers can be declared as and when they are used, but declaring the containers with the rest of the declarations makes it visually pleasing.

Usage of time(), speed(), vol(), time_range(),...

Time durations, speeds and volumes occuring in a protocol have to be as follows:

(i) time(int x, enum time_unit unit) - for exact time. Eg: time(3, MINS) for "3 mins".
(ii) time_range(int x, int y, enum time_unit unit) - for a time range. Eg. time_range(3, 5, MINS) for "3 - 5 mins".
(iii) min_time(int x, enum time_unit unit) - for the minimum time. Eg. min_time(3, MINS) for "at least 3 mins".
(iv) max_time(int x, enum time_unit unit) - for the maximum time. Eg. max_time(3, MINS) for "at most 3 mins".
(v) approx_time(int x, enum time_unit unit) - for approximate time. Eg. approx_time(3, MINS) for "~3 mins".
All of the above are used in an instruction that requires a Time* input in a parameter field.

Usage similar to "Time". Just replace "time" with "speed" and use in an instruction that requires a Speed* input in a parameter field.

Usage similar to "Time", but no equivalents for "min_time" and "max_time" exist. For the rest, just replace "time" with "vol" and use in an instruction that requires a Volume* input in a parameter field.
Another special feature of volume specification is the provision for symbolic volume. More about symbolic volumes in the next section .

Symbolic volumes

In BioCoder, you can define symbolic volumes at the start of a protocol, after having declared the Solutions/Reagents using the "new_symbol" instruction. Subsequent references to that symbolic volume can be made as follows in a parameter field that requires a Symbolic_volume* input:
s_vol(Symbol s)

Compound instructions

In addition to the basic set of orthogonal primitives, BioCoder possesses instructions that are combinations of these basic primitives and these are referred to as the 'compound instructions'. The only purpose of these compound instructions is to make the text-output of a BioCoder protocol read better. Examples of compound primitives are measure_fluid(), combine_and_mix(), incubate() etc.

Definitions and enumerations

Take a while to go through the definitions and enumerations offered by BioCoder to make your job of coding up a protocol much easier. In the definitions, quantities like ON_ICE, SPEED_MAX have been defined, while in the enumeration section, speed_unit, vol_unit, container_type have been designated values. One thing to note here is that all definitions and enumerations are in the upper case to help differentiate them from the rest of the protocol.

 All Data Structures Files Functions Typedefs Enumerations Enumerator Defines