@@ -1436,8 +1436,6 @@ async def aspirate(
1436
1436
self ,
1437
1437
ops : List [Aspiration ],
1438
1438
use_channels : List [int ],
1439
- jet : Optional [List [bool ]] = None ,
1440
- blow_out : Optional [List [bool ]] = None ,
1441
1439
lld_search_height : Optional [List [float ]] = None ,
1442
1440
clot_detection_height : Optional [List [float ]] = None ,
1443
1441
pull_out_distance_transport_air : Optional [List [float ]] = None ,
@@ -1487,9 +1485,6 @@ async def aspirate(
1487
1485
Args:
1488
1486
ops: The aspiration operations to perform.
1489
1487
use_channels: The channels to use for the operations.
1490
- jet: whether to search for a jet liquid class. Only used on dispense. Default is False.
1491
- blow_out: whether to blow out air. Only used on dispense. Note that in the VENUS Liquid
1492
- Editor, this is called "empty". Default is False.
1493
1488
1494
1489
lld_search_height: The height to start searching for the liquid level when using LLD.
1495
1490
clot_detection_height: Unknown, but probably the height to search for clots when doing LLD.
@@ -1550,11 +1545,6 @@ async def aspirate(
1550
1545
1551
1546
n = len (ops )
1552
1547
1553
- if jet is None :
1554
- jet = [False ] * n
1555
- if blow_out is None :
1556
- blow_out = [False ] * n
1557
-
1558
1548
self ._assert_valid_resources ([op .resource for op in ops ])
1559
1549
1560
1550
well_bottoms = [op .resource .get_absolute_location ().z + op .offset .z + \
@@ -1934,8 +1924,6 @@ async def drop_tips96(
1934
1924
async def aspirate96 (
1935
1925
self ,
1936
1926
aspiration : Union [AspirationPlate , AspirationContainer ],
1937
- jet : bool = False ,
1938
- blow_out : bool = False ,
1939
1927
1940
1928
use_lld : bool = False ,
1941
1929
liquid_height : float = 0 ,
@@ -1961,19 +1949,14 @@ async def aspirate96(
1961
1949
mix_cycles : int = 0 ,
1962
1950
mix_position_from_liquid_surface : float = 0 ,
1963
1951
surface_following_distance_during_mix : float = 0 ,
1964
- speed_of_mix : float = 120.0 ,
1952
+ mix_speed : float = 120.0 ,
1965
1953
limit_curve_index : int = 0 ,
1966
1954
):
1967
1955
""" Aspirate using the Core96 head.
1968
1956
1969
1957
Args:
1970
1958
aspiration: The aspiration to perform.
1971
1959
1972
- jet: Whether to search for a jet liquid class. Only used on dispense.
1973
- blow_out: Whether to use "blow out" dispense mode. Only used on dispense. Note that this is
1974
- labelled as "empty" in the VENUS liquid editor, but "blow out" in the firmware
1975
- documentation.
1976
-
1977
1960
use_lld: If True, use gamma liquid level detection. If False, use liquid height.
1978
1961
liquid_height: The height of the liquid above the bottom of the well, in millimeters.
1979
1962
air_transport_retract_dist: The distance to retract after aspirating, in millimeters.
@@ -2002,7 +1985,7 @@ async def aspirate96(
2002
1985
liquid surface.
2003
1986
surface_following_distance_during_mix: The distance to follow the liquid surface
2004
1987
during mix.
2005
- speed_of_mix : The speed of mix.
1988
+ mix_speed : The speed of mix.
2006
1989
limit_curve_index: The index of the limit curve to use.
2007
1990
"""
2008
1991
@@ -2011,9 +1994,6 @@ async def aspirate96(
2011
1994
2012
1995
assert self .core96_head_installed , "96 head must be installed"
2013
1996
2014
- if jet or blow_out :
2015
- raise NotImplementedError ("jet and blow out are not implemented for aspirate96 yet" )
2016
-
2017
1997
# get the first well and tip as representatives
2018
1998
if isinstance (aspiration , AspirationPlate ):
2019
1999
top_left_well = aspiration .wells [0 ]
@@ -2024,28 +2004,25 @@ async def aspirate96(
2024
2004
2025
2005
liquid_height = position .z + liquid_height
2026
2006
2027
- transport_air_volume = transport_air_volume or 0
2028
- blow_out_air_volume = aspiration .blow_out_air_volume or 0
2029
- flow_rate = aspiration .flow_rate or 250
2030
- swap_speed = swap_speed or 100
2031
- settling_time = settling_time or 0.5
2032
- speed_of_mix = speed_of_mix or 10.0
2007
+ if transport_air_volume is None :
2008
+ transport_air_volume = 0
2009
+ if aspiration .blow_out_air_volume is None :
2010
+ blow_out_air_volume = 0
2011
+ else :
2012
+ blow_out_air_volume = aspiration .blow_out_air_volume
2013
+ if aspiration .flow_rate is None :
2014
+ flow_rate = 250
2015
+ else :
2016
+ flow_rate = aspiration .flow_rate
2017
+ if swap_speed is None :
2018
+ swap_speed = 100
2019
+ if settling_time is None :
2020
+ settling_time = 0.5
2021
+ if mix_speed is None :
2022
+ mix_speed = 10.0
2033
2023
2034
2024
channel_pattern = [True ]* 12 * 8
2035
2025
2036
- # Was this ever true? Just copied it over from pyhamilton. Could have something to do with
2037
- # the liquid classes and whether blow_out mode is enabled.
2038
- # # Unfortunately, `blow_out_air_volume` does not work correctly, so instead we aspirate air
2039
- # # manually.
2040
- # if blow_out_air_volume is not None and blow_out_air_volume > 0:
2041
- # await self.aspirate_core_96(
2042
- # x_position=int(position.x * 10),
2043
- # y_positions=int(position.y * 10),
2044
- # lld_mode=0,
2045
- # liquid_surface_at_function_without_lld=int((liquid_height + 30) * 10),
2046
- # aspiration_volumes=int(blow_out_air_volume * 10)
2047
- # )
2048
-
2049
2026
return await self .aspirate_core_96 (
2050
2027
x_position = round (position .x * 10 ),
2051
2028
x_direction = 0 ,
@@ -2081,7 +2058,7 @@ async def aspirate96(
2081
2058
round (mix_position_from_liquid_surface * 10 ),
2082
2059
surface_following_distance_during_mix =
2083
2060
round (surface_following_distance_during_mix * 10 ),
2084
- speed_of_mix = round (speed_of_mix * 10 ),
2061
+ mix_speed = round (mix_speed * 10 ),
2085
2062
channel_pattern = channel_pattern ,
2086
2063
limit_curve_index = limit_curve_index ,
2087
2064
tadm_algorithm = False ,
@@ -2118,7 +2095,7 @@ async def dispense96(
2118
2095
mixing_cycles : int = 0 ,
2119
2096
mixing_position_from_liquid_surface : float = 0 ,
2120
2097
surface_following_distance_during_mixing : float = 0 ,
2121
- speed_of_mixing : float = 120.0 ,
2098
+ mix_speed : float = 120.0 ,
2122
2099
limit_curve_index : int = 0 ,
2123
2100
cut_off_speed : float = 5.0 ,
2124
2101
stop_back_volume : float = 0 ,
@@ -2154,7 +2131,7 @@ async def dispense96(
2154
2131
mixing_cycles: Mixing cycles.
2155
2132
mixing_position_from_liquid_surface: Mixing position from liquid surface, in mm.
2156
2133
surface_following_distance_during_mixing: Surface following distance during mixing, in mm.
2157
- speed_of_mixing : Speed of mixing, in ul/s.
2134
+ mix_speed : Speed of mixing, in ul/s.
2158
2135
limit_curve_index: Limit curve index.
2159
2136
cut_off_speed: Unknown.
2160
2137
stop_back_volume: Unknown.
@@ -2163,9 +2140,6 @@ async def dispense96(
2163
2140
if hlc is not None :
2164
2141
raise NotImplementedError ("Hamilton liquid classes are deprecated." )
2165
2142
2166
- if jet or blow_out :
2167
- raise NotImplementedError ("jet and blow out are not implemented for aspirate96 yet" )
2168
-
2169
2143
assert self .core96_head_installed , "96 head must be installed"
2170
2144
2171
2145
# get the first well and tip as representatives
@@ -2180,12 +2154,22 @@ async def dispense96(
2180
2154
2181
2155
dispense_mode = _dispensing_mode_for_op (empty = empty , jet = jet , blow_out = blow_out )
2182
2156
2183
- transport_air_volume = transport_air_volume or 0
2184
- blow_out_air_volume = dispense .blow_out_air_volume or 0
2185
- flow_rate = dispense .flow_rate or 120
2186
- swap_speed = swap_speed or 100
2187
- settling_time = settling_time or 5
2188
- speed_of_mixing = speed_of_mixing or 100
2157
+ if transport_air_volume is None :
2158
+ transport_air_volume = 0
2159
+ if dispense .blow_out_air_volume is None :
2160
+ blow_out_air_volume = 0
2161
+ else :
2162
+ blow_out_air_volume = dispense .blow_out_air_volume
2163
+ if dispense .flow_rate is None :
2164
+ flow_rate = 120
2165
+ else :
2166
+ flow_rate = dispense .flow_rate
2167
+ if swap_speed is None :
2168
+ swap_speed = 100
2169
+ if settling_time is None :
2170
+ settling_time = 5
2171
+ if mix_speed is None :
2172
+ mix_speed = 100
2189
2173
2190
2174
channel_pattern = [True ]* 12 * 8
2191
2175
@@ -2221,7 +2205,7 @@ async def dispense96(
2221
2205
mixing_cycles = mixing_cycles ,
2222
2206
mixing_position_from_liquid_surface = round (mixing_position_from_liquid_surface * 10 ),
2223
2207
surface_following_distance_during_mixing = round (surface_following_distance_during_mixing * 10 ),
2224
- speed_of_mixing = round (speed_of_mixing * 10 ),
2208
+ mix_speed = round (mix_speed * 10 ),
2225
2209
channel_pattern = channel_pattern ,
2226
2210
limit_curve_index = limit_curve_index ,
2227
2211
tadm_algorithm = False ,
@@ -4938,7 +4922,7 @@ async def aspirate_core_96(
4938
4922
mix_cycles : int = 0 ,
4939
4923
mix_position_from_liquid_surface : int = 250 ,
4940
4924
surface_following_distance_during_mix : int = 0 ,
4941
- speed_of_mix : int = 1000 ,
4925
+ mix_speed : int = 1000 ,
4942
4926
channel_pattern : List [bool ] = [True ] * 96 ,
4943
4927
limit_curve_index : int = 0 ,
4944
4928
tadm_algorithm : bool = False ,
@@ -4992,7 +4976,7 @@ async def aspirate_core_96(
4992
4976
liquid surface (LLD or absolute terms) [0.1mm]. Must be between 0 and 990. Default 250.
4993
4977
surface_following_distance_during_mix: surface following distance during
4994
4978
mix [0.1mm]. Must be between 0 and 990. Default 0.
4995
- speed_of_mix : Speed of mix [0.1ul/s]. Must be between 3 and 5000.
4979
+ mix_speed : Speed of mix [0.1ul/s]. Must be between 3 and 5000.
4996
4980
Default 1000.
4997
4981
todo: TODO: 24 hex chars. Must be between 4 and 5000.
4998
4982
limit_curve_index: limit curve index. Must be between 0 and 999. Default 0.
@@ -5038,8 +5022,8 @@ async def aspirate_core_96(
5038
5022
"mix_position_from_liquid_surface must be between 0 and 990"
5039
5023
assert 0 <= surface_following_distance_during_mix <= 990 , \
5040
5024
"surface_following_distance_during_mix must be between 0 and 990"
5041
- assert 3 <= speed_of_mix <= 5000 , \
5042
- "speed_of_mix must be between 3 and 5000"
5025
+ assert 3 <= mix_speed <= 5000 , \
5026
+ "mix_speed must be between 3 and 5000"
5043
5027
assert 0 <= limit_curve_index <= 999 , "limit_curve_index must be between 0 and 999"
5044
5028
5045
5029
assert 0 <= recording_mode <= 2 , "recording_mode must be between 0 and 2"
@@ -5080,7 +5064,7 @@ async def aspirate_core_96(
5080
5064
hc = f"{ mix_cycles :02} " ,
5081
5065
hp = f"{ mix_position_from_liquid_surface :03} " ,
5082
5066
mj = f"{ surface_following_distance_during_mix :03} " ,
5083
- hs = f"{ speed_of_mix :04} " ,
5067
+ hs = f"{ mix_speed :04} " ,
5084
5068
cw = channel_pattern_hex ,
5085
5069
cr = f"{ limit_curve_index :03} " ,
5086
5070
cj = tadm_algorithm ,
@@ -5120,7 +5104,7 @@ async def dispense_core_96(
5120
5104
mixing_cycles : int = 0 ,
5121
5105
mixing_position_from_liquid_surface : int = 250 ,
5122
5106
surface_following_distance_during_mixing : int = 0 ,
5123
- speed_of_mixing : int = 1000 ,
5107
+ mix_speed : int = 1000 ,
5124
5108
channel_pattern : List [bool ] = [True ]* 12 * 8 ,
5125
5109
limit_curve_index : int = 0 ,
5126
5110
tadm_algorithm : bool = False ,
@@ -5177,7 +5161,7 @@ async def dispense_core_96(
5177
5161
surface (LLD or absolute terms) [0.1mm]. Must be between 0 and 990. Default 250.
5178
5162
surface_following_distance_during_mixing: surface following distance during mixing [0.1mm].
5179
5163
Must be between 0 and 990. Default 0.
5180
- speed_of_mixing : Speed of mixing [0.1ul/s]. Must be between 3 and 5000. Default 1000.
5164
+ mix_speed : Speed of mixing [0.1ul/s]. Must be between 3 and 5000. Default 1000.
5181
5165
channel_pattern: list of 96 boolean values
5182
5166
limit_curve_index: limit curve index. Must be between 0 and 999. Default 0.
5183
5167
tadm_algorithm: TADM algorithm. Default False.
@@ -5224,7 +5208,7 @@ async def dispense_core_96(
5224
5208
"mixing_position_from_liquid_surface must be between 0 and 990"
5225
5209
assert 0 <= surface_following_distance_during_mixing <= 990 , \
5226
5210
"surface_following_distance_during_mixing must be between 0 and 990"
5227
- assert 3 <= speed_of_mixing <= 5000 , "speed_of_mixing must be between 3 and 5000"
5211
+ assert 3 <= mix_speed <= 5000 , "mix_speed must be between 3 and 5000"
5228
5212
assert 0 <= limit_curve_index <= 999 , "limit_curve_index must be between 0 and 999"
5229
5213
assert 0 <= recording_mode <= 2 , "recording_mode must be between 0 and 2"
5230
5214
@@ -5266,7 +5250,7 @@ async def dispense_core_96(
5266
5250
hc = f"{ mixing_cycles :02} " ,
5267
5251
hp = f"{ mixing_position_from_liquid_surface :03} " ,
5268
5252
mj = f"{ surface_following_distance_during_mixing :03} " ,
5269
- hs = f"{ speed_of_mixing :04} " ,
5253
+ hs = f"{ mix_speed :04} " ,
5270
5254
cw = channel_pattern_hex ,
5271
5255
cr = f"{ limit_curve_index :03} " ,
5272
5256
cj = tadm_algorithm ,
0 commit comments