In [70]:
import time
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [71]:
# config directory must have "__init__.py" file
# from the 'config' directory, import the following classes:
from config import Motor, ASI_Controller, Autosipper
from config import utils as ut
autosipper = Autosipper(Motor('config/motor.yaml'), ASI_Controller('config/asi_controller.yaml'))
autosipper.coord_frames
Out[71]:
In [132]:
from config import gui
gui.stage_control(autosipper.XY, autosipper.Z)
In [ ]:
# add/determine deck info
autosipper.coord_frames.deck.position_table = ut.read_delim_pd('config/position_tables/deck')
# check deck alignment
# CLEAR DECK OF OBSTRUCTIONS!!
autosipper.go_to('deck', ['name'],'align')
In [ ]:
# add plate
In [118]:
from config import Manifold
manifold = Manifold('192.168.1.3', 'config/valvemaps/valvemap.csv', 512)
manifold.valvemap[manifold.valvemap.name>0]
Out[118]:
In [272]:
for i in [2,0,14,8]:
status = 'x'
if manifold.read_valve(i):
status = 'o'
print status, manifold.valvemap.name.iloc[i]
In [255]:
for i in range(16):
status = 'x'
if manifold.read_valve(i):
status = 'o'
print i, status, manifold.valvemap.name.iloc[i]
In [266]:
name = 'inlet_in'
v = manifold.valvemap['valve'][manifold.valvemap.name==name]
In [212]:
v=7
In [269]:
manifold.depressurize(v)
In [270]:
manifold.pressurize(v)
In [117]:
manifold.exit()
In [240]:
for j in range(5):
for i in range(9,14):
manifold.depressurize(i)
time.sleep(1)
manifold.pressurize(i)
In [67]:
# !!!! Also must have MM folder on system PATH
# mm_version = 'C:\Micro-Manager-1.4'
# cfg = 'C:\Micro-Manager-1.4\SetupNumber2_05102016.cfg'
mm_version = 'C:\Program Files\Micro-Manager-2.0beta'
cfg = 'C:\Program Files\Micro-Manager-2.0beta\Setup2_20170413.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)
core.setProperty("Spectra", "White_Enable", "1")
core.waitForDevice("Spectra")
core.setProperty("Cam Andor_Zyla4.2", "Sensitivity/DynamicRange", "16-bit (low noise & high well capacity)") # NEED TO SET CAMERA TO 16 BIT (ceiling 12 BIT = 4096)
In [ ]:
# core.initializeCircularBuffer()
# core.setCircularBufferMemoryFootprint(4096) # MiB
Preset: 1_PBP
ConfigGroup,Channel,1_PBP,TIFilterBlock1,Label,1-PBP
Preset: 2_BF
ConfigGroup,Channel,2_BF,TIFilterBlock1,Label,2-BF
Preset: 3_DAPI
ConfigGroup,Channel,3_DAPI,TIFilterBlock1,Label,3-DAPI
Preset: 4_eGFP
ConfigGroup,Channel,4_eGFP,TIFilterBlock1,Label,4-GFP
Preset: 5_Cy5
ConfigGroup,Channel,5_Cy5,TIFilterBlock1,Label,5-Cy5
Preset: 6_AttoPhos
ConfigGroup,Channel,6_AttoPhos,TIFilterBlock1,Label,6-AttoPhos
In [5]:
core.setConfig('Channel','2_BF')
In [6]:
core.setProperty(core.getCameraDevice(), "Exposure", 300)
In [7]:
core.snapImage()
img = core.getImage()
plt.imshow(img,cmap='gray')
image = Image.fromarray(img)
# image.save('TESTIMAGE.tif')
In [8]:
position_list = ut.load_mm_positionlist("C:/Users/fordycelab/Desktop/D1_cjm.pos")
position_list
Out[8]:
In [18]:
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 [ ]:
# Trial 1: crapped out after 10 min wait (stage moved to first position, shutter open, then froze)
# for some reason, did not log this (updated print statement)
log = []
for i in xrange(10):
acquire()
sleep = 5*(i+1)*60
print('SLEEP', sleep)
time.sleep(5*(i+1)*60)
In [ ]:
# Trial 2: Went to completion; max wait 9 min
log = []
for i in xrange(10):
logadd(log, 'ACQ STARTED')
acquire()
sleep = (5 + 0.5*i)*60
print 'SLEEP', sleep/60, 'min'
time.sleep(sleep)
In [ ]:
# Trial 3: No errors
log = []
for i in xrange(10):
sleep = (9 + 0.25*i)*60
logadd(log, 'STRT SLEEP '+ str(sleep/60) + ' min')
time.sleep(sleep)
logadd(log, 'ACQ STARTED')
acquire()
In [ ]:
# Trial 4: No problems through 45 min wait; terminated kernel
log = []
for i in xrange(10):
sleep = (10 + 5*i)*60
logadd(log, 'STRT SLEEP '+ str(sleep/60) + ' min')
time.sleep(sleep)
logadd(log, 'ACQ STARTED '+str(i))
acquire()
In [ ]:
# Trial 5: returning stage to home at end of acquire
log = []
for i in xrange(15):
sleep = (10 + 10*i)*60
logadd(log, 'STRT SLEEP '+ str(sleep/60) + ' min')
time.sleep(sleep)
logadd(log, 'ACQ STARTED '+str(i))
acquire()
In [ ]:
# Auto
core.setAutoShutter(True) # default
core.snapImage()
# Manual
core.setAutoShutter(False) # disable auto shutter
core.setProperty("Shutter", "State", "1")
core.waitForDevice("Shutter")
core.snapImage()
core.setProperty("Shutter", "State", "0")
In [ ]:
core.getFocusDevice()
core.getCameraDevice()
core.XYStageDevice()
core.getDevicePropertyNames(core.getCameraDevice())
In [ ]:
# cv2.startWindowThread()
cv2.namedWindow('Video')
cv2.imshow('Video',img)
cv2.waitKey(0)
In [ ]:
cv2.destroyAllWindows()
core.stopSequenceAcquisition()
In [ ]:
import cv2
cv2.namedWindow('Video')
core.startContinuousSequenceAcquisition(1)
while True:
img = core.getLastImage()
if core.getRemainingImageCount() > 0:
# img = core.popNextImage()
img = core.getLastImage()
cv2.imshow('Video', img)
cv2.waitkey(0)
else:
print('No frame')
if cv2.waitKey(20) >= 0:
break
cv2.destroyAllWindows()
core.stopSequenceAcquisition()
# core.reset()
In [ ]:
autosipper.exit()
manifold.exit()
core.unloadAllDevices()
core.reset()
print 'closed'