Modeling NIR flatbed scanners

follow up from developer meeting this morning

@vcjdeboer is working on integrating the LI-COR Odyssey driver (Add LI-COR Odyssey Classic + DeviceCard for instrument provenance by vcjdeboer · Pull Request #1025 · PyLabRobot/pylabrobot · GitHub, LI-COR Odyssey driver + PIDInst-aware DeviceCard for v1b1)

we are currently trying to figure out the right abstraction of the Capability for it, see the PR thread.

@Sam1 mentioned the Hamilton LabElite I.D. does the same thing and that you guys have one.

Starting this thread to discuss further. What functionality is shared? Based on Vincent’s PR, a scan function might look like

  result = await odyssey.flatbed_imager.image(
    region=Region(x=0, y=0, w=10, h=10),
    channels=[700, 800], #nm
  )
  tiff_700, tiff_800 = (f.data for f in result.frames)

The odyssey also has a focal height parameter. (?) @vcjdeboer do you have more parameters to add here?

the data would be numpy arrays, similar to that of microscopes in PLR. Exporting to tiff/etc. is easy from there. (Data/machine tracking is higher level, doable when we have data in numpy)

@Sam1 , what do you think? can the above API? what parameters does the LE have?

we are trying to find the intersection of functionalities to write a nice capability interface as best we can given all current information. (having the LE in PLR would obviously be amazing, but right now let’s try to get the api design figured out :))

1 Like

Will take a look here this week @rickwierenga @vcjdeboer and answer these questions!

2 Likes

Hey guys been a bit busy but was able to dig up some info on this.

So in general the Hamilton LabElite comes in two flavors. There is the standalone rack/barcode scanner (aka flatbed imager) similar to other flatbed barcode readers (Micronic, LVL) called the “I.D. Reader.” There is then two devices with the barcode scanner integrated with a capper/decapper device. The difference is one can move its stage i.e. the plate/rack farther in the y-axis. The devices are called the the integrated I.D.Capper (longer y-axis movement) and the I.D.Capper.

The good news is the decapping and image acquisition (barcode scanning) functions are basically separated for the I.D.Capper devices. The image acquisition is run through the driver for the camera that is integrated in the device.

So Hamilton implemented a SiLA 1 driver for the device so the fastest way to get a driver up and running for the device is just creating a SiLA 1 client and using that for controlling the device which is where I am at right now. The barcode scanning commands basically uses another Hamilton program “EasyCode” to interface with the camera and process barcode information. So the command is sent and the SiLA server uses “EasyCode” to capture and process barcodes and then just returns the decoded barcodes in a XML string. The “EasyCode” profiles which are associated with the selected labware are where any camera settings are modified which is where I would assume anything like focal height would be set (if exposed by EasyCode)

To talk to the camera directly we would have to interface with two different cameras because at some point during the pandemic Hamilton switched from using IDS Imaging Development System GmbH cameras to Basler AG cameras which have different drivers. So depending on the serial number of the device a different driver is used.

Happy to keep developing on this but would be good to know what we think makes sense across multiple devices given the above information.

1 Like