Git Product home page Git Product logo

efel's Issues

eFEL fails to import

eFEL fails to import regardless of whether it is installed via pip, or if it is git cloned and then
$ipython setup.py install

import efel

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

Pip install failing

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/

Ability to change AP rise time parameters

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?

Spikes are counted outside the stimulus

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.

installation on virtual env does not work

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

New features for AHP after burst

image

This feature should calculate the voltage (absolute value) at the points marked with "x".

Possible steps are:

  • identify peaks that belong to bursts (set of spike with frequency > 150 Hz in this case). The trace 'burst_1' should have 2 bursts, while the others just one.
  • calculate the slow AHPs (absolute value) after the last spike in the burst ("sAHP_after_burst_abs") . This could be the minimum during a certain time range after the last peak in the burst (e.g. between 10 and 50 ms after the last peak, to be discussed). However, I'm not sure this would be the best way for trace "burst_2".
  • Calculate additional features for:
    • sAHP amplitude from voltage base
    • sAHP from steady_state_voltage_stimend
    • amplitude of the first sAHP
    • amplitude of the second sAHP

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

Building wheel

@anilbey , @wizmer offered to help building wheels for eFEL. Can you work with him on that.

Extra points for a Windows wheel ;-)

Mistake in documentation for peak indices (2nd) efeature

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!

AP_end_indices needs some attention

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.

Failed building on Windows

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

libstdc++.so.6: undefined symbol: libiconv on gcc.9.2.0

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

Problems detecting the onset of the first spike

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.

stim_2 5_1
stim_2 5_10
stim_2 5_20

Error with stim_start or stim_end

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

AP_duration_half_width rounded of to nearest 0.1 ms?

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']
                                          )

New feature to measure voltage "sag".

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:

  1. 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.

  2. 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").

NameError: global name 'exit' is not defined

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.

check_AISInitiation documentation

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

Add feature "APlast_width"

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.

Where can one find the changelog?

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.

Calculate features after stim_end (e.g. rebound spikes)

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

image

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?

ambiguous burst number and wrong location

I have a couple of possible related issues.

  1. The burst_number can be 1 even if there are no burst in the traces.
    Than, how should I interpret the burst_number = 1? 1 or 2 bursts?
  2. burst_ISI_indices seems not to work properly. In one of the traces I am working on, I expect 1 or 2 bursts occur at the very beginning on the trace, but I obtained burst_ISI_indices = 5.

Calculating input resistance - how to provide stimulus info?

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.

please include tests in pypi source tars

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:

  • it is non-trivial to match pypi releases to untagged github commits,
  • if one does manage to locate the matching commit, versioneer cannot generate version information from github generated archives (see python-versioneer/python-versioneer#140 (comment))

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,

New version of voltage_base

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.

Peak Times Rounding Issue

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.

validation_data.txt
peak_times_screenshot

Autogenerate package.json

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

AP_Begin_Indices not returned

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.

Input Resistance calc

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
image

How can I access the E29 feature or is there a way to fix the voltage_deflection calculation? Thanks.

Should efel return spike height for spikes that are not between stim_start and stim_end?

Hi,
I have this example trace:
image

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

temp_v.zip

Add instructions for developers on how to add a new eFeature

Add a step-by-step guide that explains users how to add a feature.
Should include:

  • Add it to efel/DependencyV5.txt
  • Add reference in efel/cppcore/FillFptrTable.cpp
  • Add type in efel/cppcore/cfeature.cpp:cFeature::fillfeaturetypes
  • Add declaration to efel/cppcore/LibV5.h
  • Implement it in efel/cppcore/LibV5.cpp
  • Add documentation

fixing tests:

  • Add it to tests/testdata/allfeatures/expectedresults.json
  • Add it to tests/featuresnames.json
  • Add a simple test in tests/test_basic.py

voltage_base calc is wrong

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))])

Interpolate for all features

E.g. voltage_base doesn't trigger the interpolation of the trace.
Ideally interpolation of the trace should be triggered for all the features

Spikecount cannot be estimated when signal at the end of the trace is larger than the threshold

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.

figure_1

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()

run eFEL in 32 bit environment on Mac

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?

Decay Time Constant

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.)

MWE3.txt

MWE.zip

Make ahp indices fall within strict stim interval

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.

screen shot 2017-01-31 at 14 33 10

What do certain settings do - where to look it up?

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.

stim_1 0
stim_1 75

Precision loss in floating point numbers is distorting the feature results

Issue summary

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

Example C++ feature (voltage_base)

The voltage_base feature of LibV5 for example is computing a mean value of the vector within a defined start and ending index here:

eFEL/efel/cppcore/LibV5.cpp

Lines 2261 to 2279 in 3b09294

int nCount = 0;
double vSum = 0;
// calculte the mean of voltage between startTime and endTime
for (size_t i = 0; i < t.size(); i++) {
if (t[i] > endTime) break;
if (t[i] >= startTime) {
vSum = vSum + v[i];
nCount++;
}
}
if (nCount == 0) {
GErrorStr +=
"\nvoltage_base: no data points between startTime and endTime\n";
return -1;
}
vRest.push_back(vSum / nCount);

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,

voltage_base = numpy.mean(interp_voltage[numpy.where(
(interp_time >= 0.9 * stim_start) & (interp_time <= stim_start))])
nt.assert_almost_equal(voltage_base, feature_values[0]['voltage_base'][0],
places=5)

The original data is a 1 dimensional vector of size 14001. The subvector within the start and end boundaries is of size 501.

  • In Python the mean operation above adds up 501 elements that result in -35844.15544
  • In C++ the mean operation above adds up 500 elements that result in -35772.609232

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.

Why is this happening?

The comparison operation in the line below evaluates true when both operands are equal to 500.000

if (t[i] > endTime) break;

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.

How to reproduce?

  1. Go to this test file
    voltage_base = numpy.mean(interp_voltage[numpy.where(
    (interp_time >= 0.9 * stim_start) & (interp_time <= stim_start))])
    nt.assert_almost_equal(voltage_base, feature_values[0]['voltage_base'][0],
    places=5)
  2. Delete the named parameter called places or set it to a big value such as 8.
  3. There will be an error. A simple mean operation on this test data shouldn't make that amount of difference between different programming languages. You can further debug and look into the sizes of vectors in C++ and Python and you will see that C++ container has one less element than the Python array.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.