$:.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
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 = TEMObject.instance
+ puts @@tem
+ end
+
+ def get_params
+ puts "FEI get params"
+
+ @@tem = TEMObject.instance
+
+ @@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 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"
+
+ 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 set_spotsize(spsize)
+ puts "FEI setSpotSize"
+
+ ill = @@tem.Illumination
+ ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
+ return ill.SpotsizeIndex
+ end
+
+ def set_magnification(magsize)
+ puts "FEI setMagnification"
+
+ proj = @@tem.Projection
+ proj.MagnificationIndex = proj.MagnificationIndex + magsize
+ return proj.MagnificationIndex
+ end
+
+ def acquisition_init(binning, exp_time, image_size)
+ puts "acq_init"
+
+ @@tem = TEMObject.instance
+
+ # get acquitision object
+ @@acq = @@tem.Acquisition
+
+ # acquire an image from "CCD" camera
+ @@acq.AddAcqDeviceByName("CCD")
+
+ ## settings for acquisition parameters
+ # ccdCamerasAcqParams
+ ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
+ # binning
+ ccdCamerasAcqParams.Binning = binning
+ # exposuretime
+ ccdCamerasAcqParams.ExposureTime = exp_time
+ # imagesize
+ ccdCamerasAcqParams.ImageSize = image_size
+ puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.ImageSize}"
+ end
+
+ def acquisition
+ @@tem = TEMObject.instance
+
+ # acquisition Image
+ imageCollection = @@acq.AcquireImages
+ img = imageCollection.Item(0)
+ return img.AsSafeArray
+ end
+
+ def set_obj(params)
+ puts "FEI setObj"
+ end
- @@params = {
- "x" => 0,
- "y" => 0,
- "z" => 0,
- "a" => 0
- }
-
- @@acq = nil
-
-
- def initialize
- puts "FEI initialize"
-
- @@tem = WIN32OLE.new('TEMScripting.Instrument')
- end
-
- def get_params
- puts "FEI get params"
-
- @@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 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"
-
- 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 set_spotsize(spsize)
- puts "FEI setSpotSize"
-
- ill = @@tem.Illumination
- ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
- return ill.SpotsizeIndex
- end
-
- def set_magnification(magsize)
- puts "FEI setMagnification"
-
- proj = @@tem.Projection
- proj.MagnificationIndex = proj.MagnificationIndex + magsize
- return proj.MagnificationIndex
- end
-
- def acquisition_init(binning, exp_time, image_size)
- # get acquitision object
- @@acq = @@tem.Acquisition
- # acquire an image from "CCD" camera
- @@acq.AddAcqDeviceByName("CCD")
-
- ## settings for acquisition parameters
- # ccdCamerasAcqParams
- ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
- # binning
- ccdCamerasAcqParams.Binning = binning
- # exposuretime
- ccdCamerasAcqParams.ExposureTime = exp_time
- # imagesize
- ccdCamerasAcqParams.ImageSize = image_size
- puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.image_size}"
- end
-
- def acquisition
- # acquisition Image
- imageCollection = @@acq.AcquireImages
- img = imageCollection.Item(0)
- return img.AsSafeArray
- end
-
- def set_obj(params)
- puts "FEI setObj"
- end
-
- def set_beamtilt(params)
- puts "FEI setBeamTilt"
- end
+ def set_beamtilt(params)
+ puts "FEI setBeamTilt"
+ end
end