Subversion Repositories Projects

Rev

Rev 594 | Rev 599 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
584 FredericG 1
#!/usr/bin/env python
2
# -*- coding: iso-8859-15 -*-
3
# generated by wxGlade 0.6.3 on Thu Sep 24 15:46:36 2009
4
 
586 FredericG 5
import sys
584 FredericG 6
import wx
585 FredericG 7
import wx.lib
8
import wx.lib.plot
584 FredericG 9
 
585 FredericG 10
# Needs Numeric or numarray or NumPy
11
try:
12
    import numpy.oldnumeric as _Numeric
13
except:
14
    try:
15
        import numarray as _Numeric  #if numarray is used it is renamed Numeric
16
    except:
17
        try:
18
            import Numeric as _Numeric
19
        except:
20
            msg= """
21
            This module requires the Numeric/numarray or NumPy module,
22
            which could not be imported.  It probably is not installed
23
            (it's not part of the standard Python distribution). See the
24
            Numeric Python site (http://numpy.scipy.org) for information on
25
            downloading source or binaries."""
26
            raise ImportError, "Numeric,numarray or NumPy not found. \n" + msg
27
 
584 FredericG 28
# begin wxGlade: extracode
29
# end wxGlade
30
 
31
 
32
 
587 FredericG 33
class MenuBar(wx.MenuBar):
34
    def __init__(self, *args, **kwds):
35
        # content of this block not found: did you rename this class?
36
        pass
37
 
38
    def __set_properties(self):
39
        # content of this block not found: did you rename this class?
40
        pass
41
 
42
    def __do_layout(self):
43
        # content of this block not found: did you rename this class?
44
        pass
45
 
46
# end of class MenuBar
47
 
48
 
585 FredericG 49
class wxFrame(wx.Panel):
50
    def __init__(self, *args, **kwds):
586 FredericG 51
        # content of this block not found: did you rename this class?
52
        pass
585 FredericG 53
 
54
    def __set_properties(self):
586 FredericG 55
        # content of this block not found: did you rename this class?
585 FredericG 56
        pass
57
 
58
    def __do_layout(self):
586 FredericG 59
        # content of this block not found: did you rename this class?
585 FredericG 60
        pass
61
 
62
# end of class wxFrame
63
 
64
 
65
class MyFrame(wx.Frame):
66
    def __init__(self, *args, **kwds):
67
        # content of this block not found: did you rename this class?
68
        pass
69
 
70
    def __set_properties(self):
71
        # content of this block not found: did you rename this class?
72
        pass
73
 
74
    def __do_layout(self):
75
        # content of this block not found: did you rename this class?
76
        pass
77
 
78
# end of class MyFrame
79
 
80
 
584 FredericG 81
class MainFrame(wx.Frame):
82
    def __init__(self, *args, **kwds):
83
        # begin wxGlade: MainFrame.__init__
84
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
85
        wx.Frame.__init__(self, *args, **kwds)
587 FredericG 86
 
87
        # Menu Bar
88
        self.frame_1_menubar = wx.MenuBar()
89
        wxglade_tmp_menu = wx.Menu()
90
        wxglade_tmp_menu.Append(wx.NewId(), "Exit", "", wx.ITEM_NORMAL)
91
        self.frame_1_menubar.Append(wxglade_tmp_menu, "File")
92
        wxglade_tmp_menu = wx.Menu()
93
        wxglade_tmp_menu.Append(wx.NewId(), "Clear", "", wx.ITEM_NORMAL)
94
        wxglade_tmp_menu.Append(wx.NewId(), "Import", "", wx.ITEM_NORMAL)
95
        self.frame_1_menubar.Append(wxglade_tmp_menu, "TestSet")
96
        wxglade_tmp_menu = wx.Menu()
97
        self.frame_1_menubar.Append(wxglade_tmp_menu, "MK")
98
        wxglade_tmp_menu = wx.Menu()
99
        self.frame_1_menubar.Append(wxglade_tmp_menu, "Help")
100
        self.SetMenuBar(self.frame_1_menubar)
101
        # Menu Bar end
584 FredericG 102
        self.Port = wx.StaticText(self, -1, "Port")
103
        self.text_ctrl_1 = wx.TextCtrl(self, -1, "")
104
        self.label_5 = wx.StaticText(self, -1, "label_5")
105
        self.text_ctrl_5 = wx.TextCtrl(self, -1, "")
106
        self.label_2 = wx.StaticText(self, -1, "Motor(s)")
107
        self.text_ctrl_2 = wx.TextCtrl(self, -1, "")
108
        self.label_6 = wx.StaticText(self, -1, "label_6")
109
        self.text_ctrl_6 = wx.TextCtrl(self, -1, "")
110
        self.label_3 = wx.StaticText(self, -1, "Channel(s)")
111
        self.text_ctrl_3 = wx.TextCtrl(self, -1, "")
112
        self.label_7 = wx.StaticText(self, -1, "label_7")
113
        self.text_ctrl_7 = wx.TextCtrl(self, -1, "")
114
        self.label_4 = wx.StaticText(self, -1, "Speed(s)")
115
        self.text_ctrl_4 = wx.TextCtrl(self, -1, "")
116
        self.label_8 = wx.StaticText(self, -1, "label_8")
117
        self.text_ctrl_8 = wx.TextCtrl(self, -1, "")
118
        self.button_1 = wx.Button(self, -1, "button_1")
591 FredericG 119
        self.GraphPanel = wx.Panel(self, -1, style=wx.DOUBLE_BORDER|wx.TAB_TRAVERSAL)
592 FredericG 120
        self.yAxesChoice = wx.ComboBox(self, -1, choices=["10", "25", "50", "100", "250"], style=wx.CB_DROPDOWN)
121
        self.graphTypeChoise = wx.ComboBox(self, -1, choices=["Raw Data", "Filtered Data", "Spectrum"], style=wx.CB_DROPDOWN)
586 FredericG 122
        self.TestListCtrl = wx.ListCtrl(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
584 FredericG 123
 
124
        self.__set_properties()
125
        self.__do_layout()
587 FredericG 126
 
127
        self.Bind(wx.EVT_MENU, self.OnImport, id=-1)
592 FredericG 128
        self.Bind(wx.EVT_COMBOBOX, self.onYAxesChange, self.yAxesChoice)
584 FredericG 129
        # end wxGlade
130
 
587 FredericG 131
    def setApp(self, app):
132
        self.app = app
585 FredericG 133
 
584 FredericG 134
    def __set_properties(self):
135
        # begin wxGlade: MainFrame.__set_properties
587 FredericG 136
        self.SetTitle("VibrationTest")
591 FredericG 137
        self.GraphPanel.SetMinSize((800,300))
592 FredericG 138
        self.yAxesChoice.SetSelection(2)
139
        self.graphTypeChoise.SetSelection(0)
584 FredericG 140
        # end wxGlade
141
 
142
    def __do_layout(self):
143
        # begin wxGlade: MainFrame.__do_layout
144
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
586 FredericG 145
        grid_sizer_2 = wx.GridSizer(2, 1, 4, 4)
591 FredericG 146
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
584 FredericG 147
        grid_sizer_1 = wx.GridSizer(5, 4, 4, 4)
591 FredericG 148
        sizer_1.Add((20, 20), 0, 0, 0)
584 FredericG 149
        grid_sizer_1.Add(self.Port, 0, wx.ALIGN_RIGHT, 0)
150
        grid_sizer_1.Add(self.text_ctrl_1, 0, 0, 0)
151
        grid_sizer_1.Add(self.label_5, 0, wx.ALIGN_RIGHT, 0)
152
        grid_sizer_1.Add(self.text_ctrl_5, 0, 0, 0)
153
        grid_sizer_1.Add(self.label_2, 0, wx.ALIGN_RIGHT, 0)
154
        grid_sizer_1.Add(self.text_ctrl_2, 0, 0, 0)
155
        grid_sizer_1.Add(self.label_6, 0, wx.ALIGN_RIGHT, 0)
156
        grid_sizer_1.Add(self.text_ctrl_6, 0, 0, 0)
157
        grid_sizer_1.Add(self.label_3, 0, wx.ALIGN_RIGHT, 0)
158
        grid_sizer_1.Add(self.text_ctrl_3, 0, 0, 0)
159
        grid_sizer_1.Add(self.label_7, 0, wx.ALIGN_RIGHT, 0)
160
        grid_sizer_1.Add(self.text_ctrl_7, 0, 0, 0)
161
        grid_sizer_1.Add(self.label_4, 0, wx.ALIGN_RIGHT, 0)
162
        grid_sizer_1.Add(self.text_ctrl_4, 0, 0, 0)
163
        grid_sizer_1.Add(self.label_8, 0, wx.ALIGN_RIGHT, 0)
164
        grid_sizer_1.Add(self.text_ctrl_8, 0, 0, 0)
165
        grid_sizer_1.Add(self.button_1, 0, 0, 0)
166
        sizer_1.Add(grid_sizer_1, 0, 0, 2)
591 FredericG 167
        sizer_1.Add((20, 20), 0, 0, 0)
592 FredericG 168
        sizer_1.Add(self.GraphPanel, 1, 0, 0)
169
        sizer_2.Add(self.yAxesChoice, 0, 0, 0)
170
        sizer_2.Add(self.graphTypeChoise, 0, 0, 0)
591 FredericG 171
        sizer_1.Add(sizer_2, 0, wx.EXPAND, 0)
172
        sizer_1.Add((20, 20), 0, 0, 0)
586 FredericG 173
        grid_sizer_2.Add(self.TestListCtrl, 1, wx.ALL|wx.EXPAND, 0)
174
        sizer_1.Add(grid_sizer_2, 1, wx.EXPAND, 0)
584 FredericG 175
        self.SetSizer(sizer_1)
176
        sizer_1.Fit(self)
177
        self.Layout()
178
        # end wxGlade
179
 
590 FredericG 180
        # List events
181
        self.TestListCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnTestSelected, self.TestListCtrl)
182
 
586 FredericG 183
        # Configure Graph
593 FredericG 184
        self.client = wx.lib.plot.PlotCanvas(self.GraphPanel, size=(800,300))
185
 
585 FredericG 186
        self.client.SetPointLabelFunc(self.DrawPointLabel)
187
 
188
        self.client.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
189
        self.client.SetFontSizeAxis(10)
190
        self.client.SetFontSizeLegend(7)
191
        self.client.setLogScale((False,False))
192
 
586 FredericG 193
 
194
        # Configure TestListCtrl
594 FredericG 195
        self.TestListCtrl.InsertColumn(0, "Description")
196
        self.TestListCtrl.InsertColumn(1, "Speed")
197
        self.TestListCtrl.InsertColumn(2, "Channel")
198
        self.TestListCtrl.InsertColumn(3, "Result")
586 FredericG 199
 
585 FredericG 200
    def DrawPointLabel(self, dc, mDataDict):
201
        """This is the fuction that defines how the pointLabels are plotted
202
            dc - DC that will be passed
203
            mDataDict - Dictionary of data that you want to use for the pointLabel
204
 
205
            As an example I have decided I want a box at the curve point
206
            with some text information about the curve plotted below.
207
            Any wxDC method can be used.
208
        """
209
        # ----------
210
        dc.SetPen(wx.Pen(wx.BLACK))
211
        dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) )
212
 
213
        sx, sy = mDataDict["scaledXY"] #scaled x,y of closest point
214
        dc.DrawRectangle( sx-5,sy-5, 10, 10)  #10by10 square centered on point
215
        px,py = mDataDict["pointXY"]
216
        cNum = mDataDict["curveNum"]
217
        pntIn = mDataDict["pIndex"]
218
        legend = mDataDict["legend"]
219
        #make a string to display
220
        s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn)
221
        dc.DrawText(s, sx , sy+1)
222
        # -----------
223
 
596 FredericG 224
 
225
    def onNewTest(self, test):
226
        index = self.TestListCtrl.InsertStringItem(sys.maxint, test.descr)
227
        self.TestListCtrl.SetStringItem(index, 1, str(test.speed))
228
        self.TestListCtrl.SetStringItem(index, 2, test.channel)
229
        self.TestListCtrl.SetStringItem(index, 3, "OK")
230
 
231
 
590 FredericG 232
    def OnTestSelected(self, event):
233
         testId = event.m_itemIndex
234
         print "Test Selected id=%d" % (testId)
592 FredericG 235
         self.activeTestId = testId
236
         self.drawGraph()
590 FredericG 237
 
592 FredericG 238
    def drawGraph(self):
239
         vibTest = self.app.getTest(self.activeTestId)
590 FredericG 240
         nb = vibTest.getDataLen()
592 FredericG 241
         y = int(self.yAxesChoice.GetStringSelection())
590 FredericG 242
 
593 FredericG 243
         #self.client.Clear()
244
         xydata = _Numeric.linspace(0,0.09*nb,2*nb)
590 FredericG 245
         xydata.shape = (nb, 2)
246
         xydata[:,1] = vibTest.getRawData()
247
         line = wx.lib.plot.PolyLine(xydata, legend= 'Raw Data', colour='red')
596 FredericG 248
 
249
         title = "%s %s %d" %(vibTest.descr, vibTest.channel, vibTest.speed)
250
         self.client.Draw(wx.lib.plot.PlotGraphics([line], title, "Time (ms)", "Acc"), yAxis= (-y,y))
592 FredericG 251
         self.client.SetEnableGrid('Horizontal')
590 FredericG 252
 
253
 
587 FredericG 254
    def OnImport(self, event): # wxGlade: MainFrame.<event_handler>
255
        self.app.Import()
256
 
592 FredericG 257
    def onYAxesChange(self, event): # wxGlade: MainFrame.<event_handler>
258
        self.drawGraph()
259
 
584 FredericG 260
# end of class MainFrame
261
 
262
 
586 FredericG 263
class VibTest:
596 FredericG 264
    def __init__(self, descr, motor, speed, channel, rawData):
594 FredericG 265
        self.descr = descr
266
        self.motor = motor
267
        self.speed = speed
596 FredericG 268
        self.channel = channel
590 FredericG 269
        self.rawData = _Numeric.array(rawData)
270
        self.dc = self.rawData.mean()
271
        self.rawData -= self.dc
272
        self.dataLen = len(rawData)
586 FredericG 273
 
594 FredericG 274
    def getDescr(self):
275
        return self.Descr
587 FredericG 276
 
590 FredericG 277
    def getRawData(self):
278
        return self.rawData
279
 
280
    def getDataLen(self):
281
        return self.dataLen
282
 
283
 
584 FredericG 284
class App(wx.App):
586 FredericG 285
    def __init__(self, par):
286
        self.VibTests = []
287
 
288
        wx.App.__init__(self, par)
289
 
290
 
596 FredericG 291
    def AddTest(self, descr, motor, speed, channel, rawData):
292
        test = VibTest(descr, motor, speed, channel, rawData)
586 FredericG 293
        self.VibTests.append(test)
596 FredericG 294
        self.frame_1.onNewTest(test)
586 FredericG 295
 
590 FredericG 296
    def getTest(self, testId):
297
        return self.VibTests[testId]
298
 
584 FredericG 299
    def OnInit(self):
300
        wx.InitAllImageHandlers()
586 FredericG 301
        self.frame_1 = MainFrame(None, -1, "")
587 FredericG 302
        self.frame_1.setApp(self);
586 FredericG 303
        self.SetTopWindow(self.frame_1)
304
 
587 FredericG 305
        self.frame_1.Show()
306
        return 1
307
 
308
    def Import(self):
596 FredericG 309
        #filePath = "./unbal200.txt"
310
        filePath = "./nikivan.txt"
311
 
312
        print "Import %s" % filePath
313
 
314
        logfile = open(filePath, "r")
590 FredericG 315
        data = None
596 FredericG 316
 
317
        headers = (logfile.readline()).split(',')
318
        nbCols = len(headers)
319
        print "NbCols =", nbCols
320
 
321
        data = []
322
        descr = []
323
        speed = []
324
        channel = []
325
        for c in range(nbCols):
326
            data.append([])
327
            h = headers[c].split(' ')
328
            print h
329
            descr.append(h[0]);
330
            speed.append(h[1]);
331
            channel.append(h[2]);
332
 
590 FredericG 333
        for line in logfile:
334
            values = line.split(',')
596 FredericG 335
            for i in range(nbCols):
336
                data[i].append(int(values[i]))
590 FredericG 337
        logfile.close()
596 FredericG 338
 
339
        for c in range(nbCols):
340
            self.AddTest(descr[c], 0, int(speed[c]), channel[c], data[c])
590 FredericG 341
 
342
 
343
 
586 FredericG 344
 
590 FredericG 345
 
584 FredericG 346
# end of class App
347
 
348
if __name__ == "__main__":
349
    VibrationTestGui = App(0)
350
    VibrationTestGui.MainLoop()