Pipette tip sorting algorithm

I’m sure everyone has run into this problem: Your method completes, and you’re now left with multiple half-consumed tipracks of varying sizes and tips remaining. I’m sure everyone here has also thought, “It would be great if I could automatically consolidate all these spare tips for future runs”.

Has anyone actually tackled a sorting algorithm for this yet? I’ve done some limited research trying to solve a simplified version of this problem, assuming tip usage with a 96ch head such that only varying numbers of full columns remain. The problem isn’t insanely difficult with this constraint - it’s basically just filling arrays of 12 to optimize for the number of full arrays - but surely someone smarter than me has a more graceful and robust method of doing this than what I’ve duct-taped together.

Are there any wiz-kids in our ranks who’ve made a project out of this to facilitate deck cleanup after runs - or even outside of runs to consolidate MANY partially consumed tipboxes? I’d love to see some of the logic that folks have used to accomplish this task.

2 Likes

Are you looking for a broad approach, or platform-specific? I ask because Venus already has a feature/library like this. That said, you may be able to look into said library to see its logic path (if you’ve got access to Venus software)

I was curious in a more programmatic, broad sense. However, the Hamilton library is a great suggestion!

My specific application is for biomek, so I’d likely need to do most the work in VBscript on my side

1 Like

I did something for tip sorting before. Load tips with Autoload, get counters for each tip rack with barcode from database or file, and then you can know how many tips left on each rack. When picking up the tips, you can use some strategy and select which tip rack to use (pick 8 tips from tips with full column tips, pick less than 8 tips from tips with not full column). After picking tips, store all the counters to database or file.

This is a complex work, you need to wrte many codes. For it is not a simple work to pick up tips from the default tip sequence, you have to keep all the tip racks and its counters from database/file, select rack and generate the sequences for tip picking. Also you have to do the error handling (no tip or wrong tip), for the default error handling may does something, that we do not want or we can not control.

This is real tip manager for 96 Head. Only one remaining tip box needs to be disposed of by hand.

1 Like
1 Like

You can copy like this:

I recently asked a similar question and was directed to Startools library (the star tip tools specifically). It has a defrag tips option and it works great for me! That library is in the archive here on the site. I like it because it does ALL 1000 tips at once, or all 50 ul tips at one.

I had tried personally to write a script to do that (I’m not very proficient at VENUS though). My method gave the option to select a source and a destination rack, you’re then prompted to designate where the tips are in each, and it then moves from the source to the empty spaces in the destination rack … It was fine, but slow because you work with pairs of tip racks vs all 1000s or all 50s, and because i’m dealing with one tip rack at a time, the tip counter is new, so the user has to designate where the tips are (i.e. it doesnt remember where the tips are from the method that just ended, because I have to use a new tip counter).

Venus seems to have it’s own strengths and weaknesses here compared to other instruments. The extra layer of sequences make it almost trivial in a way to transport tips from one rack to another, but you’re then tasked with organizing i number of tipboxes with j tips each, and all the math that goes into defragging the tipracks (great use of that word btw, I’m stealing it).

Biomek has a different issue where sequences don’t truly exist in the same way. Instead, you know the tip locations, amount, and number of boxes, but the logic of moving tips from one box to the next is done by offset pickup (number of columns) and dropoff using the same offset logic.

My first thought was to inventory tipbox locations into an array, create arrays for each box for empty/full tip location, then designing a subprocess to move N tips from box A to box B with some if logic if tips needed box A > tips have box B, and so on and so fourth.

It’s a fun little project for now - but I know my code is messy and not production quality. Naturally, time is the biggest constraint for me since this project does not add any value to anything and probably takes more time than just making a 3d-printed tool. It’s just an interesting brain teaser. I’ll be sure to post my solution here for feedback when I finish it!

On VENUS I write my deck sequences into a file which can be done with the usual steps. Afterwards I run a python script, parse the tip size from the names (could also be barcodes I guess), find all empty slots: If you have a full rack in a pandas dataframe (easily defined) you can merge it with the exported tip sequence. Everything you only find in the full rack is then an empty slot. Afterwards you can just use the channels do pick up tips from in the order you like and fill in the empty tips.

When the sorting is finished, you write the new tip sequence to file again (full slots from the export + each slot you added a tip to) and overwrite your initial sequence.

That’s how I solved it, however I prefer to perform this during incubation / waiting steps.

@dominik.b do you ever do this with MPH only accessible tips?
I have a carrier that is out of reach of my 8 channel. I’m trying to think of solutions for this. I had thought of trying to put the partial tips onto my tip adaptor and accessing from there with my 8 channel - but that doesnt seem to be an option (my deck wont see it as a tip location).

No all my tips can be reached with the channels. However: How about an intermediate place that you can access with both, like the hamilton tip boxes?

I wrote a program called ‘DynamicTipCondenser’ which does this.

I shared with Eric S. over a year ago and thought I posted here. I can provide a .pkg if it’s permitted on this site.

8 Likes

image

It can be used for any deck layout by adjusting the ‘Start Track’ value.

1 Like

@JayLeone Yes please share! It can have a home here - User Created Content :: Hamilton

Confirmed upload. Let me know how it goes.

1 Like