opexebo 0.7.2
Collection of python code in Kavli lab.
Keywords: neuroscience kavli gridscore

# opexebo

[![Build Status](https://travis-ci.com/kavli-ntnu/opexebo.svg?branch=master&status=passed)](https://travis-ci.com/kavli-ntnu/opexebo)
[![codecov](https://codecov.io/gh/kavli-ntnu/opexebo/branch/master/graph/badge.svg)](https://codecov.io/gh/kavli-ntnu/opexebo)
[![Documentation Status](https://readthedocs.org/projects/opexebo/badge/?version=latest)](https://opexebo.readthedocs.io/en/latest/?badge=latest)

This library provides various analysis tools written by and for the Moser group  at the [Kavli Institute](https://www.ntnu.edu/kavli) in Trondheim. 

The package contains a mixture of translations of the older MatLab based [Behavioural Neurology Toolbox](https://bitbucket.org/cnc-ntnu/bnt), and other functions written only in Python 3, as part of the transition towards providing open access to research code. 


### Documentation

Specifications and documentation for `opexebo` are available on [Read the Docs](https://opexebo.readthedocs.io/en/latest/).


### Installation

Install with pip:

```
pip install opexebo
```

Opexebo has an optional dependency, `sep`, that is not installed by default. To be able to install it, you require a C++ compiler installed on your system. On Linux, `gcc` will do the job. On Windows, the the Microsoft Visual C++ Build Tools fulfil the same role (https://www.microsoft.com/en-us/download/details.aspx?id=48159). To force installation of all optional dependencies, append `[full]` to the install command, for example:

    pip install opexebo[full]

### Tests

Tests are implemented with `pytest`. Ensure that the various development tools are installed via 
```python
pip install -r dev-requirements.txt
```
And then run tests with `pytest .`


# History

## 0.7.0
* Update dependencies for more modern versions (particularly `numpy`, `scipy` and `pytest`)
* Switch supported Python versions for 3.8+

## 0.6.1

* Fix some docstrings that were not updated to reflect changes in 0.6.0
* Fix the default limit behaviour of `accumulate_spatial` for bin width specification.


## 0.6.0

* Rewrite `spatial_occupancy` and `rate_map` to remove the walk filter (signature breaking)
  * The individual analysis functions should be single purpose, and the walk-filter breaks this rule.
  * Ideally, the walk-filter should be applied to spikes/tracking data _first_, and the resulting data then used for further analysis. 
  * A dedicated function has been provided to replace this: `general.walk_filter`
* Rewrite `shuffle` to better handle edge cases (including 1-spike-only) (signature breaking)
* Added `general.walk_filter` to provide replace the specific filtering implemented in each of `spatial_occupancy` and `rate_map`

* Fix a bug where `accumulate_spatial` can't handle cases where a single spike is present
* Fix an error in the LFP power spectrum calculation with fft
* Removed support for providing 1D position data as a 2d array with length 1
  * Caused frustrating circular issues in cases where only a single data point was provided.
  * Fairly low value addition, so support removed.



## 0.5.5 (2021-06-01)

* Publish to PyPi


## 0.5.2 (2021-04-19)

* Support 1D data in spatial occupancy and ratemap
* Add Opexebo-specific errors
* Add automated testing prior to release
* Add `calculate_speed`
* Add `egocentric_occupancy`
* Fixed an edge case error in `accumulate_spatial`


## 0.4.3 (2020-02-19)

* Substantial cleanup to `accumulate_spatial`
  - Function was mathematically correct but confusing, due to the difference between opexebo's standard of `(x, y)` and NumPy's standard of `(y, x)`
* Added `upsampling`
* Added `circular_mask`
* Mandatory keyword arguments have been made positional
* `peak_search` updated to handle issues with MaskedArrays containing negative values
* Dcumentation expanded, made Sphinx compatible, and published on ReadTheDocs
* Further work on BorderScore, still experimental though
  - Functional for Rectangular arenas
  - Circular arenas are still WIP, should not be relied upon yet.


## 0.4.2 (2020-02-05)

* Speedscore modified substantially
  - Adaptive filtering added, allowing the user to specify an upper speed as a bandwidth
  - Adaptive filtering adjusted to behave more sensibly in the case of small bin sizes
  - Speeds are smoothed before correlating
* Spatial cross correlation added
* General `bin_number` to `bin_size` code refactored to make future development more consistent
* Assorted unit tests added, including run-once code removed for speed
* Fix errors associated with `>` where applied to MaskedArrays (which, unlike ndarrays, do not correctly obey  the symbol)


## 0.4.0 (2019-12-10)

* Ratemaps updated to handle walk filter (signature now requires providing animal speeds)
* Angular occupancy coverage calculation corrected
* circular arenas now handled in Spatial Occupancy
* Population Vector Correlation added


## 0.3.5 (2019-11-18)

* Assorted bugfixes to HDtuning
* Gridscore to handle NaNs more gracefully


## 0.3.4 (2019-20-25)

* `sep` made an optional dependency
* Alternative, non `sep` based code uses `skimage`
* Attempting to use `sep` if not installed with raise an error


## 0.3.2 (2019-09-20)

* Consistent calculating of bin numbers when histogramming


## 0.3.0 (2019-08-27)

* Third development release
* Improve NaN handling throughout by moving to MaskedArrays
* Fix Angular handling to function in seconds instead of frames
* Remove matplotlib from requirements


## 0.2.0 

* Second development release
  - Implementation of time-map -> rate-map -> (acorr, gridness score)
  - Implementation of rate-map stats, grid stats
  - Implementation of angular-map -> tuning-curve -> head direction score, stats.
  - Non-production-ready implementation of border-score, speed-score. 


## 0.1.0 (2018-08-30)

* First development release
  - Implementation of gridness score, autocorrelogram, place-field detection