import re
from typing import Dict, Optional, Tuple

from pylabrobot.resources.liquid import Liquid
from pylabrobot.resources.tecan import TipType


def from_str(s: str) -> Optional[Liquid]:
  """Parses a Tecan liquid class name and creates a Liquid object."""

  m = re.match(r"(\w+) free dispense$", s)
  if m is None:
    return None

  lc = m.group(1)
  if lc in {"Ethanol", "Serum"}:
    lc += " 100%"
  return Liquid(lc)


class TecanLiquidClass:
  """A liquid class like used in EVOware."""

  def __init__(
    self,
    lld_mode: int,
    lld_conductivity: int,
    lld_speed: float,
    lld_distance: float,
    clot_speed: float,
    clot_limit: float,
    pmp_sensitivity: int,
    pmp_viscosity: float,
    pmp_character: int,
    density: float,
    calibration_factor: float,
    calibration_offset: float,
    aspirate_speed: float,
    aspirate_delay: float,
    aspirate_stag_volume: float,
    aspirate_stag_speed: float,
    aspirate_lag_volume: float,
    aspirate_lag_speed: float,
    aspirate_tag_volume: float,
    aspirate_tag_speed: float,
    aspirate_excess: float,
    aspirate_conditioning: float,
    aspirate_pinch_valve: bool,
    aspirate_lld: bool,
    aspirate_lld_position: int,
    aspirate_lld_offset: float,
    aspirate_mix: bool,
    aspirate_mix_volume: float,
    aspirate_mix_cycles: int,
    aspirate_retract_position: int,
    aspirate_retract_speed: float,
    aspirate_retract_offset: float,
    dispense_speed: float,
    dispense_breakoff: float,
    dispense_delay: float,
    dispense_tag: bool,
    dispense_pinch_valve: bool,
    dispense_lld: bool,
    dispense_lld_position: int,
    dispense_lld_offset: float,
    dispense_touching_direction: int,
    dispense_touching_speed: float,
    dispense_touching_delay: float,
    dispense_mix: bool,
    dispense_mix_volume: float,
    dispense_mix_cycles: int,
    dispense_retract_position: int,
    dispense_retract_speed: float,
    dispense_retract_offset: float,
  ):
    self.lld_mode = lld_mode
    self.lld_conductivity = lld_conductivity
    self.lld_speed = lld_speed
    self.lld_distance = lld_distance
    self.clot_speed = clot_speed
    self.clot_limit = clot_limit
    self.pmp_sensitivity = pmp_sensitivity
    self.pmp_viscosity = pmp_viscosity
    self.pmp_character = pmp_character
    self.density = density

    self.calibration_factor = calibration_factor
    self.calibration_offset = calibration_offset

    self.aspirate_speed = aspirate_speed
    self.aspirate_delay = aspirate_delay
    self.aspirate_stag_volume = aspirate_stag_volume
    self.aspirate_stag_speed = aspirate_stag_speed
    self.aspirate_lag_volume = aspirate_lag_volume
    self.aspirate_lag_speed = aspirate_lag_speed
    self.aspirate_tag_volume = aspirate_tag_volume
    self.aspirate_tag_speed = aspirate_tag_speed
    self.aspirate_excess = aspirate_excess
    self.aspirate_conditioning = aspirate_conditioning
    self.aspirate_pinch_valve = aspirate_pinch_valve
    self.aspirate_lld = aspirate_lld
    self.aspirate_lld_position = aspirate_lld_position
    self.aspirate_lld_offset = aspirate_lld_offset
    self.aspirate_mix = aspirate_mix
    self.aspirate_mix_volume = aspirate_mix_volume
    self.aspirate_mix_cycles = aspirate_mix_cycles
    self.aspirate_retract_position = aspirate_retract_position
    self.aspirate_retract_speed = aspirate_retract_speed
    self.aspirate_retract_offset = aspirate_retract_offset

    self.dispense_speed = dispense_speed
    self.dispense_breakoff = dispense_breakoff
    self.dispense_delay = dispense_delay
    self.dispense_tag = dispense_tag
    self.dispense_pinch_valve = dispense_pinch_valve
    self.dispense_lld = dispense_lld
    self.dispense_lld_position = dispense_lld_position
    self.dispense_lld_offset = dispense_lld_offset
    self.dispense_touching_direction = dispense_touching_direction
    self.dispense_touching_speed = dispense_touching_speed
    self.dispense_touching_delay = dispense_touching_delay
    self.dispense_mix = dispense_mix
    self.dispense_mix_volume = dispense_mix_volume
    self.dispense_mix_cycles = dispense_mix_cycles
    self.dispense_retract_position = dispense_retract_position
    self.dispense_retract_speed = dispense_retract_speed
    self.dispense_retract_offset = dispense_retract_offset

  def compute_corrected_volume(self, target_volume: float) -> float:
    return self.calibration_factor * target_volume + self.calibration_offset


mapping: Dict[Tuple[float, float, Liquid, TipType], TecanLiquidClass] = {}


def get_liquid_class(
  target_volume: float,
  liquid_class: Liquid,
  tip_type: TipType,
) -> Optional[TecanLiquidClass]:
  for (mnv, mxv, lc, tt), tlc in mapping.items():
    if mnv <= target_volume < mxv and lc == liquid_class and tt == tip_type:
      return tlc
  return None


mapping[(3, 15.01, Liquid.DMSO, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.063,
  calibration_offset=0.1,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=10,
  aspirate_stag_speed=5,
  aspirate_lag_volume=10,
  aspirate_lag_speed=50,
  aspirate_tag_volume=5,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.DMSO, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.1,
  calibration_offset=-0.3,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=5,
  aspirate_lag_volume=0,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.DMSO, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.002,
  calibration_offset=19.3,
  aspirate_speed=150,
  aspirate_delay=300,
  aspirate_stag_volume=20,
  aspirate_stag_speed=5,
  aspirate_lag_volume=0,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.DMSO, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.026,
  calibration_offset=0.1,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=5,
  aspirate_lag_volume=5,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.DMSO, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.007,
  calibration_offset=0.8,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=5,
  aspirate_lag_volume=20,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.DMSO, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.004,
  calibration_offset=3.9,
  aspirate_speed=150,
  aspirate_delay=400,
  aspirate_stag_volume=20,
  aspirate_stag_speed=5,
  aspirate_lag_volume=20,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(0.5, 3.01, Liquid.DMSO, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.311,
  calibration_offset=0,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=5,
  aspirate_stag_speed=5,
  aspirate_lag_volume=0,
  aspirate_lag_speed=50,
  aspirate_tag_volume=0.25,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=10,
  dispense_breakoff=10,
  dispense_delay=400,
  dispense_tag=False,
  dispense_pinch_valve=True,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3.01, 15.01, Liquid.DMSO, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.215,
  calibration_offset=1.5,
  aspirate_speed=10,
  aspirate_delay=400,
  aspirate_stag_volume=2,
  aspirate_stag_speed=5,
  aspirate_lag_volume=7,
  aspirate_lag_speed=50,
  aspirate_tag_volume=5,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 300.01, Liquid.DMSO, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.122,
  calibration_offset=2.4,
  aspirate_speed=45,
  aspirate_delay=500,
  aspirate_stag_volume=10,
  aspirate_stag_speed=5,
  aspirate_lag_volume=0,
  aspirate_lag_speed=50,
  aspirate_tag_volume=5,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=100,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(1, 7.51, Liquid.DMSO, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.35,
  calibration_offset=0,
  aspirate_speed=5,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=7,
  aspirate_lag_speed=50,
  aspirate_tag_volume=2,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=500,
  dispense_breakoff=150,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(7.51, 20.01, Liquid.DMSO, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.04,
  calibration_offset=0,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=7,
  aspirate_lag_speed=50,
  aspirate_tag_volume=3,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=500,
  dispense_breakoff=150,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(20.01, 200.01, Liquid.DMSO, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.04,
  calibration_offset=0,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=10,
  aspirate_lag_speed=50,
  aspirate_tag_volume=3,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=400,
  dispense_breakoff=300,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.DMSO, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.08,
  calibration_offset=-0.086,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=50,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=50,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.DMSO, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.024,
  calibration_offset=0.866,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.DMSO, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1.1,
  calibration_factor=1.028,
  calibration_offset=-0.258,
  aspirate_speed=150,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=True,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 1000.01, Liquid.ETHANOL, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.063,
  calibration_offset=3.4,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=0,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 1000.01, Liquid.ETHANOL, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.09,
  calibration_offset=4.3,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=20,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(0.5, 3.01, Liquid.ETHANOL, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.279,
  calibration_offset=0.2,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=5,
  aspirate_stag_speed=10,
  aspirate_lag_volume=0,
  aspirate_lag_speed=10,
  aspirate_tag_volume=0.25,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=10,
  aspirate_retract_offset=-5,
  dispense_speed=10,
  dispense_breakoff=10,
  dispense_delay=400,
  dispense_tag=False,
  dispense_pinch_valve=True,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3.01, 15.01, Liquid.ETHANOL, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.199,
  calibration_offset=1.3,
  aspirate_speed=10,
  aspirate_delay=400,
  aspirate_stag_volume=2,
  aspirate_stag_speed=10,
  aspirate_lag_volume=7,
  aspirate_lag_speed=10,
  aspirate_tag_volume=5,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 300.01, Liquid.ETHANOL, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.079,
  calibration_offset=2.8,
  aspirate_speed=45,
  aspirate_delay=500,
  aspirate_stag_volume=10,
  aspirate_stag_speed=10,
  aspirate_lag_volume=0,
  aspirate_lag_speed=10,
  aspirate_tag_volume=5,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=100,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 5, Liquid.ETHANOL, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.072,
  calibration_offset=0.22,
  aspirate_speed=20,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=50,
  aspirate_lag_volume=5,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=50,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=True,
  aspirate_mix_volume=200,
  aspirate_mix_cycles=2,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(5, 15.01, Liquid.ETHANOL, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.072,
  calibration_offset=0.42,
  aspirate_speed=20,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=50,
  aspirate_lag_volume=5,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=50,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=True,
  aspirate_mix_volume=200,
  aspirate_mix_cycles=2,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.ETHANOL, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1.011,
  calibration_offset=1.802,
  aspirate_speed=150,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=5,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=True,
  aspirate_mix_volume=200,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.ETHANOL, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=2,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=0.8,
  calibration_factor=1,
  calibration_offset=0,
  aspirate_speed=150,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=True,
  aspirate_mix_volume=1000,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.SERUM, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.074,
  calibration_offset=0.3,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=10,
  aspirate_stag_speed=20,
  aspirate_lag_volume=20,
  aspirate_lag_speed=20,
  aspirate_tag_volume=10,
  aspirate_tag_speed=20,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 300.01, Liquid.SERUM, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.06,
  calibration_offset=0.43,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=0,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(300.01, 1000.01, Liquid.SERUM, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.007,
  calibration_offset=16.63,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=0,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.SERUM, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.138,
  calibration_offset=1,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=20,
  aspirate_lag_volume=5,
  aspirate_lag_speed=20,
  aspirate_tag_volume=10,
  aspirate_tag_speed=20,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.SERUM, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.059,
  calibration_offset=2.09,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=20,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.SERUM, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.046,
  calibration_offset=8.55,
  aspirate_speed=100,
  aspirate_delay=400,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=20,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.SERUM, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.115,
  calibration_offset=1.146,
  aspirate_speed=50,
  aspirate_delay=600,
  aspirate_stag_volume=0,
  aspirate_stag_speed=50,
  aspirate_lag_volume=15,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=50,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-10,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=True,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.SERUM, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.043,
  calibration_offset=2.671,
  aspirate_speed=100,
  aspirate_delay=600,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=20,
  aspirate_lag_speed=70,
  aspirate_tag_volume=6,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-10,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=True,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.SERUM, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=2.1,
  pmp_character=0,
  density=1,
  calibration_factor=1.021,
  calibration_offset=10.966,
  aspirate_speed=100,
  aspirate_delay=600,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=20,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=400,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=True,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.WATER, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.045,
  calibration_offset=0.2,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=10,
  aspirate_stag_speed=20,
  aspirate_lag_volume=10,
  aspirate_lag_speed=20,
  aspirate_tag_volume=5,
  aspirate_tag_speed=20,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 500.01, Liquid.WATER, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.042,
  calibration_offset=-0.04,
  aspirate_speed=150,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=0,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(500.01, 1000.01, Liquid.WATER, TipType.STANDARD)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1,
  calibration_offset=20.26,
  aspirate_speed=150,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=0,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=150,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.WATER, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.042,
  calibration_offset=1.1,
  aspirate_speed=20,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=20,
  aspirate_lag_volume=5,
  aspirate_lag_speed=20,
  aspirate_tag_volume=10,
  aspirate_tag_speed=20,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.WATER, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.034,
  calibration_offset=0.9,
  aspirate_speed=100,
  aspirate_delay=200,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=5,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.WATER, TipType.DITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.031,
  calibration_offset=6.12,
  aspirate_speed=150,
  aspirate_delay=300,
  aspirate_stag_volume=20,
  aspirate_stag_speed=70,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(0.5, 3.01, Liquid.WATER, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.1,
  calibration_offset=0.15,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=5,
  aspirate_stag_speed=10,
  aspirate_lag_volume=0,
  aspirate_lag_speed=10,
  aspirate_tag_volume=0.25,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=10,
  dispense_breakoff=10,
  dispense_delay=400,
  dispense_tag=False,
  dispense_pinch_valve=True,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3.01, 15.01, Liquid.WATER, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.045,
  calibration_offset=0.2,
  aspirate_speed=10,
  aspirate_delay=400,
  aspirate_stag_volume=2,
  aspirate_stag_speed=10,
  aspirate_lag_volume=7,
  aspirate_lag_speed=10,
  aspirate_tag_volume=5,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 300.01, Liquid.WATER, TipType.STDLOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.06,
  calibration_offset=0.5,
  aspirate_speed=45,
  aspirate_delay=500,
  aspirate_stag_volume=10,
  aspirate_stag_speed=10,
  aspirate_lag_volume=0,
  aspirate_lag_speed=10,
  aspirate_tag_volume=5,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=110,
  dispense_breakoff=110,
  dispense_delay=100,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(1, 3.01, Liquid.WATER, TipType.DITILOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1,
  calibration_offset=0.25,
  aspirate_speed=10,
  aspirate_delay=500,
  aspirate_stag_volume=5,
  aspirate_stag_speed=10,
  aspirate_lag_volume=0,
  aspirate_lag_speed=10,
  aspirate_tag_volume=0.25,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=10,
  dispense_breakoff=10,
  dispense_delay=100,
  dispense_tag=False,
  dispense_pinch_valve=True,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(3.01, 15.01, Liquid.WATER, TipType.DITILOWVOL)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.03,
  calibration_offset=0.25,
  aspirate_speed=10,
  aspirate_delay=500,
  aspirate_stag_volume=10,
  aspirate_stag_speed=10,
  aspirate_lag_volume=10,
  aspirate_lag_speed=10,
  aspirate_tag_volume=3,
  aspirate_tag_speed=10,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=1,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=240,
  dispense_breakoff=110,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(1, 7.51, Liquid.WATER, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1,
  calibration_offset=0.45,
  aspirate_speed=5,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=20,
  aspirate_lag_speed=50,
  aspirate_tag_volume=3,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=500,
  dispense_breakoff=150,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(7.51, 20.01, Liquid.WATER, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1,
  calibration_offset=0.45,
  aspirate_speed=10,
  aspirate_delay=200,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=10,
  aspirate_lag_speed=50,
  aspirate_tag_volume=5,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=500,
  dispense_breakoff=150,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(20.01, 200.01, Liquid.WATER, TipType.MCADITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.05,
  calibration_offset=0.4,
  aspirate_speed=50,
  aspirate_delay=500,
  aspirate_stag_volume=0,
  aspirate_stag_speed=5,
  aspirate_lag_volume=20,
  aspirate_lag_speed=50,
  aspirate_tag_volume=10,
  aspirate_tag_speed=5,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=False,
  aspirate_lld_position=0,
  aspirate_lld_offset=0,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=2,
  aspirate_retract_speed=5,
  aspirate_retract_offset=0,
  dispense_speed=400,
  dispense_breakoff=300,
  dispense_delay=200,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=3,
  dispense_retract_speed=42,
  dispense_retract_offset=0,
)


mapping[(3, 15.01, Liquid.WATER, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.05,
  calibration_offset=1.5,
  aspirate_speed=20,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=20,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=5,
  aspirate_tag_speed=20,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(15.01, 200.01, Liquid.WATER, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.03,
  calibration_offset=1.5,
  aspirate_speed=100,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=5,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)


mapping[(200.01, 1000.01, Liquid.WATER, TipType.AIRDITI)] = TecanLiquidClass(
  lld_mode=7,
  lld_conductivity=1,
  lld_speed=60,
  lld_distance=4,
  clot_speed=50,
  clot_limit=4,
  pmp_sensitivity=1,
  pmp_viscosity=1,
  pmp_character=0,
  density=1,
  calibration_factor=1.025,
  calibration_offset=4,
  aspirate_speed=150,
  aspirate_delay=400,
  aspirate_stag_volume=0,
  aspirate_stag_speed=70,
  aspirate_lag_volume=10,
  aspirate_lag_speed=70,
  aspirate_tag_volume=10,
  aspirate_tag_speed=70,
  aspirate_excess=0,
  aspirate_conditioning=0,
  aspirate_pinch_valve=False,
  aspirate_lld=True,
  aspirate_lld_position=3,
  aspirate_lld_offset=2,
  aspirate_mix=False,
  aspirate_mix_volume=100,
  aspirate_mix_cycles=1,
  aspirate_retract_position=4,
  aspirate_retract_speed=20,
  aspirate_retract_offset=-5,
  dispense_speed=600,
  dispense_breakoff=400,
  dispense_delay=0,
  dispense_tag=False,
  dispense_pinch_valve=False,
  dispense_lld=False,
  dispense_lld_position=0,
  dispense_lld_offset=0,
  dispense_touching_direction=0,
  dispense_touching_speed=10,
  dispense_touching_delay=100,
  dispense_mix=False,
  dispense_mix_volume=100,
  dispense_mix_cycles=1,
  dispense_retract_position=1,
  dispense_retract_speed=50,
  dispense_retract_offset=0,
)
