HEADER The first sheet is always the header. The first row is ignored syntactically. It is expected that you use this as a header comment for your reaction the remaining rows are syntactically significant (the program reads them), but it is flexible. The only hard constraints are: one row must have the string "using_temp_ctrl" in the A column, and 'yes' or 'no' in the B column. (yes if you want to use module) one row must have the string "temp" in the A column, and a float, the temperature in celcius, if you are using temp mod, else anything (recommend blank) one row must have the string "data_dir" with a string value, the name of the folder to put everything (platereader data, dump files at end, error messages, etc.). This folder will be automatically constructed in the 'Plate Reader Data' directory in the google drive if possible, but if not it will just dump to the current directory It is recommended that you only use these two rows, but I do not guarentee that the code will crash if you do other strange things INPUT TEMPlATE The second sheet in the worksheet must be the input template Every operation is one of the values ['transfer', 'scan', 'pause','stop','dilution','mix','make','print'] chemical that appears in the reagent column shall be renamed with spaces replaced with underscores, and it's concentration appended in the format 'C', e.g. PotassiumC0.03 the chemical you name must use no special characters in the python re library (i.e. be civil in your variable names) If a reagent is not a product, it will be queried later. If it is a product it will not be queried. This implies that the robot cannot put things into solutions that you made and put on the deck The order of columns is unimportant with the exception that the reagent column must come before the products and there must be no other columns after it that are not products. (This is used to determine what rows are not parameters) Please do not write concentrations in different ways. It's not nice. e.g. .050 sodium hydroxide and 0.05 sodium hydroxide are distinct names to the robot. It might treat them as different chemicals It's really not expected that you 'transfer' liquid into yourself. I recommend you refrain from doing this, but I do not guarentee that the code will crash if you do If you have no reagents, weird stuff happens The Labware row is used to specify labware for a chemical. Choose from the dropdown menu if you have a preffered type of labware (e.g. temp controller) for that reaction. This can be left blank if you don't care the labware you want to use The Container row is used to specify the container you want the reagent in. (e.g. Tube2000uL) This can also be left blank if you don't care what you put this reaction in. You can specify both/either/neither Container and Labware. Eve will satisfy all conditions you supply (if possible). The Total Vol row is used to specify the total volume you want a reagent to have AT THE END OF THE REACTION. e.g. total vol 200 means that I expect the container to have a volume of 200 at the end. This volume will be created by filling the container with water, not aspirating from the container. This implied that you must not fill a column with greater than the total volume If you specify a total volume, you cannot aspirate from that container. This means: no transfers from that container, no dilutions using that container Every row after the first 4 is interpreted as an operation, and should have an entry in that col When using products the concentration is always 1 unless diluted One of the reagents should be 'Water' named with uppercase W if you expect to do any dilutions Currently, mix, scan, stop, and pause are implemented as callbacks. They should be specified in the callbacks column seperated by commas, e.g. 'mix, scan' or 'scan' or 'scan, pause, stop, pause'. Two scans in one callback is illegal. You must specify the arguments for any callbacks you use and they will use the same args. e.g. 'pause,stop,pause' pauses for the same time on both. A mix will default to mixcode=2. transfer: Specify volume in uL under the columns you want to transfer into dilution: specify 'dilution concentration' for desired concentration. specify concentration and reagent to tell what you want to use as the reagent. Finally, mark a column 'dilution_placeholder' and put the desired final volume in that column. Note that if you are diluting onto a temperature module tube, it is expected that you will be using a ColdWater instead of Water. You do not need to specify this. It shall be done automatically, but ColdWater must be specified in the reagents. stop: thats it. no args. program will grind to a halt pause: must add pause time in seconds. Will pause that long before continuing scan: must specify the protocol on scanner you wish to run, and the filename without exetension that you want to save the data as. Mark the wells you wish to scan with a 1. mark 0 or blank in others IF YOU HAVE ALREADY RUN THIS PROTOCOL AND HAVE A SCAN OF THE SAME NOW IN THE SCAN DIR IT WILL BE OVERWRITTEN. YOU'VE BEEN WARNED mix: specify wells to mix with either a 1 or a 2. A 1 indicates a low level mix a 2 indicates more vigorous. Mixing is specialized to run on different labware. A platereader will always shake the entire plate. If you specify 2 for anything on the plate, everything will be mixed at a 2. plot: specify the wells to plot with a 1. Specify the filename in the slot for plot filename. Options for plot protocol are: single_kin, overlay, multi_kin. If single_kin is chosen, the name of the file will be your "{wellname}_{filename}" for for each well you specified make: specify the reagent and concentration you want to make. That reagent must be added in the Reagent Info tab as a powdered reagent. The mass of the reagent is expected to be the mass of the powder as opposed to the tube. print: specify the message you want to say, and the console will output a message where you issued the print command. AUTO INPUT TEMPLATE Same as for input template, with two major changes. 1. Instead of multiple products, you specify one column with the keyword template. This obviously makes some actions impossible. e.g. you can no longer perform an explicit dilution because you don't have a column to put it in. 2. When specifying the volume to transfer, instead of a volume in microliters, you specify a value in range (0,1]. The robot chooses the total amount of volume to put in, but you can use this functionality to specify how much of that total volume you want to put in at any given step. e.g. transfer .75 of the reagent at step one and .25 at step two after a mix. The decimals for any reagent must add to one. In addition, there are some other requirements. The last scan you do is the one that the machine learning will train on. REAGENTS INFO This tab is generated by the robot with the chemical name and the concentration You are responsible for inserting a loc (location on labware e.g. A1), deck_pos (deck_position of labware), and mass of container with reagent empty tubes can also be added to TubeHolder objects at this stage. an empty tube is specified with the keyword 'empty' as the chemical_name, a loc, and a deck_pos. The other fields may be left blank. Molar mass should be entered only for dry ingredients. If a molar mass is entered it is assumed that that reagent is dry. For dry ingredients, the mass is NOT the mass of the tube as in other reagents. This is because dry reagents are often placed in wellplates. (and you're not measuring out reagent in volumes anymore) Instead, mass is assumed to be the mass of the powder itself The concentration of a dry reagent should not be specified DECK POSITIONS You must choose from the dropdown menu. platereader4,platreader7 are fixed, but the rest can go in any open space, and you can have as many duplicates as you want For tubes leave the below field blank. For plates/tip racks, you must always put the position of the first usable well/tip. It is assumed that that tip/well specified and every tip/well after that is usable Left and Right are the robot arms. specify which pipete you are using. NOTE it is assumed that for a tip rack is 20, 300, or 1000 ul, and that these are in the name. It is also assumed that you never have two partially used tip racks of the same size on the deck at the same time It is also excpected that the name of the pipette be of the form ul_. This is required for parsing to get size The code is written to expect pipettes as instruments. If other instruments are chosen, the code to change will be OT2Controller._init_labware_and_pipettes Only one platereader needs a first well/tip argument. It doesn't matter which one. Leave the other blank TOTAL VOLUME You must make sure that all the transfers that you do do not exceed the total volume specified. For scans, you need to make sure that you have transferred everything before you do a scan. You do not want to do dilutions on a reagent that has total volume specified. CONCENTRATIONS You need to make sure that water will always have a specified volume. You need to make sure that you only transfer reagents with molarity into products that have total volume specified. You need to make sure you do not transfer reagents with molarity into reagents with volume.