In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import time
from acqpack import utils as ut
from acqpack import gui
%matplotlib inline
In [2]:
from acqpack import Motor, AsiController, Autosampler
a = Autosampler(Motor('acqpack/config/motor.yaml'), AsiController('acqpack/config/asicontroller.yaml'))
a.frames
Out[2]:
In [3]:
gui.stage_control(a)
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']))]
j=0
for i in range(0,12,2):
platemap['contents'].iloc[i] = "cmu"+str(j)
j+=1
j=0
for i in range(1,12,2):
platemap['contents'].iloc[i] = "water"+str(j)
j+=1
a.frames.hardware.position_table = platemap
platemap
Out[4]:
In [5]:
a.goto('hardware', 'name', 'W02',zh_travel=50)
In [2]:
from acqpack import Manifold
m = Manifold('192.168.1.3', 'acqpack/valvemaps/valvemap.csv', 512)
m.valvemap.fillna('', inplace=True)
m.valvemap[m.valvemap.chip<>'']
Out[2]:
In [3]:
gui.manifold_control(m, 'chip')
In [ ]:
# !!!! 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 [ ]:
# core.getDevicePropertyNames(core.getCameraDevice())
camera = core.getCameraDevice()
shutter = core.getShutterDevice()
stage_xy = core.getXYStageDevice()
In [ ]:
core.setConfig('Channel','2bf')
core.setProperty(core.getCameraDevice(), "Exposure", 10)
core.setProperty(core.getCameraDevice(), "Binning", "2x2")
In [ ]:
gui.snap(core, 'cv2')
In [ ]:
gui.video(core, loop_pause=0.05)
Channel:
In [ ]:
data_dir = "Z:/User_Storage/Scott/"
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
data_dir += timestamp+"/"
os.makedirs(data_dir)
In [ ]:
position_list = ut.load_mm_positionlist("Z:/Data/Setup 2/Arjun/170609_FlippedMITOMI/170609_mwm.pos")
position_list
In [ ]:
# ONE ACQUISITION / SCAN
def timecourse(channel_list, exposure_list, note_list, dt_list, plate_n):
"""
SUBROUTINE
channel_list (list)
exposure_list (list) - List of lists
note_list (list)
dt_list (list)
plate_n (int)
"""
for channel, exposures, note, dt, plate_n in izip(channel_list, exposure_list, note_list, dt_list):
scan(channel, exposures, note, plate_n)
t_start = time.time()
x,y = position_list[['x','y']].iloc[0]
core.setXYPosition(x,y)
core.waitForDevice(core.getXYStageDevice())
t_remaining = dt - (time.time() - t_start)
time.sleep(t_remaining)
def scan(channel, exposures, note, plate_n):
"""
SUBROUTINE
channel (str)
exposures (list)
note (str)
plate_n (int)
"""
core.setConfig('Channel', channel)
time.sleep(.2)
timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime())
solution = a.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())
for exposure in exposures:
core.setProperty(core.getCameraDevice(), "Exposure", exposure)
core.waitForDevice(core.getCameraDevice())
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, exposure))
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
## all inputs close
## sandwhich
# prime inlet tree (wash)
m.open('chip', 'bBSA_2') ## wash open
m.open('chip', 'Waste_2') ## waste open
time.sleep(60*0.5) ## wait 0.5 min
m.close('chip', 'Waste_2') ## waste close
# backflush tubing (wash)
a.goto('hardware', 'name', 'W02', zh_travel=40) ## W02 move
m.open('chip', 'NA_2') ## inlet open
time.sleep(60*1) ## wait 15 min
m.close('chip', 'NA_2') ## inlet close
m.close('chip', 'bBSA_2') ## wash close
# prime tubing (1st input)
m.close('chip', 'Out_2') # chip_out close
m.close('chip', 'In_2') # chip_in close
a.goto('hardware', 'name', 'W01', zh_travel=40)
a.goto('hardware', 'n', n0, zh_travel=40)
m.open('chip', 'NA_2') # inlet open
m.open('chip', 'Waste_2') # waste open
time.sleep(60*15) # filling inlet, 15 min...
m.close('chip', 'Waste_2') # waste close
In [ ]:
# 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):
if i==0:
continue
plate_n = n0+i
# flow on chip
m.open('chip', 'NA_2') # inlet open
m.open('chip', 'In_2') # chip_in open
m.open('chip', '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
m.close('chip', 'Sandwich1_2') # sandwhiches close
m.close('chip', 'Sandwich2_2') # "
time.sleep(1) # pause
m.open('chip', 'Button1_2') # buttons open
m.open('chip', 'Button2_2') # "
incubate_start = time.time()
# b1) prime inlet tube with next INPUT
m.close('chip', 'Out_2') # chip_out close
m.close('chip', 'In_2') # chip_in close
m.close('chip', 'NA_2') # inlet close
a.goto('hardware', 'name', 'W01', zh_travel=40)
a.goto('hardware', 'n', plate_n+1, zh_travel=40)
m.open('chip', 'NA_2') # inlet open
m.open('chip', 'Waste_2') # waste open
time.sleep(60*15) # filling inlet, 15 min...
m.close('chip', 'NA_2') # inlet close
# b2) prime inlet tree with wash
m.open('chip', 'bBSA_2') # wash open
m.close('chip', 'Waste_2') # waste close
for v in [19,20,21,22,23]:
m.open(v)
time.sleep(.2)
m.close(v)
m.open('chip', 'Waste_2') # waste open
time.sleep(60*1)
m.close('chip', '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
m.close('chip', 'Button1_2') # buttons close
m.close('chip', 'Button2_2') # "
time.sleep(1) # pause
m.open('chip', 'Sandwich1_2') # sandwhiches open
m.open('chip', 'Sandwich2_2') # "
m.open('chip', 'In_2') # chip_in open
m.open('chip', 'Out_2') # chip_out open
time.sleep(60*10) # washing chip, 10 min...
m.close('chip', 'Out_2') # chip_out close
m.close('chip', 'In_2') # chip_in close
m.close('chip', '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 [ ]:
a.exit()
m.exit()
core.unloadAllDevices()
core.reset()
print 'closed'