Reference

Code organization

  • Plate.py, Well.py and Picklist.py implement the central objects

Plate, Well, and Picklist.

  • The containers folder contains specific classes of Plate and Well

will predefined dimensions, capacity, dead volume, etc.

  • The parsers folder contains all methods to generate Plates or Picklists

from machine files and data.

  • The exporters folder contains all methods to export plates in picklists

in human- or machine-readable format.

Plates

This module implements the Base class for all plates.

See plateo.container for more specific plate subclasses, with set number of wells, well format, etc.

class plateo.Plate.Plate(name=None, wells_data=None, data=None)[source]

Base class for all wells.

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)[source]

Run fun(well) for every name:well in self.wells_dict

iter_wells(direction='row')[source]

Iter through the wells either by row or by column

last_nonempty_well(direction='row')[source]

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate, overwrite=True)[source]

Adds a new field field_name to the

Note that fun can also return nothing and simply transform the wells.

wells_in_column(column_number)[source]

Return the list of all wells of the plate in the given column.

wells_in_row(row)[source]

Return the list of all wells of the plate in the given row.

The row can be either a row number (1,2,3) or row letter(s) (A,B,C).

wells_satisfying(condition)[source]

Examples

>>> def condition(well):
>>>     return well.volume > 50
>>> for well in myplate.wells_satifying(condition):
>>>     print( well.name )
exception plateo.Well.TransferError[source]
class plateo.Well.Well(plate, row, column, name, data=None)[source]

Generic class for a well.

Parameters
plate

The plate on which the well is located

row

The well’s row (a number, starting from 0)

column

The well’s column (a number, starting from 0)

name

The well’s name, for instance “A1”

data

A dictionnary storing data on the well, used in algorithms and reports.

Attributes
capacity
coordinates

Return (well.row, well.column)

is_empty

Return true iff the well’s volume is 0

volume

Methods

index_in_plate([direction])

Return the index of the well in the plate.

is_after(other[, direction])

Return whether this well is located strictly after the other well.

add_content

empty_completely

iterate_sources_tree

pretty_summary

subtract_content

to_dict

transfer_to_other_well

property coordinates

Return (well.row, well.column)

index_in_plate(direction='row')[source]

Return the index of the well in the plate.

is_after(other, direction='row')[source]

Return whether this well is located strictly after the other well.

Examples

To iterate over all free wells after the last non-free well of a plate:

>>> direction = 'row'
>>> last_occupied_well = plate.last_nonempty_well(direction=direction)
>>> free_wells = (w for w in plate.iter_wells(direction=direction)
>>>               if w.is_after(last_occupied_well))
>>> for well in free_wells: ...
property is_empty

Return true iff the well’s volume is 0

class plateo.Well.WellContent(quantities=None, volume=0)[source]

Class to represent the volume and quantities of a well.

Having the well content represented as a separate object makes it possible to have several wells share the same content, e.g. in throughs.

Methods

components_as_string([separator])

Return a string representation of what’s in the well mix

to_dict()

Return a dict {volume: 0.0001, quantities: {…:…}}

concentration

make_empty

components_as_string(separator=' ')[source]

Return a string representation of what’s in the well mix

to_dict()[source]

Return a dict {volume: 0.0001, quantities: {…:…}}

Plate parsers

From tables

plateo.parsers.plate_from_dataframe(dataframe, wellname_field='wellname', num_wells='infer', data=None)[source]

Create a plate from a Pandas dataframe where each row contains the name of a well and data on the well.

it is assumed that the dataframe’s index is given by the well names.

This function is used e.g. in plate_from_list_spreadsheet.

Parameters
dataframe

A Pandas dataframe

wellname_field

The name of the Pandas dataframe column indicating the name of the wells.

num_wells

Number of wells in the Plate to be created. If left to default ‘infer’, the size of the plate will be chosen as the smallest format (out of 96, 384 and 1536 wells) which contains all the well names.

data

Metadata information for the plate.

plateo.parsers.plate_from_list_spreadsheet(filename, sheet_name=0, num_wells='infer', wellname_field='wellname')[source]

Create a plate from a Pandas dataframe where each row contains the name of a well and metadata on the well.

Parameters
filename

Path to the spreadsheet file.

sheet_name

Index or name of the spreadsheet to use.

num_wells

Number of wells in the Plate to be created. If left to default ‘infer’, the size of the plate will be chosen as the smallest format (out of 96, 384 and 1536 wells) which contains all the well names.

wellname_field=”wellname”

Name of the column of the spreadsheet giving the well names

plateo.parsers.plate_from_platemap_spreadsheet(file_handle, file_type='auto', original_filename=None, data_field='info', num_wells='infer', plate_class=None, multiply_by=None, headers=True, sheet_name=0, skiprows=None)[source]

Parse spreadsheets representing a plate map.

Parameters
file_handle

Either a file handle or a file path to a CSV/Excel spreadsheet. If a file handle is provided, then the file_type must be set, or at least the “original_filename”.

file_type

Either “csv” or “excel” or “auto” (at which case the type is determined based on the provided file path in file_handle or original_filename)

original_filename

Original filename (optional if file_handle is already a file path or if file_type is specified)

data_field

Data field of the well under which platemap’s information will be stored

num_wells

Number of wells in the Plate to be created. If left to default ‘infer’, the size of the plate will be chosen as the smallest format (out of 96, 384 and 1536 wells) which contains all the well names.

headers

Whether the spreadsheet actually writes the “A” “B”, and “1” “2”

skiprows

Number of rows to skip (= rows before the platemap starts)

The spreadsheet should be either a 8 rows x 12 columns csv/excel file,
or have headers like this
.. code:: bash

1 2 3 4 5 6 7 8 9 10 11 12

A . . . . . . . . . . . . B . . . . . . . . . . . . C . . . . . . . . . . . . D . . . . . . . . . . . . E . . . . . . . . . . . . F . . . . . . . . . . . . G . . . . . . . . . . . . H . . . . . . . . . . . .

From Fragment analyzer data

plateo.parsers.plate_from_aati_fragment_analyzer_peaktable(filename)[source]

“Return a Plate96 object with a data field for the bands.

Provided a filename of an AATI fragment analyzer Peak table (these are generally named {DATE} Peak Table.csv), it generates a Plate96 object where each well has a data attribute “bands” of the form {peak_id: {attrs}} where the peak_id is a number (>1) and the attrs attribute has fields such as Size (bp), % (Conc.), nmole/L, ng/ul, RFU.

plateo.parsers.plate_from_aati_fragment_analyzer_zip(filename)[source]

“Return a Plate96 object with data for bands and migration image.

Provided a zip output of an AATI fragment analyzer, it will find the relevant files and extract band sizes and gel images, and store these in each well’s data.

In the final plate, each well has a data attribute “bands” of the form {peak_id: {attrs}} where the peak_id is a number (>1) and the attrs attribute has fields such as Size (bp), % (Conc.), nmole/L, ng/ul, RFU.

Each well also has a data["migration_image"] which is a WxH array, a greyscale version of the image.

Miscellaneous

plateo.parsers.plate_from_nanodrop_xml_file(xml_file=None, xml_string=None, num_wells=96, direction='row')[source]

Return a plate with the DNA concentrations measured by the Nanodrop.

Parameters
xml_file

The xml file exported from the Nanodrop software. It should contain one measurement per well. An xml_string can be provided instead of this argument.

xml_string

The content of an xml file exported from the Nanodrop software. Can be provided instead of xml_file. Should contain one measurement per well.

num_wells

Number of wells in the Plate

direction

Either row or column`. Order of the measurements on the plate.

Returns
A Plate where the wells have the following data fields:
TODO: complete

Plate Exporters

plateo.exporters.plate_to_bokeh_plot(plate, hover_data=(), well_to_html=None, well_color_function=None)[source]

Return an interactive bokeh plot of the plate.

Hovering the wells displays some data on the wells.

Parameters
plate

The plate to be converted

hover_data

list or tuple of all fields from the well’s data that should be displayed when hovering a well

well_to_html

Html that sould be displayed when hovering a well (only works if hover_data is left empty).

well_color_function

A function well=> #a103ba associating a color to fill each well

plateo.exporters.plate_to_genesift_sequencing_order_spreadsheet(plate, output_file, sample_name_function, well_filter=None, direction='row')[source]

Generate an excel spreadsheet for ordering through Genesift

Parameters
plate
output_file
sample_name_function

A function f(well) => Sample name

well_filter

A function f(well) => True/false

plateo.exporters.plate_to_platemap_spreadsheet(plate, wellinfo_function, filepath=None, sheet_name='plate_map', headers=True)[source]

Generate a spreadsheet with a map of the plate.

Parameters
plate

A Plate object

filepath

Path to a “.csv” or “.xls(x)” file. Or a Pandas ExcelWriter object.

wellinfo_function

A function f(well) -> info where well is a Well object of the plate and the returned info is an information about the well that will be displayed in the well’s cell in the final spreadsheet. The info can be a string or any other object that can be converted to a string

   1  2  3  4  5  6  7  8  9  10 11 12
A  .  .  .  .  .  .  .  .  .  .  .  .
B  .  .  .  .  .  .  .  .  .  .  .  .
C  .  .  .  .  .  .  .  .  .  .  .  .
D  .  .  .  .  .  .  .  .  .  .  .  .
E  .  .  .  .  .  .  .  .  .  .  .  .
F  .  .  .  .  .  .  .  .  .  .  .  .
G  .  .  .  .  .  .  .  .  .  .  .  .
H  .  .  .  .  .  .  .  .  .  .  .  .

Plotters

plateo.exporters.PlateTextPlotter(text_function, line_length=None, fontdict=None)[source]

Plot a plate’s well statistic as text at the well’s positions.

Parameters
text_function

A function (well) => text

with_colorbar

It true a colorbar giving a scale for color values will be plotted alongside the map

plateo.exporters.PlateColorsPlotter(stat_function, colormap=None, plot_colorbar=False, well_radius='full', vmin=None, vmax=None, alpha=1.0, edge_width=1)[source]

Plot a plate’s well statistic with wells colored differently.

Parameters
stat_function

The function to be plotted, with signature (well) => value

with_colorbar

It true a colorbar giving a scale for color values will be plotted alongside the map

plateo.exporters.PlateGraphsPlotter(plot_function, subplot_size=0.7, 0.7)[source]

Plot a graph (for instance time series) for each well of the plate

The result has the shape of a plate, with each well replaced by a graph.

Parameters
plot_function

A function f(well, well_ax) which plots something on the provided well_ax depending on the well.

subplot_size

(width, height) of subplots, between 0 and 1 (1 meaning the graphs of the different wells will have virtually no margin between them)

Container classes

class plateo.containers.plates.Plate1536(name=None, wells_data=None, data=None)[source]

Base class for 1536-well plates (32 rows, 48 columns)

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class plateo.containers.plates.Plate2x4(name=None, wells_data=None, data=None)[source]

Class for 8-well (2 x 4) plates such as colony plating plates

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class plateo.containers.plates.Plate384(name=None, wells_data=None, data=None)[source]

Base class for standard 384-well plates

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class plateo.containers.plates.Plate4ti0130(name=None, wells_data=None, data=None)[source]

96-well plate with 2ml deepwells from 4titude

Methods

PlateWell(plate, row, column, name[, data])

Attributes

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class PlateWell(plate, row, column, name, data=None)[source]
Attributes
coordinates

Return (well.row, well.column)

is_empty

Return true iff the well’s volume is 0

volume

Methods

index_in_plate([direction])

Return the index of the well in the plate.

is_after(other[, direction])

Return whether this well is located strictly after the other well.

add_content

empty_completely

iterate_sources_tree

pretty_summary

subtract_content

to_dict

transfer_to_other_well

class plateo.containers.plates.Plate4ti0960(name=None, wells_data=None, data=None)[source]

96-well plate from from 4titude

Methods

PlateWell(plate, row, column, name[, data])

Attributes

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class PlateWell(plate, row, column, name, data=None)[source]
Attributes
coordinates

Return (well.row, well.column)

is_empty

Return true iff the well’s volume is 0

volume

Methods

index_in_plate([direction])

Return the index of the well in the plate.

is_after(other[, direction])

Return whether this well is located strictly after the other well.

add_content

empty_completely

iterate_sources_tree

pretty_summary

subtract_content

to_dict

transfer_to_other_well

class plateo.containers.plates.Plate96(name=None, wells_data=None, data=None)[source]

Base class for standard 96-well plates

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class plateo.containers.plates.PlateLabcyteEchoLp0200Ldv(name=None, wells_data=None, data=None)[source]

Low dead volume 384-well Echo plate

Methods

PlateWell(plate, row, column, name[, data])

Attributes

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class PlateWell(plate, row, column, name, data=None)[source]
Attributes
coordinates

Return (well.row, well.column)

is_empty

Return true iff the well’s volume is 0

volume

Methods

index_in_plate([direction])

Return the index of the well in the plate.

is_after(other[, direction])

Return whether this well is located strictly after the other well.

add_content

empty_completely

iterate_sources_tree

pretty_summary

subtract_content

to_dict

transfer_to_other_well

class plateo.containers.plates.PlateLabcyteEchoP05525Pp(name=None, wells_data=None, data=None)[source]

Polypropylene 384-well ECHO plate

Methods

PlateWell(plate, row, column, name[, data])

Attributes

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

class PlateWell(plate, row, column, name, data=None)[source]
Attributes
coordinates

Return (well.row, well.column)

is_empty

Return true iff the well’s volume is 0

volume

Methods

index_in_plate([direction])

Return the index of the well in the plate.

is_after(other[, direction])

Return whether this well is located strictly after the other well.

add_content

empty_completely

iterate_sources_tree

pretty_summary

subtract_content

to_dict

transfer_to_other_well

class plateo.containers.plates.Trough8x1(name, data=None)[source]

Eight positions share the same content

Methods

PlateWell

alias of plateo.Well.Well

apply_to_wells(fun)

Run fun(well) for every name:well in self.wells_dict

iter_wells([direction])

Iter through the wells either by row or by column

last_nonempty_well([direction])

Return the last non-empty well found when traversing the plate.

merge_data_from(other_plate[, overwrite])

Adds a new field field_name to the

wells_in_column(column_number)

Return the list of all wells of the plate in the given column.

wells_in_row(row)

Return the list of all wells of the plate in the given row.

wells_satisfying(condition)

Examples

compute_data_field

find_unique_well

get_well_from_index

index_to_wellname

list_data_field_values

list_well_data_fields

to_dict

to_pretty_string

well_at_index

wellname_to_index

wells_grouped_by

wells_sorted_by

Picklists

Classes to represent picklists and liquid transfers in general

class plateo.PickList.PickList(transfers_list=(), data=None)[source]

Representation of a list of well-to-well transfers.

Parameters
transfers_list

A list of Transfer objects that will be part of a same dispensing operation, in the order in which they are meant to be executed.

data

A dict with some infos on the picklist.

Methods

add_transfer([source_well, …])

Add a transfer to the picklist’s tranfers list.

enforce_maximum_dispense_volume(…)

Return a new picklist were every too-large dispense is broken down into smaller dispenses.

execute([content_field, inplace, …])

Simulate the execution of the picklist

from_plates(source_plate, destination_plate, …)

Create a PickList object based on plates and conditions.

merge_picklists(picklists_list)

Merge the list of picklists into a single picklist.

restricted_to([transfer_filter, …])

Return a version of the picklist restricted to transfers with the right source/destination well.

sorted_by([sorting_method])

Return a new version of the picklist sorted by some parameter.

split_by(category, sort_key)

Split the picklist into a list of picklists, per category.

to_plain_string()

Return the list of transfers in human readable format

to_plain_textfile(filename)

Write the picklist in a file in a human reable format.

total_transfered_volume()

Return the sum of all volumes from all transfers.

add_transfer(source_well=None, destination_well=None, volume=None, data=None, transfer=None)[source]

Add a transfer to the picklist’s tranfers list.

You can either provide a Transfer object with the transfer parameter, or the parameters

enforce_maximum_dispense_volume(max_dispense_volume)[source]

Return a new picklist were every too-large dispense is broken down into smaller dispenses.

execute(content_field='content', inplace=True, callback_function=None)[source]

Simulate the execution of the picklist

static from_plates(source_plate, destination_plate, volume, source_criterion=None, destination_criterion=None, source_direction='row', destination_direction='row')[source]

Create a PickList object based on plates and conditions.

BROKEN due to changes in picklists. TODO: Fix.

static merge_picklists(picklists_list)[source]

Merge the list of picklists into a single picklist.

The transfers in the final picklist are the concatenation of the tranfers in the different picklists, in the order in which they appear in the list.

restricted_to(transfer_filter=None, source_well=None, destination_well=None)[source]

Return a version of the picklist restricted to transfers with the right source/destination well.

You can provide source_well and destination_well or alternatively just a function transfer_filter with signature (transfer)=>True/False that will be used to filter out transfers (for which it returns false).

sorted_by(sorting_method='source_well')[source]

Return a new version of the picklist sorted by some parameter.

The sorting_method is either the name of an attribute of the transfers, such as “source_well”, or a function f(transfer) -> value.

split_by(category, sort_key)[source]

Split the picklist into a list of picklists, per category.

The returned list if of the form [(cat, subpicklist)] where cat is the value of the category for all transfers in subpicklist.

The parameter category is either the name of a transfer attribute or a function f(transfer)=> value which is used to

to_plain_string()[source]

Return the list of transfers in human readable format

to_plain_textfile(filename)[source]

Write the picklist in a file in a human reable format.

total_transfered_volume()[source]

Return the sum of all volumes from all transfers.

class plateo.PickList.Transfer(source_well, destination_well, volume, data=None)[source]

A tranfer from a source to a destination

Parameters
source_well

A Well object representing the plate well from which to transfer

destination_well

A Well object representing the plate well to which to transfer.

volume

Volume to be transfered, expressed in liters.

data

A dict containing any useful information on the transfer, this information can be used later e.g. as parameters for the transfer when exporting a picklist.

Methods

change_volume(new_volume)

Return a version of the transfer with a new volume.

to_plain_string()

Return “xx L from {source_well} into {dest_well}”.

change_volume(new_volume)[source]

Return a version of the transfer with a new volume.

to_plain_string()[source]

Return “xx L from {source_well} into {dest_well}”.

Picklist Parsers

plateo.parsers.picklist_from_labcyte_echo_logfile(logfile=None, logcontent=None, plates_dict=None)[source]

Return a picklist of what was actually dispensed in the ECHO, based on the log file.

Picklist.metadata[“exceptions”] is a picklist of all transfers that went wrong.

Parameters
logfile

The path to the echo logfile.

logcontent

Echo logfile content, can be provided instead of filename

plates_dict

A dictionary of the form {‘Plate name’: Plate()} linking the plate names found in the Echo logs to Plateo Plate objects. If None is provided, plates are infered from the Echo logs (a bit experimental).

Tools

Miscellaneous useful functions.

In particular, methods for converting to and from plate coordinates.

plateo.tools.compute_rows_columns(num_wells)[source]

Convert 96->(8,12), 384->(16,24), etc.

plateo.tools.coordinates_to_wellname(coords)[source]

Convert (1,1)->A1, (4,3)->D3, (12, 12)->H12, etc.

plateo.tools.human_seq_size(n)[source]

Return the given sequence as a human friendly 35b, 1.4k, 15k, etc.

plateo.tools.index_to_wellname(index, num_wells, direction='row')[source]

Convert e.g. 1..96 into A1..H12

plateo.tools.infer_plate_size_from_wellnames(wellnames)[source]

Return the first of 96, 384, or 1536, to contain all wellnames.

plateo.tools.number_to_rowname(number)[source]

Convert 1->A 26->Z 27->AA etc.

plateo.tools.round_at(value, rounding)[source]

Round value at the nearest rounding

plateo.tools.rowname_to_number(name)[source]

Convert A->1 Z->26 AA->27 etc.

plateo.tools.wellname_to_coordinates(wellname)[source]

Convert A1->(1,1), H11->(8, 11), etc.

plateo.tools.wellname_to_index(wellname, num_wells, direction='row')[source]

Convert e.g. A1..H12 into 1..96 direction is either row for A1 A2 A3… or column for A1 B1 C1 D1 etc.