def getTips(self, rack_type=None, tip_mask=-1, tips=None) -> (int, list): """ Mount only one kind of new tip at a time or just the tips given in the list :param rack_type: :param tips: :rtype : int :param tip_mask: :return: the mask that can be used :raise "Tip already in position " + str(i): """ if tip_mask == -1: tip_mask = tipsMask[self.nTips] n = Lab.count_tips(tip_mask) assert n <= self.nTips t = 0 if tips is None: # deprecated assert isinstance(rack_type, Lab.Labware.DITIrackType) tips = [Lab.Tip(rack_type) for i in range(n)] else: assert n == len(tips) for i, tp in enumerate(self.Tips): if tip_mask & (1 << i): if tp is not None: raise "A Tip from rack type " + tp.type.name + " is already in position " + str(i) self.Tips[i] = tips[t] t += 1 return tip_mask, (tips[t:] if t < n else [])
def getMoreTips(self, rack_type, tip_mask=-1, tips=None) ->(int, list): """ Mount only the tips with are not already mounted. Mount only one kind of tip at a time, but not necessary the same of the already mounted. :rtype : int :param tip_mask: int :return: the mask that can be used """ if tip_mask == -1: tip_mask = tipsMask[self.nTips] n = Lab.count_tips(tip_mask) assert n <= self.nTips t = 0 if tips is None: # deprecated assert isinstance(rack_type, Lab.Labware.DITIrack) tips = [Lab.Tip(rack_type) for i in range(n)] else: assert n == len(tips) for i, tp in enumerate(self.Tips): if tip_mask & (1 << i): if tp: # already in position if tp.type is not tips[t].type: raise "A Tip from rack type " + tp.type.name + " is already in position " + str(i) + \ " and we need " + tips[t].type.name tip_mask ^= (1 << i) # todo raise if dif maxVol? or if vol not 0? else: self.Tips[i] = tips[t] t += 1 return tip_mask, tips[t:] if t < n else []
def pipette(self, action, volume, labware_selection, tip_mask=-1) -> (list, int): volume, tip_mask = self.curArm().pipette(action, volume, tip_mask) w = 0 # assert isinstance(labware_selection, Lab.Labware) wells = labware_selection.selected_wells() for i, tp in enumerate(self.curArm().Tips): if tip_mask & (1 << i): dv = action*volume[i] if wells[w].reactive is None: print("WARNING !!! There is nothing in well {:d} of rack {:s}".format(wells[w].offset+1, labware_selection.label)) assert wells[w].vol is not None, "Volume of " + wells[w].reactive.name + " not initialized." nv = wells[w].vol - dv assert nv <= wells[w].labware.type.maxVol, "Error trying to change the volume of " + \ wells[w].reactive.name + " from " + str(wells[w].vol) + " to " + str(nv) if nv < 0 : if nv < -self.allow_air: print("WARNING !!! trying to change the volume of " + \ wells[w].reactive.name + " from " + str(wells[w].vol) + " to " + str(nv) + ". Set to 0.") dv = wells[w].vol wells[w].vol -= dv if action == Robot.Arm.Aspire: self.curArm().Tips[i] = Lab.usedTip(tp, wells[w]) wells[w].log(-dv) elif action == Robot.Arm.Dispense: assert isinstance(tp, Lab.usedTip) wells[w].log(-dv, tp.origin) w += 1 return volume, tip_mask
def where_preserve_tips(self, TIP_MASK)->list: # [Lab.DITIrack] """ Return a list of racks with the tips-wells already selected. :param selection: :return: """ # todo this in Labware?? TIP_MASK = TIP_MASK if TIP_MASK != -1 else tipsMask[nTips] types = [] t_masks = [] racks = [] tips = [] for i, tip in enumerate(self.curArm().Tips): if TIP_MASK & (1 << i): assert tip, "There are no tip mounted in position " + str(i) tips += [tip] if tip.type in types: t_masks[types.index(tip.type)] |= (1 << i) else: types += [tip.type] t_masks += [(1 << i)] assert len(types)==1 # todo temporally assumed only one type of tips tpe = types[0] m = t_masks[0] if not self.usePreservedtips: # no re-back DiTi for multiple reuse assert isinstance(tpe, Lab.Labware.DITIrackType) if not tpe.last_preserved_tips: tpe.last_preserved_tips = tpe.pick_next_rack.Wells[0] # todo set to first tip used !!!!! w = tpe.last_preserved_tips assert isinstance(w, Lab.Well) cont = False rack = w.labware assert isinstance(rack, Lab.DITIrack) ip = w.offset n = Lab.count_tips(m) while n: cont, fw = rack.find_free_wells(n, init_pos=ip) if cont: racks += [rack] rack.selectOnly([w.offset for w in fw]) n -= len(fw) rack = rack.next_rack(self.worktable) ip = 0 return racks for tp in tips: assert isinstance(tp, Lab.usedTip) react_well = tp.origin.track assert react_well.offset in tp.type.preserved_tips, "There are no tip preserved for sample "+str(i) tip_well = tp.type.preserved_tips[react_well.offset] assert isinstance(tip_well, Lab.Well) if tip_well.labware in racks: tip_well.selFlag = True else: racks += [ tip_well.labware] tip_well.labware.selectOnly(tip_well.offset) return racks
def set_worktable(self,templateFile): w = Lab.WorkTable.curWorkTable if not w: w = Lab.WorkTable(templateFile) else: w.parseWorTableFile(templateFile) self.worktable = w
def where_are_preserved_tips(self, selected_reactive, TIP_MASK, type)->list: # [Lab.DITIrack] """ :param TIP_MASK: :param type: :return: Return a list of racks with the tips-wells already selected. """ TIP_MASK = TIP_MASK if TIP_MASK != -1 else tipsMask[nTips] type = type if type else Lab.def_DiTi n = Lab.count_tips(TIP_MASK) assert n == len(selected_reactive) where = [] for react_offset in selected_reactive: assert react_offset in type.preserved_tips, "There are no tip preserved for sample "+str(react_offset+1) well_tip = type.preserved_tips[react_offset] assert isinstance(well_tip, Lab.Well) if well_tip.labware in where: well_tip.selFlag = True else: where += [well_tip.labware] well_tip.labware.selectOnly(well_tip.offset) return where
def setUsed(self, tipMask, labware_selection): # Deprecated ?????? mask, tips = self.curArm().drop_test(tipMask) assert len(tips) == len(labware_selection.selected()) for i, w in enumerate(labware_selection.selected_wells()): self.curArm().Tips[tips[i]] = Lab.usedTip(self.curArm().Tips[tips[i]], w)
def Run(self): self.set_EvoMode() self.initialize() Rtv.NumOfSamples = self.NumOfSamples NumOfSamples = self.NumOfSamples wt = self.worktable Itr.comment((self.version + 'for extracting RNA from {:s} samples with the MN-Vet kit').format(str(NumOfSamples))).exec() # Get Labwares (Cuvette, eppys, etc.) from the work table if self.add_VL: LysBuf = wt.getLabware(Lab.Trough_100ml, "2-Vl Lysis Buffer" ) if self.do_extraction: BindBuf = wt.getLabware(Lab.Trough_100ml, "3-VEB Binding Buffer" ) ElutBuf = wt.getLabware(Lab.Trough_100ml, "1-VEL-ElutionBuffer" ) Eluat = wt.getLabware(Lab.EppRack3x16R, "Eluat") Samples = wt.getLabware(Lab.EppRack3x16, "Proben") Lysis = Samples DiTi1000_1 = wt.getLabware(Lab.DiTi_1000ul, "1000-1") DiTi1000_2 = wt.getLabware(Lab.DiTi_1000ul, "1000-2") DiTi1000_3 = wt.getLabware(Lab.DiTi_1000ul, "1000-3") Reactives = wt.getLabware(Lab.GreinRack16_2mL, "Reactives" ) if self.do_extraction: self.TeMg_Heat = wt.getLabware(Lab.TeMag48, "48 Pos Heat") self.TeMag = wt.getLabware(Lab.TeMag48, "48PosMagnet") TeMag = self.TeMag Lysis = TeMag # Set the initial position of the tips self.go_first_pos() # Set volumen / sample SampleVolume = 200.0 LysisBufferVolume = 180.0 # VL IC2Volume = 4.0 # IC2 BindingBufferVolume = 600.0 # VEB B_BeadsVolume = 20.0 # B-Beads VEW1Volume = 600.0 # VEW1 VEW2Volume = 600.0 # VEW2 EtOH80pVolume = 600.0 ProtKVolume = 20.0 cRNAVolume = 4.0 IC_MS2Volume = 20.0 # MS2 ElutionBufferVolume = 100.0 # VEL InitLysisVol = 0.0 if self.do_extraction: if not self.add_samples: InitLysisVol += SampleVolume if not self.add_preMix: InitLysisVol += ProtKVolume + cRNAVolume + IC_MS2Volume if not self.add_VL: InitLysisVol += LysisBufferVolume # Liquid classes used for pippetting. # Others liquidClass names are defined in "protocol_steps.py" SampleLiqClass = "Serum Asp" # = TissueHomLiqClass # SerumLiqClass="Serum Asp preMix3" all_samples = range(NumOfSamples) maxTips = min (self.nTips, NumOfSamples) maxMask = Rbt.tipsMask[maxTips] if self.do_extraction: par = TeMag.parallelOrder(self.nTips, all_samples) # Define the reactives in each labware (Cuvette, eppys, etc.) # IC2 = Rtv.Reagent("IC2 - synthetic RNA " , Reactives, pos=13, volpersample= IC2Volume ,defLiqClass=W_liquidClass) if self.add_preMix: ProtK = Rtv.Reagent("Proteinase K ", Reactives, replicas=2, pos=[15, 16], # only 16 ? pos=16 volpersample=ProtKVolume, defLiqClass=Small_vol_disp) cRNA = Rtv.Reagent("Carrier RNA ", Reactives, pos=14, volpersample=cRNAVolume, defLiqClass=Small_vol_disp) IC_MS2 = Rtv.Reagent("IC MS2 phage culture ", Reactives, pos=13, volpersample=IC_MS2Volume, defLiqClass=Small_vol_disp) pK_cRNA_MS2 = Rtv.preMix("ProtK+cRNA+IC-MS2 mix ", Reactives, pos=8, components=[cRNA, ProtK, IC_MS2], defLiqClass=W_liquidClass, excess=20) if self.add_VL: LysisBuffer = Rtv.Reagent("VL - Lysis Buffer ", LysBuf, volpersample=LysisBufferVolume, defLiqClass='MN VL') if self.do_extraction: B_Beads = Rtv.Reagent("B - Beads ", Reactives, pos = [1,2], initial_vol = 1200, volpersample = B_BeadsVolume, defLiqClass = Beads_LC_2, maxFull = 70) BindingBuffer = Rtv.Reagent("VEB - Binding Buffer ", BindBuf, volpersample=BindingBufferVolume, defLiqClass=B_liquidClass) VEW1 = Rtv.Reagent("VEW1 - Wash Buffer ", wt.getLabware(Lab.Trough_100ml, "4-VEW1 Wash Buffe"), volpersample = VEW1Volume, defLiqClass = B_liquidClass) VEW2 = Rtv.Reagent("VEW2 - WashBuffer ", wt.getLabware(Lab.Trough_100ml, "5-VEW2-WashBuffer" ), volpersample =VEW2Volume, defLiqClass =B_liquidClass) EtOH80p = Rtv.Reagent("Ethanol 80% ", Lab.getLabware(Lab.Trough_100ml, "7-EtOH80p" ), volpersample=EtOH80pVolume, defLiqClass=B_liquidClass) ElutionBuffer = Rtv.Reagent("Elution Buffer ", ElutBuf, volpersample =ElutionBufferVolume, defLiqClass =B_liquidClass) # defLiqClass="Eluat" ?? # Show the CheckList GUI to the user for possible small changes self.CheckList() self.set_EvoMode() # Define the reactives not shown in the CheckList GUI # Define samples and the place for temporal reactions for s in all_samples: Rtv.Reagent("lysis_{:02d}".format(s + 1), Lysis, initial_vol=InitLysisVol, pos=s + 1, defLiqClass=SampleLiqClass, excess=0) if self.do_extraction: Rtv.Reagent("RNA_{:02d}".format(s + 1), Eluat, initial_vol= 0.0, pos=s+1, defLiqClass=def_liquidClass, excess=0) if self.add_samples: Rtv.Reagent("probe_{:02d}".format(s + 1), Samples, single_use=SampleVolume, pos=s+1, defLiqClass=SampleLiqClass, excess=0) Itr.wash_tips(wasteVol=30, FastWash=True).exec() if self.do_extraction: Te_MagS_ActivateHeater(50).exec() Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Dispense).exec() if self.add_preMix: # add ProtK+cRNA+MS2 mix with self.tips(tipsMask=maxMask, reuse=True, drop=False): self.makePreMix(pK_cRNA_MS2) self.spread ( reactive=pK_cRNA_MS2, to_labware_region= Lysis.selectOnly(all_samples)) if self.add_samples: # add samples with self.tips(reuse=True, drop=True, preserve=True): self.transfer( from_labware_region = Samples, to_labware_region = Lysis, volume = SampleVolume, using_liquid_class = (SampleLiqClass, "Serum Disp postMix3"), optimizeFrom = False, optimizeTo = True, NumSamples = NumOfSamples) Itr.wash_tips(wasteVol=4, FastWash=True).exec() if self.add_VL: # add LysisBuffer with self.tips(reuse=True, drop=False): # better reuse=True, drop=False ?? self.spread ( reactive=LysisBuffer, to_labware_region= Lysis.selectOnly(all_samples)) if not self.do_extraction: self.done() return with incubation(10): pass with group("Beads binding"): with self.tips(tipsMask=maxMask, reuse=True, drop=False): for p in [40, 50, 60, 65]: self.mix_reactive(B_Beads, LiqClass=Beads_LC_1, cycles=1, maxTips=maxTips, v_perc=p) with self.tips(reuse=True, drop=True): self.spread( reactive=B_Beads, to_labware_region=TeMag.selectOnly(all_samples)) with self.tips(reuse=True, drop=False, preserve=True, usePreserved=True): self.wash_in_TeMag(reactive=BindingBuffer, wells=all_samples) with self.tips(reuse=True, drop=False, preserve=True): self.wash_in_TeMag(reactive=VEW1, wells=all_samples) self.wash_in_TeMag(reactive=VEW2, wells=all_samples) with self.group("Wash in TeMag with " + EtOH80p.name), self.tips(): self.spread( reactive=EtOH80p, to_labware_region= TeMag.selectOnly(all_samples)) with parallel_execution_of(mix_mag_sub, repeat=NumOfSamples//self.nTips + 1): self.mix( TeMag.selectOnly(all_samples), EtOH80p.defLiqClass) with incubation(minutes=0.5): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate, z_pos=24).exec() with self.tips(usePreserved=self.preserveingTips()): self.waste( from_labware_region= TeMag.selectOnly(all_samples)) with incubation(minutes=4): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Incubation).exec() with incubation(minutes=4): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate, z_pos=24).exec() self.spread( reactive=ElutionBuffer, to_labware_region=TeMag.selectOnly(all_samples)) with incubation(minutes=2): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Incubation).exec() Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Dispense).exec() with parallel_execution_of(mix_mag_eluat, repeat=NumOfSamples//self.nTips+1): self.mix(TeMag.selectOnly(all_samples), ElutionBuffer.defLiqClass) with self.tips(usePreserved=self.preserveingTips(), preserve=False, drop=True): with incubation(minutes=1.0, timer=2): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate).exec() self.transfer( from_labware_region= TeMag.selectOnly(all_samples), to_labware_region= Eluat.selectOnly(all_samples), volume= ElutionBufferVolume, optimizeTo= False, using_liquid_class=(ElutionBuffer.defLiqClass, ElutionBuffer.defLiqClass)) self.done()
def init_RNAextraction(): import EvoScriPy.Labware as Lab print('Init init_RNAextraction()') # https://docs.python.org/3.5/reference/simple_stmts.html#global # https://www.python.org/dev/peps/pep-3104/ for nonlocal # https://docs.python.org/3/faq/programming.html#id8 global TeMg_Heat, TeMag, WashCleanerS, WashWaste, WashCleanerL, DiTiWaste, ElutBuf, LysBuf, BindBuf global BioWaste, Unused8, Unused9, DiTi1000_1, DiTi1000_2, DiTi1000_3, Reactives, Reactives, Eluat, Samples TeMg_Heat = Lab.Labware(Lab.TeMag48, Lab.Labware.Location(14, 1), "48 Pos Heat") TeMag = Lab.Labware(Lab.TeMag48, Lab.Labware.Location(14, 2), "48PosMagnet") WashCleanerS = Lab.Cuvette(Lab.CleanerSWS, Lab.Labware.Location(22, 1), "Washstation 2Grid Cleaner short") WashWaste = Lab.Cuvette(Lab.WasteWS, Lab.Labware.Location(22, 2), "Washstation 2Grid Waste") WashCleanerL = Lab.Cuvette(Lab.CleanerLWS, Lab.Labware.Location(22, 3), "Washstation 2Grid Cleaner long") DiTiWaste = Lab.DITIwaste(Lab.DiTi_Waste, Lab.Labware.Location(22, 7), "Washstation 2Grid DiTi Waste") Lab.def_LabW = Lab.Labware(type=Lab.MP96well, location=Lab.Labware.Location(1, 2)) Lab.def_WashWaste = WashWaste Lab.def_WashCleaner = WashCleanerS Lab.def_DiTiWaste = DiTiWaste Lab.def_DiTi = Lab.DiTi_1000ul # todo revise ElutBuf = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(6, 1), "1-VEL-ElutionBuffer") LysBuf = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(6, 2), "2-Vl Lysis Buffer") BindBuf = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(6, 3), "3-VEB Binding Buffer") BioWaste = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(22, 6), "6-Waste") Unused8 = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(24, 2), "8-Unused") Unused9 = Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(24, 3), "9-Unused") DiTi1000_1 = Lab.DITIrack(Lab.DiTi_1000ul, Lab.Labware.Location(25, 1), "1000-1") DiTi1000_2 = Lab.DITIrack(Lab.DiTi_1000ul, Lab.Labware.Location(25, 2), "1000-2") DiTi1000_3 = Lab.DITIrack(Lab.DiTi_1000ul, Lab.Labware.Location(25, 3), "1000-3") Reactives = Lab.Labware(Lab.GreinRack16_2mL, Lab.Labware.Location(7, 1), "Reactives") Eluat = Lab.Labware(Lab.EppRack3x16R, Lab.Labware.Location(8, 1), "Eluat") Samples = Lab.Labware(Lab.EppRack3x16, Lab.Labware.Location(11, 1), "Proben")
def extractRNA_with_MN_Vet_Kit(NumOfSamples, CheckList=None): Rtv.NumOfSamples = NumOfSamples import protocols.RNAextractionMN_Mag.RobotInitRNAextraction as RI Itr.comment('Extracting RNA from {:s} samples with the MN-Vet kit'.format( str(NumOfSamples))).exec() # DiTi1000_1.fill('C06') # DiTi1000_2.fill('A11') # DiTi1000_3.fill('A10') Itr.set_DITI_Counter2(RI.DiTi1000_1, posInRack='A01').exec() SampleVolume = 200.0 LysisBufferVolume = 180.0 IC2Volume = 4.0 BindingBufferVolume = 600.0 B_BeadsVolume = 20.0 VEW1Volume = 600.0 VEW2Volume = 600.0 EtOH80pVolume = 600.0 ProtKVolume = 20.0 cRNAVolume = 4.0 IC_MS2Volume = 20.0 ElutionBufferVolume = 100.0 SampleLiqClass = "Serum Asp" # = TissueHomLiqClass # SerumLiqClass="Serum Asp preMix3" all_samples = range(Rtv.NumOfSamples) maxTips = min(Rbt.nTips, Rtv.NumOfSamples) maxMask = Rbt.tipsMask[maxTips] par = RI.TeMag.parallelOrder(Rbt.nTips, all_samples) LysisBuffer = Rtv.Reactive("VL - Lysis Buffer ", RI.LysBuf, volpersample=LysisBufferVolume, defLiqClass=B_liquidClass) IC2 = Rtv.Reactive("IC2 - synthetic RNA ", RI.Reactives, pos=11, volpersample=IC2Volume, defLiqClass=W_liquidClass) BindingBuffer = Rtv.Reactive("VEB - Binding Buffer ", RI.BindBuf, volpersample=BindingBufferVolume, defLiqClass=B_liquidClass) B_Beads = Rtv.Reactive("B - Beads ", RI.Reactives, initial_vol=1200, pos=1, volpersample=B_BeadsVolume, replicas=2, defLiqClass=Beads_LC_2) VEW1 = Rtv.Reactive("VEW1 - Wash Buffer ", Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(22, 4), "4-VEW1 Wash Buffer"), volpersample=VEW1Volume, defLiqClass=B_liquidClass) VEW2 = Rtv.Reactive("VEW2 - WashBuffer ", Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(22, 5), "5-VEW2-WashBuffer"), volpersample=VEW2Volume, defLiqClass=B_liquidClass) EtOH80p = Rtv.Reactive("Ethanol 80% ", Lab.Cuvette(Lab.Trough_100ml, Lab.Labware.Location(24, 1), "7-Ethanol 80%"), volpersample=EtOH80pVolume, defLiqClass=B_liquidClass) ElutionBuffer = Rtv.Reactive("Elution Buffer ", RI.ElutBuf, volpersample=ElutionBufferVolume, defLiqClass="Eluat") ProtK = Rtv.Reactive("Proteinase K ", RI.Reactives, pos=16, volpersample=ProtKVolume, defLiqClass=Small_vol_disp) cRNA = Rtv.Reactive("Carrier RNA ", RI.Reactives, pos=15, volpersample=cRNAVolume, defLiqClass=Small_vol_disp) IC_MS2 = Rtv.Reactive("IC MS2 phage culture ", RI.Reactives, pos=14, volpersample=IC_MS2Volume, defLiqClass=Small_vol_disp) pK_cRNA_MS2 = Rtv.preMix("ProtK+cRNA+IC-MS2 mix ", RI.Reactives, pos=12, components=[ProtK, cRNA, IC_MS2], defLiqClass=W_liquidClass, replicas=2) Waste = Rtv.Reactive("Waste ", RI.WashWaste) if CheckList is not None: CheckList() for s in all_samples: Rtv.Reactive("probe_{:02d}".format(s + 1), RI.Samples, single_use=SampleVolume, pos=s + 1, defLiqClass=SampleLiqClass, excess=0) Rtv.Reactive("lysis_{:02d}".format(s + 1), RI.TeMag, initial_vol=0.0, pos=par[s] + 1, defLiqClass=def_liquidClass, excess=0) Rtv.Reactive("RNA_{:02d}".format(s + 1), RI.Eluat, initial_vol=0.0, pos=s + 1, defLiqClass=def_liquidClass, excess=0) Itr.wash_tips(wasteVol=30, FastWash=True).exec() Te_MagS_ActivateHeater(50).exec() Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Dispense).exec() with tips(tipsMask=maxMask, reuse=True, drop=False): pK_cRNA_MS2.make() spread(reactive=pK_cRNA_MS2, to_labware_region=RI.TeMag.selectOnly(all_samples)) with tips(reuse=True, drop=True, preserve=True): transfer(from_labware_region=RI.Samples, to_labware_region=RI.TeMag, volume=SampleVolume, using_liquid_class=(SampleLiqClass, "Serum Disp postMix3"), optimizeFrom=False, optimizeTo=True, NumSamples=Rtv.NumOfSamples) Itr.wash_tips(wasteVol=4, FastWash=True).exec() with tips(reuse=False, drop=True): spread(reactive=LysisBuffer, to_labware_region=RI.TeMag.selectOnly(all_samples)) with incubation(10): pass with tips(tipsMask=maxMask, reuse=True, drop=False): for p in [40, 50, 60, 65]: mix_reactive(B_Beads, LiqClass=Beads_LC_1, cycles=1, maxTips=maxTips, v_perc=p) # mix_reactive(B_Beads, LiqClass=Beads_LC_2, cycles=3, maxTips=maxTips, v_perc=90) with tips(reuse=True, drop=True): spread(reactive=B_Beads, to_labware_region=RI.TeMag.selectOnly(all_samples)) with tips(reuse=True, drop=False, preserve=True, usePreserved=True): wash_in_TeMag(reactive=BindingBuffer, wells=all_samples) with tips(reuse=True, drop=False, preserve=True): wash_in_TeMag(reactive=VEW1, wells=all_samples) wash_in_TeMag(reactive=VEW2, wells=all_samples) with group("Wash in TeMag with " + EtOH80p.name), tips(): spread(reactive=EtOH80p, to_labware_region=RI.TeMag.selectOnly(all_samples)) with parallel_execution_of(mix_mag_sub, repeat=Rtv.NumOfSamples // Rbt.nTips + 1): mix(RI.TeMag.selectOnly(all_samples), EtOH80p.defLiqClass) with incubation(minutes=0.5): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate, z_pos=24).exec() with tips(usePreserved=preserveingTips()): waste(from_labware_region=RI.TeMag.selectOnly(all_samples)) with incubation(minutes=4): Te_MagS_MoveToPosition( Te_MagS_MoveToPosition.Incubation).exec() with incubation(minutes=4): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate, z_pos=24).exec() spread(reactive=ElutionBuffer, to_labware_region=RI.TeMag.selectOnly(all_samples)) with incubation(minutes=2): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Incubation).exec() Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Dispense).exec() with parallel_execution_of(mix_mag_eluat, repeat=Rtv.NumOfSamples // Rbt.nTips + 1): mix(RI.TeMag.selectOnly(all_samples), ElutionBuffer.defLiqClass) with tips(usePreserved=preserveingTips(), preserve=False, drop=True): with incubation(minutes=1.0, timer=2): Te_MagS_MoveToPosition(Te_MagS_MoveToPosition.Aspirate).exec() transfer(from_labware_region=RI.TeMag.selectOnly(all_samples), to_labware_region=RI.Eluat.selectOnly(all_samples), volume=ElutionBufferVolume, optimizeTo=False, using_liquid_class=(ElutionBuffer.defLiqClass, ElutionBuffer.defLiqClass))