Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F61388140
NanoporeClasses.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, May 6, 08:46
Size
4 KB
Mime Type
text/x-python
Expires
Wed, May 8, 08:46 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
17505087
Attached To
rNPTOOLS Nanopore Tools
NanoporeClasses.py
View Options
import
numpy
as
np
from
pprint
import
pprint
import
shelve
import
os
import
math
from
Plotting.EventPlots
import
PlotCurrentTrace
,
PlotCurrentTraceBaseline
import
matplotlib.pyplot
as
plt
from
matplotlib.ticker
import
EngFormatter
Amp
=
EngFormatter
(
unit
=
'A'
,
places
=
2
)
Time
=
EngFormatter
(
unit
=
's'
,
places
=
2
)
Volt
=
EngFormatter
(
unit
=
'V'
,
places
=
2
)
Cond
=
EngFormatter
(
unit
=
'S'
,
places
=
2
)
class
TranslocationEvent
:
def
__init__
(
self
,
filename
,
type
=
'roughEvent'
):
self
.
filename
=
filename
self
.
type
=
type
def
SetEvent
(
self
,
eventTrace
,
beginEvent
,
baseline
,
samplerate
):
self
.
eventTrace
=
eventTrace
self
.
baseline
=
baseline
self
.
samplerate
=
samplerate
self
.
beginEvent
=
beginEvent
self
.
endEvent
=
beginEvent
+
len
(
eventTrace
)
self
.
meanTrace
=
np
.
mean
(
eventTrace
)
self
.
minTrace
=
np
.
min
(
eventTrace
)
self
.
eventLength
=
len
(
eventTrace
)
/
samplerate
if
self
.
type
==
'Real'
:
self
.
currentDrop
=
baseline
-
self
.
meanTrace
else
:
self
.
currentDrop
=
baseline
-
self
.
minTrace
def
SetCoefficients
(
self
,
coefficients
,
voltage
):
self
.
coefficients
=
coefficients
self
.
voltage
=
voltage
def
SetBaselineTrace
(
self
,
before
,
after
):
self
.
before
=
before
self
.
after
=
after
def
SetCUSUMVariables
(
self
,
segmentedSignal
,
kd
,
changeTimes
):
self
.
changeTimes
=
changeTimes
self
.
kd
=
kd
self
.
segmentedSignal
=
segmentedSignal
self
.
changeTimes
=
changeTimes
if
len
(
changeTimes
)
>
1
:
self
.
beginEventCUSUM
=
changeTimes
[
0
]
self
.
currentDropCUSUM
=
max
(
segmentedSignal
)
-
min
(
segmentedSignal
)
if
len
(
changeTimes
)
>
2
:
self
.
endEventCUSUM
=
changeTimes
[
-
1
]
self
.
eventLengthCUSUM
=
(
changeTimes
[
-
1
]
-
changeTimes
[
0
])
/
self
.
samplerate
if
hasattr
(
self
,
'before'
)
and
hasattr
(
self
,
'after'
)
and
hasattr
(
self
,
'eventTrace'
):
self
.
mcbefore
=
np
.
mean
(
self
.
before
)
*
np
.
ones
(
len
(
self
.
before
))
self
.
mcafter
=
np
.
mean
(
self
.
after
)
*
np
.
ones
(
len
(
self
.
after
))
self
.
mctrace
=
np
.
array
([])
for
ii
in
range
(
1
,
len
(
changeTimes
)):
self
.
mctrace
=
np
.
append
(
self
.
mctrace
,
np
.
mean
(
self
.
eventTrace
[
changeTimes
[
ii
-
1
]
-
changeTimes
[
0
]:
changeTimes
[
ii
]
-
changeTimes
[
0
]])
*
np
.
ones
(
changeTimes
[
ii
]
-
changeTimes
[
ii
-
1
]))
class
AllEvents
:
def
__init__
(
self
):
self
.
events
=
[]
def
AddEvent
(
self
,
translocationEvent
):
if
isinstance
(
translocationEvent
,
AllEvents
):
self
.
events
.
extend
(
translocationEvent
.
events
)
elif
isinstance
(
translocationEvent
,
list
):
self
.
events
.
extend
(
translocationEvent
)
else
:
self
.
events
.
append
(
translocationEvent
)
def
GetAllLengths
(
self
):
Lengths
=
[
event
.
lengthEvents
for
event
in
self
.
events
]
return
Lengths
def
GetAllIdrops
(
self
):
currentDrops
=
[
event
.
currentDrop
for
event
in
self
.
events
]
return
currentDrops
def
GetAllIdropsNorm
(
self
):
currentDrops
=
[
event
.
currentDrop
/
event
.
baseline
for
event
in
self
.
events
]
return
currentDrops
def
SetFolder
(
self
,
loadname
):
self
.
savefile
=
loadname
def
GetEventsMinCondition
(
self
,
minCurrent
=-
math
.
inf
,
maxCurrent
=
math
.
inf
,
minLength
=
0
,
maxLength
=
math
.
inf
):
minCurrent
=
-
math
.
inf
if
not
minCurrent
else
minCurrent
maxCurrent
=
math
.
inf
if
not
maxCurrent
else
maxCurrent
minLength
=
0
if
not
minLength
else
minLength
maxLength
=
math
.
inf
if
not
maxLength
else
maxLength
newEvents
=
AllEvents
()
for
event
in
self
.
events
:
if
minCurrent
<
event
.
currentDrop
<
maxCurrent
and
minLength
<
event
.
lengthEvents
<
maxLength
:
newEvents
.
AddEvent
(
event
)
newEvents
.
SetFolder
(
self
.
savefile
)
print
(
'selected {} events from {}'
.
format
(
len
(
newEvents
.
events
),
len
(
self
.
events
)))
return
newEvents
def
PlotAllEvents
(
self
):
for
event
in
self
.
events
:
event
.
PlotEvent
()
def
PlotIEvent
(
self
,
i
):
event
=
self
.
events
[
i
]
event
.
Plotevent
()
def
PlotHistogram
(
self
):
appendTrace
=
[]
for
event
in
self
.
events
:
appendTrace
.
extend
(
event
.
eventTrace
)
fig
,
ax
=
plt
.
subplots
(
figsize
=
(
6
,
10
))
weights
=
np
.
ones_like
(
appendTrace
)
/
float
(
len
(
appendTrace
))
ax
.
hist
(
appendTrace
,
weights
=
weights
,
bins
=
40
,
orientation
=
'horizontal'
)
ax
.
yaxis
.
set_major_formatter
(
Amp
)
savefile
=
self
.
savefile
# Check if directory exists
directory
=
os
.
path
.
dirname
(
savefile
)
fig
.
savefig
(
directory
+
os
.
sep
+
'Histogram.pdf'
,
transparent
=
True
)
plt
.
show
()
Event Timeline
Log In to Comment