Browse Source

Adding GUI functionality, mainly in loops. Also, new logo plot.

tags/1.6.1
Trevor Irons 4 years ago
parent
commit
785d0edf68
5 changed files with 251 additions and 91 deletions
  1. 92
    38
      akvo/gui/addCircularLoop.ui
  2. 93
    19
      akvo/gui/akvoGUI.py
  3. 46
    0
      akvo/gui/logo.py
  4. 18
    32
      akvo/gui/main.ui
  5. 2
    2
      setup.py

+ 92
- 38
akvo/gui/addCircularLoop.ui View File

7
     <x>0</x>
7
     <x>0</x>
8
     <y>0</y>
8
     <y>0</y>
9
     <width>400</width>
9
     <width>400</width>
10
-    <height>300</height>
10
+    <height>395</height>
11
    </rect>
11
    </rect>
12
   </property>
12
   </property>
13
   <property name="windowTitle">
13
   <property name="windowTitle">
14
    <string>Dialog</string>
14
    <string>Dialog</string>
15
   </property>
15
   </property>
16
   <layout class="QGridLayout" name="gridLayout">
16
   <layout class="QGridLayout" name="gridLayout">
17
+   <item row="2" column="0">
18
+    <widget class="QLabel" name="label_3">
19
+     <property name="text">
20
+      <string>height (m)</string>
21
+     </property>
22
+    </widget>
23
+   </item>
24
+   <item row="6" column="2">
25
+    <widget class="QDoubleSpinBox" name="dip">
26
+     <property name="enabled">
27
+      <bool>false</bool>
28
+     </property>
29
+     <property name="toolTip">
30
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The dip designates the angle between the normal and the ground. Zero designates a loop that is flat on the ground, whereas 90 is a vertical loop. This value in turn with azimuth allows for arbitrary orientation of the loops. If azimuth is zero, and dip is 90, the loop has a normal aligned in the northing direction. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
31
+     </property>
32
+     <property name="maximum">
33
+      <double>90.000000000000000</double>
34
+     </property>
35
+    </widget>
36
+   </item>
37
+   <item row="7" column="0">
38
+    <widget class="QLabel" name="label_8">
39
+     <property name="text">
40
+      <string>azimuth (°)</string>
41
+     </property>
42
+    </widget>
43
+   </item>
17
    <item row="0" column="0">
44
    <item row="0" column="0">
18
     <widget class="QLabel" name="label">
45
     <widget class="QLabel" name="label">
19
      <property name="text">
46
      <property name="text">
20
-      <string>Centre Northing </string>
47
+      <string>centre northing (m)</string>
21
      </property>
48
      </property>
22
     </widget>
49
     </widget>
23
    </item>
50
    </item>
24
-   <item row="0" column="1">
51
+   <item row="0" column="2">
25
     <widget class="QDoubleSpinBox" name="centreNorth">
52
     <widget class="QDoubleSpinBox" name="centreNorth">
26
      <property name="minimum">
53
      <property name="minimum">
27
       <double>-999999999.000000000000000</double>
54
       <double>-999999999.000000000000000</double>
31
      </property>
58
      </property>
32
     </widget>
59
     </widget>
33
    </item>
60
    </item>
34
-   <item row="1" column="0">
35
-    <widget class="QLabel" name="label_2">
61
+   <item row="6" column="0">
62
+    <widget class="QLabel" name="label_7">
36
      <property name="text">
63
      <property name="text">
37
-      <string>Centre Easting</string>
64
+      <string>dip (°)</string>
38
      </property>
65
      </property>
39
     </widget>
66
     </widget>
40
    </item>
67
    </item>
41
-   <item row="1" column="1">
42
-    <widget class="QDoubleSpinBox" name="centreEast">
43
-     <property name="minimum">
44
-      <double>-99999999.000000000000000</double>
68
+   <item row="10" column="2">
69
+    <widget class="QDialogButtonBox" name="buttonBox">
70
+     <property name="orientation">
71
+      <enum>Qt::Horizontal</enum>
45
      </property>
72
      </property>
46
-     <property name="maximum">
47
-      <double>99999999.989999994635582</double>
73
+     <property name="standardButtons">
74
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
48
      </property>
75
      </property>
49
     </widget>
76
     </widget>
50
    </item>
77
    </item>
51
-   <item row="2" column="0">
52
-    <widget class="QLabel" name="label_3">
53
-     <property name="text">
54
-      <string>height </string>
78
+   <item row="3" column="2">
79
+    <widget class="QDoubleSpinBox" name="loopRadius">
80
+     <property name="toolTip">
81
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Radius of the loop&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
82
+     </property>
83
+     <property name="minimum">
84
+      <double>0.100000000000000</double>
85
+     </property>
86
+     <property name="maximum">
87
+      <double>600.000000000000000</double>
88
+     </property>
89
+     <property name="value">
90
+      <double>50.000000000000000</double>
55
      </property>
91
      </property>
56
     </widget>
92
     </widget>
57
    </item>
93
    </item>
58
-   <item row="2" column="1">
59
-    <widget class="QDoubleSpinBox" name="doubleSpinBox">
94
+   <item row="2" column="2">
95
+    <widget class="QDoubleSpinBox" name="loopHeight">
60
      <property name="toolTip">
96
      <property name="toolTip">
61
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Akvo uses a positive down convention, a slight negative value to the loop height improves numerical stability using digital filtering hankel transforms. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
97
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Akvo uses a positive down convention, a slight negative value to the loop height improves numerical stability using digital filtering hankel transforms. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
62
      </property>
98
      </property>
71
      </property>
107
      </property>
72
     </widget>
108
     </widget>
73
    </item>
109
    </item>
110
+   <item row="1" column="0">
111
+    <widget class="QLabel" name="label_2">
112
+     <property name="text">
113
+      <string>centre easting (m)</string>
114
+     </property>
115
+    </widget>
116
+   </item>
117
+   <item row="7" column="2">
118
+    <widget class="QDoubleSpinBox" name="az">
119
+     <property name="enabled">
120
+      <bool>false</bool>
121
+     </property>
122
+    </widget>
123
+   </item>
74
    <item row="3" column="0">
124
    <item row="3" column="0">
75
     <widget class="QLabel" name="label_4">
125
     <widget class="QLabel" name="label_4">
76
      <property name="text">
126
      <property name="text">
77
-      <string>radius</string>
127
+      <string>radius (m)</string>
78
      </property>
128
      </property>
79
     </widget>
129
     </widget>
80
    </item>
130
    </item>
81
-   <item row="3" column="1">
82
-    <widget class="QDoubleSpinBox" name="doubleSpinBox_2">
83
-     <property name="toolTip">
84
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Radius of the loop&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
131
+   <item row="4" column="0">
132
+    <widget class="QLabel" name="label_6">
133
+     <property name="text">
134
+      <string>turns</string>
85
      </property>
135
      </property>
136
+    </widget>
137
+   </item>
138
+   <item row="1" column="2">
139
+    <widget class="QDoubleSpinBox" name="centreEast">
86
      <property name="minimum">
140
      <property name="minimum">
87
-      <double>0.100000000000000</double>
141
+      <double>-99999999.000000000000000</double>
88
      </property>
142
      </property>
89
      <property name="maximum">
143
      <property name="maximum">
90
-      <double>299.990000000000009</double>
144
+      <double>99999999.989999994635582</double>
91
      </property>
145
      </property>
92
     </widget>
146
     </widget>
93
    </item>
147
    </item>
94
-   <item row="4" column="0">
148
+   <item row="5" column="0">
95
     <widget class="QLabel" name="label_5">
149
     <widget class="QLabel" name="label_5">
96
      <property name="text">
150
      <property name="text">
97
       <string>segments</string>
151
       <string>segments</string>
98
      </property>
152
      </property>
99
     </widget>
153
     </widget>
100
    </item>
154
    </item>
101
-   <item row="4" column="1">
102
-    <widget class="QSpinBox" name="spinBox">
103
-     <property name="toolTip">
104
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Currently Akvo/Merlin calculates circular loops using segments of wire, forming a polygon. Analytic circular loops may be added in the future. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
105
-     </property>
155
+   <item row="4" column="2">
156
+    <widget class="QSpinBox" name="loopTurns">
106
      <property name="minimum">
157
      <property name="minimum">
107
-      <number>5</number>
158
+      <number>1</number>
159
+     </property>
160
+     <property name="maximum">
161
+      <number>100000</number>
108
      </property>
162
      </property>
109
     </widget>
163
     </widget>
110
    </item>
164
    </item>
111
-   <item row="5" column="1">
112
-    <widget class="QDialogButtonBox" name="buttonBox">
113
-     <property name="orientation">
114
-      <enum>Qt::Horizontal</enum>
165
+   <item row="5" column="2">
166
+    <widget class="QSpinBox" name="segments">
167
+     <property name="toolTip">
168
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Currently Akvo/Merlin calculates circular loops using segments of wire, forming a polygon. Analytic circular loops may be added in the future. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
115
      </property>
169
      </property>
116
-     <property name="standardButtons">
117
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
170
+     <property name="minimum">
171
+      <number>5</number>
118
      </property>
172
      </property>
119
     </widget>
173
     </widget>
120
    </item>
174
    </item>

+ 93
- 19
akvo/gui/akvoGUI.py View File

29
 from matplotlib.backends.backend_qt4 import NavigationToolbar2QT #as NavigationToolbar
29
 from matplotlib.backends.backend_qt4 import NavigationToolbar2QT #as NavigationToolbar
30
 import datetime, time
30
 import datetime, time
31
 
31
 
32
-
33
 from akvo.tressel import mrsurvey 
32
 from akvo.tressel import mrsurvey 
34
-#from akvo.lemma import pyLemmaCore  # Looking ahead! 
33
+
34
+from pyLemma import LemmaCore  
35
+from pyLemma import FDEM1D 
36
+from pyLemma import Merlin
35
 
37
 
36
 import pkg_resources  # part of setuptools
38
 import pkg_resources  # part of setuptools
37
 version = pkg_resources.require("Akvo")[0].version
39
 version = pkg_resources.require("Akvo")[0].version
205
         self.ui.dateEdit.dateChanged.connect( self.logSite )
207
         self.ui.dateEdit.dateChanged.connect( self.logSite )
206
         # this may call the yaml stuff too often... 
208
         # this may call the yaml stuff too often... 
207
         self.ui.txtComments.textChanged.connect( self.logSite )
209
         self.ui.txtComments.textChanged.connect( self.logSite )
210
+        
211
+        self.ui.plotLoops.pressed.connect( self.plotLoops2 )       
208
  
212
  
209
-        # invert
213
+        # Loops
210
         self.ui.addLoopButton.pressed.connect( self.loopAdd )
214
         self.ui.addLoopButton.pressed.connect( self.loopAdd )
215
+        self.loops = {}          
211
  
216
  
212
         # hide header info box 
217
         # hide header info box 
213
         #self.ui.headerFileBox.setVisible(False) 
218
         #self.ui.headerFileBox.setVisible(False) 
262
         self.ui.loopTableWidget.setDragEnabled(False)
267
         self.ui.loopTableWidget.setDragEnabled(False)
263
         #self.ui.loopTableWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
268
         #self.ui.loopTableWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
264
 
269
 
265
-        self.loops = {}          
266
-
270
+        self.ui.txRxTable.setColumnCount(4)
271
+        self.ui.txRxTable.setRowCount(0)
272
+        self.ui.txRxTable.setHorizontalHeaderLabels( ["Label", "Geom.","Turns","Tx/Rx"] )
273
+        
267
         ##########################################################################
274
         ##########################################################################
268
         # layer Table 
275
         # layer Table 
269
         self.ui.layerTableWidget.setRowCount(80)       
276
         self.ui.layerTableWidget.setRowCount(80)       
355
     
362
     
356
     def loopAdd(self):
363
     def loopAdd(self):
357
 
364
 
358
-        print(self.ui.loopLabel.text())
359
-        print(self.ui.loopGeom.currentText())
360
-        print(self.ui.loopType.currentText())
361
-           
362
-        print( "label len", len(self.ui.loopLabel.text()) ) 
365
+        #print(self.ui.loopLabel.text())
366
+        #print(self.ui.loopGeom.currentText())
367
+        #print(self.ui.loopType.currentText())
368
+        #print( "label len", len(self.ui.loopLabel.text()) ) 
363
         if len(self.ui.loopLabel.text().strip()) == 0: 
369
         if len(self.ui.loopLabel.text().strip()) == 0: 
364
             Error = QtWidgets.QMessageBox()
370
             Error = QtWidgets.QMessageBox()
365
             Error.setWindowTitle("Error!")
371
             Error.setWindowTitle("Error!")
374
                 dialog.exec_()
380
                 dialog.exec_()
375
                 dialog.show()
381
                 dialog.show()
376
                 if dialog.result():
382
                 if dialog.result():
377
-                    print("centre north", dialog.ui.centreNorth.value())
383
+                    cn = dialog.ui.centreNorth.value()
384
+                    ce = dialog.ui.centreEast.value()
385
+                    ht = dialog.ui.loopHeight.value()
386
+                    rad = dialog.ui.loopRadius.value()
387
+                    turns = dialog.ui.loopTurns.value()
388
+                    ns = dialog.ui.segments.value()
389
+                    #print("dip", dialog.ui.dip.value())
390
+                    #print("azimuth", dialog.ui.az.value())
391
+                    
392
+                    self.loops[self.ui.loopLabel.text()] = FDEM1D.PolygonalWireAntenna()
393
+                    self.loops[self.ui.loopLabel.text()].SetNumberOfPoints( dialog.ui.segments.value() + 1 )
394
+                    self.loops[self.ui.loopLabel.text()].SetNumberOfTurns( dialog.ui.loopTurns.value() )
395
+
396
+                    points = np.linspace(0, 2*np.pi, dialog.ui.segments.value()+1)
397
+                    for iseg, ipt in enumerate(points):
398
+                        #self.loops[self.ui.loopLabel.text()].SetPoint(iseg,( dialog.ui.centreNorth.value(),  dialog.ui.centreEast.value(), dialog.ui.loopHeight.value()))
399
+                        self.loops[self.ui.loopLabel.text()].SetPoint(iseg, ( cn+rad*np.sin(ipt), ce+rad*np.cos(ipt), ht ))
400
+                        #self.loops[self.ui.loopLabel.text()].SetPoint(1,(150,  50, -1e-3))
401
+                    
402
+                    self.loops[self.ui.loopLabel.text()].SetNumberOfFrequencies(1)
403
+                    #self.loops[self.ui.loopLabel.text].SetFrequency(0,2246) 
404
+                    self.loops[self.ui.loopLabel.text()].SetCurrent(1.)
405
+                   
406
+                    # update the table 
407
+                    self.ui.txRxTable.setRowCount( len(self.loops.keys()) )
408
+                    
409
+                    pCell = QtWidgets.QTableWidgetItem()
410
+                    pCell.setText( self.ui.loopLabel.text() ) 
411
+                    pCell.setFlags( QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled )
412
+                    self.ui.txRxTable.setItem( len(self.loops.keys())-1, 0, pCell)
413
+                    
414
+                    gCell = QtWidgets.QTableWidgetItem()
415
+                    gCell.setText( self.ui.loopGeom.currentText() ) 
416
+                    gCell.setFlags( QtCore.Qt.ItemIsEnabled )
417
+                    self.ui.txRxTable.setItem( len(self.loops.keys())-1, 1, gCell)
418
+                    
419
+                    tCell = QtWidgets.QTableWidgetItem()
420
+                    tCell.setText( str(dialog.ui.loopTurns.value()) ) 
421
+                    tCell.setFlags( QtCore.Qt.ItemIsEnabled )
422
+                    self.ui.txRxTable.setItem( len(self.loops.keys())-1, 2, tCell)
423
+                    
424
+                    txCell = QtWidgets.QTableWidgetItem()
425
+                    txCell.setText( str(self.ui.loopType.currentText()) ) 
426
+                    txCell.setFlags( QtCore.Qt.ItemIsEnabled )
427
+                    self.ui.txRxTable.setItem( len(self.loops.keys())-1, 3, txCell)
428
+
378
 
429
 
379
     def headerBoxShrink(self):
430
     def headerBoxShrink(self):
380
         #self.ui.headerFileBox.setVisible(False)
431
         #self.ui.headerFileBox.setVisible(False)
525
         self.plotLoops()
576
         self.plotLoops()
526
         self.ui.loopTableWidget.cellChanged.connect(self.loopCellChanged) 
577
         self.ui.loopTableWidget.cellChanged.connect(self.loopCellChanged) 
527
 
578
 
579
+    def plotLoops2(self):
580
+        self.ui.mplwidget.reAxH(1)
581
+
582
+        for loop in self.loops:
583
+            POINTS = self.loops[loop].GetPoints().T
584
+            self.ui.mplwidget.ax1.plot( POINTS[:,0], POINTS[:,1] )
585
+        
586
+        self.ui.mplwidget.ax1.set_aspect('equal') #, adjustable='box')
587
+        self.ui.mplwidget.draw()
528
 
588
 
529
     def plotLoops(self):
589
     def plotLoops(self):
530
-
531
-        print("Plotting loopz")        
532
        
590
        
533
         self.ui.mplwidget.reAxH(1)
591
         self.ui.mplwidget.reAxH(1)
534
         #self.ui.mplwidget.ax1.clear() 
592
         #self.ui.mplwidget.ax1.clear() 
1565
 from pkg_resources import resource_string
1623
 from pkg_resources import resource_string
1566
 import matplotlib.image as mpimg 
1624
 import matplotlib.image as mpimg 
1567
 import matplotlib.pyplot as plt 
1625
 import matplotlib.pyplot as plt 
1568
-
1626
+from akvo.gui.logo import plotLogo
1569
 
1627
 
1570
 def main():
1628
 def main():
1571
     
1629
     
1582
     
1640
     
1583
     aw = ApplicationWindow()
1641
     aw = ApplicationWindow()
1584
 
1642
 
1585
-    img=mpimg.imread(logo)
1643
+    #img=mpimg.imread(logo)
1586
     for ax in [ aw.ui.mplwidget ]: 
1644
     for ax in [ aw.ui.mplwidget ]: 
1587
         ax.fig.clear()
1645
         ax.fig.clear()
1588
-        subplot = ax.fig.add_subplot(111)
1589
-        #ax.fig.patch.set_facecolor( None )
1590
-        #ax.fig.patch.set_alpha( .0 )
1591
-        subplot.imshow(img) 
1646
+        subplot = ax.fig.add_subplot(211)
1647
+        # old logo plot
1648
+        ax.fig.patch.set_facecolor( None )
1649
+        ax.fig.patch.set_alpha( .0 )
1650
+        #subplot.imshow(img)
1651
+        #ax.fig.patch.set_visible(False)
1652
+        subplot.axis('off')
1653
+        
1654
+        plotLogo(subplot) 
1592
         subplot.xaxis.set_major_locator(plt.NullLocator()) 
1655
         subplot.xaxis.set_major_locator(plt.NullLocator()) 
1593
         subplot.yaxis.set_major_locator(plt.NullLocator()) 
1656
         subplot.yaxis.set_major_locator(plt.NullLocator()) 
1657
+        
1658
+        subplot2 = ax.fig.add_subplot(212)
1659
+        subplot2.text(0.5, 1.,'surface NMR workbench',
1660
+            horizontalalignment='center',
1661
+            verticalalignment='center',
1662
+            size=22,
1663
+            transform = subplot2.transAxes)
1664
+        subplot2.xaxis.set_major_locator(plt.NullLocator()) 
1665
+        subplot2.yaxis.set_major_locator(plt.NullLocator()) 
1666
+        subplot2.axis('off')
1667
+        
1594
         ax.draw()
1668
         ax.draw()
1595
 
1669
 
1596
     if ssplash:
1670
     if ssplash:

+ 46
- 0
akvo/gui/logo.py View File

1
+def plotLogo(ax):
2
+    #import matplotlib.pyplot as ax 
3
+    import numpy as np 
4
+
5
+    x  = np.arange(-np.pi/2, 7.0*np.pi, .01)
6
+    y  = np.sin(x)
7
+    y2 = np.cos(x)
8
+
9
+    y3 = np.sin(.5*x)
10
+    y4 = np.cos(.5*x)
11
+
12
+    ax.plot(x,  y, linewidth=1, color='lightgrey')
13
+    ax.plot(x, -y, linewidth=1, color='lightgrey')
14
+    ax.plot(x, y2, linewidth=1, color='lightgrey')
15
+    ax.plot(x,-y2, linewidth=1, color='lightgrey')
16
+
17
+    ax.plot(x,  y3, linewidth=1, color='lightgrey')
18
+    ax.plot(x, -y3, linewidth=1, color='lightgrey')
19
+    ax.plot(x,  y4, linewidth=1, color='lightgrey')
20
+    ax.plot(x, -y4, linewidth=1, color='lightgrey')
21
+
22
+    a = np.arange(10,615)
23
+    ax.plot(x[a],y[a], linewidth=3, color='black')
24
+    ax.fill_between(x[a],y[a], y2=-1, where=y[a]>=-1, interpolate=True, linewidth=0, alpha=.95, color='maroon')
25
+
26
+    k  = np.arange(615, 785)
27
+    k2 = np.arange(785, 1105)
28
+    ax.plot(x[k],    y[k ], linewidth=3, color='black')
29
+    ax.plot(x[k],   -y[k ], linewidth=3, color='black')
30
+    ax.plot(x[k2],  y3[k2], linewidth=3, color='black')
31
+    ax.plot(x[k2], -y3[k2], linewidth=3, color='black')
32
+
33
+    #v = np.arange(1265,1865) # y 
34
+    v = np.arange(1105, 1720)
35
+    ax.plot(x[v], -y2[v], linewidth=3, color='black')
36
+
37
+    o = np.arange(1728,2357)
38
+    ax.plot(x[o],  y4[o], linewidth=3, color='black')
39
+    ax.plot(x[o], -y4[o], linewidth=3, color='black')
40
+    ax.fill_between(x[o],  y4[o], y2=-y4[o],  where=y4[o]<=1, interpolate=True, linewidth=0, alpha=.95, color='maroon')
41
+#ax.fill_between(x[o], -y4[o], y2=0, where=-y4[o]<=1, interpolate=True, linewidth=0, alpha=.5, color='black')
42
+#ax.plot(x[o], y2[o], linewidth=3, color='black')
43
+#ax.plot(x[o],-y2[o], linewidth=3, color='black')
44
+#ax.fill_between(x[a], y[a], y2=-1, where=y[a]>=-1, interpolate=True, linewidth=0, alpha=.5, color='black')
45
+
46
+#ax.show()

+ 18
- 32
akvo/gui/main.ui View File

1653
           </widget>
1653
           </widget>
1654
           <widget class="QWidget" name="NCTab">
1654
           <widget class="QWidget" name="NCTab">
1655
            <attribute name="title">
1655
            <attribute name="title">
1656
-            <string>Noise cancelation</string>
1656
+            <string>Noise removal</string>
1657
            </attribute>
1657
            </attribute>
1658
            <attribute name="toolTip">
1658
            <attribute name="toolTip">
1659
             <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This tab contains noise cancellation algorithms. The frequency-domain algorithm is often less effective than the time domain approach. We often discourage using the frequency domain algorithm. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
1659
             <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This tab contains noise cancellation algorithms. The frequency-domain algorithm is often less effective than the time domain approach. We often discourage using the frequency domain algorithm. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
3527
               <property name="title">
3527
               <property name="title">
3528
                <string>Surface Loops</string>
3528
                <string>Surface Loops</string>
3529
               </property>
3529
               </property>
3530
-              <layout class="QGridLayout" name="gridLayout_17">
3531
-               <item row="1" column="0">
3532
-                <widget class="QLabel" name="label_58">
3530
+              <layout class="QGridLayout" name="gridLayout_2">
3531
+               <item row="2" column="2">
3532
+                <widget class="QPushButton" name="removeLoopButton">
3533
                  <property name="text">
3533
                  <property name="text">
3534
-                  <string>Label</string>
3534
+                  <string>Remove</string>
3535
                  </property>
3535
                  </property>
3536
                 </widget>
3536
                 </widget>
3537
                </item>
3537
                </item>
3538
-               <item row="0" column="5">
3538
+               <item row="0" column="3">
3539
                 <widget class="QComboBox" name="loopType">
3539
                 <widget class="QComboBox" name="loopType">
3540
                  <item>
3540
                  <item>
3541
                   <property name="text">
3541
                   <property name="text">
3559
                  </item>
3559
                  </item>
3560
                 </widget>
3560
                 </widget>
3561
                </item>
3561
                </item>
3562
-               <item row="1" column="2">
3563
-                <widget class="QLineEdit" name="loopLabel"/>
3564
-               </item>
3565
                <item row="0" column="0">
3562
                <item row="0" column="0">
3566
-                <widget class="QLabel" name="label_54">
3563
+                <widget class="QPushButton" name="addLoopButton">
3567
                  <property name="text">
3564
                  <property name="text">
3568
-                  <string>Geometry</string>
3565
+                  <string>Add </string>
3569
                  </property>
3566
                  </property>
3570
                 </widget>
3567
                 </widget>
3571
                </item>
3568
                </item>
3598
                  </item>
3595
                  </item>
3599
                 </widget>
3596
                 </widget>
3600
                </item>
3597
                </item>
3601
-               <item row="2" column="5">
3598
+               <item row="1" column="0" colspan="4">
3599
+                <widget class="QTableWidget" name="txRxTable"/>
3600
+               </item>
3601
+               <item row="2" column="3">
3602
                 <widget class="QPushButton" name="plotLoops">
3602
                 <widget class="QPushButton" name="plotLoops">
3603
                  <property name="text">
3603
                  <property name="text">
3604
                   <string>Plot loops</string>
3604
                   <string>Plot loops</string>
3605
                  </property>
3605
                  </property>
3606
                 </widget>
3606
                 </widget>
3607
                </item>
3607
                </item>
3608
-               <item row="1" column="5">
3609
-                <widget class="QPushButton" name="removeLoopButton">
3610
-                 <property name="text">
3611
-                  <string>Remove</string>
3612
-                 </property>
3613
-                </widget>
3614
-               </item>
3615
-               <item row="1" column="4">
3616
-                <widget class="QPushButton" name="addLoopButton">
3617
-                 <property name="text">
3618
-                  <string>Add </string>
3619
-                 </property>
3620
-                </widget>
3621
-               </item>
3622
-               <item row="0" column="4">
3623
-                <widget class="QLabel" name="label_60">
3624
-                 <property name="text">
3625
-                  <string>Type</string>
3608
+               <item row="0" column="1">
3609
+                <widget class="QLineEdit" name="loopLabel">
3610
+                 <property name="placeholderText">
3611
+                  <string>Enter loop name</string>
3626
                  </property>
3612
                  </property>
3627
                 </widget>
3613
                 </widget>
3628
                </item>
3614
                </item>
3875
               <rect>
3861
               <rect>
3876
                <x>0</x>
3862
                <x>0</x>
3877
                <y>0</y>
3863
                <y>0</y>
3878
-               <width>100</width>
3879
-               <height>30</height>
3864
+               <width>96</width>
3865
+               <height>26</height>
3880
               </rect>
3866
               </rect>
3881
              </property>
3867
              </property>
3882
              <attribute name="label">
3868
              <attribute name="label">

+ 2
- 2
setup.py View File

50
           'pandas',
50
           'pandas',
51
           'pyqt-distutils',
51
           'pyqt-distutils',
52
           'cmocean',
52
           'cmocean',
53
-          'pyLemma=0.0.9'
53
+          'pyLemma >= 0.0.9'
54
       ],
54
       ],
55
-      packages=['akvo', 'akvo.tressel', 'akvo.gui','akvo.lemma'],
55
+      packages=['akvo', 'akvo.tressel', 'akvo.gui'],
56
       license=['GPL 4.0'],
56
       license=['GPL 4.0'],
57
       entry_points = {
57
       entry_points = {
58
               'console_scripts': [
58
               'console_scripts': [

Loading…
Cancel
Save