OSDN Git Service

fix by fei
[vem/vem.git] / vem / feicontrol.rb
index 619a708..768379b 100644 (file)
@@ -1,37 +1,88 @@
+$:.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
@@ -39,7 +90,7 @@ class FEIControl < VEM
                return ill.SpotsizeIndex
        end
 
-       def setMagnification(magsize)
+       def set_magnification(magsize)
                puts "FEI setMagnification"
 
                proj = @@tem.Projection
@@ -47,48 +98,45 @@ class FEIControl < VEM
                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