pygpibtoolkit/HP3562A/datablockwidget.py

Tue, 12 Feb 2008 19:55:02 +0100

author
David Douard <david.douard@logilab.fr>
date
Tue, 12 Feb 2008 19:55:02 +0100
changeset 46
235686915f92
parent 44
c4bdd390918c
child 47
0ebdbcbb7852
permissions
-rw-r--r--

add THD computation for simple traces of power spectrum

44
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
1 #
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
2 import re
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
3 import numpy
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
4 from itertools import izip, count as icount
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
5
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
6 from PyQt4 import QtCore, QtGui
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
7 from PyQt4.QtCore import Qt, SIGNAL
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
8 import state_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
9 import trace_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
10 import coord_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
11 from pygpibtoolkit.qt4.mpl import QMplCanvas
46
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
12 from pygpibtoolkit.HP3562A import mathtools
44
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
13
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
14 children = [ ]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
15
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
16 def getChild(datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
17 """
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
18 Try to find the appropriate MDI child widget for the given datablock.
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
19 """
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
20 for child in children:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
21 if child.isValidDatablock(datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
22 print "using" , child
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
23 return child
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
24 return None
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
25
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
26 class DatablockMDIChild(QtGui.QMainWindow):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
27 seqnumber = 1
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
28 _username = "Window"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
29
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
30 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
31 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
32 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
33
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
34 def __init__(self, datablock, name=None):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
35 QtGui.QMainWindow.__init__(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
36 if name is not None:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
37 self.username = name
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
38 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
39 self.username = self.__class__._username + " " + str(self.seqnumber)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
40 self.setAttribute(Qt.WA_DeleteOnClose)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
41 self.isUntitled = True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
42 self.dataIsModified = False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
43 self.setDatablock(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
44 self.setWindowTitle(self.username)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
45 self.setupUI()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
46 self.updateHeaderData()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
47
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
48 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
49 self.datablock = datablock
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
50
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
51 def setupUI(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
52 # setup headers views as a docked window
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
53 assert isinstance(self._header_struct, tuple)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
54 self.headerDocks = []
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
55 self.tables = []
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
56 for i, header_struct in enumerate(self._header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
57 dock = QtGui.QDockWidget("Header" + (i>0 and (' %s'%(i+1)) or ''),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
58 self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
59 #dock.setFeatures(dock.NoDockWidgetFeatures)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
60 sarea = QtGui.QScrollArea(dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
61 dock.setWidget(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
62 self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
63 self.headerDocks.append(dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
64
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
65 l = QtGui.QVBoxLayout(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
66 l.setContentsMargins(0,0,0,0)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
67 table = QtGui.QTableWidget(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
68 table.setAlternatingRowColors(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
69 table.verticalHeader().hide()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
70 l.addWidget(table, 1)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
71 self.tables.append(table)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
72
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
73 def setupRowsHeight(self, table):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
74 if table.verticalHeader().minimumSectionSize()>0:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
75 cellsize = table.verticalHeader().minimumSectionSize()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
76 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
77 cellsize = 17
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
78 table.verticalHeader().setDefaultSectionSize(cellsize)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
79
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
80 def updateHeaderData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
81 for header, table, header_struct in izip(self.header, self.tables, self._header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
82 table.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
83 table.setRowCount(len(header_struct))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
84 table.setColumnCount(2)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
85 table.setHorizontalHeaderLabels(['Parameter', 'Value'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
86 bool_re = re.compile(r'((?P<before>.*) )?(?P<flag>\w+/\w+)( (?P<after>.*))?')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
87 item = QtGui.QTableWidgetItem()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
88 item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
89 for i, row in enumerate(header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
90 key = row[0]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
91 typ = row[1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
92 if typ is None:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
93 continue
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
94 val = header.get(key, "N/A")
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
95 if isinstance(val, basestring):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
96 val = unicode(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
97 elif typ is bool and isinstance(val, typ):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
98 m = bool_re.match(key)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
99 if m:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
100 d = m.groupdict()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
101 key = ""
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
102 if d['before']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
103 key += d['before']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
104 if d['after']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
105 key += d['after']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
106 key = key.capitalize()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
107 val = d['flag'].split('/')[not val]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
108 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
109 val = str(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
110 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
111 val = str(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
112 val = val.strip()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
113 if val:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
114 if val[0]+val[-1] in ['""',"''"]:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
115 val = val[1:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
116 if val[0:2]+val[-1] in ['u""',"u''"]:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
117 val = val[2:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
118 while val and val.endswith(chr(0)):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
119 val = val[:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
120 item_ = QtGui.QTableWidgetItem(item)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
121 item_.setText(key)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
122 table.setItem(i, 0, item_)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
123 item_ = QtGui.QTableWidgetItem(item)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
124 item_.setText(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
125 table.setItem(i, 1, item_)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
126 table.resizeColumnsToContents()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
127 table.resizeRowsToContents()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
128 # self.setupRowsHeight(self.table)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
129
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
130 def userFriendlyName(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
131 return self.username
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
132
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
133 def closeEvent(self, event):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
134 if self.maybeSave():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
135 event.accept()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
136 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
137 event.ignore()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
138
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
139 def maybeSave(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
140 if self.dataIsModified:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
141 ret = QtGui.QMessageBox.warning(self, self.tr("MDI"),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
142 self.tr("'%1' has been modified.\n"\
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
143 "Do you want to save your changes?")
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
144 .arg(self.userFriendlyCurrentFile()),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
145 QtGui.QMessageBox.Yes | QtGui.QMessageBox.Default,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
146 QtGui.QMessageBox.No,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
147 QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Escape)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
148 if ret == QtGui.QMessageBox.Yes:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
149 return self.save()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
150 elif ret == QtGui.QMessageBox.Cancel:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
151 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
152 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
153
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
154 class StateBinaryDatablockMDIChild(DatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
155 _username = "State"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
156 _header_struct = state_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
157 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
158 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
159 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
160 h = state_decoder.decode_state(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
161 assert len(h)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
162 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
163 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
164 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
165
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
166 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
167 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
168 self.header = [state_decoder.decode_state(self.datablock)]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
169
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
170 class TraceBinaryDatablockMDIChild(DatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
171 _username = "Trace"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
172 _header_struct = trace_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
173 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
174 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
175 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
176 h, t = trace_decoder.decode_trace(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
177 assert len(h)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
178 assert len(t)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
179 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
180 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
181 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
182
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
183 def __init__(self, datablock, name=None):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
184 DatablockMDIChild.__init__(self, datablock, name)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
185 self.updateTraceData()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
186
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
187 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
188 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
189 self.header, self.trace = trace_decoder.decode_trace(self.datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
190 self.header = [self.header]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
191
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
192 def setupToolBar(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
193 toolbar = QtGui.QToolBar(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
194 self.addToolBar(toolbar)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
195 self.ylogaction = QtGui.QAction(self.tr("Y Log"), self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
196 self.ylogaction.setCheckable(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
197 self.connect(self.ylogaction, SIGNAL('toggled(bool)'),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
198 self.updateTraceData)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
199 toolbar.addAction(self.ylogaction)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
200
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
201
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
202 def setupUI(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
203 self.setupToolBar()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
204 DatablockMDIChild.setupUI(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
205 mainw = QtGui.QWidget(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
206 l = QtGui.QVBoxLayout(mainw)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
207 l.setMargin(0)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
208 self.canvas = QMplCanvas(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
209 l.addWidget(self.canvas, 1)
46
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
210
44
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
211 self.setCentralWidget(mainw)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
212
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
213 def updateTraceData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
214 #self.canvas.deleteLater()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
215 #self.canvas = QMplCanvas()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
216 #self.centralWidget().layout().addWidget(self.canvas, 1)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
217 f0 = self.header[0]['Start freq value']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
218 dx = self.header[0]['Delta X-axis']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
219 n = self.header[0]['Number of elements']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
220 x = numpy.linspace(f0, f0+dx*n, len(self.trace))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
221 y = self.trace.copy()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
222 if self.ylogaction.isChecked():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
223 minv = min(y[y>0])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
224 y[y==0] = minv
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
225 y = numpy.log10(y)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
226 y = y*10
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
227 self.canvas.axes.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
228 self.canvas.axes.plot(x, y, 'r')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
229 self.canvas.axes.set_xlim(min(x), max(x))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
230 self.canvas.axes.set_xlabel("%s (%s)"%(self.header[0]['Domain'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
231 self.header[0]['X axis units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
232 if self.ylogaction.isChecked():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
233 self.canvas.axes.set_ylabel('db (%s)'%self.header[0]['Amplitude units'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
234 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
235 self.canvas.axes.set_ylabel('%s'%self.header[0]['Amplitude units'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
236 self.canvas.axes.grid(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
237 if self.header[0]['Display function']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
238 self.canvas.axes.set_title(self.header[0]['Display function'])
46
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
239
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
240 y = self.trace.copy()
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
241 if f0 > 0:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
242 # must add some initial zeros
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
243 yy = numpy.zeros(f0/dx+len(y))
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
244 yy[-len(y):] = y
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
245 y = yy
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
246 msg = ""
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
247 try:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
248 f0, thd = mathtools.thd(y, db=True)
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
249 f0 = f0*dx
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
250 assert thd
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
251 except:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
252 pass
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
253 else:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
254 msg += 'THD:%.2g db Freq:%.2f Hz '%(thd, f0)
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
255 try:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
256 thdn = mathtools.thd_n(y, db=True)
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
257 except:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
258 pass
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
259 else:
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
260 msg += 'THD+N:%.2g db '%thdn
235686915f92 add THD computation for simple traces of power spectrum
David Douard <david.douard@logilab.fr>
parents: 44
diff changeset
261 self.statusBar().showMessage(msg)
44
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
262 self.canvas.repaint()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
263
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
264 class CoordBinaryDatablockMDIChild(TraceBinaryDatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
265 _username = "Coord"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
266 _header_struct = coord_decoder.TRACE_HEADER, coord_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
267 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
268 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
269 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
270 h1, h2, t = coord_decoder.decode_coord(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
271 assert len(h1)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
272 assert len(h2)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
273 assert len(t)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
274 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
275 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
276 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
277 def setupToolBar(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
278 pass
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
279
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
280 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
281 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
282 h1, h2, self.trace = coord_decoder.decode_coord(self.datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
283 self.header = [h2, h1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
284
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
285 def updateTraceData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
286 f0 = self.header[0]['Start freq value']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
287 dx = self.header[0]['Delta X-axis']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
288 n = self.header[0]['Number of elements']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
289 x = numpy.linspace(f0, f0+dx*n, len(self.trace))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
290 y = self.trace.copy()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
291
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
292 y = y.clip(min=self.header[1]['Min value of data'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
293 max=self.header[1]['Max value of data'],)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
294
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
295 self.canvas.axes.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
296 self.canvas.axes.plot(x, y, 'r')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
297 self.canvas.axes.set_xlim(min(x), max(x))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
298 self.canvas.axes.set_xlabel("%s (%s)"%(self.header[0]['Domain'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
299 self.header[0]['X axis units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
300 self.canvas.axes.set_ylabel('%s (%s)'%(self.header[1]['Y coordinates'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
301 self.header[0]['Amplitude units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
302 self.canvas.axes.grid(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
303 if self.header[0]['Display function']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
304 self.canvas.axes.set_title(self.header[0]['Display function'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
305
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
306 self.canvas.repaint()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
307
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
308
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
309 children.append(CoordBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
310 children.append(TraceBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
311 children.append(StateBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
312
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
313
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
314

mercurial