-require "win32ole"
-require "open3"
+$:.unshift(File.dirname(__FILE__))
+
+require 'singleton'
+require 'win32ole'
+require 'open3'
+require 'json'
+
+require 'vem'
+
+module TEMObject
+ @instance = nil
+ def TEMObject.instance
+ unless @instance then
+ @instance = WIN32OLE.new('TEMScripting.Instrument')
+ end
+ return @instance
+ end
+end
+
-require "./vem/vem"
+class FEIControl < VEM
+ include TEMObject
+ @@params = {
+ "x" => 0,
+ "y" => 0,
+ "z" => 0,
+ "a" => 0
+ }
+ @@acq = nil
-class FEIControl < VEM
def initialize
puts "FEI initialize"
- #@@tem = WIN32OLE.new('TEMScripting.Instrument')
+ # @@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"
- 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
+ @@tem = TEMObject.instance
+
+ puts @@tem
+
+ @@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
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
+ 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
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 acquition"
-
- WIN32OLE.ole_initialize
- @@tem = WIN32OLE.new('TEMScripting.Instrument')
+ def acquisition_init(binning, exp_time, image_size)
# 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
# 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
-
- imageCollection = acq.AcquireImages
+ ccdCamerasAcqParams.ImageSize = image_size
+ puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.image_size}"
+ end
+ def acquisition
+ # acquisition Image
+ imageCollection = @@acq.AcquireImages
img = imageCollection.Item(0)
- imgData = img.AsSafeArray
- return imgData
+ 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