OSDN Git Service

execute threadworker by fei
[vem/vem.git] / vem / feicontrol.rb~
index b05fd4f..77e81ea 100644 (file)
+$:.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