In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import time
from config import utils as ut
from config import gui
%matplotlib inline
In [2]:
# config directory must have "__init__.py" file
# from the 'config' directory, import the following classes:
from config import Motor, ASI_Controller, Autosipper
autosipper = Autosipper(Motor('config/motor.yaml'), ASI_Controller('config/asi_controller.yaml'))
autosipper.coord_frames
Out[2]:
In [3]:
from config import gui
gui.stage_control(autosipper.XY, autosipper.Z)
In [4]:
platemap = ut.generate_position_table((8,12),(9,9),95.0)
platemap['x'] = -platemap['x'] - 1.8792
platemap['y'] = platemap['y'] + 32.45
platemap.loc[platemap.shape[0]] = [96, 99, 99, 99, 'W01', -8.2492, 1.1709, 68.3999]
platemap.loc[platemap.shape[0]] = [97, 99, 99, 99, 'W02', -36.9737, 1.1709, 68.3999]
platemap['contents'] = ["" for i in range(len(platemap['name']))]
for i in range(12):
platemap['contents'].iloc[i] = "conc"+str(i)
autosipper.coord_frames.hardware.position_table = platemap
platemap
Out[4]:
In [ ]:
autosipper.go_to('hardware', 'name', 'W01')
In [5]:
from config import Manifold
manifold = Manifold('192.168.1.3', 'config/valvemaps/valvemap.csv', 512)
manifold.valvemap[manifold.valvemap.name>0]
Out[5]:
In [6]:
gui.manifold_control(manifold)
In [7]:
# !!!! Also must have MM folder on system PATH
mm_version = 'C:\Program Files\Micro-Manager-2.0beta'
cfg = 'C:\Program Files\Micro-Manager-2.0beta\Setup2_20170614.cfg'
import sys
sys.path.insert(0, mm_version) # make it so python can find MMCorePy
import MMCorePy
from PIL import Image
core = MMCorePy.CMMCore()
core.loadSystemConfiguration(cfg)
In [8]:
# core.getDevicePropertyNames(core.getCameraDevice())
camera = core.getCameraDevice()
shutter = core.getShutterDevice()
stage_xy = core.getXYStageDevice()
In [9]:
core.setConfig('Channel','2bf')
# core.setProperty(core.getCameraDevice(), "Exposure", 10)
core.setProperty(core.getCameraDevice(), "Binning", "3x3")
In [10]:
gui.snap(core, 'cv2')
In [11]:
gui.video(core, loop_pause=0.05)
Channel:
In [12]:
data_dir = "Z:/Data/Setup 2/Arjun/170618_FlippedMITOMI" + "/"
# timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
# data_dir += timestamp+"/"
# os.makedirs(data_dir)
In [13]:
position_list = ut.load_mm_positionlist("Z:/Data/Setup 2/Arjun/170618_FlippedMITOMI/170619_AKA.pos")
position_list
Out[13]:
In [14]:
# ONE ACQUISITION / SCAN
def scan(channel, exposure, note, plate_n):
core.setConfig('Channel', channel)
core.setProperty(core.getCameraDevice(), "Exposure", exposure)
time.sleep(.2)
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
solution = autosipper.coord_frames.hardware.position_table.contents.iloc[plate_n]
scan_dir = '{}_{}_{}_{}_{}'.format(timestamp, solution, note, channel, exposure)
os.makedirs(data_dir + scan_dir)
for i in xrange(len(position_list)):
si = str(i)
x,y = position_list[['x','y']].iloc[i]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
core.snapImage()
img = core.getImage()
image = Image.fromarray(img)
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
positionname = position_list['name'].iloc[i]
image.save('{}/{}_{}.tif'.format(data_dir+scan_dir, timestamp, positionname))
x,y = position_list[['x','y']].iloc[0]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
def get_valve(name):
return ut.lookup(manifold.valvemap,'name',name,'valve',0)[0]
In [ ]:
scan('4egfp', 125, 'pre',0)
In [ ]:
n0 = 0
# PUT PINS IN ALL INPUTS
# in0 WASTE LINE
# in1 WASH LINE, 4.5 PSI
# in2 PEEK LINE, 4.5 PSI
#----------------------------------
# initialize valve states
## inputs: pressurize
## chip_io: pressurize
## sandwhich: pressurize
## neck: pressurize
## button: pressurize
# prime inlet tree (wash)
manifold.depressurize(get_valve('bBSA_2')) ## wash open
manifold.depressurize(get_valve('Waste_2')) ## waste open
time.sleep(60*0.5) ## wait 0.5 min
manifold.pressurize(get_valve('Waste_2')) ## waste close
# backflush tubing (wash)
autosipper.go_to('hardware', 'name', 'W02', zh_travel=40) ## W02 move
manifold.depressurize(get_valve('NA_2')) ## inlet open
time.sleep(60*15) ## wait 15 min
manifold.pressurize(get_valve('NA_2')) ## inlet close
manifold.pressurize(get_valve('bBSA_2')) ## wash close
In [16]:
n0=0
# prime tubing (1st input)
manifold.pressurize(get_valve('Out_2')) # chip_out close
manifold.pressurize(get_valve('In_2')) # chip_in close
autosipper.go_to('hardware', 'name', 'W01', zh_travel=40)
autosipper.go_to('hardware', 'n', n0, zh_travel=40)
manifold.depressurize(get_valve('NA_2')) # inlet open
manifold.depressurize(get_valve('Waste_2')) # waste open
time.sleep(60*20) # filling inlet, 20 min...
manifold.pressurize(get_valve('Waste_2')) # waste close
In [17]:
# 16,Waste_2
# 17,bBSA_2
# 18,NA_2
# 19,antibody_2
# 20,Extra1_2
# 21,Extra2_2
# 22,Protein_2
# 23,Wash_2
exposures = [1250,1250,1250,1250,1000,600,300,180,70,30]
for i, exposure in enumerate(exposures):
plate_n = n0+i
# flow on chip
manifold.depressurize(get_valve('Sandwich1_2')) # sandwhiches open
manifold.depressurize(get_valve('Sandwich2_2')) # "
manifold.depressurize(get_valve('NA_2')) # inlet open
manifold.depressurize(get_valve('In_2')) # chip_in open
manifold.depressurize(get_valve('Out_2')) # chip_out open
time.sleep(60*10) # filling chip, 10 min...
# CONCURRENTLY:
incubate_time = 60*30 # 30 min
# a) incubate DNA with protein
manifold.pressurize(get_valve('Sandwich1_2')) # sandwhiches close
manifold.pressurize(get_valve('Sandwich2_2')) # "
time.sleep(1) # pause
manifold.depressurize(get_valve('Button1_2')) # buttons open
manifold.depressurize(get_valve('Button2_2')) # "
incubate_start = time.time()
# b1) prime inlet tube with next INPUT
manifold.pressurize(get_valve('Out_2')) # chip_out close
manifold.pressurize(get_valve('In_2')) # chip_in close
manifold.pressurize(get_valve('NA_2')) # inlet close
autosipper.go_to('hardware', 'name', 'W01', zh_travel=40)
autosipper.go_to('hardware', 'n', plate_n+1, zh_travel=40)
manifold.depressurize(get_valve('NA_2')) # inlet open
manifold.depressurize(get_valve('Waste_2')) # waste open
time.sleep(60*20) # filling inlet, 20 min...
manifold.pressurize(get_valve('NA_2')) # inlet close
# b2) prime inlet tree with wash
manifold.depressurize(get_valve('bBSA_2')) # wash open
manifold.pressurize(get_valve('Waste_2')) # waste close
for v in [18,19,20,21,22,23]:
manifold.depressurize(v)
time.sleep(.25)
manifold.pressurize(v)
manifold.depressurize(get_valve('Waste_2')) # waste open
time.sleep(60*1)
manifold.pressurize(get_valve('Waste_2')) # waste close
remaining_time = incubate_time - (time.time() - incubate_start)
time.sleep(remaining_time)
# prewash Cy5
scan('5cy5', exposure, 'pre', plate_n)
# wash
manifold.pressurize(get_valve('Button1_2')) # buttons close
manifold.pressurize(get_valve('Button2_2')) # "
time.sleep(1) # pause
manifold.depressurize(get_valve('Sandwich1_2')) # sandwhiches open
manifold.depressurize(get_valve('Sandwich2_2')) # "
manifold.depressurize(get_valve('In_2')) # chip_in open
manifold.depressurize(get_valve('Out_2')) # chip_out open
time.sleep(60*10) # washing chip, 10 min...
manifold.pressurize(get_valve('Out_2')) # chip_out close
manifold.pressurize(get_valve('In_2')) # chip_in close
manifold.pressurize(get_valve('bBSA_2')) # wash close
# postwash eGFP and postwash Cy5
scan('4egfp', 125, 'post', plate_n)
scan('5cy5', 1250, 'post', plate_n)
In [ ]:
def acquire():
for i in xrange(len(position_list)):
si = str(i)
x,y = position_list[['x','y']].iloc[i]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
logadd(log, 'moved '+si)
core.snapImage()
# core.waitForDevice(core.getCameraDevice())
logadd(log, 'snapped '+si)
img = core.getImage()
logadd(log, 'got image '+si)
image = Image.fromarray(img)
image.save('images/images_{}.tif'.format(i))
logadd(log, 'saved image '+si)
x,y = position_list[['x','y']].iloc[0]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
logadd(log, 'moved '+ str(0))
def logadd(log,st):
log.append([time.ctime(time.time()), st])
print log[-1]
In [ ]:
autosipper.exit()
manifold.exit()
core.unloadAllDevices()
core.reset()
print 'closed'
In [ ]:
# ONE ACQUISITION / SCAN
def scan(channel, exposure, note, plate_n):
core.setConfig('Channel', channel)
core.setProperty(core.getCameraDevice(), "Exposure", exposure)
time.sleep(.2)
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
solution = autosipper.coord_frames.hardware.position_table.contents.iloc[plate_n]
scan_dir = '{}_{}_{}_{}_{}'.format(timestamp, solution, note, channel, exposure)
os.makedirs(data_dir + scan_dir)
for i in xrange(len(position_list)):
si = str(i)
x,y = position_list[['x','y']].iloc[i]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
core.snapImage()
img = core.getImage()
image = Image.fromarray(img)
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
positionname = position_list['name'].iloc[i]
image.save('{}/{}_{}.tif'.format(data_dir+scan_dir, timestamp, positionname))
x,y = position_list[['x','y']].iloc[0]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
def get_valve(name):
return ut.lookup(manifold.valvemap,'name',name,'valve',0)[0]