Source code for laborchestrator.start_up.example_processes.runtime_decision_process

from numpy import random

from pythonlab.resources.services.moving import MoverServiceResource
from pythonlab.resources.services.centrifugation import CentrifugeServiceResource
from pythonlab.resources.services.analysis import PlateReaderServiceResource
from pythonlab.resources.services.labware_storage import LabwareStorageResource as ContainerStorageResource
from pythonlab.resources.services.incubation import IncubatorServiceResource
from pythonlab.resources.services.liquid_handling import LiquidHandlerServiceResource
from pythonlab.resource import LabwareResource as ContainerResource
from pythonlab.process import PLProcess


[docs] class RuntimeDecisionProcess(PLProcess): def __init__(self, priority=10): # 0 has highest priority self.num_plates = 2 self.name = "RuntimeDecisionProcess" super().__init__(priority=priority)#, num_plates=2, process_name="RuntimeDecisionProcess")
[docs] def create_resources(self): self.hotel = ContainerStorageResource(proc=self, name="Carousel") self.rotanta_transfer = ContainerStorageResource(proc=self, name="Transfer") self.incubator1 = IncubatorServiceResource(proc=self, name="Incubator1") self.incubator2 = IncubatorServiceResource(proc=self, name="Incubator2") self.incubator3 = IncubatorServiceResource(proc=self, name="Incubator3") self.incubator4 = IncubatorServiceResource(proc=self, name="Incubator4") self.robot_arm = MoverServiceResource(proc=self, name="Mover") self.reader = PlateReaderServiceResource(proc=self, name="PlateReader") self.reader2 = PlateReaderServiceResource(proc=self, name="Plate_Reader2") self.pipetter = LiquidHandlerServiceResource(proc=self, name="Liquid_Handler") self.centrifuge = CentrifugeServiceResource(proc=self, name="Centrifuge") self.reader_pool = PlateReaderServiceResource(proc=self, name=None) self.mover_pool = MoverServiceResource(proc=self, name=None) # only container 0 will be marked filled for testing purposes self.containers = [ContainerResource(proc=self, name=f"{self.name}_cont_{cont}", lidded=True, filled=False) for cont in range(self.num_plates)]
[docs] def init_service_resources(self): # setting start position of containers super().init_service_resources() for cont in self.containers: cont.set_start_position( self.hotel, self.hotel.next_free_position)
[docs] def process(self): incubation_duration1 = 3 incubation_duration2 = 9 cont1 = self.containers[0] cont2 = self.containers[1] for cont in self.containers: # read the barcodes self.mover_pool.read_barcode(cont) # move to incubator self.mover_pool.move(cont, target_loc=self.incubator1) # incubate self.incubator1.incubate(cont1, duration=incubation_duration1, temperature=310) self.incubator1.incubate(cont2, duration=incubation_duration2, temperature=310) # move to reader self.mover_pool.move(cont1, target_loc=self.reader_pool, lidded=False) # make absorbance measurement absorb = self.reader_pool.single_read(cont1, method='211001_varioskan_single_well_600') aver_abs = self.average(absorb) if aver_abs < .6: # do some more incubation self.mover_pool.move(cont1, target_loc=self.incubator1, lidded=True) self.incubator1.incubate(cont1, duration=incubation_duration1, temperature=310) # move back to hotel self.mover_pool.move(cont1, target_loc=self.hotel, lidded=True) self.mover_pool.move(cont2, target_loc=self.hotel, position=27)
[docs] def average(self, l): abs = random.rand()+.1 return abs