######################################################################## ### FILE: fluidicscontrol.mod ### PURPOSE: Client interface for fluidics scripting ### SCOPE: "FlowChip:" branches ### ### Copyrights (C) 2010-2011 Life Technologies. All rights reserved. ######################################################################## DEFine ASPirate $arm$=0 $rate$=0 $dwell$='' $count$=1 $probeType$='' $volume$ $location$='' SET volume $[ $volume$ * $count$ ] SET dwell "$dwell$" PUBLish Fluidics "Aspirating ${volume} microliters from $location$" RUN ":FLUidics:ASPirate -arm=$arm$ -rate=$rate$ ${dwell:+-dwell=$dwell$} -purpose=$probeType$ -context=FlowChip${FC} -volume=${volume} '$location$'" DEFine DISPense $arm$=0 $rate$=0 $dwell$='' \ $pullbackVolume$='' $pullbackRate$='' $count$=1 $probeType$='' $volume$ \ $location$='' SET volume $[ $volume$ * $count$ ] SET options "-arm=$arm$ -rate=$rate$ -purpose=$probeType$ -context=FlowChip${FC} -volume=${volume}" IF $[ "$dwell$" != "" ] 'APPend options " -dwell=$dwell$"' IF $[ "$pullbackVolume$" != "" ] 'APPend options " -pullbackVolume=$pullbackVolume$"' IF $[ "$pullbackRate$" != "" ] 'APPend options " -pullbackRate=$pullbackRate$"' PUBLish Fluidics "Dispensing ${volume} microliters to $location$" RUN ":FLUidics:DISPense ${options} '$location$'" DEFine TRANsfer $arm$=0 $rate$=0 $aspirateRate$=0 $dispenseRate$=0 \ $dwell$="" $aspirateDwell$="" $dispenseDwell$="" \ $pullbackVolume$='' $pullbackRate$='' \ $probeType$="" $volume$=0 \ $pauseImaging$=False $resumeImaging$=False $sync$='' \ $source$ $primaryDestination$ $secondaryDestination$="" PUBLish Fluidics "Transferring $volume$ microliters from $source$ to $primaryDestination$ $secondaryDestination$" SET options "-arm=$arm$ -purpose=$probeType$ -context=FlowChip${FC} -volume=$volume$" APPend options " -aspirateRate=$[ $aspirateRate$ or $rate$ ]" APPend options " -dispenseRate=$[ $dispenseRate$ or $rate$ ]" IF $[ "$pullbackVolume$" != "" ] 'APPend options " -pullbackVolume=$pullbackVolume$"' IF $[ "$pullbackRate$" != "" ] 'APPend options " -pullbackRate=$pullbackRate$"' SET aspDwell $[ "$aspirateDwell$" or "$dwell$" ] SET dispDwell $[ "$dispenseDwell$" or "$dwell$" ] IF ${#aspDwell} "APPend options ' -aspirateDwell=${aspDwell}'" IF ${#dispDwell} "APPend options ' -dispenseDwell=${dispDwell}'" SET PreAspirate "" SET PreDispense "" IF $[ bool("$sync$") ] APPend PreDispense ":FlowChip${FC}:PUBLish Fluidics 'Waiting for \"$sync$\"...'\n" APPend PreDispense ":FlowChip${FC}:SYNChronize $sync$\n" IF $pauseImaging$ APPend PreAspirate ":PauseImaging\n" APPend PreDispense ":ImagingPauseCheck\n" IF ${#PreAspirate} 'APPend options " -preaspirate=${preaspirate}"' IF ${#PreDispense} 'APPend options " -predispense=${predispense}"' RUN ":FLUidics:TRANsfer ${options} '$source$' '$primaryDestination$' '$secondaryDestination$'" IF $resumeImaging$ :ResumeImaging DEFine MIX $arm$='' $rate$=100 $count$=1 $multiplier$=1 $dwell$=0 $probeType$="" $volume$=50 $locations$ SET volume $[ $volume$ * $multiplier$ ] ITERate -key=location -delimiter="," "$locations$" IF ${#location} SET context FlowChip${FC} :PUBLISH Fluidics "Mixing $count$ times at ${location}" REPeat -counter=iteration -start=1 $count$ SET dwell $[ (${iteration} < $count$) * $dwell$ ] :FLUidics:TRANSFER -volume=${volume} \ -aspirateRate=$rate$ -dispenseRate=$rate$ \ -aspirateDwell=0 -dispenseDwell=${dwell} \ -purpose=$probeType$ -context=FlowChip${FC} \ ${location} ${location} #:FLUidics:IDLE DESCribe MIX Repeatedly aspirate and dispense in the specified location(s), separated by comma. DEFine RINSE $part$=Inside,Outside $duration$=1 $tip$='' $location$=Rinse $dropletTouchOff$=False ITERATE -key=part -delimiter="," "$part$" Rinse${part} -tip=$tip$ -location=$location$ -duration=$duration$ -dropletTouchOff=$dropletTouchOff$ #In some cases, after the rinse, a droplet forms on the tip. To remove #this droplet, this code touches the tip to the plastic poll extending #from the nozzle. The touch is done with the liquid level sensor. #IF $dropletTouchOff$ # FLU:ARM$tip$:LiquidSense= False # FLU:ARM$tip$:LiquidSense= True 0 # FLU:ARM$tip$:Z:POSition -relative=True 20 # FLU:ARM$tip$:LiquidSense= False # :FLUidics:ARM$tip$:IDLE ALIAS DEEPRINSE RINSE -location=DeepRinse #ALIAS IDLETIME? :FLUidics:ARM:IDLETIME? DEFine RinseInside $tip$='' $dropletTouchOff$=False $location$=Rinse $duration$ PUBLish Fluidics "Rinsing inside tip$tip$ for $duration$s" :FLUidics:ARM$tip$:RinseInside -duration=$duration$ -location=$location$ -dropletTouchOff=$dropletTouchOff$ DEFine RinseOutside $tip$='' $dropletTouchOff$=False $location$=Rinse $duration$ PUBLish Fluidics "Rinsing outside tip$tip$ for $duration$s" :FLUidics:ARM$tip$:RinseOutside -duration=$duration$ -location=$location$ -dropletTouchOff=$dropletTouchOff$ DEFine EmptySyringe PUBLISH Fluidics "Emptying syringe" :FLUidics:ARM:EmptySyringe APPend START USE Robot IF $(:FLUidics:ARM:SYRinge:POSition?) EmptySyringe :FLUidics:ARM:PrimeLine RELEASE Robot APPend STOP USE Robot EmptySyringe :FLUidics:ARM:HOME -prehome :FLUidics:ARM:PARK RELEASE Robot :ACQuisition? -ignoreMissing Robot IF $[ "$1" == "FlowChip${FC}" ] WARNing "Procedure FlowChip${FC}:${Procedure} ended without releasing robot!" DEFine TipCalibrationCheck $tip$='' PUBLish Fluidics "Checking Tip Location Calibration" :FLUidics:ARM$tip$:TipCalibrationCheck CALFrame :FLUidics:ARM$tip$:TipCalibrationCheck CALStage