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_beam_shift(x, y)
147 puts "FEI setImageShift"
149 proj = @@tem.Projection
150 proj.ImageBeamShift.X = proj.ImageBeamShift.X
151 proj.ImageBeamShift.Y = proj.ImageBeamShift.Y
153 puts proj.ImageBeamShift.X
154 @@params[:proj][:imageShift][:x] = proj.ImageBeamShift.X
155 @@params[:proj][:imageShift][:y] = proj.ImageBeamShift.Y
157 return @@params[:proj][:imageShift].to_json
160 def set_focus(params)
163 proj = @@tem.Projection
164 #proj.Focus = proj.Focus
165 @@params[:proj][:focus] = proj.Focus
166 return @@params[:proj][:focus].to_json
169 def set_defocusR(params)
170 puts "FEI setDefocusR"
172 proj = @@tem.Projection
173 proj.Defocus = proj.Defocus + params*1e-9
174 @@params[:proj][:defocus] = proj.Defocus
175 return @@params[:proj][:defocus].to_json
178 def set_reset_defocus
179 puts "FEI resetDefocus"
181 proj = @@tem.Projection
183 @@params[:proj][:defocus] = proj.Defocus
184 return @@params[:proj][:defocus].to_json
187 def set_condenser_stg(x, y)
188 puts "FEI setCondenserStigmater"
190 ill = @@tem.Illumination
191 ill.CondenserStigmator.X = ill.CondenserStigmator.X + x
192 ill.CondenserStigmator.Y = ill.CondenserStigmator.Y + y
193 @@params[:ill][:condenserStg][:x] = ill.CondenserStigmator.X
194 @@params[:ill][:condenserStg][:y] = ill.CondenserStigmator.Y
195 return @@params[:ill][:condenserStg].to_json
198 def set_object_stg(x, y)
199 puts "FEI setObjectStigmator"
201 proj = @@tem.Projection
202 proj.ObjectiveStigmator.X = proj.ObjectiveStigmator.X + x
203 proj.ObjectiveStigmator.Y = proj.ObjectiveStigmator.Y + y
204 @@params[:proj][:objStg][:x] = proj.ObjectiveStigmator.X
205 @@params[:proj][:objStg][:y] = proj.ObjectiveStigmator.Y
206 return @@params[:proj][:objStg].to_json
210 def acquisition_init(binning, exp_time, image_size)
214 # get acquitision object
215 @@acq = @@tem.Acquisition
217 # acquire an image from "CCD" camera
218 @@acq.AddAcqDeviceByName("CCD")
220 ## settings for acquisition parameters
221 # ccdCamerasAcqParams
222 ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
224 ccdCamerasAcqParams.Binning = binning
226 ccdCamerasAcqParams.ExposureTime = exp_time
228 ccdCamerasAcqParams.ImageSize = image_size
230 @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
231 @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime
232 @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
234 return @@params[:ccdCamera].to_json
238 @@acq = @@tem.Acquisition
240 imageCollection = @@acq.AcquireImages
241 img = imageCollection.Item(0)
242 return img.AsSafeArray
249 def set_beamtilt(params)
250 puts "FEI setBeamTilt"