OSDN Git Service

commit by fei
[vem/vem.git] / vem / feicontrol.rb~
index bb9cdfc..00e2166 100644 (file)
@@ -2,14 +2,12 @@ $:.unshift(File.dirname(__FILE__))
 
 require 'singleton'
 require 'win32ole'
-require 'open3'
 require 'json'
-
 require 'vem'
 
-module TEMObject
+module FEIObject
        @instance = nil
-       def TEMObject.instance
+       def FEIObject.instance
                unless @instance then
                        @instance = WIN32OLE.new('TEMScripting.Instrument')
                end
@@ -17,45 +15,68 @@ module TEMObject
        end
 end
 
-
 class FEIControl < VEM
-       include TEMObject
-       @@params = {
-               "x" => 0,
-               "y" => 0,
-               "z" => 0,
-               "a" => 0
-       }
-
-       @@acq = nil
-
+       include FEIObject
 
        def initialize
-               puts "FEI initialize"
+               @@tem = FEIObject.instance
+               @@acq = nil
+               @@params = {
+                       :stage => {
+                               :x => 0,
+                               :y => 0,
+                               :z => 0,
+                               :a => 0,
+                       },
+                       :ccdCamera => {
+                               :binning    => 4,
+                               :expTime    => 0.07,
+                               :imageSize  => 0
+                       },
+                       :proj => {
+                               :magIndex => 0,
+                               :mag => 0,
+                               :imageBeamShift => {:x => 0, :y => 0},
+                               :focus => 0,
+                               :defocus => 0,
+                               :objStg => {:x => 0, :y => 0}
+                       },
+                       :ill => {
+                               :spotSizeIndex => 0,
+                               :condenserStg => {:x => 0, :y => 0}
 
-       #       @@tem    = WIN32OLE.new('TEMScripting.Instrument')
-               @@tem = TEMObject.instance
-               puts @@tem
+                       }
+               }
        end
 
        def get_params
                puts "FEI get params"
 
-               @@tem = TEMObject.instance      
-               puts @@tem.Stage
+               @@params[:stage][:x] = @@tem.Stage.Position.X
+               @@params[:stage][:y] = @@tem.Stage.Position.Y
+               @@params[:stage][:z] = @@tem.Stage.Position.Z
+               @@params[:stage][:a] = @@tem.Stage.Position.A
+               @@params[:ill][:spotSizeIndex] = @@tem.Illumination.SpotsizeIndex
+               @@params[:proj][:magIndex] = @@tem.Projection.MagnificationIndex
+<<<<<<< HEAD
+               @@params[:proj][:defocus] = @@tem.Projection.Defocus*1000000000
+=======
+    @@params[:proj][:mag] = @@tem.Projection.Magnification
+    @@params[:proj][:imageBeamShift][:x] = @@tem.Projection.ImageBeamShift.x
+    @@params[:proj][:imageBeamShift][:y] = @@tem.Projection.ImageBeamShift.y
+    @@params[:proj][:focus] = @@tem.Projection.Focus
+    @@params[:proj][:defocus] = @@tem.Projection.Defocus
+>>>>>>> c40fae8a2f64d018688751e591cc90330dfd6f6c
+               #       @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
+               #       @@params[:ccdCamera][:expTime]  = ccdCamerasAcqParams.ExposureTime
+               #       @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
 
-
-#              @@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
+               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
@@ -63,13 +84,19 @@ class FEIControl < VEM
                position.A = a*(3.145159/180.0)
 
                @@tem.Stage.GoTo(position, 15)
-               get_params
-               return @@params
+
+               @@params[:stage][:x] = @@tem.Stage.Position.X
+               @@params[:stage][:y] = @@tem.Stage.Position.Y
+               @@params[:stage][:z] = @@tem.Stage.Position.Z
+               @@params[:stage][:a] = @@tem.Stage.Position.A
+
+               return @@params[:stage].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
@@ -77,29 +104,125 @@ class FEIControl < VEM
                position.A = position.A + a*(3.145159/180.0)
 
                @@tem.Stage.GoTo(position, 15)
-               get_params
-               return @@params
+
+               @@params[:stage][:x] = @@tem.Stage.Position.X
+               @@params[:stage][:y] = @@tem.Stage.Position.Y
+               @@params[:stage][:z] = @@tem.Stage.Position.Z
+               @@params[:stage][:a] = @@tem.Stage.Position.A
+
+               return @@params[:stage].to_json
        end
 
-       def set_spotsize(spsize)
-               puts "FEI setSpotSize"
+       def set_spotsizeA(spsize)
+               puts "FEI setSpotSizeA"
+
+               ill    = @@tem.Illumination
+               ill.SpotsizeIndex = spsize
+               @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
+               return @@params[:ill].to_json
+       end
+
+       def set_spotsizeR(spsize)
+               puts "FEI setSpotSizeR"
 
                ill    = @@tem.Illumination
                ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
-               return ill.SpotsizeIndex
+               @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
+               return @@params[:ill].to_json
        end
 
-       def set_magnification(magsize)
-               puts "FEI setMagnification"
+
+       def set_magnificationA(magsize)
+               puts "FEI setMagnificationA"
+
+               proj = @@tem.Projection
+               proj.MagnificationIndex = magsize
+               @@params[:proj][:magIndex] = proj.MagnificationIndex
+               @@params[:proj][:mag] = proj.Magnification
+               return @@params[:proj].to_json
+       end
+
+       def set_magnificationR(magsize)
+               puts "FEI setMagnificationR"
 
                proj = @@tem.Projection
                proj.MagnificationIndex = proj.MagnificationIndex + magsize
-               return proj.MagnificationIndex
+               @@params[:proj][:magIndex] = proj.MagnificationIndex
+               @@params[:proj][:mag] = proj.Magnification
+               return @@params[:proj].to_json
+       end
+
+       def set_image_beamshift(x, y)
+               puts "FEI setImageShift"
+
+               proj = @@tem.Projection
+               proj.ImageBeamShift.X = proj.ImageBeamShift.X
+               proj.ImageBeamShift.Y = proj.ImageBeamShift.Y
+
+               puts proj.ImageBeamShift.X
+               @@params[:proj][:imageShift][:x] = proj.ImageBeamShift.X
+               @@params[:proj][:imageShift][:y] = proj.ImageBeamShift.Y
+
+       return @@params[:proj][:imageShift].to_json
+       end
+
+       def set_focus(params)
+               puts "FEI setFocus"
+
+               proj = @@tem.Projection
+               #proj.Focus = proj.Focus
+               @@params[:proj][:focus] = proj.Focus
+               return @@params[:proj][:focus].to_json
+       end
+
+       def set_defocusR(params)
+               puts "FEI setDefocusR"
+
+               proj = @@tem.Projection
+               proj.Defocus = proj.Defocus + params*1e-9
+               @@params[:proj][:defocus] = proj.Defocus*1000000000
+               return @@params[:proj][:defocus].to_json
+       end
+
+       def set_reset_defocus
+               puts "FEI resetDefocus"
+
+               proj = @@tem.Projection
+               proj.ResetDefocus
+               @@params[:proj][:defocus] = proj.Defocus*1000000000
+               return @@params[:proj][:defocus].to_json
+       end
+
+       def set_condenser_stg(x, y)
+               puts "FEI setCondenserStigmater"
+
+               ill = @@tem.Illumination
+               ill.CondenserStigmator.X = ill.CondenserStigmator.X + x
+               ill.CondenserStigmator.Y = ill.CondenserStigmator.Y + y
+               @@params[:ill][:condenserStg][:x] = ill.CondenserStigmator.X
+               @@params[:ill][:condenserStg][:y] = ill.CondenserStigmator.Y
+               return @@params[:ill][:condenserStg].to_json
        end
 
+       def set_object_stg(x, y)
+               puts "FEI setObjectStigmator"
+
+               proj = @@tem.Projection
+               proj.ObjectiveStigmator.X = proj.ObjectiveStigmator.X + x
+               proj.ObjectiveStigmator.Y = proj.ObjectiveStigmator.Y + y
+               @@params[:proj][:objStg][:x] = proj.ObjectiveStigmator.X
+               @@params[:proj][:objStg][:y] = proj.ObjectiveStigmator.Y
+       return @@params[:proj][:objStg].to_json
+       end
+
+
        def acquisition_init(binning, exp_time, image_size)
+               puts "FEI acq_init"
+
+
                # get acquitision object
                @@acq = @@tem.Acquisition
+
                # acquire an image from "CCD" camera
                @@acq.AddAcqDeviceByName("CCD")
 
@@ -112,10 +235,18 @@ class FEIControl < VEM
                ccdCamerasAcqParams.ExposureTime = exp_time
                # imagesize
                ccdCamerasAcqParams.ImageSize = image_size
-               puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.image_size}"
+               # image correction
+               # ccdCamerasAcqParams.ImageCorrection = 1 
+
+               @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
+               @@params[:ccdCamera][:expTime]  = ccdCamerasAcqParams.ExposureTime
+               @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
+
+               return @@params[:ccdCamera].to_json
        end
 
        def acquisition
+               @@acq = @@tem.Acquisition
                # acquisition Image
                imageCollection = @@acq.AcquireImages
                img     = imageCollection.Item(0)
@@ -130,5 +261,11 @@ class FEIControl < VEM
                puts "FEI setBeamTilt"
        end
 
+       def get_vacuum_status
+               puts "FEI getVacuumStatus"
+               puts @@tem.Vacuum.Gauges.Item(5).Name
+               puts @@tem.Vacuum.Gauges.Item(1).Pressure
+       end
+
 end