Hi,
I’m trying to pull in worktable information on tips available. Partly to calculate how many tips are available, to see if a protocol could be run without a user having to re-stock tips mid run. And also to update worktables, particularly with nested tips, when the stored DiTi memory gets reset (either accidentally or when changing between protocols using filtered/unfiltered tip types) so time isn’t lost looking for non existent tips.
I can easily work through querying the non-nested tips using the “GetNumberOfTipsInTipBox” and updating using “SetTipBoxStatus”. But when using the nested tips, if you query using the first function on a labware nest that has been removed, it comes up with “Invalid expression” error when looking up a ‘non-existent’ labware. I have tried some error handling to ignore and continue but so far this just leads to aborting the script.
I can’t seem to find a way to access the available tip details in a script but it must be accessible somehow from the DiTi tracking in the background. I don’t know if anyone has any similar experience? Possibly doing this in VB gives more flexible options or any other workarounds?
Can you share your logic here?
Also would it make more sense to query from the bottom nest up and Add/Remove any top layer once you reach a setup that is < 96. Every stack in a nested tip box is different so in theory you could be querying something that doesn’t exist depending on your setup.
After some testing I have found an ugly work around. If you evaluate the “GetNumberOfTipsInTipBox” (or any other labware function) to a string rather than a number variable then if it doesn’t exist it just writes the expression to string rather than evaluate it and it doesn’t come up with an error. Then using something like “Length” to evaluate if string is a long expression or a couple of numerical digits you can determine if the labware exists on the worktable or not. As I said, not a particularly nice solution! And as stated, in the original post there must be a simpler way to access DiTi information stored in the background so I will continue to look.
@luisvillaautomata I am querying from bottom up but until I query that particular nest I have no other way to find out. The module is currently quite specific to a particular worktable but it would be nice to make it more dynamic in the future.
Create an intermediate CSV file explicitly for tip data.
Start of Run: Create a subroutine that populates the deck from this CSV.
End of Run: Create a subroutine that populates the CSV.
If “Get NumberOfTipsInTipBox” > 0, Copy “GetTipBoxStatus” to a CSV, else set that equal to 0 in CSV
At start of next run if value = 0, remove top layer of labware and work backwards from there.
Long term: Look at Sample Tracking as a potential source for hosting this data info or feed out to a dB (can be SQL or NoSQL) and feed back into script arrays via VB to do the heavy lifting.
And yeah this seems like a bit of heavy lifting but good programmatic experience and lets you design your own solutions (valuable to not become reliant on a library to do all of your work.)
Once you have the value as a string, if you want to evaluate it as a number, could you convert it from a string to an int using something like Python or VBScript and then work with it as an int from there?
-Mike
Good point, what did the string return with that the int could not?
So if you use set variable command to “GetNumberOfTipsInTipBox(“350_nested[004]”)”. If it exists it sets the string value e.g.“68”. If it can’t find the labware it just sets the string to “GetNumberOfTipsInTipBox(“350_nested[004]”)”. If the variable is an integer it throws an error when trying to write the string returned in the case it can’t find the labware to an integer. Is this what you were after?