Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Jan Zelenka
prasopes
Commits
af22bd3f
Commit
af22bd3f
authored
Nov 09, 2019
by
Yan
Browse files
Speedup of the GUI
* annotation routine optimized * reduced constrained_layout calls
parent
25860ed2
Changes
2
Hide whitespace changes
Inline
Side-by-side
prasopes/__main__.py
View file @
af22bd3f
...
@@ -377,6 +377,8 @@ def main():
...
@@ -377,6 +377,8 @@ def main():
main_window
.
setAcceptDrops
(
True
)
main_window
.
setAcceptDrops
(
True
)
main_window
.
keyPressEvent
=
lambda
event
:
key_pressed
(
main_window
.
keyPressEvent
=
lambda
event
:
key_pressed
(
event
,
augCanvas
,
config
)
event
,
augCanvas
,
config
)
main_window
.
resizeEvent
=
lambda
event
:
augCanvas
.
constrained_draw
()
update
.
signal
.
connect
(
lambda
:
augCanvas
.
constrained_draw
())
main_window
.
addToolBar
(
QtCore
.
Qt
.
TopToolBarArea
,
toolBar
)
main_window
.
addToolBar
(
QtCore
.
Qt
.
TopToolBarArea
,
toolBar
)
main_window
.
addDockWidget
(
QtCore
.
Qt
.
LeftDockWidgetArea
,
treedock
)
main_window
.
addDockWidget
(
QtCore
.
Qt
.
LeftDockWidgetArea
,
treedock
)
...
...
prasopes/graphtools.py
View file @
af22bd3f
...
@@ -54,6 +54,11 @@ class AugFigureCanvas(FigureCanvas):
...
@@ -54,6 +54,11 @@ class AugFigureCanvas(FigureCanvas):
self
.
chromplot
,
lambda
x_min
,
x_max
:
pick_times
(
self
.
chromplot
,
lambda
x_min
,
x_max
:
pick_times
(
x_min
,
x_max
,
self
),
'horizontal'
,
useblit
=
True
,
x_min
,
x_max
,
self
),
'horizontal'
,
useblit
=
True
,
rectprops
=
dict
(
alpha
=
0.15
,
facecolor
=
'purple'
),
button
=
3
)
rectprops
=
dict
(
alpha
=
0.15
,
facecolor
=
'purple'
),
button
=
3
)
self
.
figure
.
set_constrained_layout
(
False
)
def
constrained_draw
(
self
):
self
.
figure
.
execute_constrained_layout
()
self
.
draw
()
class
AugSpanSelector
(
SpanSelector
):
class
AugSpanSelector
(
SpanSelector
):
...
@@ -118,6 +123,16 @@ class AugSpanSelector(SpanSelector):
...
@@ -118,6 +123,16 @@ class AugSpanSelector(SpanSelector):
ann_spec
(
self
.
ax
,
self
.
data
)
ann_spec
(
self
.
ax
,
self
.
data
)
class
FixedScalarFormatter
(
matplotlib
.
ticker
.
ScalarFormatter
):
def
__init__
(
self
):
super
().
__init__
()
self
.
_powerlimits
=
(
0
,
0
)
def
_set_format
(
self
):
"""_set_format override"""
self
.
format
=
"%.2f"
def
zoom_factory
(
axis
,
base_scale
,
plot_data
=
None
):
def
zoom_factory
(
axis
,
base_scale
,
plot_data
=
None
):
"""returns zooming functionality to axis"""
"""returns zooming functionality to axis"""
def
zoom_fun
(
event
,
pd
,
ax
,
scale
):
def
zoom_fun
(
event
,
pd
,
ax
,
scale
):
...
@@ -187,7 +202,6 @@ def pan_factory(axis, plot=None):
...
@@ -187,7 +202,6 @@ def pan_factory(axis, plot=None):
action
,
id_drag
,
id_release
,
pd
,
ax
))
action
,
id_drag
,
id_release
,
pd
,
ax
))
def
drag_fun
(
event
,
ax
):
def
drag_fun
(
event
,
ax
):
ax
.
figure
.
set_constrained_layout
(
False
)
ax
.
drag_pan
(
1
,
'x'
,
event
.
x
,
event
.
y
)
ax
.
drag_pan
(
1
,
'x'
,
event
.
x
,
event
.
y
)
ax
.
figure
.
canvas
.
draw
()
ax
.
figure
.
canvas
.
draw
()
...
@@ -198,7 +212,6 @@ def pan_factory(axis, plot=None):
...
@@ -198,7 +212,6 @@ def pan_factory(axis, plot=None):
if
type
(
pd
)
is
dict
and
"annotation"
in
pd
:
if
type
(
pd
)
is
dict
and
"annotation"
in
pd
:
ann_spec
(
ax
,
pd
)
ann_spec
(
ax
,
pd
)
ax
.
figure
.
canvas
.
draw
()
ax
.
figure
.
canvas
.
draw
()
ax
.
figure
.
set_constrained_layout
(
True
)
fig
=
axis
.
get_figure
()
fig
=
axis
.
get_figure
()
fig
.
canvas
.
mpl_connect
(
'button_press_event'
,
fig
.
canvas
.
mpl_connect
(
'button_press_event'
,
...
@@ -341,20 +354,18 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
...
@@ -341,20 +354,18 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
"""annotate spectrum
"""annotate spectrum
First define the array, in which the annotation should occur.
First define the array, in which the annotation should occur.
Then remove values which are invalid as local maximas. Then select
Then remove values which are invalid as local maximas. Local maximas are then
local maximas from the array by forcycling. Local maximas are then
reduced to a representation of the important ones by the sub_peaks
reduced to a representation of the important ones by the sub_peaks
function"""
function"""
def
sub_peaks
(
peakz
,
hardpeaks
,
xrange
,
yrange
,
coef_x
=
10
,
coef_y
=
10
):
def
sub_peaks
(
peakz
,
hardpeaks
,
xrange
,
yrange
,
coef_x
=
10
,
coef_y
=
10
):
"""Returns reasonable subselection of local maximas"""
"""Returns reasonable subselection of local maximas"""
hardxy
=
np
.
array
(([
i
.
xy
for
i
in
hardpeaks
]),
dtype
=
[
hardxy
=
np
.
array
([
i
.
xy
for
i
in
hardpeaks
],
dtype
=
[
(
'x'
,
float
),
(
'y'
,
float
)])
(
'x'
,
np
.
float32
),
(
'y'
,
np
.
float32
)])
sort_peaks
=
np
.
flipud
(
np
.
sort
(
np
.
array
(
peakz
,
dtype
=
[
sort_peaks
=
np
.
flipud
(
np
.
sort
(
np
.
array
(
peakz
))).
copy
()
(
'x'
,
float
),
(
'y'
,
float
)]),
order
=
'y'
)).
copy
()
red_x
=
xrange
/
coef_x
red_x
=
xrange
/
coef_x
red_y
=
yrange
/
coef_y
red_y
=
yrange
/
coef_y
big_peaks
=
np
.
array
([],
dtype
=
[(
'x'
,
float
),
(
'y'
,
float
)])
big_peaks
=
np
.
array
([],
dtype
=
[(
'x'
,
np
.
float
32
),
(
'y'
,
np
.
float
32
)])
for
peak
in
np
.
nditer
(
sort_peaks
,
flags
=
[
"zerosize_ok"
]):
for
peak
in
np
.
nditer
(
sort_peaks
,
flags
=
[
"zerosize_ok"
]):
if
not
(
np
.
any
((
abs
(
peak
[
'y'
]
-
big_peaks
[
'y'
])
<
red_y
)
if
not
(
np
.
any
((
abs
(
peak
[
'y'
]
-
big_peaks
[
'y'
])
<
red_y
)
&
(
abs
(
peak
[
'x'
]
-
big_peaks
[
'x'
])
<
red_x
))
or
&
(
abs
(
peak
[
'x'
]
-
big_peaks
[
'x'
])
<
red_x
))
or
...
@@ -366,14 +377,19 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
...
@@ -366,14 +377,19 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
peaks
=
[]
peaks
=
[]
for
line
in
ms_spec
.
lines
:
for
line
in
ms_spec
.
lines
:
xdata
,
ydata
=
line
.
get_data
()
xdata
,
ydata
=
line
.
get_data
()
argvis
=
dt
.
argsubselect
(
xdata
,
*
ms_spec
.
get_xlim
())
# Thanks to:
# remove tails which cannot be evaluated as maximas
# https://gist.github.com/ben741/d8c70b608d96d9f7ed231086b237ba6b
argvis
=
argvis
[
np
.
where
((
argvis
!=
0
)
minlim
=
ms_spec
.
get_ylim
()[
1
]
*
ann_limit
&
(
argvis
!=
(
len
(
xdata
)
-
1
)))]
lims
=
[
*
ms_spec
.
get_xlim
(),
*
ms_spec
.
get_ylim
()]
lim
=
ms_spec
.
get_ylim
()[
1
]
*
ann_limit
maxargs
=
np
.
where
((
xdata
[
1
:
-
1
]
>
lims
[
0
])
&
(
xdata
[
1
:
-
1
]
<
lims
[
1
])
&
for
i
in
argvis
:
(
ydata
[
1
:
-
1
]
>
minlim
)
&
(
ydata
[
1
:
-
1
]
<
lims
[
3
])
&
if
ydata
[
i
]
>
lim
and
ydata
[
i
]
>
max
(
ydata
[
i
-
1
],
ydata
[
i
+
1
]):
(
ydata
[
1
:
-
1
]
>
ydata
[
0
:
-
2
])
&
peaks
.
append
((
xdata
[
i
],
ydata
[
i
]))
(
ydata
[
1
:
-
1
]
>
ydata
[
2
:]))[
0
]
+
1
peakline
=
np
.
empty
([
len
(
maxargs
)],
dtype
=
[(
'x'
,
np
.
float32
),
(
'y'
,
np
.
float32
)])
peakline
[
'x'
],
peakline
[
'y'
]
=
xdata
[
maxargs
],
ydata
[
maxargs
]
peaks
.
append
(
peakline
)
peaks
=
np
.
concatenate
(
peaks
)
s_peaks
=
sub_peaks
(
peaks
,
msdata
[
'texts'
],
s_peaks
=
sub_peaks
(
peaks
,
msdata
[
'texts'
],
np
.
diff
(
ms_spec
.
get_xlim
()),
np
.
diff
(
ms_spec
.
get_xlim
()),
np
.
diff
(
ms_spec
.
get_ylim
()))
np
.
diff
(
ms_spec
.
get_ylim
()))
...
@@ -384,11 +400,10 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
...
@@ -384,11 +400,10 @@ def ann_spec(ms_spec, msdata, ann_limit=0.01):
# remove them from tracking
# remove them from tracking
msdata
[
'annotation'
].
clear
()
msdata
[
'annotation'
].
clear
()
dispints
=
cf
.
settings
().
value
(
"view/intensities"
,
type
=
bool
)
for
peak
in
s_peaks
:
for
peak
in
s_peaks
:
if
cf
.
settings
().
value
(
"view/intensities"
,
type
=
bool
):
annotation
=
'{0:.2f}
\n
{1: .2e}'
.
format
(
peak
[
0
],
peak
[
1
])
\
annotation
=
'{0:.2f}
\n
{1: .2e}'
.
format
(
peak
[
'x'
],
peak
[
'y'
])
if
dispints
else
'{0:.2f}'
.
format
(
peak
[
0
])
else
:
annotation
=
'{0:.2f}'
.
format
(
peak
[
'x'
])
peaktext
=
ms_spec
.
annotate
(
peaktext
=
ms_spec
.
annotate
(
annotation
,
xy
=
(
peak
[
'x'
],
peak
[
'y'
]),
textcoords
=
'data'
,
annotation
,
xy
=
(
peak
[
'x'
],
peak
[
'y'
]),
textcoords
=
'data'
,
picker
=
True
,
in_layout
=
False
)
picker
=
True
,
in_layout
=
False
)
...
@@ -404,7 +419,7 @@ def pop_plot(xdata, ydata, plot, plot_data, colornum=0, legend=None):
...
@@ -404,7 +419,7 @@ def pop_plot(xdata, ydata, plot, plot_data, colornum=0, legend=None):
plot
.
set_ylabel
(
plot_data
[
'ylabel'
])
plot
.
set_ylabel
(
plot_data
[
'ylabel'
])
plot
.
set_ylim
(
plot
.
get_ylim
()[
1
]
*
-
0.01
,
plot
.
set_ylim
(
plot
.
get_ylim
()[
1
]
*
-
0.01
,
plot
.
get_ylim
()[
1
]
*
1.1
)
plot
.
get_ylim
()[
1
]
*
1.1
)
plot
.
ticklabel_format
(
scilimits
=
(
0
,
0
),
axis
=
'y'
)
plot
.
yaxis
.
set_major_formatter
(
FixedScalarFormatter
()
)
# put hardcoded annotation if there is some
# put hardcoded annotation if there is some
if
"texts"
in
plot_data
and
not
any
(
if
"texts"
in
plot_data
and
not
any
(
data
in
plot
.
get_children
()
for
data
in
plot_data
[
'texts'
]):
data
in
plot
.
get_children
()
for
data
in
plot_data
[
'texts'
]):
...
@@ -506,7 +521,7 @@ def populate(augCanvas):
...
@@ -506,7 +521,7 @@ def populate(augCanvas):
ax
.
get_legend
().
set_in_layout
(
False
)
ax
.
get_legend
().
set_in_layout
(
False
)
ax
.
autoscale
(
True
)
ax
.
autoscale
(
True
)
ax
.
set_ylim
(
ax
.
get_ylim
()[
1
]
*-
0.01
,
ax
.
get_ylim
()[
1
]
*
1.1
)
ax
.
set_ylim
(
ax
.
get_ylim
()[
1
]
*-
0.01
,
ax
.
get_ylim
()[
1
]
*
1.1
)
augCanvas
.
draw
()
augCanvas
.
constrained_
draw
()
return
return
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment