This commit is contained in:
41
script/align/Demo2D.py
Normal file
41
script/align/Demo2D.py
Normal file
@@ -0,0 +1,41 @@
|
||||
###################################################################################################
|
||||
# Using bsearch(Binary Search) and hsearch(Hill Climbing Search) to find optimum
|
||||
###################################################################################################
|
||||
|
||||
class Sensor(ReadonlyRegisterBase):
|
||||
def doRead(self):
|
||||
return 1000.0 - (math.pow(motor.take()-0.5, 2) + math.pow(pe.take()+2, 2))
|
||||
add_device(Sensor("sensor"), True)
|
||||
|
||||
range_x, step_x=1.0, 0.1
|
||||
range_y, step_y=10.0, 0.1
|
||||
|
||||
motor.speed=5.0
|
||||
motor.move(0.0)
|
||||
pe.move(0.0)
|
||||
|
||||
print "--------------- Full 2D Scan -----------------"
|
||||
r = ascan([motor, pe], sensor, [-range_x,-range_y], [range_x,range_y], [step_x, step_x], relative=True, zigzag=True)
|
||||
data = Convert.reshape(r[sensor], r.scan.numberOfSteps[0]+1, r.scan.numberOfSteps[1]+1)
|
||||
data = [(data[i][::-1] if ((i%2)==1) else data[i]) for i in range(len(data))]
|
||||
d=Data(to_array(data,'d'))
|
||||
v,h=d.integrateVertically(), d.integrateHorizontally()
|
||||
mv=fit(v)[1]
|
||||
mh=fit(h)[1]
|
||||
index = int(round(mh))*(r.scan.numberOfSteps[1]+1) + int(round(mv))
|
||||
max_pe, max_motor= r[pe][index], r[motor][index]
|
||||
print "2s scan peak at motor=" , max_motor , " pe=", max_pe
|
||||
motor.move(max_motor)
|
||||
pe.move(max_pe)
|
||||
|
||||
print "--------------- Binary Search -----------------"
|
||||
motor.move(0.0);pe.move(0.0)
|
||||
r = bsearch([motor, pe], sensor, [-range_x,-range_y], [range_x,range_y], [step_x/4, step_y/4], \
|
||||
relative=True, maximum=True, strategy = "Normal", restore_position=False )
|
||||
print "bsearch peak at position=", r.optimalPosition , " in ", len(r), "evaluations"
|
||||
|
||||
motor.move(0.0);pe.move(0.0)
|
||||
print "--------------- Hill Climbing Search -----------------"
|
||||
r = hsearch([motor, pe], sensor, [-range_x,-range_y],[range_x,range_y], [step_x*2, step_y*2], \
|
||||
[step_x/4, step_y/4], relative=True, maximum=True, restore_position=False )
|
||||
print "hsearch peak at position=", r.optimalPosition, " in ", len(r), "evaluations"
|
||||
33
script/align/SimpleDemo.py
Normal file
33
script/align/SimpleDemo.py
Normal file
@@ -0,0 +1,33 @@
|
||||
###################################################################################################
|
||||
# Simple alignment example
|
||||
###################################################################################################
|
||||
|
||||
|
||||
from mathutils import *
|
||||
from plotutils import *
|
||||
|
||||
scan_range = 2.0
|
||||
step_size = 0.1
|
||||
|
||||
r = lscan(motor,sinp,-scan_range,scan_range,[step_size,],relative=True)
|
||||
|
||||
p=get_plots()[0]
|
||||
p.setLegendVisible(True)
|
||||
y = r[sinp]
|
||||
x = r[motor]
|
||||
|
||||
fit_pars = (offset, normalization, mean_val, sigma) = fit_gaussian_offset(y, x)
|
||||
print fit_pars
|
||||
|
||||
if (mean_val is not None):
|
||||
gaussian = GaussianOffset(*fit_pars)
|
||||
plot_function(p, gaussian, "Fit" , x)
|
||||
|
||||
#Fitting error
|
||||
if mean_val is None or mean_val<x[0] or mean_val>x[-1]:
|
||||
mean_val= x[y.index(max(y))]
|
||||
print "Fitting error - using max value"
|
||||
|
||||
|
||||
p.addMarker(mean_val, None, "Mean=" + str(round(mean_val,2)), Color.LIGHT_GRAY)
|
||||
motor.move(mean_val)
|
||||
Reference in New Issue
Block a user