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[:proj][:defocus] = @@tem.Projection.Defocus*1000000000
62 # @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
63 # @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime
64 # @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
66 return @@params.to_json
69 def set_stageA(x, y, z, a)
72 position = @@tem.Stage.Position
76 position.A = a*(3.145159/180.0)
78 @@tem.Stage.GoTo(position, 15)
80 @@params[:stage][:x] = @@tem.Stage.Position.X
81 @@params[:stage][:y] = @@tem.Stage.Position.Y
82 @@params[:stage][:z] = @@tem.Stage.Position.Z
83 @@params[:stage][:a] = @@tem.Stage.Position.A
85 return @@params[:stage].to_json
88 def set_stageR(x, y, z, a)
92 position = @@tem.Stage.Position
93 position.X = position.X + x*1e-7
94 position.Y = position.Y + y*1e-7
95 position.Z = position.Z + z*1e-7
96 position.A = position.A + a*(3.145159/180.0)
98 @@tem.Stage.GoTo(position, 15)
100 @@params[:stage][:x] = @@tem.Stage.Position.X
101 @@params[:stage][:y] = @@tem.Stage.Position.Y
102 @@params[:stage][:z] = @@tem.Stage.Position.Z
103 @@params[:stage][:a] = @@tem.Stage.Position.A
105 return @@params[:stage].to_json
108 def set_spotsizeA(spsize)
109 puts "FEI setSpotSizeA"
111 ill = @@tem.Illumination
112 ill.SpotsizeIndex = spsize
113 @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
114 return @@params[:ill].to_json
117 def set_spotsizeR(spsize)
118 puts "FEI setSpotSizeR"
120 ill = @@tem.Illumination
121 ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
122 @@params[:ill][:spotSizeIndex] = ill.SpotsizeIndex
123 return @@params[:ill].to_json
127 def set_magnificationA(magsize)
128 puts "FEI setMagnificationA"
130 proj = @@tem.Projection
131 proj.MagnificationIndex = magsize
132 @@params[:proj][:magIndex] = proj.MagnificationIndex
133 @@params[:proj][:mag] = proj.Magnification
134 return @@params[:proj].to_json
137 def set_magnificationR(magsize)
138 puts "FEI setMagnificationR"
140 proj = @@tem.Projection
141 proj.MagnificationIndex = proj.MagnificationIndex + magsize
142 @@params[:proj][:magIndex] = proj.MagnificationIndex
143 @@params[:proj][:mag] = proj.Magnification
144 return @@params[:proj].to_json
147 def set_image_beam_shift(x, y)
148 puts "FEI setImageShift"
150 proj = @@tem.Projection
151 proj.ImageBeamShift.X = proj.ImageBeamShift.X
152 proj.ImageBeamShift.Y = proj.ImageBeamShift.Y
154 puts proj.ImageBeamShift.X
155 @@params[:proj][:imageShift][:x] = proj.ImageBeamShift.X
156 @@params[:proj][:imageShift][:y] = proj.ImageBeamShift.Y
158 return @@params[:proj][:imageShift].to_json
161 def set_focus(params)
164 proj = @@tem.Projection
165 #proj.Focus = proj.Focus
166 @@params[:proj][:focus] = proj.Focus
167 return @@params[:proj][:focus].to_json
170 def set_defocusR(params)
171 puts "FEI setDefocusR"
173 proj = @@tem.Projection
174 proj.Defocus = proj.Defocus + params*1e-9
175 @@params[:proj][:defocus] = proj.Defocus*1000000000
176 return @@params[:proj][:defocus].to_json
179 def set_reset_defocus
180 puts "FEI resetDefocus"
182 proj = @@tem.Projection
184 @@params[:proj][:defocus] = proj.Defocus*1000000000
185 return @@params[:proj][:defocus].to_json
188 def set_condenser_stg(x, y)
189 puts "FEI setCondenserStigmater"
191 ill = @@tem.Illumination
192 ill.CondenserStigmator.X = ill.CondenserStigmator.X + x
193 ill.CondenserStigmator.Y = ill.CondenserStigmator.Y + y
194 @@params[:ill][:condenserStg][:x] = ill.CondenserStigmator.X
195 @@params[:ill][:condenserStg][:y] = ill.CondenserStigmator.Y
196 return @@params[:ill][:condenserStg].to_json
199 def set_object_stg(x, y)
200 puts "FEI setObjectStigmator"
202 proj = @@tem.Projection
203 proj.ObjectiveStigmator.X = proj.ObjectiveStigmator.X + x
204 proj.ObjectiveStigmator.Y = proj.ObjectiveStigmator.Y + y
205 @@params[:proj][:objStg][:x] = proj.ObjectiveStigmator.X
206 @@params[:proj][:objStg][:y] = proj.ObjectiveStigmator.Y
207 return @@params[:proj][:objStg].to_json
211 def acquisition_init(binning, exp_time, image_size)
215 # get acquitision object
216 @@acq = @@tem.Acquisition
218 # acquire an image from "CCD" camera
219 @@acq.AddAcqDeviceByName("CCD")
221 ## settings for acquisition parameters
222 # ccdCamerasAcqParams
223 ccdCamerasAcqParams = @@acq.Cameras.Item(0).AcqParams
225 ccdCamerasAcqParams.Binning = binning
227 ccdCamerasAcqParams.ExposureTime = exp_time
229 ccdCamerasAcqParams.ImageSize = image_size
231 # ccdCamerasAcqParams.ImageCorrection = 1
233 @@params[:ccdCamera][:binning] = ccdCamerasAcqParams.Binning
234 @@params[:ccdCamera][:expTime] = ccdCamerasAcqParams.ExposureTime
235 @@params[:ccdCamera][:imageSize] = ccdCamerasAcqParams.ImageSize
237 return @@params[:ccdCamera].to_json
241 @@acq = @@tem.Acquisition
243 imageCollection = @@acq.AcquireImages
244 img = imageCollection.Item(0)
245 return img.AsSafeArray
252 def set_beamtilt(params)
253 puts "FEI setBeamTilt"
256 def get_vacuum_status
257 puts "FEI getVacuumStatus"
258 puts @@tem.Vacuum.Gauges.Item(5).Name
259 puts @@tem.Vacuum.Gauges.Item(1).Pressure