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
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
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
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")
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)
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