OSDN Git Service

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