Source code for autoprotocol_utilities.magnetic_helpers

from autoprotocol_utilities import list_of_filled_wells
from autoprotocol.container import Container
import sys

if sys.version_info[0] >= 3:
    string_type = str
else:
    string_type = basestring


[docs]def get_mag_amplicenter(plate, amplitude_fraction=1.0): """Determine amplitude and center for KF operations Given the container this function determines the well type and fill volume. From that it calculates the center for the magnetic operation (1/2 the fill volume) and the amplitude to move around that from 0 to center + amplitude. Example Usage: .. code-block:: python from autoprotocol import Protocol from autoprotocol_utilities.magnetic_helpers import get_mag_amplicenter p = Protocol() example_plate = p.ref(name="Example", id=None, cont_type="96-pcr", storage="ambient") p.dispense(ref=example_plate, reagent="water", columns=[{"column": 4, "volume": "100:microliters"},]) get_mag_amplicenter(example_plate) Returns: .. code-block:: json {'center': 0.3125, 'amplitude': 0.3125} Parameters ---------- plate: Container Plate that is being used amplitude_fraction: float, optional By default the full available amplitude will be used (from center to bottom of well). Use this parameter to reduce the amplitude. Returns ------- nametuple `center` and `amplitude` both of type float Raises ------ ValueError If plate is not of type `Container` ValueError If `amplitude_fraction` is not a float or bigger than 1 """ assert isinstance(plate, Container) assert isinstance(amplitude_fraction, float) assert amplitude_fraction <= 1.0 max_cont_vol = plate.container_type.well_volume_ul max_vol = max([x.volume for x in list_of_filled_wells(plate)]) ratio = float(max_vol.to_base_units() / max_cont_vol.to_base_units()) return {"center": ratio / 2, "amplitude": ratio / 2 / amplitude_fraction}
[docs]def get_mag_frequency(plate, speed): """Determine frequency for KF operation Based on plate type and the desired KF speed, determine the frequency for the KF operation. Needed for `mix` and `release` operations. Example Usage: .. code-block:: python from autoprotocol import Protocol from autoprotocol_utilities.magnetic_helpers import get_mag_frequency p = Protocol() example_plate = p.ref(name="Example", id=None, cont_type="96-pcr", storage="ambient") get_mag_frequency(plate=example_plate, speed="slow") Returns: .. code-block:: none 0.4:hertz Parameters ---------- plate: Container Container that is being used speed: string String defining the speed - can be `slow`, `medium`, `fast` Returns ------- string Frequency in the form of "2.5:Hz" Raises ------ ValueError If `plate` is not of type `Container` ValueError If `speed` is not 'slow', 'medium', 'fast' ValueError If plate type is not a key in `frequencies` """ name = plate.container_type.shortname frequencies = {"96-deep-kf": {"slow": "0.15:hertz", "medium": "1.5:hertz", "fast": "2.5:hertz"}, "96-deep": {"slow": "0.15:hertz", "medium": "1.5:hertz", "fast": "2.5:hertz"}, "96-v-kf": {"slow": "0.5:hertz", "medium": "4.5:hertz", "fast": "9.5:hertz"}, "96-flat": {"slow": "0.5:hertz", "medium": "5.5:hertz", "fast": "11.5:hertz"}, "96-pcr": {"slow": "0.4:hertz", "medium": "4:hertz", "fast": "8.5:hertz"}} assert isinstance(plate, Container) assert speed in ['slow', 'medium', 'fast'] assert name in frequencies.keys() return frequencies[name][speed]