OSDN Git Service

768379bba8f24f1c4f76a5d66e76a8fb133c787b
[vem/vem.git] / vem / feicontrol.rb
1 $:.unshift(File.dirname(__FILE__))
2
3 require 'singleton'
4 require 'win32ole'
5 require 'open3'
6 require 'json'
7
8 require 'vem'
9
10 module TEMObject
11         @instance = nil
12         def TEMObject.instance
13                 unless @instance then
14                         @instance = WIN32OLE.new('TEMScripting.Instrument')
15                 end
16                 return @instance
17         end
18 end
19
20
21 class FEIControl < VEM
22         include TEMObject
23         @@params = {
24                 "x"          => 0,
25                 "y"          => 0,
26                 "z"          => 0,
27                 "a"          => 0,
28                 "binning"    => 1,
29                 "exptime"    => 1,
30                 "image_size" => 0
31         }
32
33         @@acq = nil
34
35         def initialize
36                 puts "FEI initialize"
37
38                 @@tem = TEMObject.instance
39                 puts @@tem
40         end
41
42         def get_params
43                 puts "FEI get params"
44
45                 @@tem = TEMObject.instance
46
47                 @@params["x"] = @@tem.Stage.Position.X
48                 @@params["y"] = @@tem.Stage.Position.Y
49                 @@params["z"] = @@tem.Stage.Position.Z
50                 @@params["a"] = @@tem.Stage.Position.A
51
52
53                 return @@params.to_json
54         end
55
56         def set_stageA(x, y, z, a)
57                 puts "FEI setStageA"
58
59
60                 position = @@tem.Stage.Position
61                 position.X = x*1e-7
62                 position.Y = y*1e-7
63                 position.Z = z*1e-7
64                 position.A = a*(3.145159/180.0)
65
66                 @@tem.Stage.GoTo(position, 15)
67                 get_params
68                 return @@params.to_json
69         end
70
71         def set_stageR(x, y, z, a)
72                 puts "FEI setStageR"
73
74                 position = @@tem.Stage.Position
75                 position.X = position.X + x*1e-7
76                 position.Y = position.Y + y*1e-7
77                 position.Z = position.Z + z*1e-7
78                 position.A = position.A + a*(3.145159/180.0)
79
80                 @@tem.Stage.GoTo(position, 15)
81                 get_params
82                 return @@params.to_json
83         end
84
85         def set_spotsize(spsize)
86                 puts "FEI setSpotSize"
87
88                 ill    = @@tem.Illumination
89                 ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
90                 return ill.SpotsizeIndex
91         end
92
93         def set_magnification(magsize)
94                 puts "FEI setMagnification"
95
96                 proj = @@tem.Projection
97                 proj.MagnificationIndex = proj.MagnificationIndex + magsize
98                 return proj.MagnificationIndex
99         end
100
101         def acquisition_init(binning, exp_time, image_size)
102                 puts "acq_init"
103
104                 @@tem = TEMObject.instance
105
106                 # get acquitision object
107                 @@acq = @@tem.Acquisition
108
109                 # acquire an image from "CCD" camera
110                 @@acq.AddAcqDeviceByName("CCD")
111
112                 ## settings for acquisition parameters
113                 # ccdCamerasAcqParams
114                 ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
115                 # binning
116                 ccdCamerasAcqParams.Binning = binning
117                 # exposuretime
118                 ccdCamerasAcqParams.ExposureTime = exp_time
119                 # imagesize
120                 ccdCamerasAcqParams.ImageSize = image_size
121                 puts "#{ccdCamerasAcqParams.Binning}, #{ccdCamerasAcqParams.ExposureTime}, #{ccdCamerasAcqParams.ImageSize}"
122         end
123
124         def acquisition
125                 @@tem = TEMObject.instance
126
127                 # acquisition Image
128                 imageCollection = @@acq.AcquireImages
129                 img     = imageCollection.Item(0)
130                 return img.AsSafeArray
131         end
132
133         def set_obj(params)
134                 puts "FEI setObj"
135         end
136
137         def set_beamtilt(params)
138                 puts "FEI setBeamTilt"
139         end
140
141 end
142