Project

General

Profile

Feature #5292 ยป quickscreen.py

Anchi Cheng, 10/27/2017 07:49 PM

 
#!/usr/bin/env python
import time
import math
import numpy

from pyscope import tecnai


def goto(t,xy,z,a=0.0):
xydict = {'x':xy[0]*1e-6,'y':xy[1]*1e-6,'z':z*1e-6}
xydict['a'] = a*math.pi/180.0
print 'going to', xy, z, a
t.setStagePosition(xydict)
final = t.getStagePosition()
print 'got to ', '(%.2f,%.2f) %.2f %.2f' % (final['x']*1e6,final['y']*1e6, final['z']*1e6, final['a']*180.0/math.pi)
time.sleep(1)

def getTopsLows(tem, xys, thresholds, z, tops, lows):
low_trip_value = thresholds[0]
high_trip_value = thresholds[1]
for i in range(len(xys)):
print 'loop', i
goto(tem,xys[i],z,)
time.sleep(2)
current = tem.getScreenCurrent()
print current*1e11
if current > high_trip_value:
tops[int(current*1e14)] = xys[i]
break
if current > low_trip_value:
tops[int(current*1e14)] = xys[i]
if len(tops.keys()) == 3:
break
lows[int(current*1e14)] = xys[i]
return tops, lows

if __name__ == '__main__':
tem = tecnai.EFKrios()
'''
tem.setColumnValvePosition('closed')
tem.setMainScreenPosition('down')
current0 = tem.getScreenCurrent()
print current0*1e11
'''
tem.setStagePosition({'a':0.0})
tem.setColumnValvePosition('open')

current0 = 0.0
thresholds = [3.5e-11, 12e-11]
d = 400
z = 45e-6
tops = {}
lows = {}
xys = [(d,0),(0,0),(0,d),(-d,0),(0,-d)]
tops, lows = getTopsLows(tem, xys, thresholds, z, tops, lows)
if len(tops) < 3 and len(lows) >= 3:
best_low = lows[max(lows.keys())]
worst_low = lows[min(lows.keys())]
g = (best_low[0]-worst_low[0],best_low[1]-worst_low[1])
matrix = numpy.array([[g[0],g[1]],[g[1],-g[0]]])
rot_mat = math.sqrt(2)*matrix / numpy.linalg.norm(matrix)
xys = [(1.4*d,-1.4*d),(2*d,0),(1.4*d,1.4*d),(0,2*d),(-1.4*d,1.4*d),(-2*d,0),(-1.4*d,-1.4*d),(0,-2*d)]
xys = numpy.array(xys)
rotxys = []
for i in range(xys.shape[0]):
rotxys.append(rot_mat.dot(xys[i,:]))
tops, lows = getTopsLows(tem, rotxys, thresholds, z, tops, lows)

print tops
best = tops[max(tops.keys())]
goto(tem,best,z,)
pos = tem.getStagePosition()
current = tem.getScreenCurrent()
print pos, current
raw_input('enter to quit')
    (1-1/1)