OSDN Git Service

syncro for iwasaki_mac
[vem/vem.git] / vem / feicontrol.rb
1 require 'win32ole'
2 require 'open3'
3 require 'json'
4
5 require '../vem/vem'
6
7
8
9 class FEIControl < VEM
10   def initialize
11     puts "FEI initialize"
12
13     #@@tem = WIN32OLE.new('TEMScripting.Instrument')
14   end
15
16   def setStageA(x, y, z, a)
17     puts "FEI setStageA"
18
19     o,s = Open3.capture2("cscript vem/tool/setStageA.js " + x.to_s + " " + y.to_s + " " + z.to_s + " " + a.to_s)
20     position = o.lines.to_a[3]
21     puts position
22     return position
23   end
24
25   def setStageR(x, y, z, a)
26
27     puts "FEI setStageR"
28     o,s = Open3.capture2("cscript ../../vem/tool/setStageR.js " + x.to_s + " "+ y.to_s + " " + z.to_s + " " + a.to_s)
29     position = o.lines.to_a[3]
30     puts position
31     return position
32   end
33
34   def setSpotSize(spsize)
35     puts "FEI setSpotSize"
36
37     ill    = @@tem.Illumination
38     ill.SpotsizeIndex = ill.SpotsizeIndex + spsize
39     return ill.SpotsizeIndex
40   end
41
42   def setMagnification(magsize)
43     puts "FEI setMagnification"
44
45     proj = @@tem.Projection
46     proj.MagnificationIndex = proj.MagnificationIndex + magsize
47     return proj.MagnificationIndex
48   end
49
50   def acquisition
51     puts "FEI acquisition"
52
53     WIN32OLE.ole_initialize     
54     @@tem = WIN32OLE.new('TEMScripting.Instrument')
55
56     # get acquitision object
57     acq = @@tem.Acquisition
58     # acquire an image from "CCD" camera
59     acq.AddAcqDeviceByName("CCD")
60
61     ## settings for acquisition parameters
62     # ccdCamerasAcqParams
63     ccdCamerasAcqParams = acq.Cameras.Item(0).AcqParams
64     # binning
65     ccdCamerasAcqParams.Binning = 4
66     # exposuretime
67     ccdCamerasAcqParams.ExposureTime = 0.07
68     # imagesize
69     ccdCamerasAcqParams.ImageSize = 2
70
71     # acquisition Image
72     imageCollection = acq.AcquireImages
73
74     img     = imageCollection.Item(0)
75     imgData = img.AsSafeArray
76     return imgData.to_json
77   end
78
79   def acquisition255
80     puts "FEI acquisition"
81
82     WIN32OLE.ole_initialize     
83     @@tem = WIN32OLE.new('TEMScripting.Instrument')
84
85     # get acquitision object
86     acq = @@tem.Acquisition
87     # acquire an image from "CCD" camera
88     acq.AddAcqDeviceByName("CCD")
89
90     # ---settings for acquisition parameters
91
92     # ccdCamerasAcqParams
93     ccdCamerasAcqParams = acq.Cameras.Item(0).AcqParams
94     # binning
95     ccdCamerasAcqParams.Binning = 4
96     # exposuretime
97     ccdCamerasAcqParams.ExposureTime = 0.07
98     # imagesize
99     ccdCamerasAcqParams.ImageSize = 0
100
101     # ---end
102
103     # acquisition Image
104     imageCollection = acq.AcquireImages
105
106     img     = imageCollection.Item(0)
107     imgData = img.AsSafeArray
108
109     imgLength = imgData.length
110
111     # ---conversion
112
113     #max, min
114     imgMax = imgData.flatten.max
115     imgMin = imgData.flatten.min
116
117     #conversion factor for 255 scale
118     conversion = 255/(imgMax.to_f - imgMin.to_f)
119
120     img255 = Array.new(imgLength){ Array.new(imgLength) }
121
122     imgLength.times do |x|
123       imgLength.times do |y|
124         img255[y][x] = ((imgData[x][y]-imgMin.to_f)*conversion).to_i
125       end
126     end
127     
128     # ---end
129     
130     puts imgLength
131
132     return img255.to_json
133   end
134
135   def setObj(params)
136     puts "FEI setObj"
137   end
138
139   def setBeamTilt(params)
140     puts "FEI setBeamTilt"
141   end
142
143   def setSpeed(params)
144   end
145
146   def getCondition
147     puts "FEI getCondition"
148   end
149 end
150