+$:.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
- def initialize
- puts "FEI initialize"
-
- #@@tem = WIN32OLE.new('TEMScripting.Instrument')
- end
-
- def setStageA(x, y, z, a)
- puts "FEI setStageA"
-
- 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
- end
-
- def setStageR(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
- end
-
- def setSpotSize(spsize)
- puts "FEI setSpotSize"
-
- ill = @@tem.Illumination
- ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
- return ill.SpotsizeIndex
- end
-
- def setMagnification(magsize)
- puts "FEI setMagnification"
-
- proj = @@tem.Projection
- proj.MagnificationIndex = proj.MagnificationIndex + magsize
- return proj.MagnificationIndex
- end
-
- def acquisition
- puts "FEI acquisition"
-
- WIN32OLE.ole_initialize
- @@tem = WIN32OLE.new('TEMScripting.Instrument')
-
- # 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 = 4
- # exposuretime
- ccdCamerasAcqParams.ExposureTime = 0.07
- # imagesize
- ccdCamerasAcqParams.ImageSize = 2
-
- # acquisition Image
- imageCollection = acq.AcquireImages
-
- img = imageCollection.Item(0)
- imgData = img.AsSafeArray
- return imgData.to_json
- end
-
- def acquisition255
- puts "FEI acquisition"
-
- WIN32OLE.ole_initialize
- @@tem = WIN32OLE.new('TEMScripting.Instrument')
-
- # 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 = 4
- # exposuretime
- ccdCamerasAcqParams.ExposureTime = 0.07
- # imagesize
- ccdCamerasAcqParams.ImageSize = 0
-
- # ---end
-
- # acquisition Image
- imageCollection = acq.AcquireImages
-
- img = imageCollection.Item(0)
- imgData = img.AsSafeArray
-
- imgLength = imgData.length
-
- # ---conversion
-
- #max, min
- imgMax = imgData.flatten.max
- imgMin = imgData.flatten.min
-
- #conversion factor for 255 scale
- conversion = 255/(imgMax.to_f - imgMin.to_f)
-
- img255 = Array.new(imgLength){ Array.new(imgLength) }
-
- imgLength.times do |x|
- imgLength.times do |y|
- img255[x][y] = ((imgData[y][x]-imgMin.to_f)*conversion).to_i
- end
- end
-
- # ---end
-
- puts imgLength
-
- return img255.to_json
- end
-
- def setObj(params)
- puts "FEI setObj"
- end
-
- def setBeamTilt(params)
- puts "FEI setBeamTilt"
- end
+ include TEMObject
+ @@params = {
+ "x" => 0,
+ "y" => 0,
+ "z" => 0,
+ "a" => 0
+ }
+
+ @@acq = nil
+
+
+ def initialize
+ puts "FEI initialize"
+
+ # @@tem = WIN32OLE.new('TEMScripting.Instrument')
+ @@tem = TEMObject.instance
+ puts @@tem
+ end
+
+ def get_params
+ puts "FEI get params"
+
+ @@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 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 setSpeed(params)
- end
-
- def getCondition
- puts "FEI getCondition"
- end
end