All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- The
offset
attribute ofPickup
,Drop
,Aspirate
, andDispense
dataclasses are now always wrt the center of itsresource
. - The
offset
parameter is no longer optional inPickup
,Drop
,Aspirate
, andDispense
dataclasses. With LiquidHandler it defaults toCoordinate(0, 0, 0)
. - When providing offsets to LH, individual items in the
offsets
list are no longer optional. They must be provided asCoordinate
objects. Theoffsets
list itself is still optional and defaults to[Coordinate(0, 0, 0)]*len(use_channels)
. - To aspirate from a single resource with multiple channels, you must now provide that single resource in a list when calling
LiquidHandler.aspirate
andLiquidHandler.dispense
. - The non-firmware level commands of
STAR
now take parameters in PLR-native units (mm, uL, mg, etc.) instead of the mixture of PLR-native and firmware-native units (0.1mm, 0.1uL, etc.) that were previously used. The affected commands arepick_up_tips
,drop_tips
,aspirate
,dispense
,pick_up_tips96
,drop_tips96
,aspirate96
,dispense96
,iswap_pick_up_resource
,iswap_move_picked_up_resource
,iswap_release_picked_up_resource
,core_pick_up_resource
,core_move_picked_up_resource
,core_release_picked_up_resource
,move_resource
, andcore_check_resource_exists_at_location_center
(#191). - Also for Vantage, the units of the parameters are now in PLR-native units instead of the mixture of PLR-native and firmware-native units (0.1mm, 0.01uL, 0.1uL, etc.) that were previously used. The affected commands are
pick_up_tips
,drop_tips
,aspirate
,dispense
,pick_up_tips96
,drop_tips96
,aspirate96
,dispense96
,pick_up_resource
, andrelease_picked_up_resource
. - Fixed well z position: now it actually refers to the distance between the bottom of the well (including the material) and the bottom of the plate. Before, it sometimes mistakenly referred to what is now
material_z_thickness
(#183). - A resource's origin (lfb) is not changed on rotation, it is always fixed locally (#195). Before, we updated the location after 90, 180, and 270 degree rotations.
Resource.rotate
andResource.rotated
now support all planes and all angles (before it was limited to 90 degree rotations around the z axis) (#195)- Resource children will not be relocated when the parent resource is rotated (#195)
Resource.rotation
attribute is now aRotation
object (#195)- Parameters to higher-level STAR commands may be ints or floats, and will be converted to int when passed to the firmware-level commands.
ItemizedResource
now supports arbitrary patterns, not just full grids (#201):- Parameter
items
ofItemizedResource.__init__
is deprecated in favor ofordered_items
. - Rename parameter
identifier
ofItemizedResource.get_items
toidentifiers
. - Attributes
ItemizedResource.num_items_x
andItemizedResource.num_items_y
are now computed, and raise an error when the grid is not rectangular/full. ItemizedResource
now serializes"ordering"
, and not"num_items_x"
and"num_items_y"
.
- Parameter
- Merge
height_functions.py
andvolume_functions.py
intoheight_volume_functions.py
(#200) - Type checking for
lh.pick_up_tips
,lh.drop_tips
,lh.aspirate
, andlh.dispense
and 96-channel versions. ChatterBoxBackend
outputs are now pretty (#208)liquid_height
now defaults to 0 instead of 1 (#205)material_z_thickness
of aContainer
is used in computing its bottom (#205)- Default
pickup_distance_from_top
inLiquidHandler.{move_plate,move_lid}
were lowered by 3.33 (#205) PlateCarrierSite
can now takeResourceStack
as a child, as long as the children arePlate
s (#226)Resource.get_size_{x,y,z}
now return the size of the resource in local space, not absolute space (#235)Resource.center
now returns the center of the resource in local space, not absolute space (#235)- Rename
ChatterBoxBackend
toLiquidHandlerChatterboxBackend
(#242) - Move
LiquidHandlerChatterboxBackend
fromliquid_handling.backends.chatterbox_backend
toliquid_handling.backends.chatterbox
(#242) - Changed
pedestal_size_z=-5
topedestal_size_z=-4.74
forPLT_CAR_L5AC_A00
(#255) - rename
homogenization_
parameters inSTAR
tomix_
(#261) - Lids no longer get special treatment when assigned to a ResourceStack. Assign them to a plate directly (#267)
Machine
no longer inherits fromResource
(#281)ResourceHolderMixin
is renamed toResourceHolder
and now inherits fromResource
(#281)- You can now place resources on 'rail' 0 on Hamilton decks (left support doesn't touch rail)
- rename
STAR.move_iswap_{x,y,z}_direction
toSTAR.move_iswap_{x,y,z}_relative
. Change units to mm. Infer direction. (#295) STAR.request_iswap_position
returns loc in mm (#296)STAR.{position_max_free_y_for_n,request_y_pos_channel_n,request_z_pos_channel_n}
are 0-indexed and return in mm (#260)- Rename
STAR.probe_z_height_using_channel
toSTAR.clld_probe_z_height_using_channel
and use 0-based indexing for channels (#260) ResourceCarrierSite
->ResourceHolder
,PlateCarrierSite
->PlateHolder
(#280)Carrier.sites
is now a dictionary (#280)create_carrier_sites
->create_resources
(site_size_{x,y}
->resource_size_{x,y}
) (#280)MFXCarrier
takes modules as direct children, instead of havingCarrierSite
s as intermediaries (#280)Config.log_dir
is now optional and defaults to None (#302)- Definition of
Cor_6_wellplate_16800ul_Fb
to match the manufacturer spec (#311) Trash
now inherits fromContainer
(#318)- Renamed parameters of
LiquidHandler.move_{resource,plate,lid}
(#328)- resource_offset -> pickup_offset
- get_direction -> pickup_direction
- put_direction -> drop_direction
location
parameter ofassign_child_resource
is not optional (#336)Resource.get_absolute_location
raisesNoLocationError
instead ofAssertionError
when absolute location is not defined (#338)no_trash
andno_teaching_rack
were renamed towith_trash
andwith_teaching_rack
to avoid double negatives (#347)
- Cor_96_wellplate_360ul_Fb plate (catalog number 3603)
- Add attribute
material_z_thickness: Optional[float]
toContainer
s (#183). Coordinate.vector()
to return a 3-item list of floats.Rotation
class to represent a rotation in 3D space (#195)Resource.get_absolute_rotation()
to get the absolute rotation of a resource (#195)pedestal_size_z
toPLT_CAR_L5MD
andPLT_CAR_L5MD_A00
(#198).create_ordered_items_2d
, similar tocreate_equally_spaced_2d
, but a dictionary keyed by the item's position identifier in the grid (#201)CellTreat_96_DWP_350ul_Ub
andCellTreat_6_DWP_16300ul_Fb
(#200)Opentrons_96_adapter_Vb
to integrate Opentrons Aluminum 96-well plate adapter (part of the "Aluminum Block Set") andREADME.md
for Opentrons resource folder- Serialization of functions. Serialize
compute_volume_from_height
andcompute_height_from_volume
functions inContainer
s (#215) Eppendorf_96_wellplate_250ul_Vb
(#215)Thermo_TS_96_wellplate_1200ul_Rb
(#215)Thermo_AB_96_wellplate_300ul_Vb_EnduraPlate
(#215)adapter_hole_size_z
andplate_z_offset
parameters toPlateAdapter
(#215)wide_high_volume_tip_with_filter
andHTF_WIDE
(#222)- Serialize code cells and closures (#220)
Container.get_anchor()
now supports"cavity_bottom"
as an argument forz
(#205)pylabrobot.resources.utils.query
for basic querying (https://github.com/PyLabRobot/pylabrobot/commit/4a07f6a32a9a33d0370eb9c29015567c98aea002)HamiltonLiquidHandler.allow_firmware_planning
to allow STAR/Vantage to plan complex liquid handling operations automatically (may break hardware agnosticity unexpectedly) (#224)size_z
andnesting_z_height
forCor_96_wellplate_360ul_Fb_Lid
(#226)NestedTipRack
(#228)HTF_ULTRAWIDE
,ultrawide_high_volume_tip_with_filter
(#229)get_absolute_size_x
,get_absolute_size_y
,get_absolute_size_z
forResource
(#235)Cytation5Backend
for plate reading on BioTek Cytation 5 (#238)- More chatterboxes (#242)
FanChatterboxBackend
PlateReaderChatterboxBackend
PowderDispenserChatterboxBackend
PumpChatterboxBackend
PumpArrayChatterboxBackend
ScaleChatterboxBackend
ShakerChatterboxBackend
TemperatureControllerChatterboxBackend
- Add fluorescence reading to Cytation 5 (#244)
- Add
F.linear_tip_spot_generator
andF.randomized_tip_spot_generator
for looping over tip spots, with caching (#256) - Add
skip_autoload
,skip_iswap
, andskip_core96_head
flags toSTAR.setup
(#263) - Add
skip_autoload
,skip_iswap
, andskip_core96_head
flags toVantage.setup
(#263) Resource.get_highest_known_point
(#284)BioRad_384_DWP_50uL_Vb
(https://github.com/PyLabRobot/pylabrobot/commit/251c3c274040cdac73cd3baf3a1e9c94c2f368c3)- Support for portrait mode iSWAP (#291)
STAR.{rotate_iswap_wrist,rotate_iswap_rotation_drive}
(#298)STAR.request_pip_channel_version
STAR.ztouch_probe_z_height_using_channel
for getting z-height by probing without cLLD (#260)nest_8_troughplate_22000uL_Vb
andnest_12_troughplate_15000uL_Vb
(#312)Cor_12_wellplate_6900ul_Fb
,Cor_24_wellplate_3470ul_Fb
andCor_48_wellplate_1620ul_Fb
(#311)ignore_collision
parameter toHamiltonDeck.assign_child_resource
(#317)AGenBio_1_troughplate_100000uL_Fl
(#319)MFX_DWP_module_flat
(#320)STAR.position_channels_in_y_direction
(#324){Well,TipSpot}.get_identifier
(#327)LiquidHandler{Backend}.{pick_up_resource,move_picked_up_resource,drop_resource}
(#328)- Resource management (#343)
Access2
loader for vspin (#308)CentrifugeChatterboxBackend
andLoaderChatterboxBackend
(#335)- Add support for TF cytomat
C6000
,C2C_50
,C2C_425
,C2C_450_SHAKE
,C5C
(#332) - Add
resource_size_z
parameter tocreate_homogeneous_resources and
create_resources` (#341) - More backend kwargs for iswap movements on STAR: (#343)
- STAR.pick_up_resource:
iswap_grip_strength: int = 4
minimum_traverse_height_at_beginning_of_a_command: Optional[float] = None
z_position_at_the_command_end: Optional[float] = None
plate_width_tolerance: float = 2.0
hotel_open_gripper_position: Optional[float] = None
hotel_depth=160.0
hotel_clearance_height=7.5
high_speed=False
plate_width: Optional[float] = None
use_unsafe_hotel: bool = False
iswap_collision_control_level: int = 0
iswap_fold_up_sequence_at_the_end_of_process: bool = True
- STAR.drop_resource
minimum_traverse_height_at_beginning_of_a_command: Optional[float] = None
z_position_at_the_command_end: Optional[float] = None
hotel_open_gripper_position: Optional[float] = None
hotel_depth=160.0
hotel_clearance_height=7.5
hotel_high_speed=False
use_unsafe_hotel: bool = False
iswap_collision_control_level: int = 0
- STAR.pick_up_resource:
with_trash96
onHamiltonSTARDeck
so there is more fine grained control (#347)- add
STAR.{get_channels_z_positions, position_channels_in_z_direction}
(#356) STAR.step_off_foil
(#357)
- All VENUS-imported Corning-Costar plates, because they don't have unique and usable identifiers, and are probably wrong.
- Passing single values to LiquidHandler
pick_up_tips
,drop_tips
,aspirate
, anddispense
methods. These methods now require a list of values. utils.positions
:string_to_position
,string_to_index
,string_to_indices
,string_to_pattern
.ThermoScientific_96_DWP_1200ul_Rd
in favor ofThermo_TS_96_wellplate_1200ul_Rb
(#215)Azenta4titudeFrameStar_96_wellplate_skirted
in favor ofAzenta4titudeFrameStar_96_wellplate_200ul_Vb
(#205)Cos_96_DWP_2mL_Vb
in favor ofCos_96_wellplate_2mL_Vb (https://github.com/PyLabRobot/pylabrobot/pull/205/)
- Resource definitions with
_L
and_P
, it is easy enough to use the stem and.rotated(z=90)
for_P
(#288) Cor_6_wellplate_Fl
(#311)AGenBio_1_wellplate_Fl
->AGenBio_1_troughplate_190000uL_Fl
,AGenBio_4_wellplate_Vb
->AGenBio_4_troughplate_75000_Vb
(#319)
- Don't apply an offset to rectangle drawing in the Visualizer.
- Fix Opentrons resource loading (well locations are now lfb instead of ccc)
- Fix Opentrons backend resource definitions: Opentrons takes well locations as ccc instead of lfb
- Fix ThermoScientific_96_DWP_1200ul_Rd to ThermoScientific_96_wellplate_1200ul_Rd (#183).
libusb_package
is now an optional dependency.- Plates with a skirt are now correctly lowered when placed on plate carriers with a pedestal (#205)
minimum_height
inSTAR
andVantage
now correctly refer to aContainer
s bottom instead of being a function of liquid height (#205)aspirate96
anddispense96
type check- fix angles computed by grip directions (#234)
- picking up rotated resources in
STAR
(#233) - picking up rotated resources in
Vantage
(#268) - assigning rotated resources to
PlateReader
now have the correct location (#233) - use local sizes in computing anchor (#233)
- don't raise a blow out air volume error when requesting 0, or when volume tracking is disabled (#262)
- fix get_child_location for resources rotated by 180 degrees (#269)
- volume tracking on channel 1-n (#273)
- correct trash location on Vantage (#285)
Resource.get_absolute_location
includes anchor even if parent is None- unassign from parent if resource is re-assigned (#333)
- HamiltonDeck.load_from_lay_file
hamilton_parse
module and the VENUS labware database parser.PLT_CAR_L4_SHAKER
was removed in favor ofMFX_CAR_L5_base
(#188).items
,num_items_x
andnum_items_y
attributes ofItemizedResource
(#231)report
is no longer a parameter ofPlateReader.read_absorbance
(default is now OD) (#238)