+$:.unshift(File.dirname(__FILE__))
+
+require 'singleton'
require 'win32ole'
require 'open3'
require 'json'
-require '../vem/vem'
+require 'vem'
+module TEMObject
+ @instance = nil
+ def TEMObject.instance
+ unless @instance then
+ @instance = WIN32OLE.new('TEMScripting.Instrument')
+ end
+ return @instance
+ end
+end
class FEIControl < VEM
+ include TEMObject
+ @@params = {
+ "x" => 0,
+ "y" => 0,
+ "z" => 0,
+ "a" => 0,
+ "binning" => 1,
+ "exptime" => 1,
+ "image_size" => 0
+ }
+
+ @@acq = nil
+
def initialize
puts "FEI initialize"
- #@@tem = WIN32OLE.new('TEMScripting.Instrument')
+ @@tem = TEMObject.instance
+ puts @@tem
end
- def setStageA(x, y, z, a)
- puts "FEI setStageA"
+ def get_params
+ puts "FEI get params"
+
+ @@tem = TEMObject.instance
- o,s = Open3.capture2("cscript vem/tool/setStageA.js " + x.to_s + " " + y.to_s + " " + z.to_s + " " + a.to_s)
- position = o.lines.to_a[3]
- puts position
- return position
+ @@params["x"] = @@tem.Stage.Position.X
+ @@params["y"] = @@tem.Stage.Position.Y
+ @@params["z"] = @@tem.Stage.Position.Z
+ @@params["a"] = @@tem.Stage.Position.A
+
+
+ return @@params.to_json
end
- def setStageR(x, y, z, a)
+ def set_stageA(x, y, z, a)
+ puts "FEI setStageA"
+
+
+ position = @@tem.Stage.Position
+ position.X = x*1e-7
+ position.Y = y*1e-7
+ position.Z = z*1e-7
+ position.A = a*(3.145159/180.0)
+ @@tem.Stage.GoTo(position, 15)
+ get_params
+ return @@params.to_json
+ end
+
+ def set_stageR(x, y, z, a)
puts "FEI setStageR"
- o,s = Open3.capture2("cscript vem/tool/setStageR.js " + x.to_s + " "+ y.to_s + " " + z.to_s + " " + a.to_s)
- position = o.lines.to_a[3]
- puts position
- return position
+
+ position = @@tem.Stage.Position
+ position.X = position.X + x*1e-7
+ position.Y = position.Y + y*1e-7
+ position.Z = position.Z + z*1e-7
+ position.A = position.A + a*(3.145159/180.0)
+
+ @@tem.Stage.GoTo(position, 15)
+ get_params
+ return @@params.to_json
end
- def setSpotSize(spsize)
+ def set_spotsize(spsize)
puts "FEI setSpotSize"
ill = @@tem.Illumination
return ill.SpotsizeIndex
end
- def setMagnification(magsize)
+ def set_magnification(magsize)
puts "FEI setMagnification"
proj = @@tem.Projection
return proj.MagnificationIndex
end
- def acquisition
- puts "FEI acquisition"
+ def acquisition_init(binning, exp_time, image_size)
+ puts "acq_init"
- WIN32OLE.ole_initialize
- @@tem = WIN32OLE.new('TEMScripting.Instrument')
+ @@tem = TEMObject.instance
# get acquitision object
- acq = @@tem.Acquisition
+ @@acq = @@tem.Acquisition
+
# acquire an image from "CCD" camera
- acq.AddAcqDeviceByName("CCD")
+ @@acq.AddAcqDeviceByName("CCD")
- ## settings for acquisition parameters
+ ## settings for acquisition parameters
# ccdCamerasAcqParams
- ccdCamerasAcqParams = acq.Cameras.Item(0).AcqParams
+ ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
# binning
- ccdCamerasAcqParams.Binning = 4
+ ccdCamerasAcqParams.Binning = binning
# exposuretime
- ccdCamerasAcqParams.ExposureTime = 0.07
+ ccdCamerasAcqParams.ExposureTime = exp_time
# imagesize
- ccdCamerasAcqParams.ImageSize = 2
+ ccdCamerasAcqParams.ImageSize = image_size
+ puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.ImageSize}"
+ end
- # acquisition Image
- imageCollection = acq.AcquireImages
+ def acquisition
+ @@tem = TEMObject.instance
+ # acquisition Image
+ imageCollection = @@acq.AcquireImages
img = imageCollection.Item(0)
- imgData = img.AsSafeArray
- return imgData.to_json
+ return img.AsSafeArray
end
- def setObj(params)
+ def set_obj(params)
puts "FEI setObj"
end
- def setBeamTilt(params)
+ def set_beamtilt(params)
puts "FEI setBeamTilt"
end
- def setSpeed(params)
- end
-
- def getCondition
- puts "FEI getCondition"
- end
end