intbio-ncl / biomationscripterlib Goto Github PK
View Code? Open in Web Editor NEWA Python library to assist with scripting bio-automation protocols
License: MIT License
A Python library to assist with scripting bio-automation protocols
License: MIT License
The OTProto Primer_Mixing_LightRun template allows the user to specify a starting tip in a tip box, however if this starting tip means that more than one tip box would be required, the additional tip boxes are not created in the protocol, resulting in an OutOfTips error to occur.
Expected behaviour:
The Primer_Mixing_LightRun should use the BiomationScripter.OTProto.tip_racks_needed() function to determine how many tip boxes are required
Wiki documentation needs to be updated as it is currently out of sync with the repo
As noted in the comment below, it should be possible for users to modify the speed that the OT-2 works at, in terms of both head movement and pipetting speed.
It should also be possible to customise the movement speed of the pipetting head in general. Similar to how it is possible to define the starting tip position.
Originally posted by @davidcmarkham in #20 (comment)
This would probably be best implemented as a set of functions (XY_Speed
, Aspirate_Speed
, Z_Speed
, Mixing_Speed
, etc.), and also added as attributes and methods to the OT2 template superclass.
Currently, when a protocol uses the OTProto.get_labware_format
function for a custom labware file, a FileNotFound
error is raised. This is because the opentrons cannot seem to find custom labware files loaded via the app.
The specific native OT2 API method this is related to is protocol_api.labware.get_labware_definition()
. I'm unclear as to whether or not this is intended functionality, or a bug with the Opentrons API.
The Primer Mixing LightRun OTProto template (https://github.com/intbio-ncl/BiomationScripterLib/blob/main/BiomationScripter/OTProto/Templates.py) could be re-worked (and re-named?) to be more generic, rather than specific to lightrun sequencing reactions.
This could be achieved by:
The SpotPlating template currently only allows serial dilution to occur in separate labware. This should be customisable so that the dilution can be done in the source plate (cells plate) and then continue into separate labware once all the wells have been used.
It should also be possible to customise the dilution type so that it doesn't have to be a serial dilution, specifically. There may be issues regarding the minimum transfer volume that the p20 pipette can do which would force an intermediate dilution to be made - the user should be warned of this.
Currently some OTProto templates don't extend the OTProto template superclass - all templates should extend this superclass for consistency
DNA_fmol_Dilution
Primer_Mixing_LightRun
OT2_Picklist
- Due to its complexity, this template will remain as-is for nowMonarch_Miniprep
- This template has been temporarily removed due to performance issuesSpot_Plating
Transformation
Heat_Shock_Transformation Template in OTProto has a print statement that sends potentially wrong infomration to the user.
Line 350 (at time of raising this issue)
# TODO: This mapping is incorrect, pls fix it #
print("Transformation Mapping")
for dna, destination in zip([f"{layout.name}: {layout.get_liquids_in_well(well)[0]} ({well})" for layout in self.dna_source_layouts for well in layout.get_occupied_wells()], Destination_Locations):
print(f"{dna} -> {destination}")
When the DNA_Source_Locations list is shuffled, the variables used in this print statement are not in the same order. This results in a misleading print statement.
When protocol.deck[8]
is called, it evaluates to None
even if a Thermocycler module is loaded. This will generate an error if labware loading is attempted on that deck slot.
OTProto.next_empty_slot()
needs modifying to prevent an error in this scenario
This should also be raised as an issue on the Opentrons github repo if it hasn't already been by someone else
Caluclation for tips needed on Monarch Miniprep protocol for Opentrons is incorrect resulting in an OutOfTipsError message
The attached protocol caused the following error to occur:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-11-eef2098f1c38> in <module>
12 Repeats = Repeats
13 )
---> 14 Protocol.run()
~\Anaconda3\lib\site-packages\BiomationScripter\EchoProto\Templates.py in run(self)
137
138 # Generate the picklists
--> 139 self.create_picklists()
140
141 class PCR(_EchoProto.EchoProto_Template):
~\Anaconda3\lib\site-packages\BiomationScripter\EchoProto\__init__.py in create_picklists(self)
35
36 def create_picklists(self):
---> 37 _BMS.EchoProto.Generate_Actions(self._protocol)
38 _BMS.EchoProto.Write_Picklists(self._protocol, self.save_dir)
39
~\Anaconda3\lib\site-packages\BiomationScripter\EchoProto\__init__.py in Generate_Actions(Protocol)
243 raise ValueError("Internal transfer error: unhandled transfer situation for {}. Please raise this protocol as an issue on GitHub.".format(reagent))
244 if source_index == len(source_wells):
--> 245 raise ValueError("Internal calculation error: ran out of {} to transfer. Please raise this protocol as an issue on GitHub.".format(reagent))
246
247 #################################
ValueError: Internal calculation error: ran out of T4 Ligase Buffer to transfer. Please raise this protocol as an issue on GitHub.
Something is still wrong with how EchoProto calculates liquids.
Request for an EchoProto Template which can be used to set up Gibson assembly reactions. The template should:
Add the functionality for commonly used functions like transfer_liquids to change the relative well position during aspirate and dispense steps.
i.e. aspirate from well center instead of well bottom, dispense from well top
Request for an EchoProto Template which can be used to set up TapeStation 4200 plates. The template should:
Serial dilutions are used across a number of protocols, but they're all implemented in slightly different ways. It would be good to have a function (or class) which can handle creating serial dilutions and the transfer steps needed in a more standardised way across BMS.
Currently all labware is just referred to by its API name. All labware should be given a user friendly label to assist the user with ensuring the correct labware is placed in the correct deck position.
The variables, functions, and classes which make up the DoE tools have names which are not always intuitive, and sometimes contradict. For example, Source_Material
and Material_Type
are used interchangeably, as are the terms factor
and value
.
The names used in these tools should be re-worked to be intuitive and consistent
Hi Developers of BiomationScripterLib©,
I am working on a tool using BiomationScripterLib©, where programmatic introspection occurs on the templates.
What I would like:
EchoProto.Write_Picklists function can be improved to include default save location i.e. the current working directory
The function will also raise an error if the save location provided does not exist. If this occurs, it should either be caught in the script or the directory should be created if it does not exist.
For example:
BMS.EchoProto.Write_Picklists(Protocol, "./Picklists")
If .\Picklists
does not exist, the directory could be created and then the picklists saved into that location.
There could also be a default to save in a new directory called "Picklists"
It may be useful to attached a short description to a Labware_Layout
, similar to the description field used in the Labware Layout Excel File.
This could be implemented simply as a description
attribute in the Labware_Layout
class. If implemented, the import function should be updated to ensure that the description in the Excel file is also imported.
Currently, any OTProto functions which accept the mix_after
and/or mix_before
arguments can only specify the number of repetitions and the volume used. It should also be possible to specify the mixing rate, as this could be critical for some protocols (e.g. those which require re-suspension of pellets).
This can be fixed by adding an optional third element to the tuple for mix_after
and mix_before
. If only a tuple with only two elements is passed, it should be assumed that the rate is 1.0, and should not raise an error.
It may be necessary to change the way in which the liquid transfer function is called from the API in order to supply the flow rate.
The Primer_Mixing_LightRun template class in OTProto/Templates.py has an option to specify that the primers are stored in the same labware as the DNA samples, however when this argument is set to true, the primer labware is never defined.
This problems seems to occur when the same reagent is present across multiple source plates. Will investigate further to either raise an error when the user tries to do this (as a temp. solution), or make it so EchoProto can deal with this situation.
Originally posted by @Brad0440 in #26 (comment)
As noted above, if a reagent is found in multiple source plates, EchoProto correctly determines if enough of that source material is present, but errors occur when trying to determine the transfer events.
For now, it may be best to raise an error when this occurs and add support for the same reagents being present in multiple source plates in a later version.
Problems experienced when trying to install the library. Specifically on Windows OS via Visual Studio Code.
The documentation needs to be updated with information about the standard file format which is used by functions such as BMS.Import_Labware_Layout
.
I've created a page for this here.
The PCR Echo Template needs to be added to the documentation.
Full details for the template (including attributes, methods, and general overview) should be added to EchoProto_Templates doc file (see the Loop_Assembly
docs for an example)
A walkthrough style example should be added to the Protocol Examples/EchoProto/Templates directory (see the Loop_Assembly
walkthough for an example)
Create Jupyter notebook walkthroughs for:
There should be a way of giving a name to specific wells/slots of a Labware_Layout
object, in addition to adding contents to a well.
For example, a well might contain reagents and DNA required for a DNA assembly. It should be possible to then define the name of the construct being assembled in that well:
Well B2:
Contents: [water, enzyme, buffer, ligase, backbone, part1, part2]
Name/Label: Assembly 1
This functionality can then be used to easily retrieve a well with multiple contents, rather than having to keep a separate list to refer to. It will also help in cases where a labware is used as a destination first, and then a source. E.g., in the case of DNA assembly, a PCR plate could be used as the destination where constructs are assembled, but then as a DNA source plate for transformation. Currently, this would require a new labware layout to be defined.
Add a new OTProto template for preparing a calibration plate for plate reader calibration. Should follow the protocol described by iGEM: https://2021.igem.org/Engineering/Test
Multicolour fluorescence per bacterial particle calibration.pdf
In the Opentrons API, new_tip
has a type of str
, which can be one of three keywords: "never"
, "once"
, or "always"
. In OTProto, new_tip
takes boolean
values (True
or False
).
To prevent confusion, the new_tip
argument in OTProto should work in the same way as it does in the Opentrons API.
It should be possible to export the current state of a Labware_Layout
object to an excel file, such that it can be easily re-used in other protocols. This would also allow for less transient logging of a protocol or workflow's output.
This should be implemented as a function (similar to BMS.Import_Labware_Layout
), where an output directory is specified.
Add a volume checking step to ensure that there is enough liquid remaining in the source well for the upcoming transfer step
Create Jupyter Notebook walkthroughs for:
Syntax error preventing installation of BiomationScripterLib
BiomationScripter\EchoProto\Templates.py", line 171
for rep in range(0, self.repeats)
^
SyntaxError: invalid syntax
All classes and functions should follow standard naming conventions, as some currently do not (i.e. a mix of underscore_separated and CamelCase).
The Miniprep template in OTProto causes contamination of neutralisation buffer and wash buffer 2 reagent stocks.
This is because 400 uL is required, which is split into two transfer events when the P300 pipette is used (300 uL, and then 100 uL). The OT2 by default doesn't get a new tip for the second transfer, so residual sample from the first transfer contaminates the reagent stock.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.