bluebrain / efel Goto Github PK
View Code? Open in Web Editor NEWElectrophys Feature Extraction Library
Home Page: http://efel.readthedocs.io
License: Other
Electrophys Feature Extraction Library
Home Page: http://efel.readthedocs.io
License: Other
eFEL fails to import regardless of whether it is installed via pip, or if it is git cloned and then
$ipython setup.py install
ImportError Traceback (most recent call last)
in ()
----> 1 import efel
/Users/kappa/git/DEAP_applied/efel/init.py in ()
21
22 from efel.settings import Settings
---> 23 from efel.api import *
24 import efel.io
25
/Users/kappa/git/DEAP_applied/efel/api.py in ()
32
33 import efel
---> 34 import efel.cppcore as cppcore
35
36 _settings = efel.Settings()
ImportError: No module named cppcore
On my Arch system with gcc (GCC) 6.2.1 20160830
, running
pip install efel
fails. Log is below (same error when installing from git), any suggestions?
Collecting efel
Using cached efel-2.10.115.tar.gz
Requirement already satisfied: numpy>=1.6 in ./.conda/envs/bluebrain/lib/python2.7/site-packages (from efel)
Requirement already satisfied: six in ./.conda/envs/bluebrain/lib/python2.7/site-packages (from efel)
Building wheels for collected packages: efel
Running setup.py bdist_wheel for efel: started
Running setup.py bdist_wheel for efel: finished with status 'error'
Complete output from command /home/denis/.conda/envs/bluebrain/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-Xh83bq/efel/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp2S2pJjpip-wheel- --python-tag cp27:
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/efel
copying efel/_version.py -> build/lib.linux-x86_64-2.7/efel
copying efel/settings.py -> build/lib.linux-x86_64-2.7/efel
copying efel/io.py -> build/lib.linux-x86_64-2.7/efel
copying efel/api.py -> build/lib.linux-x86_64-2.7/efel
copying efel/__init__.py -> build/lib.linux-x86_64-2.7/efel
copying efel/DependencyV5.txt -> build/lib.linux-x86_64-2.7/efel
creating build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/Utils.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV1.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV2.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV3.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV4.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV5.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/FillFptrTable.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/DependencyTree.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/efel.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/cfeature.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/Global.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/mapoperations.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/types.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/eFELLogger.h -> build/lib.linux-x86_64-2.7/efel/cppcore
UPDATING build/lib.linux-x86_64-2.7/efel/_version.py
set build/lib.linux-x86_64-2.7/efel/_version.py to '2.10.115'
running build_ext
building 'efel.cppcore' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/efel
creating build/temp.linux-x86_64-2.7/efel/cppcore
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/cppcore.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/cppcore.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
efel/cppcore/cppcore.cpp: In function ‘PyObject* getDistance_wrapper(PyObject*, PyObject*, PyObject*)’:
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
static char *kwlist[] = {"feature_name", "mean", "std", "trace_check", NULL};
^
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/Utils.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/Utils.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV1.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV1.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
efel/cppcore/LibV1.cpp: In function ‘int __maxmin_voltage(const std::vector<double>&, const std::vector<double>&, double, double, std::vector<double>&, std::vector<double>&)’:
efel/cppcore/LibV1.cpp:1541:59: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
t[stimstartindex] < stimStart && stimstartindex <= t.size();
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1544:55: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
t[stimendindex] < stimEnd && stimstartindex <= t.size();
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1547:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (stimstartindex >= t.size()) {
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1552:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (stimendindex >= t.size()) {
~~~~~~~~~~~~~^~~~~~~~~~~
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV2.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV2.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV3.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV3.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV4.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV4.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV5.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV5.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/FillFptrTable.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/FillFptrTable.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/DependencyTree.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/DependencyTree.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/efel.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/efel.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/cfeature.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/cfeature.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/mapoperations.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/mapoperations.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
-std=c++98 -pthread -shared -L/home/denis/.conda/envs/bluebrain/lib -Wl,-rpath=/home/denis/.conda/envs/bluebrain/lib,--no-as-needed build/temp.linux-x86_64-2.7/efel/cppcore/cppcore.o build/temp.linux-x86_64-2.7/efel/cppcore/Utils.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV1.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV2.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV3.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV4.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV5.o build/temp.linux-x86_64-2.7/efel/cppcore/FillFptrTable.o build/temp.linux-x86_64-2.7/efel/cppcore/DependencyTree.o build/temp.linux-x86_64-2.7/efel/cppcore/efel.o build/temp.linux-x86_64-2.7/efel/cppcore/cfeature.o build/temp.linux-x86_64-2.7/efel/cppcore/mapoperations.o -L/home/denis/.conda/envs/bluebrain/lib -lpython2.7 -o build/lib.linux-x86_64-2.7/efel/cppcore.so
unable to execute '-std=c++98': No such file or directory
error: command '-std=c++98' failed with exit status 1
----------------------------------------
Failed building wheel for efel
Running setup.py clean for efel
Failed to build efel
Installing collected packages: efel
Running setup.py install for efel: started
Running setup.py install for efel: finished with status 'error'
Complete output from command /home/denis/.conda/envs/bluebrain/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-Xh83bq/efel/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-wrsKfh-record/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/efel
copying efel/_version.py -> build/lib.linux-x86_64-2.7/efel
copying efel/settings.py -> build/lib.linux-x86_64-2.7/efel
copying efel/io.py -> build/lib.linux-x86_64-2.7/efel
copying efel/api.py -> build/lib.linux-x86_64-2.7/efel
copying efel/__init__.py -> build/lib.linux-x86_64-2.7/efel
copying efel/DependencyV5.txt -> build/lib.linux-x86_64-2.7/efel
creating build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/Utils.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV1.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV2.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV3.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV4.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/LibV5.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/FillFptrTable.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/DependencyTree.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/efel.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/cfeature.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/Global.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/mapoperations.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/types.h -> build/lib.linux-x86_64-2.7/efel/cppcore
copying efel/cppcore/eFELLogger.h -> build/lib.linux-x86_64-2.7/efel/cppcore
UPDATING build/lib.linux-x86_64-2.7/efel/_version.py
set build/lib.linux-x86_64-2.7/efel/_version.py to '2.10.115'
running build_ext
building 'efel.cppcore' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/efel
creating build/temp.linux-x86_64-2.7/efel/cppcore
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/cppcore.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/cppcore.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
efel/cppcore/cppcore.cpp: In function ‘PyObject* getDistance_wrapper(PyObject*, PyObject*, PyObject*)’:
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
static char *kwlist[] = {"feature_name", "mean", "std", "trace_check", NULL};
^
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
efel/cppcore/cppcore.cpp:212:78: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/Utils.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/Utils.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV1.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV1.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
efel/cppcore/LibV1.cpp: In function ‘int __maxmin_voltage(const std::vector<double>&, const std::vector<double>&, double, double, std::vector<double>&, std::vector<double>&)’:
efel/cppcore/LibV1.cpp:1541:59: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
t[stimstartindex] < stimStart && stimstartindex <= t.size();
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1544:55: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
t[stimendindex] < stimEnd && stimstartindex <= t.size();
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1547:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (stimstartindex >= t.size()) {
~~~~~~~~~~~~~~~^~~~~~~~~~~
efel/cppcore/LibV1.cpp:1552:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (stimendindex >= t.size()) {
~~~~~~~~~~~~~^~~~~~~~~~~
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV2.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV2.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV3.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV3.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV4.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV4.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/LibV5.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/LibV5.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/FillFptrTable.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/FillFptrTable.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/DependencyTree.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/DependencyTree.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/efel.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/efel.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/cfeature.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/cfeature.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Iefel/cppcore/ -I/home/denis/.conda/envs/bluebrain/include/python2.7 -c efel/cppcore/mapoperations.cpp -o build/temp.linux-x86_64-2.7/efel/cppcore/mapoperations.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
-std=c++98 -pthread -shared -L/home/denis/.conda/envs/bluebrain/lib -Wl,-rpath=/home/denis/.conda/envs/bluebrain/lib,--no-as-needed build/temp.linux-x86_64-2.7/efel/cppcore/cppcore.o build/temp.linux-x86_64-2.7/efel/cppcore/Utils.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV1.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV2.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV3.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV4.o build/temp.linux-x86_64-2.7/efel/cppcore/LibV5.o build/temp.linux-x86_64-2.7/efel/cppcore/FillFptrTable.o build/temp.linux-x86_64-2.7/efel/cppcore/DependencyTree.o build/temp.linux-x86_64-2.7/efel/cppcore/efel.o build/temp.linux-x86_64-2.7/efel/cppcore/cfeature.o build/temp.linux-x86_64-2.7/efel/cppcore/mapoperations.o -L/home/denis/.conda/envs/bluebrain/lib -lpython2.7 -o build/lib.linux-x86_64-2.7/efel/cppcore.so
unable to execute '-std=c++98': No such file or directory
error: command '-std=c++98' failed with exit status 1
----------------------------------------
Command "/home/denis/.conda/envs/bluebrain/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-Xh83bq/efel/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-wrsKfh-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-Xh83bq/efel/
I've looked through the documentation and I haven't found what I'm looking for specifically. I'm trying to change the rise time window from 0-100% (time difference between AP_begin_index to peak_index) to 10-90%. Is this a possibility with this algorithm?
Not sure if this should be reported as a bug or as a request for enhancement, depending on whether the behavior I'm reporting is intended or not. I used a snippet of code inspired from the GitHub main page:
trace = {}
trace['T'] = copy(t_vec)
trace['V'] = copy(v_vec)
trace['stim_start'] = [h.stim.delay]
trace['stim_end'] = [h.stim.delay + h.stim.dur]
traces.append(trace)
traces_results = efel.getFeatureValues(traces, ['Spikecount'])
and it took me quite a while to realize that Spikecount (an many other features I guess) is actually not taken into account the stim_start and stim_end and will include in its count any spikes in the trace, regardless of the stimulus window. Is that intended? If not, it should definitely be corrected. If yes, I would suggest adding some boolean parameter allowing the users to specify if they want the features to be computed on the full trace or on the stimulus window only.
As reported by @SvennoNito the definitions of threshold / derivativethreshold should be add to the documentation.
I am trying to install eFEL as a prerequisite for sonata-network-reduction with:
pip install git+git://github.com/BlueBrain/eFEL
however, the installation is terminated with
... gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/MustafaKeremKurban/anaconda3/include -arch x86_64 -I/Users/MustafaKeremKurban/anaconda3/include -arch x86_64 -Iefel/cppcore/ -I/Users/MustafaKeremKurban/anaconda3/include/python3.7m -c efel/cppcore/cppcore.cpp -o build/temp.macosx-10.7-x86_64-3.7/efel/cppcore/cppcore.o
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
efel/cppcore/cppcore.cpp:39:10: fatal error: 'cstddef' file not found
#include
^~~~~~~~~
1 warning and 1 error generated.
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /Users/MustafaKeremKurban/Desktop/BBP_internship/sonata-network-reduction/tests/data/CA1.O1/sonata/mypython/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/yh/cnjh7mlx0ylc6ns89scsqjmw0000gp/T/pip-req-build-3y53ds4w/setup.py'"'"'; file='"'"'/private/var/folders/yh/cnjh7mlx0ylc6ns89scsqjmw0000gp/T/pip-req-build-3y53ds4w/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /private/var/folders/yh/cnjh7mlx0ylc6ns89scsqjmw0000gp/T/pip-record-tcc0tcir/install-record.txt --single-version-externally-managed --compile --install-headers /Users/MustafaKeremKurban/Desktop/BBP_internship/sonata-network-reduction/tests/data/CA1.O1/sonata/mypython/include/site/python3.7/efel Check the logs for full command output.
Is this an access issue or is there a prerequisite for eFEL as well?
fatal error: 'cstddef' file not found
This feature should calculate the voltage (absolute value) at the points marked with "x".
Possible steps are:
I hope it's clear, feel free to add any comments.
Below the 3 traces used to produce the figure.
burst_1.txt
burst_2.txt
burst_3.txt
Hello
I was checking the pseudo-code for peak indices (2nd) in the efeature documentation PDF, and I think there is a mistake.
Where it says:
h1 = V[max_i] - min_i
h2 = V[max_i] - min_i+1
it should read:
h1 = V[max_i] - V[min_i]
h2 = V[max_i] - V[min_i+1]
because min_i
and min_i+1
are just indices, right?
Also, it lists T in the required trace data, but it's never used in the pseudocode.
Cheers!
As a followup on an issue encountered by @a1eko, we should look deeper into the AP_end_indices feature. AP_begin_indices was reimplemented in LibV5, but we also need a clean up version of AP_end_indices.
It seems running the pip install efel
command on Windows (10) fails for both python 2.7.11 using standalone Visual C++ Compiler for Python 2.7 (Visual C++ 9.0) installed as well as python 3.5.1 using Visual Studio 14.0
Here is the log file when trying to build for python 3.5.1
pip install efel output.txt
When I try to import cppcore inside Python while gcc version 9.2.0 is loaded it gives the following error.
Importing cppcore: import efel.cppcore as cppcore
Error: PATH_TO_GCC/linux-rhel7-x86_64/gcc-4.8.5/gcc-9.2.0-nz6rnuk53f/lib64/libstdc++.so.6: undefined symbol: libiconv
It works fine with gcc 8.3.0 or 4.5.0
Hey, I've managed to extract almost all desired spike features except for the latency of the onset of the first spike. I played around with
efel.setDerivativeThreshold(n)
using values between 1 and 20, but none of them shifted the onset. I will attach screenshots of my trials using n=1, n=10, n=20. Do you have any idea what else I could do to successfully find the beginning of the first spike? The red dots display what is found by AP_begin_time
and AP_begin_voltage
.
Hello,
This may be a basic error on my part as I am new to python, but I have defined stim_start and stim_end but they are not being recognized.
A little bit about my dataset -- I extracted data from an .nwb file, where it had been stored in volts and seconds. Must the units be in mV and ms? I also had to calculate the time array from the parameters stored in the .nwb file because the timestamps attribute was empty and only the start time and sampling rate was stored by my acquisition system. I defined stim_start and stim_end as the third and third to last values in the time array because I wanted all of the spikes to be included in the results.
This is the code I used and the resulting error:
n = nwbfile.acquisition['continuous_signals']
v = n.data[:, 6]
timesamples = np.linspace(0.0, stop = len(v)*(1/30000), num = len(v))
trace1 = {}
trace1['T'] = timesamples
trace1['V'] = v
trace1['stim_start'] = [6.66667520e-05]
trace1['stim_end'] = [2.60564667e+01]
traces_results = efel.getFeatureValues(trace1, ['AP_amplitude', 'AHP_depth_abs', 'AP_duration_half_widwth', 'AP_width'])
Exception Traceback (most recent call last)
in
----> 1 traces_results = efel.getFeatureValues(trace1, ['AP_amplitude', 'AHP_depth_abs', 'AP_duration_half_widwth', 'AP_width'])
~\anaconda3\lib\site-packages\efel\api.py in getFeatureValues(traces, featureNames, parallel_map, return_list, raise_warnings)
430
431 if return_list:
--> 432 return list(map_result)
433 else:
434 return map_result
~\anaconda3\lib\site-packages\efel\api.py in _get_feature_values_serial(trace_featurenames)
468
469 else:
--> 470 raise Exception('stim_start or stim_end missing from trace')
471
472 _initialise()
Exception: stim_start or stim_end missing from trace
Hi,
I'm trying out the library so possible that I have done something wrong, but seems like spike durations are rounded of to closest 0.1 ms (have run ~200 traces that all belongs to discrete values 0.9, 1.0 or 1.1). Is this the intended behavior?
Here's the function I use:
def extract_features(t,y):
# extracts electrical features from trace using bbp efel library
import efel
# code based on example example code from: https://github.com/BlueBrain/eFEL --------------------
# A 'trace' is a dictionary
trace1 = {}
# Set the 'T' (=time) key of the trace
trace1['T'] = t
# Set the 'V' (=voltage) key of the trace
trace1['V'] = y
# Set the 'stim_start' (time at which a stimulus starts, in ms)
# key of the trace
# Warning: this need to be a list (with one element)
trace1['stim_start'] = [100]
# Set the 'stim_end' (time at which a stimulus end) key of the trace
# Warning: this need to be a list (with one element)
trace1['stim_end'] = [1000]
# Multiple traces can be passed to the eFEL at the same time, so the
# argument should be a list
traces = [trace1]
# Now we pass 'traces' to the efel and ask it to calculate the feature
# values
traces_results = efel.getFeatureValues(traces,
['AP_begin_voltage', \
'AP_amplitude', \
'AP_duration_half_width', \
'voltage_base']
)
Would it be possible to implement a feature called "sag_ratio? A common definition according to NeuroElectro.org, could be: "Ratio between the steady state decrease in the voltage and the largest decrease in voltage following a hyperpolarizing current step"
I think we can assume to have a hyperpolarizing current step.
For the implementation, I see two potential ways:
Use the features "voltage_deflection", "minimum_voltage", "voltage_base" which already exist, then:
sag_ratio = (minimum_voltage - voltage_deflection)/(minimum_voltage - voltage_base). From the source code, it seems that "minimum_voltage" computes the absolute minimum between stim_start and stim_end.
Instead of using the absolute minimum, using a (time) window to get more robust estimate of the peak, similar to the "estimate_sag" function in the AllenSDK. For example they compute the mean voltage between t[peak_index] - peak_width / 2. and t[peak_index] + peak_width / 2. with peak_index = 0.005 sec.
This issue actually started from here. I have incorrectly thought that the "voltage_deflection_begin" was giving the value of ("minimum_voltage" - "voltage_base").
When I use efel, it seems that when I use a Feature that does not exist, I get the following error.
I used 'min_voltage_between_spike' instead of 'min_voltage_between_spikes'
but I assume this is not the correct error handling
python 2.7.10
efel.version 2.3.73
NameError Traceback (most recent call last)
<ipython-input-9-36d61bc18c9d> in <module>()
2 ['number_initial_spikes', 'AP_amplitude','ISI_log_slope_skip','burst_number'
3 ,'voltage_base','mean_frequency','AP2_AP1_peak_diff','min_voltage_between_spike'
----> 4 ,'time_to_second_spike'])
/home/users/oren.amsalem/anaconda/lib/python2.7/site-packages/efel/api.pyc in getFeatureValues(traces, featureNames)
260 print "Feature %s has an unknown type: %s" % \
261 (featureName, featureType)
--> 262 exit(1)
263 if exitCode < 0:
264 import warnings
NameError: global name 'exit' is not defined
Thanks.
I have noticed that eFEL is super fast compared to pure python feature extraction libraries.
Do you think it would be possible for a hacker to add in Julia support with a C++ wraper?
Is this the file that one would need to wrap?
The documentation should contain a graph representation (Graphviz ?) of the feature dependencies
Hi,
Could you add the documentation for efeature check_AISInitiation? From the code it looks like it returns None when there is no spike in soma, AIS or when the spike initiates in soma before AIS. What is the output when the check passes - the spikecount?
Thanks
Hi @wvangeit ,
would it be possible to add a new feature for the (time) width of the last spike? I guess it can be similar to AP1_width and AP2_width.
Hello,
I maintain efel in Fedora as part of the NeuroFedora team. Where can we find the changelog to see what has changed between releases? When we update the package, it is very useful to given some information on what new releases brings. Here, for example:
https://bodhi.fedoraproject.org/updates/FEDORA-2019-df28546c8e
Additionally, would be possible to keep the releases/tags on github and pypi in sync? That just makes it easier for us to find the commit for a release and get some information on the commit history/changes.
I would like to calculate features in certain (configurable) time window after stim_end. I am attaching an example trace, where there are five spike after the end of the stimulus (stimulus ends at 3250 ms).
rebound.txt
One obvious way would be to set stim_start and stim_end to 3250 and 3500 ms for the trace above for calculating the features. However, I don't think this would work during optimization, because stim_start and stim_end are used to create the stimulus (and in this case they should be 250 and 3250 ms).
What would be the best approach here? Should we just create new features, e.g. "Spikecount_rebound", "time_to_first_spike_rebound", etc...? Or maybe add an option to detect features between stim_end and stim_end + user_defined_time_after_stim_end?
It would be handy if the eFEL would support eFeatures written by users in pure python, without requiring a C++ implementation
Inside the ISI_log_slope_skip feature, the code that skips the ISIs is disabled. This should be fixed. Enabling it generates a segfault, so that should be solved first
I have a couple of possible related issues.
When I try to access the input resistance feature, I am getting this error message:
/Library/Python/2.7/site-packages/efel/api.py:367: RuntimeWarning: Error while calculating feature ohmic_input_resistance:
Feature [stimulus_current] is missing
But I don't see a stimulus current feature anywhere, and if I try to request it from the list of features to calculate, I get this error:
Traceback (most recent call last):
File "MWE.py", line 42, in
depol_results = efel.getFeatureValues(depoltraces, ['stimulus_current','voltage_base','voltage_deflection','ohmic_input_resistance'])
File "/Library/Python/2.7/site-packages/efel/api.py", line 314, in getFeatureValues
map_result = parallel_map(_get_feature_values_serial, traces_featurenames)
File "/Library/Python/2.7/site-packages/efel/api.py", line 359, in _get_feature_values_serial
exitCode = cppcore.getFeature(featureName, cppcoreFeatureValues)
TypeError: Unknown feature name
This happened in both versions of efel that I've tried: u'2.11.31' and u'2.11.41'.
More generally, I couldn't see where to provide the stimulus information in the first place. I had thought the trace dict would make sense, but it seems to only expect a time vector, a voltage vector, and the start and end times of the stimulus but not the amplitude of the stimulus that would be needed to calculate the input resistance. Thanks.
Hello,
Would it please be possible to include the tests in the pypi tars so that downstream users (like us Linux distributions) can run the tests too?
Because versioneer is used here, a few issues crop up:
So, including the tests in the pypi tars will simplify things quite a bit for those of us who rely on the pypi tar.
Cheers,
The LibV1 voltage_base feature calculate the mean voltage between 25% - 75% before the stimulus.
However, during this time there is a high chance the cell is still stabilising it's voltage.
A new version (LibV5) version of this feature is necessary to calculate the mean voltage between 90% - 100%. The DependencyV5.txt would then be changed to let all the dependent features use this voltage_base instead.
I'm running the EFEL code in an anaconda environment in Ubuntu. I'm in the process of validating select features on an I/V curve. When comparing the EFEL Feature output (peak voltage/times) to the MATLAB findpeaks output, the outputs were not the same. Upon closer inspection, it seems that there is a peak time rounding issue (highlighted in the attached screenshot). EFEL seems to limit the peak time output to one decimal place, even though there is higher precision (20kHz sampling frequency and each sample is 0.05ms). In turn, this changes selected peak voltages, ISI values, etc.
There is at the moment a hardcoded internal BBP related file in the repo: 'package.json'.
This file should be automatically generated.
Related to: #118
import scipy.io
import efel
import numpy as np
mat = np.loadtxt('2019-11-19_001.csv', delimiter = ',')
efel.setDoubleSetting('interp_step',0.05)
efel.setDoubleSetting('voltage_base_start_perc',0.2)
efel.setDoubleSetting('voltage_base_end_perc',0.7)
trace1 = {}
trace1['T'] = mat['Cell2Data'][:,0]
trace1['V'] = mat['Cell2Data'][:,8]
trace1['stim_start'] = [4001]
trace1['stim_end'] = [14000]
traces = [trace1]
traces_results = efel.getFeatureValues(traces,[
'Spikecount','spike_width2','ISI_values','peak_time','peak_indices','min_AHP_indices','min_AHP_values','AP_begin_indices'])
for trace_results in traces_results:
for feature_name, feature_values in trace_results.items():
print('Feature %s has the following values: %s \n' % \
(feature_name, ', '.join([str(x) for x in feature_values])))
Feature Spikecount has the following values: 16
Feature spike_width2 has the following values: 1.3199992023340599, 1.3681604853483122, 1.4038389448111275, 1.3759173549383377, 1.4692812948353549, 1.4395556875952025, 1.4724118153143309, 1.403828264758772, 1.392087929915931, 1.4707707707693771, 1.4399167398839836, 1.45901901901766, 1.4153947289773896, 1.4531464368715206, 1.4011604536254936
Feature ISI_values has the following values: 28.45000000000644, 30.500000000006935, 30.850000000007014, 27.950000000006355, 32.350000000007356, 31.80000000000723, 32.000000000007276, 33.55000000000763, 32.80000000000052, 34.79999999996835, 31.49999999997135, 34.89999999996826, 34.89999999996826, 32.34999999997058
Feature peak_time has the following values: 211.05000000001374, 237.80000000001982, 266.25000000002626, 296.7500000000332, 327.6000000000402, 355.55000000004657, 387.9000000000539, 419.70000000006115, 451.7000000000684, 485.25000000007606, 518.0500000000766, 552.8500000000449, 584.3500000000163, 619.2499999999845, 654.1499999999528, 686.4999999999234
Feature peak_indices has the following values: 4221, 4756, 5325, 5935, 6552, 7111, 7758, 8394, 9034, 9705, 10361, 11057, 11687, 12385, 13083, 13730
Feature min_AHP_indices has the following values: 4276, 4813, 5384, 5999, 6614, 7173, 7817, 8464, 9106, 9767, 10421, 11119, 11749, 12449, 13147, 13796
Feature min_AHP_values has the following values: -48.52588388566235, -42.93635157193366, -40.93785957149463, -41.218897509056745, -40.59436875891978, -39.5951227586999, -39.6888020712203, -40.656821633933454, -41.1564446340431, -40.56314232141274, -39.626349196206185, -40.188425071330286, -39.72002850872746, -40.68804807144005, -40.81295382146781, -40.34455725886475
Feature AP_begin_indices has the following values:
2019-11-19_001.xlsx
Sorry, can't attach CSV.
Per code and output above, we can extract a number of parameters. However, AP_begin_indices does not return anything. I've run the example_trace1.txt code and I am able to extract AP_begin_indices there. Any insight into this issue is appreciated.
See the attached file for the output from an attempted 'pip3 install efel'
Mac OS X, 10.15.7
Python 3.8.2
Hello, I upgraded to efel-2.11.45, but I still don't have the "E29" feature for calculating input resistance (though E2-E27, E39, E40 are available). The other feature "ohmic_input_resistance" is extremely off. It seems to be because it uses the "voltage_deflection" feature in the calculation, and that feature seems to be picking up a tiny noise blip at the beginning of the trace (3 mV) and ignoring the 24 mV offset produced by the stimulus later on.
voltage_deflection = 0.0038342857142978914
ohmic_input_resistance = 0.037602023420651907
How can I access the E29 feature or is there a way to fix the voltage_deflection calculation? Thanks.
Hi,
I have this example trace:
stim_start = 700
stim_end = 2700
I assume the results of AP_height and time_to_first_spike will be calculated only in the time of the stimulus, but I get these results:
[{'time_to_first_spike': array([-693.2]),
'AP_height': array([ 10.27113993, -12.94247327])}]
This is the full code:
import efel
import pandas as pd
df = pd.read_pickle('temp_v.pkl')
trace1 = {'T': df['time'], 'V':df['voltage']}
trace1['stim_start'] = [700]
trace1['stim_end'] = [2700]
traces_results = efel.getFeatureValues([trace1],
['time_to_first_spike','AP_height'])
df.plot(x='time',y='voltage')
Thanks
Add a step-by-step guide that explains users how to add a feature.
Should include:
fixing tests:
Calculation for voltage_base is wrong. There is a clue to this in the documentation, which claims that stim_end is required to calculate the value, when it should not be necessary.
Calculating this on my own code, where the stimulus starts at 530 ms and ends at 1530 ms, I find the mean voltage from 477 to 530 ms is -68 mV. If I calculate the mean voltage for the last 10% of the time DURING stimulation, from 1377 to 1530 ms, I get -39 mV which is what eFEL reports for the voltage_base property.
LibV5 : voltage_base
The average voltage during the last 10% of time before the stimulus.
Required features: t, V, stim_start, stim_end
Parameters: voltage_base_start_perc (default = 0.9)
voltage_base_end_perc (default = 1.0)
Units: mV
Pseudocode:
voltage_base = numpy.mean(voltage[numpy.where(
(t >= voltage_base_start_perc * stim_start) &
(t <= voltage_base_end_perc * stim_start))])
E.g. voltage_base doesn't trigger the interpolation of the trace.
Ideally interpolation of the trace should be triggered for all the features
As requested by @a1eko, allow the user to specify the start and end fraction of efeature voltage_after_stim
Ideally eFEL should support Python 3
Porting the python code is fairly simple by using 2to3.
The C++ extension is however more tricky, the following guidelines will have to be followed:
https://docs.python.org/3/howto/cporting.html
It appears that eFEL fails to detect low-amplitude spikes in very fast spiking cells (up to 500hz). Changing efel.setDoubleSetting("min_spike_height", 10) has no effect. The detected firing frequency of the traces below are 327, 438 and 302 consecutively.
Red circles are peak_indices. Attached txt files are sweep data points (time(x), mV(y)).
Sweep14X.txt
Sweep14Y.txt
Sweep18X.txt
Sweep18Y.txt
Sweep21X.txt
Sweep21Y.txt
This was reported by @sasaray.
First trace gives Spikecount 3 while second trace returns Spikecount 0.
When the signal at the end of the trace is larger than the threshold, Spikecount and possibly other features cannot be estimated. This seems to be independent of stim_end.
import numpy
import matplotlib
import matplotlib.pyplot as plt
import efel
dt = 0.1
v = numpy.zeros(int(100/dt)) - 70.0
v[int(20/dt):int(25/dt)] = 20.
v[int(40/dt):int(45/dt)] = 20.
v[int(60/dt):int(65/dt)] = 20.
traces = []
trace = {}
trace['T'] = numpy.arange(len(v))*dt
trace['V'] = v
trace['stim_start'] = [10]
trace['stim_end'] = [50]
traces.append(trace)
plt.subplot(2,1,1)
plt.plot(trace['T'], trace['V'])
traces_results = efel.getFeatureValues(traces,['Spikecount'])
print traces_results
# When the signal at the end of the trace is larger than the threshold, Spikecount and possibly other features cannont be estimated.
v[int(80/dt):] = -19
traces_results = efel.getFeatureValues(traces,['Spikecount'])
print traces_results
plt.subplot(2,1,2)
plt.plot(trace['T'], trace['V'])
plt.show()
Hi, I am using a tool named Optimizer, which both need wxpython2.8(only this version) and efel. Because wxpython2.8 could only run in 32-bit environment so I forcibly change my environment by this code:
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
then when I import efel
>>> import efel
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/efel/__init__.py", line 23, in <module>
from efel.api import *
File "/Library/Python/2.7/site-packages/efel/api.py", line 36, in <module>
import efel.cppcore as cppcore
ImportError: dlopen(/Library/Python/2.7/site-packages/efel/cppcore.so, 2): no suitable image found. Did find:
/Library/Python/2.7/site-packages/efel/cppcore.so: mach-o, but wrong architecture
/Library/Python/2.7/site-packages/efel/cppcore.so: mach-o, but wrong architecture
Is there any methods for me to run efel in 32 bit environment?
Metadata package files like setup.py only mention py2.7.
Would it also be possible to please include the license and examples in the pypi tar ball?
I am also not sure how to get the decay time constant to compute. For example, here I was trying to use it to calculate the sag time constant, but it is returning nan when I run it. (This is the same file that returns the negative of the input resistance, in case the one I attached to the reply on the other issue didn't make it to you.)
login
exit(9)
NameError: name 'exit' is not defined
Reported by @basjanzandt
eFEL detects the repolarization after the end of a stimulus as an AHP if the stimulus ends after an AP when Vm is still decreasing (see attached screenshot; three traces, the orange one has an AHP detected after the stimulus ends).
The AHP features also ignore the stimulus starts / ends.
Hey,
thanks for this amazing toolbox! If it works it will save me so much work. I have intracellular recordings of leech neurons. We injected different electrical current during recording, which elicited action potentials. I try to detect certain spike train characteristics, yet for some stimulus values the toolbox doesn't detect action potentials correctly, yet. I already found out that I can change certain setting using
setDoubleSetting('spike_skipf', 0.1) setIntSetting('max_spike_skip', 2) setDoubleSetting('Threshold', _settings.threshold) setDoubleSetting('DerivativeThreshold', _settings.derivative_threshold) setDoubleSetting('interp_step', 0.1) setDoubleSetting('burst_factor', 1.5) setDoubleSetting('voltage_base_start_perc', 0.9) setDoubleSetting('voltage_base_end_perc', 1.0) setDoubleSetting("initial_perc", 0.1) setDoubleSetting("min_spike_height", 20.0) setIntSetting("strict_stiminterval", 0)
However, instead of randomly changing those values until my peaks are detected correctly, I would like to look up what these settings actually mean. I only found documentation for Threshold and DerivativeThreshold. Is there documentation for all setting somewhere? I will upload two plots showing trials in which spikes are detected wrongly or not at all.
The precision loss is falsifying the outcomes of multiple C++ features.
The two values below were supposed to be equal. The comparison (>
) operator was expected to evaluate false between these two numbers, however it evaluates as true.
___t[i]: 500.00000000004519052
endTime: 500.00000000000000000
The voltage_base feature of LibV5 for example is computing a mean value of the vector within a defined start and ending index here:
Lines 2261 to 2279 in 3b09294
Having tested it multiple times, I can surely say there is nothing wrong in this code's logic.
I also implemented it in Python and tested.
In the test (written in Python) however, the results differ,
Lines 905 to 909 in 3b09294
The original data is a 1 dimensional vector of size 14001. The subvector within the start and end boundaries is of size 501.
After performing the division in both C++ and Python the results get similar up to the first 5 digits of precision. However that difference is already greater than the difference in using median
instead of mean
.
The comparison operation in the line below evaluates true when both operands are equal to 500.000
Line 2265 in 3b09294
They are both literally equal to 500.000
I had to increase the print precision using std::setprecision
to see the difference.
I noticed this issue while I was implementing the current-base feature with median option here.
https://github.com/anilbey/eFEL/tree/current-voltage-bases.
There may be similar errors in other features due to precision. The voltage base feature alone is already used by many of the other features.
Lines 905 to 909 in 3b09294
places
or set it to a big value such as 8.A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.