1 $:.unshift(File.dirname(__FILE__))
10 def FEIObject.instance
12 @instance = WIN32OLE.new('TEMScripting.Instrument')
18 class FEIControl < VEM
22 @@tem = FEIObject.instance
39 :imageShift => {:x => 0, :y => 0},
42 :objStg => {:x => 0, :y => 0}
46 :condenserStg => {:x => 0, :y => 0}
55 @@params[:stage][:x] = @@tem.Stage.Position.X
56 @@params[:stage][:y] = @@tem.Stage.Position.Y
57 @@params[:stage][:z] = @@tem.Stage.Position.Z
58 @@params[:stage][:a] = @@tem.Stage.Position.A
59 @@params[:ill][:spotSizeIndex] = @@tem.Illumination.SpotsizeIndex
60 @@params[:proj][:magIndex] = @@tem.Projection.MagnificationIndex
61 # @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
62 # @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime
63 # @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
65 return @@params.to_json
68 def set_stageA(x, y, z, a)
71 position = @@tem.Stage.Position
75 position.A = a*(3.145159/180.0)
77 @@tem.Stage.GoTo(position, 15)
79 @@params[:stage][:x] = @@tem.Stage.Position.X
80 @@params[:stage][:y] = @@tem.Stage.Position.Y
81 @@params[:stage][:z] = @@tem.Stage.Position.Z
82 @@params[:stage][:a] = @@tem.Stage.Position.A
84 return @@params[:stage].to_json
87 def set_stageR(x, y, z, a)
91 position = @@tem.Stage.Position
92 position.X = position.X + x*1e-7
93 position.Y = position.Y + y*1e-7
94 position.Z = position.Z + z*1e-7
95 position.A = position.A + a*(3.145159/180.0)
97 @@tem.Stage.GoTo(position, 15)
99 @@params[:stage][:x] = @@tem.Stage.Position.X
100 @@params[:stage][:y] = @@tem.Stage.Position.Y
101 @@params[:stage][:z] = @@tem.Stage.Position.Z
102 @@params[:stage][:a] = @@tem.Stage.Position.A
104 return @@params[:stage].to_json
107 def set_spotsizeA(spsize)
108 puts "FEI setSpotSizeA"
110 ill = @@tem.Illumination
111 ill.SpotsizeIndex = spsize
112 @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
113 return @@params[:ill].to_json
116 def set_spotsizeR(spsize)
117 puts "FEI setSpotSizeR"
119 ill = @@tem.Illumination
120 ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
121 @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
122 return @@params[:ill].to_json
126 def set_magnificationA(magsize)
127 puts "FEI setMagnificationA"
129 proj = @@tem.Projection
130 proj.MagnificationIndex = magsize
131 @@params[:proj][:magIndex] = proj.MagnificationIndex
132 @@params[:proj][:mag] = proj.Magnification
133 return @@params[:proj].to_json
136 def set_magnificationR(magsize)
137 puts "FEI setMagnificationR"
139 proj = @@tem.Projection
140 proj.MagnificationIndex = proj.MagnificationIndex + magsize
141 @@params[:proj][:magIndex] = proj.MagnificationIndex
142 @@params[:proj][:mag] = proj.Magnification
143 return @@params[:proj].to_json
146 def set_image_shift(x, y)
147 puts "FEI setImageShift"
149 proj = @@tem.Projection
150 proj.imageshift.X = proj.imageshift.x + x
151 proj.imageshift.Y = proj.imageshift.y + y
152 @@params[:proj][:imageShift][:x] = proj.ImageShift.X
153 @@params[:proj][:imageShift][:y] = proj.ImageShift.Y
154 return @@params[:proj][:imageShift].to_json
157 def set_focus(params)
160 proj = @@tem.Projection
161 proj.Focus = proj.Focus + params
162 @@params[:proj][:focus] = proj.Focus
163 return @@params[:proj][:focus].to_json
166 def set_defocus(params)
167 puts "FEI setDefocus"
169 proj = @@tem.Projection
170 proj.Defocus = proj.Defocus + params
171 @@params[:proj][:defocus] = proj.Defocus
172 return @@params[:proj][:defocus].to_json
175 def set_reset_defocus
176 puts "FEI resetDefocus"
178 proj = @@tem.Projection
180 @@params[:proj][:defocus] = proj.Defocus
181 return @@params[:proj][:defocus].to_json
184 def set_condenser_stg(x, y)
185 puts "FEI setCondenserStigmater"
187 ill = @@tem.Illumination
188 ill.CondenserStigmator.X = ill.CondenserStigmator.X + x
189 ill.CondenserStigmator.Y = ill.CondenserStigmator.Y + y
190 @@params[:ill][:condenserStg][:x] = ill.CondenserStigmator.X
191 @@params[:ill][:condenserStg][:y] = ill.CondenserStigmator.Y
192 return @@params[:ill][:condenserStg].to_json
195 def set_object_stg(x, y)
196 puts "FEI setObjectStigmator"
198 proj = @@tem.Projection
199 proj.ObjectiveStigmator.X = proj.ObjectiveStigmator.X + x
200 proj.ObjectiveStigmator.Y = proj.ObjectiveStigmator.Y + y
201 @@params[:proj][:objStg][:x] = proj.ObjectiveStigmator.X
202 @@params[:proj][:objStg][:y] = proj.ObjectiveStigmator.Y
203 return @@params[:proj][:objStg].to_json
207 def acquisition_init(binning, exp_time, image_size)
211 # get acquitision object
212 @@acq = @@tem.Acquisition
214 # acquire an image from "CCD" camera
215 @@acq.AddAcqDeviceByName("CCD")
217 ## settings for acquisition parameters
218 # ccdCamerasAcqParams
219 ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
221 ccdCamerasAcqParams.Binning = binning
223 ccdCamerasAcqParams.ExposureTime = exp_time
225 ccdCamerasAcqParams.ImageSize = image_size
227 @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
228 @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime
229 @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
231 return @@params[:ccdCamera].to_json
235 @@acq = @@tem.Acquisition
238 imageCollection = @@acq.AcquireImages
239 img = imageCollection.Item(0)
240 return img.AsSafeArray
247 def set_beamtilt(params)
248 puts "FEI setBeamTilt"