Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F63019402
functions.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
Fri, May 17, 05:01
Size
2 KB
Mime Type
text/x-python
Expires
Sun, May 19, 05:01 (2 d)
Engine
blob
Format
Raw Data
Handle
17714213
Attached To
rCHIMERAPYTHON Chimera scripts in python
functions.py
View Options
import
scipy
from
scipy
import
signal
import
numpy
as
np
import
itertools
def
LowPass
(
data
,
ChimeraSettings
,
lowPass
):
"""
Function used to filter data with a digital Bessel filter of the 4th order.
Specially useful for high bandwidth recordings.
Parameters
----------
data :
Data to be filtered.
samplerate : float
Sampling frequency of the data aquisition.
lowPass : float
Cutoff frequency of the filter.
Returns
-------
output: a list of the currents filtered
newsamplerate : float of new sampling frequency corresponding to 2*Cutoff frequency (Nyquist-Shannon sampling theorem).
"""
samplerate
=
ChimeraSettings
.
ADCSAMPLERATE
Wn
=
round
(
2
*
lowPass
/
samplerate
,
4
)
# [0,1] nyquist frequency
b
,
a
=
scipy
.
signal
.
bessel
(
4
,
Wn
,
btype
=
'low'
,
analog
=
False
)
# 4-th order digital filter
z
,
p
,
k
=
signal
.
tf2zpk
(
b
,
a
)
eps
=
1e-9
r
=
np
.
max
(
np
.
abs
(
p
))
approx_impulse_len
=
int
(
np
.
ceil
(
np
.
log
(
eps
)
/
np
.
log
(
r
)))
Filt_sig
=
(
signal
.
filtfilt
(
b
,
a
,
data
,
method
=
'gust'
,
irlen
=
approx_impulse_len
))
ds_factor
=
np
.
ceil
(
samplerate
/
(
2
*
lowPass
))
output
=
{}
output
=
scipy
.
signal
.
resample
(
Filt_sig
,
int
(
len
(
data
)
/
ds_factor
))
output
=
output
[
100
:
len
(
output
)
-
100
]
newsamplerate
=
samplerate
/
ds_factor
return
output
,
newsamplerate
def
LowPassFast
(
data
,
ChimeraSettings
,
displaysubsample
,
lowPass
):
downsampled
=
signal
.
resample
(
data
,
int
(
1
/
displaysubsample
*
len
(
data
)))
effsamplerate
=
(
ChimeraSettings
.
ADCSAMPLERATE
/
displaysubsample
)
Wn
=
round
(
2
*
lowPass
/
effsamplerate
,
4
)
b
,
a
=
scipy
.
signal
.
bessel
(
4
,
Wn
,
btype
=
'low'
,
analog
=
False
)
z
,
p
,
k
=
signal
.
tf2zpk
(
b
,
a
)
eps
=
1e-9
r
=
np
.
max
(
np
.
abs
(
p
))
approx_impulse_len
=
int
(
np
.
ceil
(
np
.
log
(
eps
)
/
np
.
log
(
r
)))
output
=
signal
.
filtfilt
(
b
,
a
,
downsampled
,
method
=
'gust'
,
irlen
=
approx_impulse_len
)
output
=
output
[
100
:
len
(
output
)
-
100
]
return
output
,
effsamplerate
def
EventDetection
(
inputtrace
,
Threshold
=
5
,
DwellTime
=
1
):
meanvalue
=
np
.
mean
(
inputtrace
)
stdeviation
=
np
.
std
(
inputtrace
)
limitdown
=
meanvalue
-
Threshold
*
stdeviation
conditiondown
=
inputtrace
<
limitdown
alldrops
=
[
sum
(
1
for
_
in
group
)
for
key
,
group
in
itertools
.
groupby
(
conditiondown
)
if
key
]
downdrops
=
[
item
for
item
in
alldrops
if
item
>
DwellTime
]
ndown
=
len
(
downdrops
)
if
ndown
==
0
:
ndown
=
False
return
ndown
def
MakeAllVoltagesForIV
(
stepV
,
maxV
):
NumberOfElements
=
int
((
2
*
maxV
)
/
stepV
+
2
)
AllVoltages
=
np
.
zeros
(
NumberOfElements
)
Counter
=
1
for
i
in
range
(
1
,
int
(
NumberOfElements
)
-
1
):
if
divmod
(
i
,
2
)[
1
]:
AllVoltages
[
i
]
=
-
stepV
*
Counter
else
:
AllVoltages
[
i
]
=
stepV
*
Counter
Counter
+=
1
print
(
'IV Voltages: {}'
.
format
(
AllVoltages
))
return
AllVoltages
Event Timeline
Log In to Comment